Skip to content

disturbance_output (C0049 / ID_WEB_ZW2SSTout) reports false fault when ZWE2 is active #532

@arclabch

Description

@arclabch

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_output goes ON for the duration
  • Fault notifications are triggered
  • Heat pump journal shows no error, there is no actual fault
  • sensor.luxtronik_*_error_reason and its timestamp attribute 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 the timestamp attribute on error_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_sensor for ZWE2 state (device_class: running): currently missing, only operation hours are exposed
  • A computed binary_sensor for 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) }}

Related issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions