Ana içeriğe geç
Version

Geçerli protokol sürümü: 01.02.00

IoT Veri İletişim Protokolü

Temmuz 2022 ve sonrası geliştirilmekte olan tüm IoT cihazları için kullanılacak olan veri iletişim yapısı ve teknik detayları bu doküman içerisinde tanımlanmıştır. Diğer tüm (ve olası) projeler ile birlikte yapılan planlama doğrultusunda tüm cihazların tek bir protokol üzerinden çalışması uygun görülmüştür. Endpoint üzerinden hangi cihazın hangi şartlarda veri göndereceği ve backend üzerinde bu ayrımın nasıl yapılması gerektiği bu doküman üzerinden tanımlanmıştır.

Cihaz Veri Gönderim ve IoT Bağlantı Yapısı

Geliştirilmekte olan cihazlar bağlantı ve veri gönderim yapısı itibari ile değişiklikler göstermektedir. Bazı cihazlarımız elektrik bağlantılı çalışmaktadır ve bu tip cihazlarımız proje doğrultusunda GSM üzerinden sürekli bağlı kalmaktadır. Bunun yanı sıra bazı cihazlarımız da batarya destekli olarak çalışmaktadır bu nedenle uyan-uyu yapısında veri gönderimi yapmaktadır. Devamlı uyanık olan sistemlerimiz sunucu üzerinden komut alabilir yapıdadır. Uyan-uyu sistemlerimiz ise tek yönlü veri gönderim yapısına sahiptir.

WeatherStat

Tarımsal meteoroloji sistemi kurgu gereği tek yönlü veri trafiğiğine sahip bir sistemdir. Bu kurgu bünyesinde aşağıdaki koşullarda IoT veri transferi yapılacaktır. WeatherStat (P101) sistemi uyuyan uyanan bir donanım kurgusuna sahiptir. Bu kurgu gereği sistem donanım olarak belirlenen süre periodlarında (30 dk da bir) uyanarak veri paketi hazırlayacak ve sunucuya veri gönderimi yapacaktır.

  • Cihaz güç altyapısı : Batarya (solar şarjlı)
  • Cihaz çalışma sistemi : Uyu-Uyan
  • İletişim : Tek yönlü (cihaz > sunucu)

PowerStat

PowerStat sistemi kurgu gereği elektrik panosu üzerine montajlanmaktadır. Bu nedenle güç sorunu bulunmamaktadır. Elektrik olduğu sürece kendisini GSM şebekesine bağlı tutacak elektrik gitmesi durumunda ise elektriğin gittiğini haber ederek GSM i kapatıp uyku moduna geçecektir. Cihaz bağlı durumdayken belirlenen veri tipleri ile gönderim yapacak ve sunucudan veri alabilecektir.

  • Cihaz güç altyapısı : Batarya (şebeke şarjlı)
  • Cihaz çalışma sistemi : Devamlı uyanık (enerji varken)
  • İletişim : Çift yönlü (cihaz - sunucu)

Veri Paketi Yapısı

Tüm projeler ortak bir veri iletişim altyapısı içerisinde birleştirilmiş ve ortak bir iletişim standardı belirlenmiştir. Bu standart doğrultusunda veri paketi aşağıda tanımlandığı segment yapısındadır.

SegmentAçıklama
InfoVeri paketine ait genel bilgilerin yer aldığı segment.
DeviceCihaza ait tanımlayıcı bilgilerin yer aldığı segment.
PayloadVeri paketine ait bilgilerin yer aldığı segment.

Info Segmenti

Veri gönderimi yapan IoT cihaza ait özlük/metadata bilgilerinin olduğu segmenttir. Ayrıca bu segment içerisinde veri paketinin oluşturulduğu zamana ait zaman etiketi de bulunmaktadır. Info segmentinde gönderilen veriler tiplerine uygun biçimde (string/integer/float) iletilir ve backend tarafından kimlik doğrulama, indeksleme ve duplicate/out-of-order analizlerinde kullanılır.

{
"Info": {
"TS": "2026-01-20T07:15:30Z",
"ID": "C50010011D05A971",
"FW": 04003028,
"SEQ": 1,
"IMEI": "354485417249113",
"ICCID": "8990000920090161331"
}
}

Paket içerisinde yer alan tüm verilerin maksimum uzunlukları belirli olduğu için bu paket uzunluğu standarttır.

ipucu

Veri gönderimi sırasında data iletişim boyutunu optimize edebilmek adına paket boşluksuz (ve diğer özel karakterler olmadan) gönderilecektir.

TS

Veri paketinin oluşum zamana ait zaman etiketidir, bu zaman etiketi IoT cihaz içerisinde bulunan RTC veya diğer zaman kaynaklarından alınacaktır. Zaman etiketi formatı ISO 8601 / RFC 3339 olarak kullanılacaktır. Tüm paketlerde bu alan yer almalıdır. Bu alanın içeriği aşağıdaki formatta olmalıdır.

"TS": "2026-01-20T07:15:30Z"

Bu yapı aşağıdaki formtta olacaktır.

Açıklama
Değişken AdıTS
Değişken TanımıVeri ölçümleme zamanına ait zaman etiketi
Değişken TipiDate/Time
ZorunluEvet
Veri FormatıYYYY-MM-DDThh:mm:ssZ (opsiyonel .sss)
Örnek Veri2026-01-20T07:15:30Z

SEQ

Paket sıra numarasıdır. Cihaz tarafından her iletimde artırılır, overflow durumunda sıfırlanır. Duplicate ve out-of-order paket tespiti için kritik önemdedir.

Açıklama
Değişken AdıSEQ
Değişken TanımıPaket sıra numarası
Değişken TipiInteger
ZorunluEvet
Örnek Veri1

ID

Cihaza ait tekil ID numarasıdır. Bu değer ile tüm veritabanı kayıt işlemleri indekslenecektir. Seri üretim cihazlarda bu tekil veriyi sağlaması hem de her cihazın ayrı ayrı kodlanması iş yükünü getirmemek adına sistem içerisinde serial id çipi kullanılacaktır. Bu çip üzerinde fabrika çıkışı olarak kodlanmış 48 bit bir ID bulunmaktadır. Elektronik sistemlerde genellikle veriler çip içerisinde bit olarak saklanmaktadır.

Bu veriler okunduğu zaman HEX formatında okunmaktadır; onluk sisteme çevrilebilecek olsa da değişken taşması yaşamamak adına string olarak işleme alınmaktadır. DS28C çipi üzerinden okunan bu 48 bit ID’ye ek olarak 8 bit CRC verisi okunmaktadır. Polynomial “X^8 + X^5 + X^4 + 1" doğrulama algoritması yardımı ile ID doğrulaması yapılabilmektedir. Bu nedenle veri gönderimi yaparken 48+8 bit veri paketi HEX String formatında gönderilecektir.

"ID": "70A11D1D01000026"

FW

Firmware sürüm bilgisidir. Majör, minör ve düzeltme durumlarını içerir. Sürüm iletimi iki şekilde desteklenir; tercih edilen tek bir integer formattır:

  • Integer: MMmmmppp → Major(2), Minor(3), Patch(3)
  • Alternatif: String semver MM.mm.ppp
"FW": 04003028

Örnek ayrıştırma: 04003028 → Major=04, Minor=003, Patch=028.

  • Bu veri "tiny" paketlerinde gönderilmeyecektir.

IMEI

GSM Modemleri fiziksel olarak kayıt altına alabilmek ve devlet regülasyonları için anahtar oluşturması için her GSM modemde olması gereken tekil 15 byte bir veridir. Bu veri sayesinde modem satın alma parti vs. gibi bilgiler takip edilebilmektedir.

"IMEI": "354485417249113"
Açıklama
Değişken AdıIMEI
Değişken TanımıGSM Modem IMEI Number (IMEI)
Değişken TipiString (15 Byte)
ZorunluHayır
Örnek Veri353613080341053
ipucu

Bu veri tipi GSM üzerinden okunurken bazen hatalı okuma yapabilmekte ve database üzerinde istenmeyen kayıtların oluşumuna yol açabilmektedir. Bu nedenle GSM üzerinden okunan değer doğrulamalı okuma yapısında yapılmalıdır.

  • Bu veri "tiny" paketlerinde (ve GSM olmayan modüllerde) gönderilemeyecektir.

ICCID

ICCID (Integrated Circuit Card Identifier) olarak bilinen kod numarası GSM şebekelerde telefon numarasının ve mobil operatör faturalandırma alt yapısı için kullanılan dünya genelinde tekil bir koddur. Sistemlerimiz içerisinde mobil operatör tarafında işlemlerin kolayca kontrol edilebilmesi amacı ile bu kod sistemlerimizde saklanacaktır. ICCID numarası Luhn algoritması ile kontrol edilebilen 19 veya 20 haneli bir numaradır.

"ICCID": "8990000920090161331"
Açıklama
Değişken AdıICCID
Değişken TanımıIntegrated Circuit Card Identifier
Değişken TipiString (19/20 byte)
ZorunluHayır
Örnek Veri8990011901130266075
ipucu

Bu veri tipi GSM üzerinden okunurken bazen hatalı okuma yapabilmekte ve database üzerinde istenmeyen kayıtların oluşumuna yol açabilmektedir. Bu nedenle GSM üzerinden okunan değer doğrulamalı okuma yapısında yapılmalıdır.

  • Bu veri "tiny" paketlerinde (ve GSM olmayan modüllerde) gönderilemeyecektir.

Device Segmenti

Veri gönderimi yapan IoT cihaza ait donanımsal (sensör veya bağlantı) parametreleri içeren veri segmentidir. Bu veriler sayesinde cihaza ait genişletilmiş arıza/durum teşhis işlemleri yapılacaktır.

{
"Device": {
"Power": {
"B_IV": 4.11,
"B_AC": -51.72,
"B_IC": 1300,
"B_FC": 2000,
"B_SOC": 92.13,
"B_T": 23.12,
"B_CS": 3,
"PS_S": 1
},
"IoT": {
"NT": 4,
"RSSI": -72,
"CT": 3.724,
"MCC": 286,
"MNC": 1,
"TAC": 8770,
"CID": 53541
}
}
}
ipucu

Veri gönderimi sırasında data iletişim boyutunu optimize edebilmek adına paket boşluksuz (ve diğer özel karakterler olmadan) gönderilecektir.

ipucu

Veri paketi içerisinde yer alan float değerler en fazla 2 ondalık basamaklı olarak gönderilecektir.

İki alt segmentden oluşmaktadır.

Power Segmenti

Geliştirilen donanımların tamamı batarya destekli sistemler olarak tasarlanmaktadır. Herhangi bir güç kaynağına bağlı olarak çalışsa bile güç kesilmesi durumunda sunuculara veri gönderebilmek için yeterli enerjiye sahip olmaları gerekmektedir. Bu nedenle tüm ürünler üzerinde Li-Ion batarya (ürün cinsine göre adedi ve gücü değişmektedir bu bilgi donanım versiyonu içerisinde yer alacaktır) kullanılmaktadır.

Li-Ion bataryalar yapı gereği 3V8 nominal voltaj, 4V2 max voltaj ve 3V0 min voltaj olarak karakterize edilmektedir. Bu değerler teorik değerler olup ortam sıcaklığına göre değişmektedir. Düşük sıcaklıklar bir sorun değil bir avantajdır ve pil yaşlanmasını azaltır. Bununla beraber bataryaların 3V0 değerine düşmesi istenmeyen bir durumdur genellikle 3V2-3V4 aralığına düşmüş bataryalar boş olarak değerlendirilir.

Bu kapsamda donanımlar üzerinde batarya şarj ve batarya ölçümleme sistemleri bulunmaktadır. Bu sistemler üzerinden alınan veriler hem anlık hem de ileri vade sürdürülebilirlik analizleri için kaydedilmelidir.

Bu segment içerisinde cihaza ait güç parametreleri yer alamaktadır. Batarya durumu şarj bilgileri gibi parametreler bu alan içerisinde yer almaktadır.

B_IV

Sistem dahili bataryasına ait anlık voltaj bilgilerini vermektedir. Bu sayede voltaj değeri üzerinden güç analizleri ve batarya sağlığı konusunda analizler yapılabilecektir. Kullanılan batarya voltaj alt ve üst limitleri kayıt sırasında kontrol edilebilir.

Açıklama
Değişken AdıB_IV
Değişken TanımıInstant Voltage (Anlık batarya voltajı)
Değişken TipiFloat (maksimum 2 ondalık)
Değişken BirimiVolt
ZorunluEvet
Örnek Veri3.89
B_AC

Sistem güç katmanı üzerinde bulunan batarya ölçümleme çipi üzerinden ölçülen ortalama akım bilgisidir. Batarya ölçüm çipinin kullanılmasında ki birincil öncelik bu veridir (IV ile birlikte). Çip bataryaya bağlı kaldığı süre boyunca ölçümleme yapar ve bu verilerin ortalamalarını iç registerlarında tutar. Bu verinin negatif değer olması tüketim olduğunu (bataryadan güç çekimi), pozitif olması ise şarj olduğunu belirtmektedir (bataryaya doğru güç). Sonraki versiyonlarda akım değeri üzerinden güç analizleri ve batarya sağlığı konusunda analizler yapılabilecektir.

Açıklama
Değişken AdıB_AC
Değişken TanımıAverage Current (Ortalama Akım)
Değişken TipiFloat (maksimum 2 ondalık)
Değişken BirimimA
ZorunluEvet
Örnek Veri-51.72
B_IC

Bataryaya ait anlık akım veya ölçüm entegresi tarafından raporlanan anlık akım değeridir. Negatif değer tüketimi, pozitif değer şarjı ifade eder.

Açıklama
Değişken AdıB_IC
Değişken TanımıInstant Current (Anlık Akım)
Değişken TipiInteger
Değişken BirimimA
ZorunluHayır
Örnek Veri1300
B_SOC

Sistem güç katmanı üzerinde bulunan batarya ölçümleme çipi üzerinden ölçülen batarya doluluk oranı bilgisidir. Batarya paketinin firmware üzerinde ayarlanmış kapasitesi ile anlık olarak ölçümlenen batarya kapasite oranı olarak hesaplanmaktadı. Bu hesap için batarya karakteristik eğrileri kullanılmakta ve lineer olmayan bir hesap ölçüm çipi tarafından anlık olarak yapılmaktadır.

Bu değer UI tasarımlar içerisinde batarya durum bilgisi olarak direkt paylaşılabilir yapıdadır.

bilgi

Batarya SOC verisinin tam doğru parametreyi gösterebilmesi için en az bir defa tam deşarj-şarj döngüsü tamamlamış olması gerekmektedir. Bu nedenle ilk gelen veriler hatalı olabilir.

Açıklama
Değişken AdıB_SOC
Değişken TanımıState of Charge (Kapasite yüzdesi)
Değişken TipiFloat (maksimum 2 ondalık)
Değişken Birimi%
ZorunluHayır
Örnek Veri17.97
B_T

Batarya veya PCB sıcaklığıdır (donanım tasarımına göre konum değişebilir). Termal koşulların takibi ve batarya sağlığı analizleri için kullanılır.

Açıklama
Değişken AdıB_T
Değişken TanımıBattery/PCB Temperature
Değişken TipiFloat (maksimum 2 ondalık)
Değişken Birimi°C
ZorunluHayır
Örnek Veri23.12
B_CS

Sistem güç katmanı üzerinde bulunan şarj entegresi şarj durumlarını tanımlayan register değerine sahiptir. Bu register değeri işlemci tafaından okunarak veri paketi ile birlikte sunuculara kaydedilmektedir. Bu sayede şarj durumu ile güç kaynaklı arıza durumları tesbit edilebilir hale getirilmiştir. Bu register değerlerinin neleri ifade ettiği aşağıdaki tabloda belirtilmiştir.

Açıklama
Değişken AdıB_CS
Değişken TanımıCharge State (Şarj Durumu)
Değişken TipiInteger
Değişken Birimi-
ZorunluHayır
Örnek Veri2 (0-3)

Şarj kodu değer açıklamaları.

Status IDDurumAçıklama
0Not ChargingŞarj olmuyor
1PrechargeÖn şarj oluyor
2Fast ChargeHızlı şarj oluyor
3Charge DoneŞarj tamamlandı
PS_S

Sistem güç katmanı üzerinde bulunan harici adaptör soketi kontakları ile işlemci tarafından soketin takılı olup olmadığını doğrudan öğrenebilmekteyiz. Bu bilgi işlemci tarafından okunarak veri paketi ile birlikte sunuculara kaydedilmektedir. Bu sayede harici adaptör soketinin bağlı olup olmadığı tespit edilebilir hale gelmiştir.

Açıklama
Değişken AdıPS_S
Değişken TanımıPower Supply Socket State
Değişken TipiInteger (enum)
Değişlen Birimi-
ZorunluHayır
Örnek Veri1 (0-1)

Güç kaynağı soket durumu aşağıdaki değerleri alabilir.

Soket StateDurumAçıklama
0Not PluggedSoket takılı değil
1PluggedSoket takılı

IoT Segmenti

Geliştirilen cihazların tamamı etkileşimli IoT cihazlar olarak geliştirilmektedir. IoT iletişim tipi ne olursa olsun (GSM/LoRa/WiFi) iletişim bilgileri bu segment altında yer alacaktır.

NT

Bağlantı tipi bilgisidir. GSM/LoRa/WiFi/Ethernet gibi teknolojileri kodlar.

Açıklama
Değişken AdıNT
Değişken TanımıNetwork Type (Ağ Türü)
Değişken TipiInteger (enum)
ZorunluEvet
Örnek Veri4

Önerilen enum: 2=2G, 3=3G, 4=4G(LTE), 7=LTE Cat-M1, 8=NB-IoT, 9=NR(5G).

RSSI

IoT iletişime ait sinyal gücü bilgisini içermektedir. IoT donanımına göre değişiklik gösterebilir.

Açıklama
Değişken AdıRSSI
Değişken TanımıReceived Signal Strength Indicator (Sinyal gücü)
Değişken TipiInteger
Değişken BirimidBm
ZorunluHayır
Örnek Veri-72

GSM altyapısı kullanan modüllerde sistemin şebekeye bağlantı sinyal gücü hakkında bilgi vermektedir. Bazı modemlerde RSSI kod değeri ile raporlanır; standartlaştırma için dBm değeri önerilir.

RSSIdBmAçıklama
0<=113<=-113
1111-111
2..30109-109 - 53-53Her 1 basamak için 2dBm
31>=51>=-51
99Tespit edilemedi

dBm için belirlenen sinyal çekim seviyesi 5 üzerinden aşağıdaki gibi hesaplanmaktadır (UI için çekim çubukları)

dBmSeviyeAçıklama
>=70dBm>=-70_{dBm}MükemmelGüçlü sinyal ve maksimum veri hızı
70dBm-70_{dBm} - 85dBm-85_{dBm}GüzelGüçlü sinyal güçlü veri hızı
86dBm-86_{dBm} - 100dBm-100_{dBm}İyiZayıf sinyal fakat kullanışlı veri hızı
<100dBm<-100_{dBm}ZayıfZayıf sinyal problemli veri hızı
110dBm-110_{dBm}KötüKötü bağlantı kopma yaşanabilir
CT

Bağlantı kurulma süresidir (saniye). Ağ bağlantısının hazır hale gelmesi için geçen süre.

Açıklama
Değişken AdıCT
Değişken TanımıConnection Time
Değişken TipiFloat (maksimum 3 ondalık)
Değişken Birimis
ZorunluHayır
Örnek Veri3.724

Payload Segmenti

IoT cihazın ölçümlediği ana veri paketidir. Modülün ilgili alt donanımlarından okuduğu bilgiler bu veri paketi içerisinde sunucuya gönderilmekte ve ölçüm değeri olarak kaydedilmektedir.

{
"Payload": {
"PCB_T": 28.22,
"PCB_H": 69.45,
"VRMS_R": 220.1,
"VRMS_S": 224.2,
"VRMS_T": 221.8
}
}

Segment içerisinde yer alan veri adları dinamik olarak tanımlanmaktadır. Bu sayede ileri vade güncellemelerde iletişim paketinin gereksiz güncellemelerinin önüne geçilmiştir. Payload segmentinde kabul edilen veri tipleri ve isimlendirme standardı (BÜYÜK HARF, kısa/sabit prefix, teknik anlamı yansıtan format) ayrı dokümanda detaylandırılacaktır.

Veri paketinde gönderilen her veriye ait bir yaş değeri/politikası olmalıdır. Bu sayede gereksiz veri depolama alanını (veritabanını) şişiren veriler azaltılacaktır. Örneğin uzun süreli voltaj bilgileri günlük min/max/ortalama ile özetlenebilir; bazı veriler için ise tam silme uygulanabilir.