Ana içeriğe geç

Sofar Inverterler

Sofar Solar, gunes enerjisi invertorleri ve enerji depolama sistemleri ureten uluslararasi bir firmadır. Zeus 2.0, Sofar'in hibrit ve string invertor serilerini destekler.

Desteklenen Modeller

HYD 3-6K — Hibrit Invertor

Kullanim alani: Konut ve kucuk olcekli ticari tesisler, bataryali sistemler

HYD serisi hibrit invertor, gunes panellerinden (PV) gelen DC gucu AC'ye cevirirken ayni zamanda batarya sarj/desarj yonetimi yapar. Grid, PV, batarya ve yuk arasindaki enerji akisini optimize eder.

Olculen parametreler:

KategoriParametreler
PV VerileriPV voltaj (V), PV akim (A), PV guc (W), gunluk PV uretimi (kWh)
Grid VerileriGrid voltaj (V), grid akim (A), grid gucu (W), grid frekansi (Hz)
BataryaBatarya voltaj (V), batarya akim (A), batarya gucu (W), SoC (%), sarj/desarj durumu
YukYuk gucu (W), gunluk tuketim (kWh)
SistemInvertor sicakligi, calisma durumu, hata kodlari

Modbus ayarlari:

ParametreDeger
Varsayilan Slave ID1
Baud Rate9600
Data Bits8
ParityNone
Stop Bits1
ProtokolModbus RTU

KTLX-G3 — String Invertor

Kullanim alani: Ticari ve endustriyel catı üstü GES (Gunes Enerjisi Santrali) sistemleri

KTLX-G3, cok MPPT girisi olan string invertor serisidir. Sadece PV uretim verilerini okur, batarya yonetimi icermez.

Olculen parametreler:

KategoriParametreler
PV VerileriHer MPPT icin: voltaj (V), akim (A), guc (W)
AC CikisVoltaj (V), akim (A), guc (W), frekans (Hz)
EnerjiGunluk uretim (kWh), toplam uretim (kWh)
SistemInvertor sicakligi, calisma durumu, hata kodlari

Modbus ayarlari:

ParametreDeger
Varsayilan Slave ID1
Baud Rate9600
Data Bits8
ParityNone
Stop Bits1
ProtokolModbus RTU

Modbus Register Gruplari

Sofar invertorlerin register haritasi asagidaki polling gruplari ile organize edilir:

GrupAralikIcerik
realtime5sPV voltaj/akim/guc, grid voltaj/akim/guc, batarya durumu
energy_kwh60sGunluk/toplam enerji sayaclari
bms_identity24hBatarya seri numarasi, SoH, kapasite
fault_status10sHata kodlari ve uyari bayraklari

Sofar Fault Map

Sofar invertorlerin hata kodlari asagidaki genel kategorilerde siniflandirilir (kavramsal ozet — register bazli kesin esleme icin asagidaki "Fault Register Kapsami" tablosundaki alarm_type sutununa bakin):

KategoriAciklamaOrnek Hatalar
Grid FaultSebeke kaynakli hatalarAsiri voltaj, dusuk voltaj, frekans sapma, anti-islanding
DC / Sampling FaultPV/DC taraf + ornekleme hatalariIzolasyon direnci dusuk, ornekleme (grid/DCI/GFCI), PV toprak empedans
System FaultInvertor dahili hatalarSPI/cip/aux, ark, fan ariza (Fan 1-7), kapatma (zorla/uzaktan/DRMS0/AFCI), yuk dusurme, cikis kisa devre, isitma filmi arizasi
Temperature FaultSicaklik korumalariBatarya/radyator/ortam/modul asiri sicaklik, NTC sensor
Bus FaultBara/gerilim hatalariBara dengesizligi/dusuk gerilim, PV/batarya asiri gerilim, fly-span kapasitor
Over-current FaultAsiri akim korumalariBatarya/DCI/PV/bus asiri akim, EPS kisa devre, rezonans (V1.39, #566)
Hardware FaultDonanim seviyesi hatalarHW asiri gerilim/akim, sayac iletisim, jenerator, asiri yuk, role kalici ariza (V1.39, #566)
Communication FaultIletisim arabirimi hatalariUSB/WIFI/BT/RTC/EEPROM/FLASH/SCI, lityum batarya iletisim (V1.39, #566)
Battery (BMS) FaultBMS korumalari + batarya sarj/desarj sicaklikBMS asiri/dusuk gerilim, yuksek/dusuk sicaklik, asiri akim, kisa devre, CAN surum, PID, PLC heartbeat (V1.39, #567)
String FaultPV string/giris sigorta acik devreGroup string sigorta acik devre 1-1..16-2, giris sigorta acik devre 0-15 (V1.39, #568)
DCDC (Battery Converter) FaultDCDC batarya donusturucu hatalari (HYD-ONLY)LV/HV gerilim/akim, IGBT/role/izolasyon/topraklama, ARM/PCS/PCU/BMS/DC iletisim, sigorta/precharge/wake-up, fan/sayim/MAC (V1.39 Section 6.3, #571)
PCU (Power Conversion Unit) FaultPCU guc donusum unitesi alarm + hatalari (HYD-ONLY)Soft-start, fan, radyator/ortam over-temp, bara/batarya SW gerilim/akim, fly-span OV/UV, role kalici ariza, kisa devre, BMS/PWM/pack durum, CBC, cip clock, CAN/SCI iletisim (V1.39 Section 6.4+6.5, #572+#573)
BDU (Battery Distribution Unit) FaultBDU batarya dagitim unitesi hatalari (HYD-ONLY)Ters batarya baglantisi (yanlis kutuplama), devre arizasi (V1.39 Section 5.9.1, #575)

NOT (V1.39): Yukaridaki kategoriler kavramsaldir. Gercek alarm_type degerleri register bazlidir ve SOFAR V1.39 Section 6.1 icerigine gore atanir: inverter_fault_grid (fc1), inverter_fault_sampling (fc2), inverter_fault_system (fc3, fc8, fc11, fc21, fc25), inverter_fault_temperature (fc4, fc20), inverter_fault_bus (fc5), inverter_fault_overcurrent (fc6), inverter_fault_hardware (fc7, fc9, fc24), inverter_fault_comm (fc10, fc28), inverter_fault_battery (fc12, fc30), inverter_fault_string (fc13, fc14, fc15), inverter_fault_grid ayrica fc29, inverter_fault_arc (fc26, fc27), inverter_fault_dcdc (dcdc_fault_1/2/3/9/10 — Section 6.3, HYD-ONLY), inverter_fault_pcu (pcu_alarm_1/2 + pcu_fault_1/2/3 — Section 6.4+6.5, HYD-ONLY), inverter_fault_bdu (bdu_fault_1 — Section 5.9.1, HYD-ONLY), inverter_fault_port_temp (port_temp_1/2 — Section 6.6, HER IKI template). Onceki dokumantasyondaki "DC Fault / Battery Fault / Comm Fault" register eslemeleri eski HYD semasina aitti; #565 PR-2 + #566 PR-3 + #567/#568 + #569 PR-6 + #571 FAZ 3 + #572/#573/#575 FAZ 3 ile guncellendi. inverter_fault_battery PR-2'de tanimli ama icerigi olmayan (orphan) bir kategoriydi; #567 ile gercek BMS register icerigine baglandi. inverter_fault_string #568, inverter_fault_arc #569, inverter_fault_dcdc #571, inverter_fault_pcu/inverter_fault_bdu #572/#573/#575 ile eklenen yeni kategorilerdir (arc = DC ark, dcdc = batarya donusturucu, pcu = batarya guc donusum, bdu = batarya dagitim = yangin/batarya/kutuplama riski = critical).

Her hata kodu bir bit maskesi olarak register'dan okunur ve template'de tanimli fault map ile insan tarafindan okunabilir metne donusturulur.

Fault Register Kapsami

Onemli (V1.39 hizalama, #565 PR-2): Asagidaki ID araliklari SOFAR Inverter Protocol V1.39 Section 6.1'in global ID semasina gore verilmistir (ID1-ID76, sifir dolgusuz). Onceki dokumantasyon eski/yanlis bir Sofar HYD fault semasini (ID01-ID60, yerel) referans aliyordu; fault_code_1..fault_code_5 bit-bit V1.39'a yeniden yazildi (audit: 36 yanlis-esleme + 31 eksik bit duzeltildi).

RegisterAdresFault ID Araligialarm_typeAciklama (V1.39)
fault_code_10x0405ID1-ID16inverter_fault_gridSebeke gerilim/frekans/anlik, anti-islanding, anti-backflow
fault_code_20x0406ID17-ID32inverter_fault_samplingOrnekleme (grid/DCI/GFCI), PID, tutarlilik, notr toprak
fault_code_30x0407ID33-ID48inverter_fault_systemSPI/cip/aux, soft start, ark, izolasyon, topraklama, CT, config
fault_code_40x0408ID49-ID62inverter_fault_temperatureBatarya/radyator/ortam/modul sicaklik, NTC (bit14,15 = ID63,64 N/A)
fault_code_50x0409ID65-ID76inverter_fault_busBara gerilim, PV/batarya asiri gerilim, fly-span kapasitor (bit12-15 = ID77-80 N/A)
fault_code_60x040AID81-ID96inverter_fault_overcurrentAsiri akim (batarya/DCI/PV/bus), EPS kisa devre, rezonans (V1.39, #566)
fault_code_70x040BID97-ID112inverter_fault_hardwareDonanim asiri gerilim/akim, sayac iletisim, jenerator, asiri yuk (V1.39, #566)
fault_code_80x040CID113-ID128inverter_fault_systemYuk dusurme (sicaklik/frekans/gerilim), yildirim, batarya, cikis kisa devre (bit6,7,13,14 = ID119,120,126,127 N/A; V1.39, #566)
fault_code_90x040DID129-ID144inverter_fault_hardwareHW asiri akim/gerilim, bus, role kalici ariza, yildirim, sebeke rolesi (V1.39, #566)
fault_code_100x040EID145-ID160inverter_fault_commUSB/WIFI/BT/RTC/EEPROM/FLASH/SCI, lityum batarya iletisim (V1.39, #566)
fault_code_110x040FID161-ID176inverter_fault_systemKapatma + fan + isitma filmi hatalari (V1.39, #563)
fault_code_120x0410ID177-ID192inverter_fault_batteryBMS korumalari (asiri/dusuk gerilim, sicaklik, akim, kisa devre), batarya sarj/desarj sicaklik, CAN surum, PID, PLC heartbeat (V1.39, #567)
fault_code_130x0411ID193-ID208inverter_fault_stringGroup string sigorta acik devre 1-1..8-2 (V1.39, #568)
fault_code_140x0412ID209-ID224inverter_fault_stringGroup string sigorta acik devre 9-1..16-2 (V1.39, #568)
fault_code_150x0413ID225-ID240inverter_fault_stringGiris sigorta acik devre 0-15 (V1.39, #568)
fault_code_200x0433ID305-ID315inverter_fault_temperatureKontrol unitesi + modul 4-6 + DC/AC port sicaklik (9 aktif; bit6,7 = ID311,312, bit11-15 = ID316-320 N/A; V1.39, #569)
fault_code_210x0434ID321-ID335inverter_fault_systemFaz dizi, anti-kisa-devre, DC role, bus/boost kisa devre (15 aktif; bit15 = ID336 N/A; V1.39, #569)
fault_code_240x0437ID377-ID384inverter_fault_hardwareHW MOS tup, EPS HW asiri akim, AFCI self-check, DC switch trip (8 aktif; bit0-7 = ID369-376 N/A; V1.39, #569)
fault_code_250x0438ID385-ID386inverter_fault_systemHW AD ornekleme bias + Fan 8 (2 aktif; bit2-15 = ID387-400 N/A; V1.39, #569)
fault_code_260x0439ID401-ID416inverter_fault_arcArk arizasi 0-15 (16/16 aktif; DC ark = yangin guvenligi; V1.39, #569)
fault_code_270x043AID417-ID432inverter_fault_arcArk arizasi 16-31 (16/16 aktif; DC ark = yangin guvenligi; V1.39, #569)
fault_code_280x043BID433-ID444inverter_fault_commAFCI iletisim + ARM protokol surum tutarsizligi (6 aktif; bit2-7 = ID435-440, bit12-15 = ID445-448 N/A; V1.39, #569)
fault_code_290x043CID449-ID463inverter_fault_gridToprak sifir gerilim, N-line acik, faz kaybi, bus/inverter ornekleme (15 aktif; bit15 = ID464 N/A; V1.39, #569)
fault_code_300x043DID465-ID478inverter_fault_batteryDCDC/BCU/BMU/PID, sarj/desarj MOS, cell, storage (10 aktif; bit4-7 = ID469-472, bit14,15 = ID479,480 N/A; V1.39, #569)

N/A register'lar: fault_code_16/fault_code_17/fault_code_18 (0x0414-0x0416) ve fault_code_19/fault_code_22/fault_code_23 (0x0432/0x0435/0x0436) V1.39 Section 6.1'de tamamen N/A'dir (cihaz set etmez) — bu nedenle hic eklenmemistir (false-positive engeli).

fault_code_1..fault_code_5 (Issue #565 PR-2): fc1-5 toplam 74 aktif fault flag (16+16+16+14+12). N/A bitler (fc4 bit14,15; fc5 bit12-15) decode edilmez. alarm_type register domain'ine gore atanir (yukaridaki tablo). Severity V1.39 vermez → Zeus is kurali ile atanir (kritiklik bazli; orn. asiri/dusuk gerilim ve izolasyon/topraklama critical, cogu koruma high, dusuk-oncelikli uyarilar medium).

fault_code_6..fault_code_10 (Issue #566 PR-3): Bu register'lar onceki decoder'da HIC YOKTU (komple eksik feature); V1.39 Section 6.1'den birebir eklendi — fc6-10 toplam 76 aktif fault flag (16+16+12+16+16). fc8 bit6,7,13,14 (ID119,120,126,127) V1.39'da N/A oldugu icin decode edilmez (false-positive engeli). Iki yeni alarm_type tanitildi: inverter_fault_overcurrent (fc6, asiri akim korumalari) ve inverter_fault_hardware (fc7+fc9, donanim seviyesi hatalar). fc8 = inverter_fault_system (mevcut kategori), fc10 = inverter_fault_comm (onceden orphan kategori, artik gercek comm icerige baglandi). Severity Zeus is kurali ile atanir (orn. HW asiri akim/gerilim ve EPS kisa devre critical, cogu koruma high, dusuk-oncelikli uyarilar medium).

fault_code_11 (Issue #563): SOFAR Modbus V1.39 Section 6.1 ile eklenen kapatma (ID161-164, ID168), fan (ID169-175 = Fan 1-7) ve isitma filmi (ID176) hatalarini icerir. Bit4/bit5/bit6 (ID165-167) V1.39'da N/A oldugu icin decode edilmez (false-positive engeli) — toplam 13 aktif flag. Severity: AFCI zorla kapatma critical, isitma filmi medium, gerisi high.

fault_code_12 (Issue #567): Bu register onceki decoder'da HIC YOKTU; V1.39 Section 6.1'den birebir eklendi — BMS korumalari (ID177-192, 16/16 aktif flag). alarm_type = inverter_fault_battery (PR-2'de tanimli ama icerigi olmayan orphan kategori artik gercek BMS register icerigine baglandi — comm/fc10 emsali). Severity: BMS asiri/dusuk gerilim, asiri akim, kisa devre, yuksek sicaklik ve batarya sarj/desarj asiri sicaklik = critical (batarya/yangin riski); dusuk sicaklik, surum tutarsizligi, CAN, ark cihaz iletisim, PID, PLC heartbeat = high.

fault_code_13..fault_code_15 (Issue #568): Bu register'lar onceki decoder'da HIC YOKTU; V1.39 Section 6.1'den birebir eklendi — PV string/giris sigorta acik devre (ID193-240, 48 aktif flag = 16+16+16). Yeni alarm_type = inverter_fault_string. fc13 = group string 1-1..8-2, fc14 = group string 9-1..16-2, fc15 = giris sigorta 0-15. Tum bit'ler high severity (sigorta acik devre = uretim kaybi; string/giris devre disi ama acil yangin riski yok). fault_code_16/17/18 (0x0414-0x0416) V1.39'da tamamen N/A oldugu icin hic eklenmedi.

fault_code_20..fault_code_30 (Issue #569 PR-6): Bu register'lar onceki decoder'da HIC YOKTU; V1.39 Section 6.1'den birebir eklendi — 97 aktif fault flag (9+15+8+2+16+16+6+15+10). Register dagilimi: fc20 (ID305-315) = kontrol unitesi/modul/port sicaklik (inverter_fault_temperature); fc21 (ID321-335) = faz dizi/anti-kisa-devre/DC role/bus-boost kisa devre (inverter_fault_system); fc24 (ID377-384) = HW MOS/EPS/AFCI self-check/DC switch (inverter_fault_hardware); fc25 (ID385-386) = HW AD ornekleme bias

  • Fan 8 (inverter_fault_system — fan kategorisi yok, PR-1 emsali); fc26+fc27 (ID401-432) = ark arizasi 0-31 (yeni inverter_fault_arc kategorisi); fc28 (ID433-444) = AFCI iletisim + ARM protokol surum (inverter_fault_comm, fc10 ile birlikte); fc29 (ID449-463) = toprak/N-line/faz kaybi/ornekleme (inverter_fault_grid); fc30 (ID465-478) = DCDC/BCU/BMU/PID/MOS/cell/storage (inverter_fault_battery, fc12 ile birlikte). Yeni alarm_type = inverter_fault_arc (DC ark = yangin guvenligi → tum 32 bit critical). N/A bitler decode edilmez: fc20 bit6,7,11-15; fc21 bit15; fc24 bit0-7; fc25 bit2-15; fc28 bit2-7,12-15; fc29 bit15; fc30 bit4-7,14,15. fault_code_19/22/ 23 (0x0432/0x0435/0x0436) tamamen N/A → hic eklenmedi. Severity Zeus is kurali ile atanir (orn. ark/kisa-devre/MOS/cell/N-line = critical, cogu koruma high, uyari/surum tutarsizligi = medium).

System Status / Alarm Information (Section 6.2)

SOFAR V1.39 Section 6.2 ("System status / alarm information") register'lari (0x0477-0x047F) cihazin normal isletme durumlari ile gercek arizalari KARISIK tutar (orn. gece calisma, isitma, yuk azaltma, remote control normal durumlardir). Dashboard her cozulen olayi bir ariza-badge'i olarak gosterdigi icin, dashboard'in kirlenmemesi adina yalnizca 15 ariza/shutdown olayi decode edilir (Issue #574 PR-7); normal isletme bit'leri decode EDILMEZ.

RegisterAdresDecode edilen bitalarm_typeAciklama
status_20x0478bit8-12 (STATUS_25-29)inverter_fault_system (dashboard-only)Zorunlu/uzaktan/DRMs0 kapatma, geri besleme iletisim koruma kapatmasi, acil durdurma
status_30x0479bit3,4,5,11 (STATUS_36,37,38,44)inverter_fault_system (dashboard-only)EMS kapatma, AC-bara on sarj hatasi, BMS arizasi, PV sayac iletisimi kesildi
status_40x047Abit0-3 (STATUS_49-52)inverter_fault_hardwareBoost tup 1-4 arizasi (IGBT donanim; tum bit'ler critical)
status_70x047Dbit0,10 (STATUS_97,107)inverter_fault_systemIzolasyon (ISO) uyarisi, Fan 1 alarmi

ID namespace ayrimi: System Status olaylari STATUS_<n> id'siyle gosterilir (orn. STATUS_25); fault register'larinin ID<n> id'siyle (orn. ID25) CAKISMAZ. i18n etiketleri de AYRI namespace'tedir: System Status icin sofar.status.<n>, fault register'lari icin sofar.fault.<id>. Boylece ayni n degeri (orn. 25) iki farkli olayi temsil edebilir (status "Zorunlu kapatma" vs fault "DCI ornekleme hatasi").

Yeni alarm_type YOK: System Status olaylari mevcut inverter_fault_system ve inverter_fault_hardware kategorilerini yeniden kullanir; alarm dropdown'una yeni bir kategori eklenmez. status_4 (Boost tube/IGBT) → hardware, status_7 (ISO + Fan) → system alarm kategorisine baglidir. status_2/status_3 ariza-olaylari dashboard'da gorunur (badge) ancak alarm/bildirim kategorisinde degildir (raw register'da normal isletme bit'leri bulunabilecegi icin register-seviyesi alarm tetiklenmez — dashboard decode'u curated bit-filtre ile calisir).

Decode EDILMEYEN register'lar: status_1/status_5/status_6/status_8/ status_9 hic decode edilmez (status_1/status_6 normal isletme; status_5/status_8/status_9 tamamen N/A). status_2 bit0-3 (normal isletme), status_3 bit1-2/bit7-10 (grid-status + isitma normal) ve tum N/A bit'ler false-positive engeli icin decode dis birakilir.

DCDC Battery Converter Fault (Section 6.3)

SOFAR V1.39 Section 6.3 ("DCDC Battery Converter Fault") register'lari (0x5065-0x506E) DCDC batarya donusturucu alt-sisteminin hatalarini tasir. DCDC = batarya alt-sistemi; bu nedenle yalnizca HYD serisi hibrit invertorlerde bulunur (KTLX string invertorde batarya/DCDC YOKTUR). Toplam 56 aktif fault (16+16+13+4+7) decode edilir; tum entry'ler yeni inverter_fault_dcdc kategorisine baglidir (Issue #571 FAZ 3). DCDC donusturucu hatalari batarya/yangin riski tasidigi icin alarm_type severity'si critical'tir (constants.py).

RegisterAdresFault ID Araligialarm_typeAciklama (V1.39 Section 6.3)
dcdc_fault_10x5065DCDC_1-16inverter_fault_dcdcLV/HV gerilim/akim (SW+HW), fly-span dengesizlik, ARM cip, IGBT surucu, izolasyon, topraklama, role (16/16 aktif)
dcdc_fault_20x5066DCDC_17-32inverter_fault_dcdcARM/PCS/PCU1-3/BMS1-3/DC1-6 iletisim, modul asiri sicaklik, sifir kaymasi (16/16 aktif)
dcdc_fault_30x5067DCDC_33-46inverter_fault_dcdcHV sigorta, LV wake-up, ortam sicaklik, fly-span kapasitor HW, role kisa/acik devre, HV-LV uyumsuzluk, on sarj (13 aktif; bit10 = DCDC_43, bit14,15 = DCDC_47,48 N/A)
dcdc_fault_90x506DDCDC_129-132inverter_fault_dcdcYazilim surum tutarsizligi, SCI, CAN1 (dahili ag), CAN2 (batarya) iletisim (4 aktif; bit4-15 N/A)
dcdc_fault_100x506EDCDC_145-151inverter_fault_dcdcDCDC/PCU/BMS sayim hatasi, Fan 1-3 alarm (ic/dis), MAC adresi cakismasi (7 aktif; bit7-15 N/A)

N/A register'lar: dcdc_fault_4/5/6/7/8 (0x5068-0x506C) V1.39 Section 6.3'te tamamen N/A'dir (cihaz set etmez) — hic eklenmemistir (false-positive engeli). Toplam 10 register araliginda yalnizca 5'i decode edilir.

ID namespace ayrimi: DCDC olaylari DCDC_<n> id'siyle gosterilir (orn. DCDC_12); fault register'larinin ID<n> ve System Status'in STATUS_<n> id'leriyle CAKISMAZ. i18n etiketleri de AYRI namespace'tedir: DCDC icin sofar.dcdc.<n>, fault register'lari icin sofar.fault.<id>, System Status icin sofar.status.<n>.

Yeni alarm_type = inverter_fault_dcdc: constants.py + engine.py (faultCategoryMapping["dcdc"] = 5 register) + service.py SEVERITY_MAP (critical) 3-dosya lockstep ile tanimlandi. Alarm dropdown'unda "İnvertör DC-DC Donusturucu Arizasi" / "Inverter DC-DC Converter Fault" olarak gorunur (event-driven; cihaz bit-field emit eder, kullanici esik/zaman vermez). Severity: gerilim/akim/IGBT/ izolasyon/topraklama/role/sigorta/modul-sicaklik = critical; iletisim/wake-up/ precharge/sayim/surum = high; ic/dis fan alarmlari = medium.

PCU + BDU Fault (Section 6.4 + 6.5 + 5.9.1)

SOFAR V1.39 Section 6.4 (PCU Alarm) + 6.5 (PCU Fault) + 5.9.1 (BDU Fault) register'lari batarya moduler alt-sistemini kapsar: PCU = Power Conversion Unit (guc donusum unitesi), BDU = Battery Distribution Unit (batarya dagitim unitesi). Her ikisi de batarya alt-sistemine ait oldugu icin yalnizca HYD serisi hibrit invertorlerde bulunur (KTLX string invertorde PCU/BDU YOKTUR). Toplam 66 aktif fault (PCU 64 + BDU 2) decode edilir; iki yeni alarm_type: inverter_fault_pcu (5 register) + inverter_fault_bdu (1 register) (Issue #572 + #573 + #575 FAZ 3). Batarya guc donusum / ters kutuplama / yangin riski tasidigi icin her iki alarm_type severity'si critical'tir (constants.py).

RegisterAdresFault ID Araligialarm_typeAciklama (V1.39)
pcu_alarm_10x6024PCU_801-815inverter_fault_pcuSarj/desarj soft-start, Fan 1-4, PCU surum, radyator/ortam over-temp alarm, sarj/desarj yasak, batarya dengesizlik (13 aktif; bit0/11/12 = PCU_800/811/812 N/A)
pcu_alarm_20x6025PCU_816-819inverter_fault_pcuBara/batarya asiri/dusuk gerilim alarmi (4 aktif; bit4-15 N/A)
pcu_fault_10x6028PCU_864-879inverter_fault_pcuRadyator/ortam over-temp koruma, SCI/CAN1/CAN2 iletisim, role 1/3, bara/batarya SW gerilim/akim, fly-span kapasitor OV, HW asiri akim (16/16 aktif)
pcu_fault_20x6029PCU_880-895inverter_fault_pcuKalici bara/batarya/akim korumalari, fly-span kapasitor OV/UV, role 1/2 kalici ariza, kisa devre, batarya aktivasyon, BUS ters baglanti (15 aktif; bit12 = PCU_892 N/A)
pcu_fault_30x602APCU_896-911inverter_fault_pcuBatarya/PWM/BMS durum, BMS OV+OC, ortalama akim/yuk, bara SW akim, CBC, pack id, baslangic kisa devre, cip clock, inverter CAN, radyator/ortam dusuk sicaklik, ornekleme bias (16/16 aktif)
bdu_fault_10x609FBDU_928-929inverter_fault_bduTers batarya baglantisi (yanlis kutuplama), devre arizasi (2 aktif; bit2-15 reserve N/A)

N/A register'lar: pcu_alarm_3/pcu_alarm_4 (0x6026/27) + pcu_fault_4 (0x602B) V1.39'da tamamen N/A'dir (cihaz set etmez) — hic eklenmemistir (false-positive engeli).

ID namespace ayrimi: PCU olaylari PCU_<n> (800-911), BDU olaylari BDU_<n> (928-929) id'siyle gosterilir; fault register'larinin ID<n>, System Status'in STATUS_<n> ve DCDC'nin DCDC_<n> id'leriyle CAKISMAZ. i18n etiketleri de AYRI namespace'tedir: PCU icin sofar.pcu.<n>, BDU icin sofar.bdu.<n>.

Yeni alarm_type = inverter_fault_pcu + inverter_fault_bdu: constants.py

  • engine.py (faultCategoryMapping["pcu"] = 5 register, ["bdu"] = 1 register)
  • service.py SEVERITY_MAP (her ikisi critical) 3-dosya lockstep ile tanimlandi. Alarm dropdown'unda "İnvertör PCU (Guc Donusum Unitesi) Arizasi" / "Inverter PCU (Power Conversion Unit) Fault" ve "İnvertör BDU (Batarya Dagitim Unitesi) Arizasi" / "Inverter BDU (Battery Distribution Unit) Fault" olarak gorunur (event-driven; cihaz bit-field emit eder, kullanici esik/zaman vermez). Tum PCU+BDU bit'leri critical (batarya guc donusum / ters kutuplama / yangin riski).

BMS Pack-level Alarm/Protection/Fault (Generic Bitmap — #576)

SOFAR V1.39 Section 5.10.2/3/4 BMS pack-level (paket seviyesi) alarm/koruma/ariza register'larini kapsar. Bunlar da batarya alt-sistemine ait oldugu icin yalnizca HYD serisi hibrit invertorlerde bulunur (KTLX string invertorde YOKTUR). Tek yeni alarm_type: inverter_fault_bms_pack (Issue #576 FAZ 3). BMS = batarya yonetim sistemi oldugu icin severity critical'tir (constants.py).

⚠️ GENERIC BITMAP — per-bit decode YOK: PCU/BDU/DCDC ve diger fault domain'lerinin aksine, PDF V1.39 bu BMS pack register'larinin bit anlamlarini TANIMLAMAZ (vendor-specific). Bu yuzden backend her bir biti tek tek decode ETMEZ: decoded_faults bos kalir, yalnizca raw set_bits (set edilmis bit indeksleri) raporlanir. Alarm mantigi fire-on-non-zero'dur: 9 register'dan herhangi biri sifir-disi olursa tek bir generic inverter_fault_bms_pack alarmi acilir.

i18n / fault-map sonucu: Per-bit etiket olmadigi icin frontend tarafinda sofarFaultMap icine hicbir bit entry'si EKLENMEZ ve sofar.bmsPack.* namespace'i OLUSTURULMAZ (PCU/BDU'daki sofar.pcu.* / sofar.bdu.* deseninin aksine). Frontend yalnizca alarm dropdown'unda tek bir kategori etiketi gosterir: "İnvertör BMS Paket Arizasi" / "Inverter BMS Pack Fault" (event-driven; cihaz emit eder, kullanici esik/zaman vermez).

3-dosya lockstep: constants.py (ALARM_TYPES) + engine.py (faultCategoryMapping["bms_pack"] = 9 register, any_bit_set) + service.py SEVERITY_MAP (critical).

Port Temperature Detection Fault (#570)

SOFAR V1.39 Section 6.6 port sicaklik tespit ariza register'larini kapsar. PCU/BDU/DCDC/BMS'in aksine port sicaklik tespiti batarya alt-sistemine ait DEGILDIR — R/S/T faz sicaklik sensorleri, NTC sensorleri ve PV giris/cikis port sicaklik sensorleri GENEL inverter ozelligidir. Bu nedenle inverter_fault_port_temp kategorisi HER IKI template'te bulunur (SOFAR-HYD-3-6K hibrit ve SOFAR-KTLX-G3 string inverter). Yeni alarm_type: inverter_fault_port_temp (Issue #570 FAZ 3), severity high (sicaklik arizasi = ekipman riski; anlik yangin/insan riski seviyesinde DEGIL — dcdc/pcu/bdu critical'tan farkli).

Bu template sinifi 2-string (PV1-2) oldugu icin yalnizca Fault1 + Fault2 (0x4A41-0x4A42) decode edilir; toplam 22 fault:

RegisterAdresID AraligiAlarm TipiAciklama
port_temp_10x4A41PORTTEMP_1-11inverter_fault_port_tempR/S/T faz sicaklik arizasi (bit0-2, high) + R/S/T NTC arizasi (bit8-10, medium); 6 aktif (bit3-7 = PORTTEMP_4-8, bit11-15 = PORTTEMP_12-16 N/A)
port_temp_20x4A42PORTTEMP_17-32inverter_fault_port_tempPV1_1..PV2_4 giris/cikis port sicaklik arizasi (her PV string 4 port x giris/cikis = 8 port x 2 = 16; 16/16 aktif, hepsi high)

N/A bit kapsama disi: port_temp_1'de yalnizca 6 gercek bit vardir; N/A bitler EKLENMEZ (cihaz set etmez; false-positive riski). port_temp_3/4/5 (0x4A43-0x4A45) PV3-8 portlaridir — bu daha buyuk modellerin AYRI template isidir (2-string sinifi disi) -> decode edilmez. port_temp_6-16 (0x4A46-0x4A50) tamamen N/A -> EKLENMEZ.

id namespace: Status (Section 6.2) "Alarm ID" 1-144 fault "ID<n>" ile cakistigi gibi, port-temp audit global ID'leri de fault id ile cakisir. Bu yuzden port-temp entry id'leri DISTINCT PORTTEMP_<n> prefix'i tasir (ID<n> / STATUS_<n> / DCDC_<n> / PCU_<n> / BDU_<n> ile cakismaz). Frontend i18n namespace sofar.porttemp.<n>.

Frontend gorunum: Decoded port-temp fault'lari cihaz dashboard'unda fault rozeti olarak gosterilir; alarm dropdown'unda "İnvertör Port Sicaklik Arizasi" / "Inverter Port Temperature Fault" tek kategori olarak secilebilir (event-driven; cihaz bit-field emit eder, kullanici esik/zaman vermez).

3-dosya lockstep: constants.py (ALARM_TYPES) + engine.py (faultCategoryMapping["port_temp"] = [port_temp_1, port_temp_2], any_bit_set, HER IKI template) + service.py SEVERITY_MAP (high).

Polling / aktivasyon: Her iki SOFAR template'ine yeni port_temp polling grubu eklendi (0x4A41-0x4A42); mevcut gruplar DOKUNULMADI -> canli telemetriye sifir regresyon. Yuksek adres oldugu icin cihaz destegi aktivasyonda dogrulanir (canli rawconfig republish). Cihazda port-temp sensoru yoksa Fault2 gelmeyebilir.

Module State (Enum) Fault (#577)

Onceki tum fault kategorilerinden (fault_code_*, dcdc_fault_*, pcu_*, bdu_*, bms_*, port_temp_*) farkli olarak Module State arizalari bir ENUM domain'idir — BITMAP/bit-field DEGIL. Ilgili register tek bir durum enum'u tasir; deger bir "ariza-durumu" enum'una (orn. recoverable / permanent) girince alarm acilir. Bu nedenle per-bit decode YOKTUR: decoded_faults bos kalir, payload yalnizca trigger_field + trigger_value tasir. Frontend tarafinda bu kategorilerin sofarFaultMap entry'si YOKTUR ve sofar.* fault namespace'i OLUSTURULMAZ — sadece alarm dropdown'u + alarmType.* i18n etiketi eklenir.

Engine operatoru enum_fault EDGE-TRIGGERED'dir: register'in mevcut degeri fault_values listesinde VE bir onceki olcumde DEGIL ise tetiklenir (durum-gecis; ayni fault-state'te bekleyen cihaz tekrar tekrar tetiklemez). fault_values listesi template metadata'sindan cozulur (alarmMetadata.moduleStateMapping[category].fault_values); boylece HYD ve KTLX template'leri ayni alarm_type'i farkli enum esikleriyle kullanabilir.

alarm_typeRegister (field)CategoryKapsamSeverity
inverter_module_stateinverter_statusinverter_stateHER IKI template (inverter_status zaten polluyor)high
dcdc_module_statedsp_work_statedcdc_stateHYD-ONLYhigh
pcu_module_statepcu_module_statepcu_stateHYD-ONLYhigh
bms_module_statebms_current_state_1bms_stateHYD-ONLYhigh

inverter_status_fault ile ORTUSME yok: inverter_status_fault = ("inverter_status", "changed_to", 3) yalniz deger 3'e geciste tetiklenir; inverter_module_state = enum_fault ile fault_values (orn. recoverable/ permanent durumlar) girisinde tetiklenir. Ayri alarm_type + ayri esik → birlikte yasarlar (cakismaz).

HYD-ONLY graceful inert: dcdc/pcu/bms_state kategorileri yalniz HYD template metadata'sinda tanimlidir. KTLX'te (string inverter, batarya yok) bu category moduleStateMapping'te bulunmadigi icin _check_enum_fault graceful False doner — false-positive YOK. KTLX'te yalniz inverter_module_state aktiftir.

3-dosya lockstep: constants.py (ALARM_TYPES — 4 yeni *_module_state) + engine.py (ALARM_TYPE_FIELD_MAP — enum_fault operatoru) + service.py SEVERITY_MAP (4 x high). Frontend: alarm dropdown'unda "İnvertör/DCDC/PCU/BMS Modul Durum Arizasi" / "Inverter/DC-DC/PCU/BMS Module State Fault" olarak event-driven secilebilir (cihaz enum emit eder; kullanici esik/zaman vermez). Bilincli olarak sofarFaultMap + sofar.* namespace EKLENMEZ (per-bit decode olmadigi icin gosterilecek bit-listesi yok).

Grid Protection Erken Uyari Sistemi

Sofar invertorlerin grid koruma parametreleri izlenerek erken uyari alarmlari olusturulabilir:

ParametreNormal AralikUyari EsigiAciklama
Grid Voltaj220V +/- %10198V veya 242VVoltaj sinir degerlerine yaklasiyorsa uyari
Grid Frekans50Hz +/- 0.5Hz49.6Hz veya 50.4HzFrekans sinir degerlerine yaklasiyorsa uyari
Izolasyon Direnci> 500k ohm< 100k ohmIzolasyon direnci duserse PV sistem toprak arizasi riski
DC/AC Oranı< 1.3> 1.25Asiri clipping olabilir, panel dizilimi kontrolu gerekir

Bu uyarilar backend alarm sisteminde tanimlanir ve ilgili esikler gecildiginde bildirim gonderilir.

Marka/Model Tespiti

Sofar invertorlerinin dedicated bir marka/model register'i yoktur. Cihaz tespiti, seri numarasindan cikarilir:

  • Seri numarasi belirli register araliginda saklanir
  • Seri numarasinin ilk karakterleri model ailesini belirtir
  • Template eslestirme backend tarafinda seri numarasi parse edilerek yapilir
  • Gateway ilk baglantiginda seri numarasini okur ve backend'e bildirir, uygun template otomatik atanir

Ornek: SP2ES... ile baslayan seri numarasi, HYD serisine ait 10kW modelini isaret eder.

Bilinen Tuzaklar

Peak-Shaving Modu

Sofar HYD serisinde peak-shaving (tepe tirpanlama) modu, Modbus register'inda time-sharing mode olarak kodlanmistir ve degeri 2'dir.

Mode Register Degerleri:
0 = Self-use (oz tuketim)
1 = Time-of-use (zaman tarifeli)
2 = Peak-shaving (tepe tirpanlama) ← Dokumanasyonda "time-sharing" olarak gecer

Bu isimlendirme karmasikligi, Sofar'in Cince dokumantasyonunun Ingilizce cevirisinden kaynaklanir. Template ve backend kodunda mode=2 icin peak_shaving etiketi kullanilmalidir.

Register Byte Order

Sofar invertorleri Big Endian (Modbus standardi) byte order kullanir. 32-bit degerler icin register sirasi: [High Word][Low Word].

Batarya Iletisimi

HYD serisinde batarya BMS ile iletisim, invertorün kendi dahili bus'i uzerinden yapilir. Modbus uzerinden sadece invertorun raporladigi batarya degerleri (SoC, voltaj, akim) okunabilir — dogrudan BMS'e Modbus ile erisilemez.


Power Register Kolonlaştırma (Issue #237)

Daha önce Sofar power verileri (PV1/PV2 voltage/current/power, battery voltage/current/SoC/SoH) device_measurements.extra_metadata JSONB kolonu içinde saklanıyordu. Bu yapı sorgu performansını ve continuous aggregate üretimini olumsuz etkiliyordu.

Migration Dizisi

Migrationİşlem
0031device_measurements'a Sofar power kolonları eklendi (nullable)
0032extra_metadata JSONB içinden mevcut veri yeni kolonlara backfill edildi
0033TimescaleDB continuous aggregate'leri yeni kolonları içerecek şekilde genişletildi
0034extra_metadata içinden Sofar power alanları temizlendi (cleanup)

Bu expand → backfill → contract pattern'i 4 ayrı release'e bölünerek uygulandı; her adım production'da doğrulandıktan sonra bir sonraki adıma geçildi.

Yeni Kolonlar

KategoriAlanlar
PV1sofar_pv1_voltage, sofar_pv1_current, sofar_pv1_power
PV2sofar_pv2_voltage, sofar_pv2_current, sofar_pv2_power
Bataryasofar_bat_voltage, sofar_bat_current, sofar_bat_soc, sofar_bat_soh

Dashboard Refactor

Frontend InverterDashboard bileşeni JSONB path query'leri (extra_metadata->>'pv1_power') yerine doğrudan kolon erişimi kullanır. PV/battery/grid SoC chart ayrı bir component'e refactor edildi.


Fault Code Bit-level Decode

Sofar inverter'lar 24 ayrı fault register kullanır (fault_code_1..fault_code_15 0x0405-0x0413; fault_code_20/21/24..30 0x0433-0x043D). Her register 16-bit. Tüm fault tanımları SOFAR Inverter Protocol V1.39 Section 6.1 ile birebir hizalıdır: bit pozisyonları V1.39 global ID şemasına (ID1-ID480, sıfır dolgusuz) karşılık gelir. fault_code_1..fault_code_5 (0x0405-0x0409) global ID1-ID76 aralığını (74 aktif flag); fault_code_6..fault_code_10 (0x040A-0x040E) global ID81-ID160 aralığını (76 aktif flag — asırı akım/donanım/sistem/iletişim); fault_code_11 (0x040F) global ID161-ID176 kapatma/fan/ısıtma filmi hatalarını taşır (Issue #563 saha kanıtı: "Fan 4 Failure" SOFAR app'te görünüyordu ama bu register decode edilmediği için Zeus'ta görünmüyordu); fault_code_12 (0x0410) global ID177-ID192 BMS korumalarını (16 aktif flag, Issue #567); fault_code_13..fault_code_15 (0x0411-0x0413) global ID193-ID240 PV string/giriş sigorta açık devre hatalarını (48 aktif flag, Issue #568); fault_code_20/21/24..30 (0x0433-0x043D) global ID305-ID478 sıcaklık/sistem/donanım/ark/iletişim/şebeke/batarya hatalarını (97 aktif flag, Issue #569 PR-6 — yeni inverter_fault_arc kategorisi dahil) taşır. fault_code_16/17/18 (0x0414-0x0416) ve fault_code_19/22/23 (0x0432/0x0435/0x0436) V1.39'da tamamen N/A olduğu için hiç eklenmemiştir.

V1.39 yeniden yazımı (Issue #565 PR-2): fault_code_1..fault_code_5 önceki dönemde eski/yanlış bir Sofar HYD fault şemasından (ID01-ID60, yerel) alınmıştı. Audit (/tmp/sofar_v139_bitmap_audit.md §1) ile 36 yanlış-eşleme + 31 eksik bit tespit edilip register bazında V1.39'a göre yeniden yazıldı. Eski yerel ID01-ID60 şeması kaldırıldı; artık tek tip global ID kullanılır (örn. sofar.fault.5 = Kaçak akım hatası).

fc6-10 eklendi (Issue #566 PR-3): fault_code_6..fault_code_10 register'ları önceki decoder'da hiç yoktu (komple eksik feature). V1.39 Section 6.1'den birebir eklendi (fc6=aşırı akım, fc7/fc9=donanım, fc8=sistem, fc10=iletişim). İki yeni alarm_type tanıtıldı: inverter_fault_overcurrent ve inverter_fault_hardware (backend ALARM_TYPES). Frontend fault map (sofarFaultMap.ts) ve i18n (sofar.fault.81-sofar.fault.160) backend ile birebir parity tutar.

fc12-15 eklendi (Issue #567 + #568): fault_code_12..fault_code_15 register'ları önceki decoder'da hiç yoktu (komple eksik feature). V1.39 Section 6.1'den birebir eklendi. fc12 (ID177-192) = BMS korumaları (inverter_fault_battery — PR-2'de orphan kalan kategori artık gerçek BMS içeriğe bağlandı). fc13-15 (ID193-240) = PV string/giriş sigorta açık devre (inverter_fault_string — yeni kategori). Frontend fault map (sofarFaultMap.ts) ve i18n (sofar.fault.177-sofar.fault.240, 64 anahtar) backend ile birebir parity tutar. fault_code_16/17/18 (0x0414-0x0416) tamamen N/A → eklenmedi.

N/A bitler: V1.39'da tanımsız (N/A) bitler decode edilmez (false-positive alarm riskini önlemek için): fault_code_4 bit14/15 (ID63,64), fault_code_5 bit12-15 (ID77-80), fault_code_8 bit6/7/13/14 (ID119,120,126,127), fault_code_11 bit4/5/6 (ID165-167), fault_code_20 bit6/7/11-15, fault_code_21 bit15, fault_code_24 bit0-7, fault_code_25 bit2-15, fault_code_28 bit2-7/12-15, fault_code_29 bit15, fault_code_30 bit4-7/14/15. fc1-5 toplam 74, fc6-10 toplam 76, fc11 toplam 13, fc12 toplam 16, fc13-15 toplam 48, fc20-30 toplam 97 aktif fault flag tanımlıdır (genel toplam 324). fault_code_16/17/18 ve fault_code_19/22/23 register'ları tamamen N/A olduğu için hiç eklenmemiştir.

Fault Map Yapısı

frontend/src/components/device-dashboards/sofar/sofarFaultMap.ts — UI tarafı bit pozisyonu ↔ insan tarafından okunabilir mesaj eşlemesi. Backend (backend/app/features/alarms/sofar_fault_map.py) ile bit/id/name/severity/alarmType birebir parity tutulur:

// SOFAR_FAULT_MAP['fault_code_1'][0]
{
bit: 0,
id: 'ID1', // V1.39 global ID (eski yerel 'ID01' değil)
name: 'GridOVP', // register sembol adı (backend ile aynı)
description: { // i18n etiketi (UI'da çevrilir)
key: 'sofar.fault.1', // konvansiyon: sofar.fault.<global_id>
defaultValue: 'Şebeke aşırı gerilim',
},
severity: 'critical', // critical | high | medium | low
alarmType: 'inverter_fault_grid',
}

i18n key konvansiyonu: sofar.fault.<global_id> (örn. ID5sofar.fault.5, ID172sofar.fault.172, ID240sofar.fault.240). Tanımlı aralık sofar.fault.1-sofar.fault.240 (N/A bit'ler atlanır; ardışık değildir). Tüm anahtarlar frontend/{src,public}/locales/{tr,en}/common.json dört dosyada da (TR birincil + EN) tutulur; locale-parity.test.ts sentinel'i TR≡EN ve src≡public bütünlüğünü doğrular.

Severity sınıfları (FaultSeverity tipi):

SeverityAnlamÖrnek
lowBilgilendirici, müdahale gerekmezDüşük öncelikli uyarı
mediumİzlenmeliPID anormal çıkış, modül sıcaklık farkı
highMüdahale gerekliİzolasyon/topraklama hatası, fan arızası
criticalAcil müdahaleŞebeke aşırı/düşük gerilim, kaçak akım, batarya aşırı gerilim

InverterStatusCard Dialog

UI'da fault ID'ye tıklandığında dialog açılır:

  • Register adresi (fault_code_3)
  • Bit pozisyonu (bit 7)
  • Raw değer (0x0080)
  • Severity badge (renk kodlu)
  • Açıklama (kullanıcı dilinde)

Backend Karşılığı

backend/app/features/alarms/sofar_fault_map.py — backend tarafında alarm değerlendirmesi için kullanılır. Sofar template prefix entegrasyonu Faz 1 ve Faz 2'de tamamlandı. UI ile aynı bit haritasını paylaşır (tek kaynak: JSON template).


BMS Identity Polling (Issue #212)

DeviceBmsIdentity Modeli

Sofar HYD 13 inverter, batarya pack ve cell sayısı, üretici ve kapasite bilgilerini Modbus register grup 5.10.1-5.10.6'da yayınlar.

AlanAçıklama
BMS Pack countBağlı batarya pack sayısı
Cell countToplam hücre sayısı
ManufacturerBatarya üretici kodu
Capacity (Ah)Nominal kapasite
Manufacture dateÜretim tarihi
Last polled atSon okuma zamanı

Polling Akışı

  • Daily auto-check: 04:00 UTC (Celery beat task bms_identity.daily_check)
  • Manuel trigger: Backend → MQTT cmd/read_group → ESP32 → Modbus okuma → MQTT response → backend update
  • Audit log: Değişiklik tespit edilirse device_bms_audit_log append-only

Detay için bkz. Celery Görevleri.


TLS Heap Corruption Fixes (Issue #215)

ESP32 firmware tarafında Sofar inverter ile uzun süreli iletişim sırasında düşük olasılıkla heap corruption gözlemlendi. Üç ayrı düzeltme uygulandı:

1. mbedtls_ssl_free() Bypass

mbedtls_ssl_free() çağrısı Core 1'de race condition'a sebep oluyordu (TLS context paylaşımı). Çözüm: free işlemi atlandı, context object pool'da yeniden kullanılır. Heap fragmentation Core 1 task döngüsüyle dengelenir.

2. UseInternalTask::NO Konfigürasyonu

ArduinoMQTTClient default olarak internal task spawn eder. Sofar inverter'in kararsız Modbus yanıtları sırasında bu task ile çakışma LoadProhibited exception veriyordu. Çözüm: UseInternalTask::NO ile MQTT loop ana task'a alındı.

3. Shared TLS Client Cleanup

HTTPS sertifika rotasyonu sırasında shared TLS client referansları temizlenmiyordu. Çözüm: rotasyon sonrası weak_ptr::expired() kontrolü ile dangling pointer engellendi.


interval=0 Poll-Once Semantik (Issue #208)

Block group config'inde intervalMs=0 özel anlam taşır: bir kez oku, sonra atla. Bu, kalibrasyon register'ları (CT ratio, BMS identity) ve nadiren değişen yapılandırma değerleri için kullanılır.

Kullanım

{
"groupId": "bms_identity",
"intervalMs": 0,
"blocks": [...]
}

Davranış

  • İlk polling döngüsünde okunur
  • Sonraki döngülerde atlanır (poll list'te tutulur ama execute edilmez)
  • Manuel olarak cmd/read_group MQTT komutuyla tetiklenebilir
  • Daily Celery task ile günlük otomatik refresh

Uygulanan Template'ler

  • SOFAR-HYD-3-6Kbms_identity grubu (intervalMs=0)
  • SOFAR-KTLX-G3static_config grubu (intervalMs=0)

Pil Verileri Starvation'ı Önleme

Daha önce bms_identity grubu 24 saatte bir okunduğunda (intervalMs=86400000), realtime polling döngüsünde "wait for next interval" mantığı diğer grupları geciktirebiliyordu. intervalMs=0 ile bu grup polling scheduler'dan tamamen çıkarılır; realtime ve fault_status grupları starve olmaz.