Describe the bug
Verified writes are not actually happening
Expected behaviour
Predbat's log shows a clean, verified write at the scheduled export start:
2026-08-25 16:00:07.877: Inverter 0 set new export start time to 16:00:00
2026-08-25 16:00:09.924: Inverter 0 write_and_poll_value: Wrote 16:00:00 to discharge_start_time, successfully now 16:00:00
2026-08-25 16:00:09.924: Inverter 0 Set new export end time to 20:01:00 was 23:59:00
2026-08-25 16:00:11.971: Inverter 0 write_and_poll_value: Wrote 20:01:00 to discharge_end_time, successfully now 20:01:00
But checking time.growatt_battery_grid_first_time_period_9_start directly in Developer Tools → States (bypassing any dashboard caching) shows it still reads 00:00:00, not 16:00:00.
More tellingly, the underlying Growatt Modbus integration's own debug log has zero entries whatsoever for the corresponding registers (1086/1087, confirmed via prior register scan) anywhere in the log around this time — no write attempt logged, successful or failed, by the integration itself. For comparison, a separate write in the same run (idle_start_time → 20:01:00) is correctly reflected in its entity and presumably would show up in the integration's own logs too.
This suggests write_and_poll_value's "successfully now X" confirmation may not be doing a genuine fresh read of the entity — it's reporting success for a write that, as far as the target integration is concerned, never happened at all, rather than catching the discrepancy.
Separately (and I believe unrelated) — the same log window shows the underlying integration repeatedly rejecting direct writes to the Enable select entities (time_period_1_enable, time_period_3_enable, registers 1102/1108) with Illegal Function exceptions — but Predbat's apps.yaml config for this inverter doesn't reference those entities at all (charge/discharge are represented via zero-duration windows, not an enable toggle), so I don't think this is the cause of the above, just flagging it as background noise from separate manual testing earlier in the day.
Given the real financial/behavioral consequence of a silently-failed control write during a live export window, this felt worth reporting promptly.
Predbat version
8.53.1
xxxx
Environment details
Custom inverter type (GROWATTSPH), local Modbus via the Growatt Modbus TCP integration, discharge_start_time/discharge_end_time mapped to time.growatt_battery_grid_first_time_period_9_start/_end. Predbat v8.53.1, in Control charge & discharge mode. These control the inverter when entities are set manually
Describe the bug
Verified writes are not actually happening
Expected behaviour
Predbat's log shows a clean, verified write at the scheduled export start:
2026-08-25 16:00:07.877: Inverter 0 set new export start time to 16:00:00
2026-08-25 16:00:09.924: Inverter 0 write_and_poll_value: Wrote 16:00:00 to discharge_start_time, successfully now 16:00:00
2026-08-25 16:00:09.924: Inverter 0 Set new export end time to 20:01:00 was 23:59:00
2026-08-25 16:00:11.971: Inverter 0 write_and_poll_value: Wrote 20:01:00 to discharge_end_time, successfully now 20:01:00
But checking time.growatt_battery_grid_first_time_period_9_start directly in Developer Tools → States (bypassing any dashboard caching) shows it still reads 00:00:00, not 16:00:00.
More tellingly, the underlying Growatt Modbus integration's own debug log has zero entries whatsoever for the corresponding registers (1086/1087, confirmed via prior register scan) anywhere in the log around this time — no write attempt logged, successful or failed, by the integration itself. For comparison, a separate write in the same run (idle_start_time → 20:01:00) is correctly reflected in its entity and presumably would show up in the integration's own logs too.
This suggests write_and_poll_value's "successfully now X" confirmation may not be doing a genuine fresh read of the entity — it's reporting success for a write that, as far as the target integration is concerned, never happened at all, rather than catching the discrepancy.
Separately (and I believe unrelated) — the same log window shows the underlying integration repeatedly rejecting direct writes to the Enable select entities (time_period_1_enable, time_period_3_enable, registers 1102/1108) with Illegal Function exceptions — but Predbat's apps.yaml config for this inverter doesn't reference those entities at all (charge/discharge are represented via zero-duration windows, not an enable toggle), so I don't think this is the cause of the above, just flagging it as background noise from separate manual testing earlier in the day.
Given the real financial/behavioral consequence of a silently-failed control write during a live export window, this felt worth reporting promptly.
Predbat version
8.53.1
xxxx
Environment details
Custom inverter type (GROWATTSPH), local Modbus via the Growatt Modbus TCP integration, discharge_start_time/discharge_end_time mapped to time.growatt_battery_grid_first_time_period_9_start/_end. Predbat v8.53.1, in Control charge & discharge mode. These control the inverter when entities are set manually