Kanonik olay modeli
Tek zarf: kiracı, zaman, kimlikler, processing_key ve versiyonlu payload. Telemetriden sonra cihaz tipi diye bir kavram yok — her şey aynı arayüz.
Alan-bağımsız IoT platformu
nodela, MQTT ile gelen ham paketi kanonik olaya çevirir; TypeScript'le yazdığınız kuralları akışın üstünde, durum tutarak çalıştırır; sonucu canlı haritaya, alarmlara ve zaman serisine yazar. SaaS değil — tek Helm chart'ı ile kendi kümenize kurulur, veri sizde kalır.
{ 1: 41.0182, 2: 29.0117, 3: 128,
9: 1751030400, 21: "34ABC123" }binary, tam sayı anahtar tablosu
{
"device_id": "dev-8842",
"lat": 41.0182, "lon": 29.0117,
"speed": 128, "ignition": true,
"plate": "34 ABC 123",
"driver": "M. Yılmaz"
}slot alias'ları çözülmüş
Nasıl çalışır
Her durak sözleşmeli. Aradaki her şeyi değiştirebilirsiniz; zarf aynı kalır.
Cihaz doğrudan MQTT'ye yazar; JSON, CBOR ve MessagePack kanalları native. Teltonika TCP ve HTTP için kenarda decode eden shim'ler var. Çözülemeyen paket kaybolmaz, DLQ'ya düşer.
in/{codec}/{device_id}
Her olay Redpanda'ya dayanıklı biçimde yazılır. Sıra garantisi processing_key ile: aynı cihazın — ya da aynı varlığın — olayları hep aynı partition'da, hep sırayla işlenir.
iot.{tenant}.{vertical}.raw
Ham bag kanonik olaya düzleşir. Slot alias'ları gerçek alan adlarına döner (t1 → plaka), referans veri cache'li olarak eklenir. Zenginleştirme tanımlı değilse olay olduğu gibi geçer.
enrich-manager
Kurallarınız Flink üstünde keyed ve stateful çalışır. Kural true dönerse alarm üretilir; işlemciler durum tutar, timer kurar, kendi olaylarını yayar.
rule-manager · processor-manager
Alarm, anlık cihaz durumu, zaman serisi ve entegrasyon çıkışları. Panel haritayı SignalR ile canlı günceller — sayfa yenilemek yok.
.alerts · device.state · timescale
Kural editörü
Tarayıcıdaki editörde TypeScript yazarsınız. Tipler tenant'ınıza göre üretilir: alias tanımladıysanız event.plate yazarsınız, t1 diye bir alanı hiç görmezsiniz. Kaydettiğinizde kod tip kontrolünden geçer, hatalar satır satır döner; geçerse çalışan pipeline en geç beş saniye içinde yeni sürümü devralır. Restart yok, deploy yok, JAR yok.
Panel
Aşağıdakiler tasarım değil, çalışan bir kurulumdan alınmış görüntüler.


Platform
Her projede yeniden yazdığınız katman burada bitmiş halde duruyor.
Tek zarf: kiracı, zaman, kimlikler, processing_key ve versiyonlu payload. Telemetriden sonra cihaz tipi diye bir kavram yok — her şey aynı arayüz.
Beş metin, beş sayı slotu satır içinde; gerisi JSONB. Alias verirsiniz, kod üretici tenant'a özel TypeScript arayüzünü yazar. Dokümantasyon değil, gerçek tip.
Keyed state, timer kurma ve iptal, watchdog deseni. 'On dakikadır sinyal yok' gibi kurallar SQL'e sığmaz; buraya sığar.
device_state anlık durumu tutar, SignalR değişiklikleri panele iter. Debounce eşiği ayarlardan; gereksiz güncellemeyle haritayı boğmaz.
Kural sabit bir eşik değil, dinamik severity dönebilir. Tekrar eden alarmlar dedup edilir; operatör aynı olayı yüz kere görmez.
TimescaleDB ve continuous aggregate'ler. Sekiz saatlik rapor için elle özet tablosu yazmaz, tazelenmesini de siz kovalamazsınız.
Cihaza MQTT, SMS ya da BLE üzerinden komut; şablon tabanlı ve kanal-agnostik. Firmware binary'si ile konfigürasyon ayrı yönetilir.
Kiracı başına topic, kiracı başına tip, kiracı başına kural. Tek kurulum, birden çok müşteri — birinin kuralı diğerini görmez.
Dikeyler
Cihaz bir dikeye kilitlenmez. Hangi IO'yu ürettiğine göre ilgili ekranlarda görünür; yeni dikey açmak yeni platform kurmak değildir.
Konum, hız, kontak, kilometre, uydu sayısı. Hız ihlali, rölanti, sefer başlangıç/bitiş ve coğrafi çit kuralları.
Sıcaklık ve nem eşikleri, kapı durumu, zincir kırılması. Eşik ihlalinin süresine ve tekrarına göre kademeli alarm.
Coğrafi çit giriş/çıkış, hareket ve durağanlık, varlık–cihaz eşleştirme. Çoklu cihaz tek varlık senaryosu dahil.
Mimari
Yukarıdaki akış özet. Altta sistemin tamamı var: broker'dan panele, manager'lardan dış entegrasyona kadar hangi kutunun ne yaptığı ve aralarında hangi topic'in aktığı.
Kurulum
Kubernetes, k3s ya da tek makine — fark etmez. Broker'dan panele kadar tüm stack tek Helm chart'ında; hedef başına bir values dosyası. Dizüstünüzdeki geliştirme kümesi ile üretim arasındaki fark, o dosyadan ibaret.
$ helm install nodela deploy/helm/nodela -f values-prod.yamlbroker · redpanda · flink · postgres/timescale · api · panel$ ./scripts/smoke.sh32/32 ✓
Altta çalışanlar
Sık sorulanlar
MQTT konuşan her cihaz doğrudan bağlanır; JSON, CBOR ve MessagePack kanalları hazır. Teltonika'nın TCP protokolü için parser mevcut. Bunların dışındaki protokoller için kenara küçük bir shim yazılır: decode kenarda olur, platformun içinde tek bir kanonik biçim kalır.
Hayır. Kural, zenginleştirme ve işlemcilerin tamamı TypeScript. Keyed state, sıra garantisi ve timer'lar altta Flink tarafından yürütülür; siz sadece bir fonksiyon yazarsınız.
Alarm ve telemetri çıkışları webhook ve entegrasyon kanallarına akıtılabilir; sorgu ağ geçidi üzerinden kendi uygulamanız veri çeker. nodela sizin uygulamanızın yerine geçmez, altına omurga koyar.
İletişim
Kurulumu, kural editörünü ve haritayı gerçek veriyle gösterelim. Ne yapmak istediğinizi kısaca yazın, size dönelim.
Bilgileriniz yalnızca size dönüş yapmak için kullanılır, üçüncü tarafla paylaşılmaz.