From 26042bdad7433e489a80a2d56f216e472429a008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20L=C3=B6hr?= Date: Thu, 30 Sep 2021 11:56:38 +0200 Subject: [PATCH] Add Fritz!DECT 440 humidity sensor (#54597) Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com> --- homeassistant/components/fritzbox/sensor.py | 10 ++++++++++ tests/components/fritzbox/__init__.py | 1 + tests/components/fritzbox/test_sensor.py | 7 +++++++ tests/components/fritzbox/test_switch.py | 3 +++ 4 files changed, 21 insertions(+) diff --git a/homeassistant/components/fritzbox/sensor.py b/homeassistant/components/fritzbox/sensor.py index 7ff66f193c9..0745ddc8331 100644 --- a/homeassistant/components/fritzbox/sensor.py +++ b/homeassistant/components/fritzbox/sensor.py @@ -17,6 +17,7 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( DEVICE_CLASS_BATTERY, DEVICE_CLASS_ENERGY, + DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_POWER, DEVICE_CLASS_TEMPERATURE, ENERGY_KILO_WATT_HOUR, @@ -58,6 +59,15 @@ SENSOR_TYPES: Final[tuple[FritzSensorEntityDescription, ...]] = ( ), native_value=lambda device: device.temperature, # type: ignore[no-any-return] ), + FritzSensorEntityDescription( + key="humidity", + name="Humidity", + native_unit_of_measurement=PERCENTAGE, + device_class=DEVICE_CLASS_HUMIDITY, + state_class=STATE_CLASS_MEASUREMENT, + suitable=lambda device: device.rel_humidity is not None, + native_value=lambda device: device.rel_humidity, # type: ignore[no-any-return] + ), FritzSensorEntityDescription( key="battery", name="Battery", diff --git a/tests/components/fritzbox/__init__.py b/tests/components/fritzbox/__init__.py index dfa266dc15b..2b9a1a783f9 100644 --- a/tests/components/fritzbox/__init__.py +++ b/tests/components/fritzbox/__init__.py @@ -100,6 +100,7 @@ class FritzDeviceSensorMock(FritzDeviceBaseMock): lock = "fake_locked" present = True temperature = 1.23 + rel_humidity = 42 class FritzDeviceSwitchMock(FritzDeviceBaseMock): diff --git a/tests/components/fritzbox/test_sensor.py b/tests/components/fritzbox/test_sensor.py index 664b6765c03..f7a3ef9ae2a 100644 --- a/tests/components/fritzbox/test_sensor.py +++ b/tests/components/fritzbox/test_sensor.py @@ -49,6 +49,13 @@ async def test_setup(hass: HomeAssistant, fritz: Mock): assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == TEMP_CELSIUS assert state.attributes[ATTR_STATE_CLASS] == STATE_CLASS_MEASUREMENT + state = hass.states.get(f"{ENTITY_ID}_humidity") + assert state + assert state.state == "42" + assert state.attributes[ATTR_FRIENDLY_NAME] == f"{CONF_FAKE_NAME} Humidity" + assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == PERCENTAGE + assert state.attributes[ATTR_STATE_CLASS] == STATE_CLASS_MEASUREMENT + state = hass.states.get(f"{ENTITY_ID}_battery") assert state assert state.state == "23" diff --git a/tests/components/fritzbox/test_switch.py b/tests/components/fritzbox/test_switch.py index b44a4ffc088..fb7221262d3 100644 --- a/tests/components/fritzbox/test_switch.py +++ b/tests/components/fritzbox/test_switch.py @@ -64,6 +64,9 @@ async def test_setup(hass: HomeAssistant, fritz: Mock): assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == TEMP_CELSIUS assert state.attributes[ATTR_STATE_CLASS] == STATE_CLASS_MEASUREMENT + state = hass.states.get(f"{ENTITY_ID}_humidity") + assert state is None + state = hass.states.get(f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_power_consumption") assert state assert state.state == "5.678"