Ana içeriğe geç

Inventory & Topology

Bu sayfa, Cınga backend içindeki fiziksel varlıkların ve saha topolojisinin nasıl modellendiğini detaylı biçimde açıklar. Amaç yalnız cihaz listesi tutmak değil; cihazın hangi modemle, hangi SIM ile, hangi pompaya, hangi panoya, hangi parsele ve hangi adrese bağlı olduğunu tarihsel olarak izlenebilir hale getirmektir.

Bu katmanda temel prensip şudur:

Temel prensip

Fiziksel varlık ile ilişki geçmişi aynı tabloda eritilmez. Varlık ayrı tutulur, atama/bağlantı tarihi ayrı tutulur.

Genel Fiziksel Zincir

1. devices

devices, sistemdeki mantıksal cihaz kimliğinin ana tablosudur. Bu tablo cihazı bir inventory nesnesi olarak tanımlar; canlı runtime state’i taşımaması önerilir.

Neden vardır?

  • telemetry, rule engine, inbox, finance, notes gibi pek çok modül cihaz kimliği etrafında döner
  • cihazın hangi proje, model, firmware ve adrese ait olduğu burada çözümlenir
  • diğer domain tabloları cihazı referans alır

Kolonlar

KolonTipNullAnlamı
idvarchar(21)hayırCihazın birincil kimliği
status_idintevetCihazın genel statü referansı
project_idintevetHangi ürün/proje ailesine ait olduğu
manufacturer_model_idintevetCihaz modeli
firmware_idintevetSon bilinen firmware ilişkisi
address_idintevetKurulu adres
namevarchar(100)evetKullanıcıya görünen ad
descriptiontextevetAçıklama
create_timetimestamphayırOluşturma zamanı
update_timetimestamphayırSon güncelleme

Mimari karar

Aşağıdaki alanlar devices tablosunda yaşamaz ve ayrı state tablolarında tutulur:

  • last_connection_ip
  • last_connection_time
  • last_stream_id
  • last_raw_id
  • last_device_time
  • register_status
  • register_stop
  • register_publish

Bu ayrım aşağıdaki tablolar üzerinden çözülür:

  • device_runtime_state
  • device_register_state

Örnek kayıt

{
"id": "46000000C47CA670",
"project_id": 1,
"manufacturer_model_id": 8,
"firmware_id": 1,
"address_id": 3,
"name": "Kuyu 1 PowerStat",
"description": "Kuyu 1 sahasında çalışan PowerStat V1 cihazı"
}

2. modems

Bu tablo fiziksel modem varlığını taşır.

Neden vardır?

Cihaz ile haberleşme katmanı aynı şey değildir. Modem arızalanabilir, stokta olabilir, sahadan sökülebilir veya başka cihaza aktarılabilir. Bu nedenle modem bağımsız bir inventory nesnesi olarak tutulur.

Kolonlar

KolonTipNullAnlamı
idinthayırModem anahtarı
imeivarchar(20)hayırFiziksel modem kimliği
manufacturer_model_idinthayırModem modeli
statusenumhayırstok / installed / faulty / retired
serial_numbervarchar(100)evetSeri numarası
notesvarchar(255)evetAçıklama
create_timetimestamphayırOluşturma zamanı
update_timetimestamphayırSon güncelleme

Örnek kayıt

{
"id": 1,
"imei": "356938035643809",
"manufacturer_model_id": 7,
"status": "installed",
"serial_number": "TELIT-LE910-001",
"notes": "Sahada aktif modem"
}

3. modem_assignments

Bu tablo modem ile cihaz arasındaki tarihsel atamayı tutar.

Neden vardır?

Bir modem farklı zamanlarda farklı cihazlara takılabilir. Modemin tek başına hangi cihaza ait olduğunu modems tablosunda tutmak geçmişi siler. Bu yüzden ilişki ayrı tabloda tutulur.

Kolonlar

KolonTipNullAnlamı
idinthayırAtama anahtarı
modem_idinthayırAtanan modem
device_idvarchar(21)hayırModemin takıldığı cihaz
is_activebooleanhayırHalen aktif atama mı
assigned_byintevetAtamayı yapan kullanıcı
assigned_attimestamphayırTakılma zamanı
removed_attimestampevetSökülme zamanı
notesvarchar(255)evetNot
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek kayıt

{
"id": 1,
"modem_id": 1,
"device_id": "46000000C47CA670",
"is_active": true,
"assigned_at": "2026-04-01T10:00:00Z",
"removed_at": null,
"notes": "Ana cihaz modemi olarak takıldı"
}

4. sim.sims

Bu tablo fiziksel SIM varlığını temsil eder.

Neden vardır?

SIM kart, modemden ve cihazdan bağımsız bir fiziksel/operasyonel kimliktir. Operatör değişimi, arıza, stok ve askıya alınma gibi durumları cihaz tablosunda taşımak doğru değildir.

Kolonlar

KolonTipNullAnlamı
idinthayırSIM anahtarı
iccidvarchar(25)hayırFiziksel SIM kimliği
imsivarchar(25)evetAğ kimliği
msisdnvarchar(20)evetHat numarası
operator_idintevetOperatör referansı
statusenumhayırstock / active / suspended / faulty / retired
notesvarchar(255)evetNot
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

5. sim.assignments

Bu tablo SIM ile modem arasındaki tarihsel ilişkiyi taşır.

Neden vardır?

Bir SIM farklı zamanlarda farklı modemde kullanılabilir. Bu ilişkiyi tek tabloda tutmak geçmiş takibi açısından zayıf kalır.

Kolonlar

KolonTipNullAnlamı
idinthayırAtama anahtarı
sim_idinthayırTakılan SIM
modem_idinthayırSIM’in takıldığı modem
is_activebooleanhayırAktif atama mı
assigned_byintevetİşlemi yapan kullanıcı
assigned_attimestamphayırTakılma zamanı
removed_attimestampevetÇıkarılma zamanı
notesvarchar(255)evetNot
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

6. sim.connectivity_state

Bu tablo SIM’in son bağlantı özet durumunu taşır.

Neden vardır?

Heartbeat geçmişi çok satırlıdır. UI ve alarm tarafında ise son özet durum gerekir. Bu yüzden özet state ayrı tabloda tutulur.

Kolonlar

KolonTipNullAnlamı
sim_idinthayırSIM anahtarı
last_statusenumhayırSon heartbeat durumu
last_ping_time_msfloatevetSon ping süresi
last_checked_attimestamphayırSon kontrol zamanı
last_success_attimestampevetSon başarılı kontrol
consecutive_fail_countinthayırArt arda başarısızlık sayısı
update_timetimestamphayırGüncelleme

7. sim.heartbeats

Bu tablo SIM heartbeat geçmişini saklar.

Neden vardır?

Özet state tek başına yeterli değildir; zaman içinde timeout, unreachable veya success geçmişi tutulmalıdır.

Kolonlar

KolonTipNullAnlamı
idinthayırKayıt anahtarı
sim_idinthayırİlgili SIM
statusenumhayırsuccess / timeout / unreachable / error
ping_time_msfloatevetÖlçülen süre
checked_attimestamphayırKontrol zamanı
detailsvarchar(255)evetAçıklama

8. transformers

transformers, sahadaki trafo varlığını tanımlar.

Neden vardır?

Enerji altyapısı tarafında pano ve pompa çoğu zaman bir trafodan beslenir. Trafoyu ayrı varlık olarak modellemek besleme topolojisini görünür kılar.

Kolonlar

KolonTipNullAnlamı
idinthayırTrafo anahtarı
manufacturer_model_idintevetTrafo modeli
namevarchar(100)evetSaha adı
descriptionvarchar(255)evetAçıklama
capacity_kvaintevetGüç kapasitesi
installation_datetimestampevetKurulum tarihi
address_idintevetKonum
is_activebooleanhayırAktiflik
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

9. pumps

pumps, fiziksel pompa varlığını tanımlar.

Neden vardır?

Pompa, telemetry üreten cihazdan farklı bir gerçek dünya nesnesidir. Aynı cihaz başka pompaya taşınabilir; aynı pompa başka cihazla izlenebilir. Bu nedenle ayrı varlık olmalıdır.

Kolonlar

KolonTipNullAnlamı
idinthayırPompa anahtarı
manufacturer_model_idintevetPompa modeli
pump_type_idintevetPompa tipi
namevarchar(100)evetPompa adı
descriptionvarchar(255)evetAçıklama
capacity_hpintevetGüç kapasitesi
flow_rate_m3_hintevetDebi
pipe_sizeintevetBoru ölçüsü
installation_datetimestampevetKurulum tarihi
address_idintevetAdres
is_activebooleanhayırAktiflik
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

10. electricity_boxes

Bu tablo panoyu temsil eder.

Neden vardır?

Pompa doğrudan yalnız motor değildir; pano, trafo ve koruma ekipmanlarıyla birlikte çalışır. Pano, saha topolojisinde bağımsız ve kritik bir varlıktır.

Kolonlar

KolonTipNullAnlamı
idinthayırPano anahtarı
namevarchar(100)evetPano adı
descriptionvarchar(255)evetAçıklama
transformer_idintevetBesleyen trafo
auto_start_delayintevetGecikme ayarı
address_idintevetAdres
is_activebooleanhayırAktiflik
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

11. pump_box_assignments

Pompa ile pano arasındaki tarihsel ilişkiyi taşır.

Neden vardır?

Pompa başka panoya taşınabilir veya saha topolojisi değişebilir. Bu ilişkiyi pumps ya da electricity_boxes tablosunda tek kolonla tutmak geçmişi yok eder.

Kolonlar

KolonTipNullAnlamı
idinthayırAtama anahtarı
pump_idinthayırPompa
electricity_box_idinthayırBağlı pano
is_activebooleanhayırHalen aktif bağlantı mı
assigned_attimestamphayırBağlanma zamanı
removed_attimestampevetAyrılma zamanı
notesvarchar(255)evetNot
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

12. electricity_box_assets

Bu tablo pano içindeki ekipmanları modelleyen inventory katmanıdır.

Neden vardır?

Pano tek nesne değildir; içinde CT, kontaktör, softstarter, VFD, sigorta, termik röle gibi farklı ekipmanlar yaşar. Bunları bir açıklama alanına gömmek yerine ayrı satırlar halinde saklamak saha gerçekliğine daha uygundur.

Kolonlar

KolonTipNullAnlamı
idinthayırVarlık kaydı
electricity_box_idinthayırBağlı pano
manufacturer_model_idinthayırModel
roleenumhayırVarlığın panodaki rolü
quantityinthayırAdet
serial_numbervarchar(100)evetSeri no
tag_novarchar(100)evetSaha etiketi
specsjsonevetEk teknik özellik
is_activebooleanhayırAktiflik
notesvarchar(255)evetNot
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek kayıt

{
"id": 14,
"electricity_box_id": 3,
"manufacturer_model_id": 6,
"role": "softstarter",
"quantity": 1,
"tag_no": "SS-01",
"specs": { "nominal_current_a": 370 },
"is_active": true,
"notes": "Direkt şebekeden beslenen panodaki soft starter"
}

13. land_plots

Bu tablo tarla/parsel varlığını taşır.

Neden vardır?

Sistem yalnız cihaz ve pompa izlemez; bunların hangi araziye hizmet ettiğini de bağlam olarak bilmek ister. Sulama, ürün planı ve saha operasyonları bu tablo üstünden bağlanır.

Kolonlar

KolonTipNullAnlamı
idinthayırParsel anahtarı
namevarchar(100)evetParsel adı
descriptionvarchar(255)evetAçıklama
address_idintevetKonum
block_numbervarchar(50)evetAda/parsel bloğu
parcel_numbervarchar(50)evetParsel no
area_sq_meterintevetAlan
irrigation_type_idintevetSulama tipi
is_activebooleanhayırAktiflik
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

14. Atama Tabloları: land_plot_device_assignments, land_plot_pump_assignments, land_plot_crops

Bu tablolar fiziksel tarla bağlamının tarihsel yönetimini sağlar.

Neden vardır?

  • bir cihaz başka parsele taşınabilir
  • bir pompa farklı parsele hizmet verebilir
  • aynı parselde farklı sezonlarda farklı ürün yetişebilir

Bu yüzden ilişki geçmişi ayrı tabloda tutulur.

15. address.* Şeması

Adres yapısı normalize biçimde şu tablolara ayrılmıştır:

  • address.provinces
  • address.districts
  • address.neighborhoods
  • address.coordinates
  • address.addresses

Neden ayrı şema?

Bu yapı tekrar eden il/ilçe/mahalle verisini normalize eder ve koordinat bilgisini merkezi hale getirir. Aynı adres kaydının farklı saha nesneleri tarafından tekrar kullanılması mümkün olur.

Sonuç

Inventory & topology modeli, Cınga backend’in fiziksel dünya ile bağını kurar. Bu modelde cihaz, modem, SIM, pompa, pano, trafo ve parsel gibi varlıklar birbirinden ayrılır; aralarındaki ilişki ise assignment tabloları üzerinden tarihsel olarak izlenir.

Bu sayede saha değişimleri, ekipman taşımaları, modem/SIM değişimleri ve pompa-pano-topoloji dönüşümleri veri modelinde kaybolmadan temsil edilebilir.