fix cutoff
This commit is contained in:
@@ -1651,14 +1651,16 @@ async def write_inverter_setpoints(
|
||||
r179 = await mb179.read_holding_registers(179, 1, unit_id)
|
||||
if r179 and len(r179) >= 1:
|
||||
current_179 = int(r179[0])
|
||||
new_179 = (current_179 & ~REG179_MI_EXPORT_MASK) | int(target_bits)
|
||||
registers.append((179, "control_board_special_1", new_179))
|
||||
# Deye firmware/UI u některých instalací neinterpretuje jen bits0–1 maskou,
|
||||
# ale očekává přímo hodnotu 2/3. Proto zapisujeme "clean" 2/3 (bez RMW),
|
||||
# aby se cutoff skutečně projevil i v UI.
|
||||
registers.append((179, "control_board_special_1", int(target_bits)))
|
||||
logger.info(
|
||||
"[control] %s: reg179 MI cutoff %s (old=%s new=%s mask=0x%04X)",
|
||||
inv.code,
|
||||
"ON" if want_cutoff else "OFF",
|
||||
current_179,
|
||||
new_179,
|
||||
int(target_bits),
|
||||
REG179_MI_EXPORT_MASK,
|
||||
)
|
||||
else:
|
||||
|
||||
@@ -67,7 +67,10 @@ Pro instalace s AC coupling na GEN portu (mikroinvertory) může solver uložit
|
||||
- `true` → exporter nastaví reg **179** bits0–1 na **2** (`10b`, disable = cut-off ON)
|
||||
- `false` → exporter nastaví bits0–1 na **3** (`11b`, enable = cut-off OFF)
|
||||
|
||||
Zápis je **masked read-modify-write** (zachová ostatní bity reg. 179). Ověření v journalu (`verify_modbus_commands`) porovnává jen bits0–1 maskou `0x0003`.
|
||||
Zápis do reg. 179 se v praxi provádí jako **„clean write“** hodnoty **2** nebo **3** (bez read-modify-write),
|
||||
protože některé firmware/UI varianty nevyhodnocují jen bity 0–1 maskou, ale očekávají přímo hodnotu 2/3.
|
||||
Ověření v journalu (`verify_modbus_commands`) přesto porovnává jen bits0–1 maskou `0x0003` (odolnost vůči
|
||||
paralelním změnám jiných bitů / verzím FW).
|
||||
|
||||
**Idempotence:** pokud poslední `verified` hodnota už má správně nastavené bits0–1 (maska `0x0003`), EMS zápis reg. 179 v dalším běhu přeskočí (ostatní bity se ignorují).
|
||||
**Pozn.:** Flag se v solveru vůbec nevytváří ani neukládá tam, kde není povolen feature `asset_inverter.deye_gen_microinverter_cutoff_enabled` – takové lokality ho nemají ani v UI.
|
||||
|
||||
Reference in New Issue
Block a user