Summary
From Home Assistant, the Eco Smart Mode select (eco_mode) cannot be set to Off: choosing "Off" appears to do nothing and the entity bounces back to its previous value ("Solar + Grid" / "Full Green"). The same happens with the "Solar charging" switch. This is not a Home Assistant / integration problem — it reproduces purely at the gateway level.
Environment
- Charger: Wallbox Pulsar MAX Pro, charger app FW 6.11.25
- Gateway FW v3.2.1, control over BLE, entities via MQTT discovery
- Home Assistant with the MQTT-discovered device (also reproduced earlier with the HACS integration)
Root cause (two independent issues)
1. Read-back discards ese — src/wb_ble.cpp
merged["eco_mode"] = d["r"]["esm"] | 0; // publishes only esm, ignores ese
g_ecos returns both ese (master enable) and esm (mode). When Eco-Smart is turned off, the charger firmware leaves esm pegged at its last value (e.g. 2) and only clears ese. Because the gateway publishes eco_mode straight from esm, HA shows a phantom "Solar + Grid" even though the feature is actually disabled.
Field evidence with the feature genuinely off:
g_ecos -> {"ese":0,"esm":2,"esp":100}
r_lse -> {"active_feature":{"feature":0,...}, ...} # nothing is managing the charge
2. Disabling write is self-defeating — src/wb_mqtt.cpp
// "Off" -> mode 0
String p = "{\"esm\":0,\"ese\":0,\"esp\":100}";
The mode change (esm:0) is sent together with ese:0. The charger ignores an esm change that arrives while it is being disabled, so esm never clears — it stays at whatever it was. This is what makes "Off" impossible via the normal path.
Manual workaround (proves the fix)
Driving BAPI directly, a two-step write does clear it:
s_ecos {"ese":1,"esm":0,"esp":100} # flag still ON -> mode change accepted
s_ecos {"ese":0,"esm":0,"esp":100} # drop the flag, mode already 0
# result: g_ecos -> {"ese":0,"esm":0,"esp":100}
Proposed fix
- Read-back:
eco_mode = ese ? esm : 0 so a disabled feature always reports Off, independent of the stuck esm.
- Write: when the target mode is 0, do the two-step (
{esm:0,ese:1} then {esm:0,ese:0}) so esm is actually cleared.
Either change alone stops the visible bounce; together they also leave the charger state clean. PR incoming.
Note: the web Eco-Smart form (src/wb_web.cpp) builds the same one-shot {ese:0,esm:0} payload when saving "Disabled", so it shares issue #2 (its status readout already shows ese separately, so it's less misleading there).
Summary
From Home Assistant, the Eco Smart Mode select (
eco_mode) cannot be set to Off: choosing "Off" appears to do nothing and the entity bounces back to its previous value ("Solar + Grid" / "Full Green"). The same happens with the "Solar charging" switch. This is not a Home Assistant / integration problem — it reproduces purely at the gateway level.Environment
Root cause (two independent issues)
1. Read-back discards
ese—src/wb_ble.cppg_ecosreturns bothese(master enable) andesm(mode). When Eco-Smart is turned off, the charger firmware leavesesmpegged at its last value (e.g.2) and only clearsese. Because the gateway publisheseco_modestraight fromesm, HA shows a phantom "Solar + Grid" even though the feature is actually disabled.Field evidence with the feature genuinely off:
2. Disabling write is self-defeating —
src/wb_mqtt.cppThe mode change (
esm:0) is sent together withese:0. The charger ignores anesmchange that arrives while it is being disabled, soesmnever clears — it stays at whatever it was. This is what makes "Off" impossible via the normal path.Manual workaround (proves the fix)
Driving BAPI directly, a two-step write does clear it:
Proposed fix
eco_mode = ese ? esm : 0so a disabled feature always reports Off, independent of the stuckesm.{esm:0,ese:1}then{esm:0,ese:0}) soesmis actually cleared.Either change alone stops the visible bounce; together they also leave the charger state clean. PR incoming.
Note: the web Eco-Smart form (
src/wb_web.cpp) builds the same one-shot{ese:0,esm:0}payload when saving "Disabled", so it shares issue #2 (its status readout already showseseseparately, so it's less misleading there).