1
mirror of https://github.com/home-assistant/core synced 2024-07-15 09:42:11 +02:00

Add alarm sensor to Aurora ABB (#104503)

* Add new sensors

* Add strings

* Fix tests

* Only add alarm sensor, & refactor

* Address review comments

* Address review comments.

* Fix ruff
This commit is contained in:
Dave T 2023-12-02 22:04:37 +00:00 committed by GitHub
parent 7480945465
commit b48ad268b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 5 deletions

View File

@ -76,6 +76,7 @@ class AuroraAbbDataUpdateCoordinator(DataUpdateCoordinator[dict[str, float]]):
power_watts = self.client.measure(3, True)
temperature_c = self.client.measure(21)
energy_wh = self.client.cumulated_energy(5)
[alarm, *_] = self.client.alarms()
except AuroraTimeoutError:
self.available = False
_LOGGER.debug("No response from inverter (could be dark)")
@ -86,6 +87,7 @@ class AuroraAbbDataUpdateCoordinator(DataUpdateCoordinator[dict[str, float]]):
data["instantaneouspower"] = round(power_watts, 1)
data["temp"] = round(temperature_c, 1)
data["totalenergy"] = round(energy_wh / 1000, 2)
data["alarm"] = alarm
self.available = True
finally:

View File

@ -5,6 +5,8 @@ from collections.abc import Mapping
import logging
from typing import Any
from aurorapy.mapping import Mapping as AuroraMapping
from homeassistant.components.sensor import (
SensorDeviceClass,
SensorEntity,
@ -36,8 +38,16 @@ from .const import (
)
_LOGGER = logging.getLogger(__name__)
ALARM_STATES = list(AuroraMapping.ALARM_STATES.values())
SENSOR_TYPES = [
SensorEntityDescription(
key="alarm",
device_class=SensorDeviceClass.ENUM,
options=ALARM_STATES,
entity_category=EntityCategory.DIAGNOSTIC,
translation_key="alarm",
),
SensorEntityDescription(
key="instantaneouspower",
device_class=SensorDeviceClass.POWER,

View File

@ -21,11 +21,14 @@
},
"entity": {
"sensor": {
"alarm": {
"name": "Alarm status"
},
"power_output": {
"name": "Power Output"
"name": "Power output"
},
"total_energy": {
"name": "Total Energy"
"name": "Total energy"
}
}
}

View File

@ -62,6 +62,8 @@ async def test_sensors(hass: HomeAssistant) -> None:
with patch("aurorapy.client.AuroraSerialClient.connect", return_value=None), patch(
"aurorapy.client.AuroraSerialClient.measure",
side_effect=_simulated_returns,
), patch(
"aurorapy.client.AuroraSerialClient.alarms", return_value=["No alarm"]
), patch(
"aurorapy.client.AuroraSerialClient.serial_number",
return_value="9876543",
@ -102,6 +104,8 @@ async def test_sensor_dark(hass: HomeAssistant, freezer: FrozenDateTimeFactory)
# sun is up
with patch("aurorapy.client.AuroraSerialClient.connect", return_value=None), patch(
"aurorapy.client.AuroraSerialClient.measure", side_effect=_simulated_returns
), patch(
"aurorapy.client.AuroraSerialClient.alarms", return_value=["No alarm"]
), patch(
"aurorapy.client.AuroraSerialClient.cumulated_energy",
side_effect=_simulated_returns,
@ -133,7 +137,7 @@ async def test_sensor_dark(hass: HomeAssistant, freezer: FrozenDateTimeFactory)
), patch(
"aurorapy.client.AuroraSerialClient.cumulated_energy",
side_effect=AuroraTimeoutError("No response after 3 tries"),
):
), patch("aurorapy.client.AuroraSerialClient.alarms", return_value=["No alarm"]):
freezer.tick(SCAN_INTERVAL * 2)
async_fire_time_changed(hass)
await hass.async_block_till_done()
@ -145,7 +149,7 @@ async def test_sensor_dark(hass: HomeAssistant, freezer: FrozenDateTimeFactory)
), patch(
"aurorapy.client.AuroraSerialClient.cumulated_energy",
side_effect=_simulated_returns,
):
), patch("aurorapy.client.AuroraSerialClient.alarms", return_value=["No alarm"]):
freezer.tick(SCAN_INTERVAL * 4)
async_fire_time_changed(hass)
await hass.async_block_till_done()
@ -159,7 +163,7 @@ async def test_sensor_dark(hass: HomeAssistant, freezer: FrozenDateTimeFactory)
), patch(
"aurorapy.client.AuroraSerialClient.cumulated_energy",
side_effect=AuroraError("No response after 10 seconds"),
):
), patch("aurorapy.client.AuroraSerialClient.alarms", return_value=["No alarm"]):
freezer.tick(SCAN_INTERVAL * 6)
async_fire_time_changed(hass)
await hass.async_block_till_done()
@ -174,6 +178,8 @@ async def test_sensor_unknown_error(hass: HomeAssistant) -> None:
with patch("aurorapy.client.AuroraSerialClient.connect", return_value=None), patch(
"aurorapy.client.AuroraSerialClient.measure",
side_effect=AuroraError("another error"),
), patch(
"aurorapy.client.AuroraSerialClient.alarms", return_value=["No alarm"]
), patch("serial.Serial.isOpen", return_value=True):
mock_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_entry.entry_id)