-
-
Notifications
You must be signed in to change notification settings - Fork 54
disturbance_output (C0049 / ID_WEB_ZW2SSTout) reports false fault when ZWE2 is active #532
Description
Description
The binary sensor disturbance_output (mapped to calculations.ID_WEB_ZW2SSTout, register C0049) produces false fault alerts whenever the second additional heat generator (ZWE2) is active, most notably during the weekly thermal disinfection cycle.
Root cause
The Luxtronik register ID_WEB_ZW2SSTout is a shared output for both:
- ZWE2 (Zusatzwärmeerzeuger 2 / Additional heat generator 2) activation
- SST (Sammelstörung / Collective fault signal)
The integration maps this register exclusively as a problem/disturbance indicator (BinarySensorDeviceClass.PROBLEM in binary_sensor_entities_predefined.py:60-64), but the register also goes true during normal ZWE2 operation.
Observed behavior
- Weekly thermal disinfection runs (e.g. 00:00–00:58), ZWE2 heats DHW to 60°C
binary_sensor.luxtronik_*_disturbance_outputgoes ON for the duration- Fault notifications are triggered
- Heat pump journal shows no error, there is no actual fault
sensor.luxtronik_*_error_reasonand itstimestampattribute remain unchanged
Expected behavior
The disturbance_output sensor should only report a problem when there is an actual fault, not when ZWE2 is operating normally.
Suggested fix
The integration should disambiguate by cross-referencing other registers when ZW2SSTout is true. For example:
- If
C0095(ID_WEB_ERROR_Time0, exposed as thetimestampattribute onerror_reason) has not changed → ZWE2 is running, not a fault - If
C0069(ID_WEB_Time_ZWE2_akt, ZWE2 timer) is counting up → ZWE2 is active
Alternatively, consider splitting the register into two entities:
- A
binary_sensorfor ZWE2 state (device_class: running): currently missing, only operation hours are exposed - A computed
binary_sensorfor actual system fault
Workaround
A template binary sensor that cross-references the disturbance output with the error timestamp:
- binary_sensor:
- name: "Heat Pump Fault"
unique_id: heatpump_fault
device_class: problem
state: >
{% set disturbance = is_state('binary_sensor.luxtronik_XXXX_disturbance_output', 'on') %}
{% set disturbance_changed = as_timestamp(states.binary_sensor.luxtronik_XXXX_disturbance_output.last_changed, 0) %}
{% set error_changed = as_timestamp(states.sensor.luxtronik_XXXX_error_reason.last_changed, 0) %}
{{ disturbance and (error_changed >= disturbance_changed) }}