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.
| Segment | Açıklama |
|---|---|
| Info | Veri paketine ait genel bilgilerin yer aldığı segment. |
| Device | Cihaza ait tanımlayıcı bilgilerin yer aldığı segment. |
| Payload | Veri 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.
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 Tipi | Date/Time |
| Zorunlu | Evet |
| Veri Formatı | YYYY-MM-DDThh:mm:ssZ (opsiyonel .sss) |
| Örnek Veri | 2026-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 Tipi | Integer |
| Zorunlu | Evet |
| Örnek Veri | 1 |
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 Tipi | String (15 Byte) |
| Zorunlu | Hayır |
| Örnek Veri | 353613080341053 |
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 Tipi | String (19/20 byte) |
| Zorunlu | Hayır |
| Örnek Veri | 8990011901130266075 |
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
}
}
}
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.
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 Tipi | Float (maksimum 2 ondalık) |
| Değişken Birimi | Volt |
| Zorunlu | Evet |
| Örnek Veri | 3.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 Tipi | Float (maksimum 2 ondalık) |
| Değişken Birimi | mA |
| Zorunlu | Evet |
| Ö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 Tipi | Integer |
| Değişken Birimi | mA |
| Zorunlu | Hayır |
| Örnek Veri | 1300 |
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.
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 Tipi | Float (maksimum 2 ondalık) |
| Değişken Birimi | % |
| Zorunlu | Hayır |
| Örnek Veri | 17.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 Tipi | Float (maksimum 2 ondalık) |
| Değişken Birimi | °C |
| Zorunlu | Hayır |
| Örnek Veri | 23.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 Tipi | Integer |
| Değişken Birimi | - |
| Zorunlu | Hayır |
| Örnek Veri | 2 (0-3) |
Şarj kodu değer açıklamaları.
| Status ID | Durum | Açıklama |
|---|---|---|
| 0 | Not Charging | Şarj olmuyor |
| 1 | Precharge | Ön şarj oluyor |
| 2 | Fast Charge | Hızlı şarj oluyor |
| 3 | Charge 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 Tipi | Integer (enum) |
| Değişlen Birimi | - |
| Zorunlu | Hayır |
| Örnek Veri | 1 (0-1) |
Güç kaynağı soket durumu aşağıdaki değerleri alabilir.
| Soket State | Durum | Açıklama |
|---|---|---|
| 0 | Not Plugged | Soket takılı değil |
| 1 | Plugged | Soket 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 Tipi | Integer (enum) |
| Zorunlu | Evet |
| Örnek Veri | 4 |
Ö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 Tipi | Integer |
| Değişken Birimi | dBm |
| Zorunlu | Hayı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.
| RSSI | dBm | Açıklama |
|---|---|---|
| 0 | ||
| 1 | ||
| 2..30 | - | Her 1 basamak için 2dBm |
| 31 | ||
| 99 | Tespit edilemedi |
dBm için belirlenen sinyal çekim seviyesi 5 üzerinden aşağıdaki gibi hesaplanmaktadır (UI için çekim çubukları)
| dBm | Seviye | Açıklama |
|---|---|---|
| Mükemmel | Güçlü sinyal ve maksimum veri hızı | |
| - | Güzel | Güçlü sinyal güçlü veri hızı |
| - | İyi | Zayıf sinyal fakat kullanışlı veri hızı |
| Zayıf | Zayıf sinyal problemli veri hızı | |
| 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 Tipi | Float (maksimum 3 ondalık) |
| Değişken Birimi | s |
| Zorunlu | Hayır |
| Örnek Veri | 3.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.