From 5715246d7f412228ef092e2ea42cfdbbcb13530b Mon Sep 17 00:00:00 2001 From: Linus Date: Tue, 21 Mar 2023 14:16:01 +0100 Subject: [PATCH] fix: make sure old fault codes gets cleared make no error mutual exclusive with all other fault codes --- custom_components/ferroamp/sensor.py | 12 ++++++------ tests/test_sensor.py | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/custom_components/ferroamp/sensor.py b/custom_components/ferroamp/sensor.py index b41950e..37d99fc 100644 --- a/custom_components/ferroamp/sensor.py +++ b/custom_components/ferroamp/sensor.py @@ -1125,12 +1125,12 @@ def update_state_from_events(self, events): else: if 0 in self._attr_extra_state_attributes: del self._attr_extra_state_attributes[0] - for i, code in enumerate(self._fault_codes): - v = 1 << i - if x & v == v: - self._attr_extra_state_attributes[i + 1] = code - elif i + 1 in self._attr_extra_state_attributes: - del self._attr_extra_state_attributes[i + 1] + for i, code in enumerate(self._fault_codes): + v = 1 << i + if x & v == v: + self._attr_extra_state_attributes[i + 1] = code + elif i + 1 in self._attr_extra_state_attributes: + del self._attr_extra_state_attributes[i + 1] return True diff --git a/tests/test_sensor.py b/tests/test_sensor.py index 4cfe9ab..fe1c9a6 100644 --- a/tests/test_sensor.py +++ b/tests/test_sensor.py @@ -1397,6 +1397,27 @@ async def test_sso_fault_codes(hass, mqtt_mock): 11: 'POWERLIMITING' } + async_fire_mqtt_message(hass, topic, """{ + "relaystatus": {"val": "0"}, + "temp": {"val": "6.482"}, + "wpv": {"val": "843516404273"}, + "ts": {"val": "2021-03-08T08:22:42UTC"}, + "udc": {"val": "769.872"}, + "faultcode": {"val": "0"}, + "ipv": {"val": "4.826"}, + "upv": {"val": "653.012"}, + "id": {"val": "12345678"} + }""") + await hass.async_block_till_done() + + state = hass.states.get("sensor.ferroamp_sso_12345678_faultcode") + assert state.state == "0" + assert state.attributes == { + 'friendly_name': 'SSO 12345678 Faultcode', + 'icon': 'mdi:traffic-light', + 0: 'No errors' + } + async def test_restore_state(hass, mqtt_mock): mock_restore_cache(