diff --git a/homeassistant/components/sensibo/manifest.json b/homeassistant/components/sensibo/manifest.json index 5a195a8a4cc..610695aaf7b 100644 --- a/homeassistant/components/sensibo/manifest.json +++ b/homeassistant/components/sensibo/manifest.json @@ -15,5 +15,5 @@ "iot_class": "cloud_polling", "loggers": ["pysensibo"], "quality_scale": "platinum", - "requirements": ["pysensibo==1.0.36"] + "requirements": ["pysensibo==1.1.0"] } diff --git a/homeassistant/components/sensibo/sensor.py b/homeassistant/components/sensibo/sensor.py index 16adfd5afe3..a6a70ea6c49 100644 --- a/homeassistant/components/sensibo/sensor.py +++ b/homeassistant/components/sensibo/sensor.py @@ -7,7 +7,7 @@ from dataclasses import dataclass from datetime import datetime from typing import TYPE_CHECKING, Any -from pysensibo.model import MotionSensor, SensiboDevice +from pysensibo.model import MotionSensor, PureAQI, SensiboDevice from homeassistant.components.sensor import ( SensorDeviceClass, @@ -97,11 +97,11 @@ MOTION_SENSOR_TYPES: tuple[SensiboMotionSensorEntityDescription, ...] = ( PURE_SENSOR_TYPES: tuple[SensiboDeviceSensorEntityDescription, ...] = ( SensiboDeviceSensorEntityDescription( key="pm25", - device_class=SensorDeviceClass.PM25, - native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - state_class=SensorStateClass.MEASUREMENT, - value_fn=lambda data: data.pm25, + translation_key="pm25_pure", + device_class=SensorDeviceClass.ENUM, + value_fn=lambda data: data.pm25_pure.name.lower() if data.pm25_pure else None, extra_fn=None, + options=[aqi.name.lower() for aqi in PureAQI], ), SensiboDeviceSensorEntityDescription( key="pure_sensitivity", diff --git a/homeassistant/components/sensibo/strings.json b/homeassistant/components/sensibo/strings.json index d93c2a54adb..60a32028017 100644 --- a/homeassistant/components/sensibo/strings.json +++ b/homeassistant/components/sensibo/strings.json @@ -110,6 +110,14 @@ "s": "Sensitive" } }, + "pm25_pure": { + "name": "Pure AQI", + "state": { + "good": "Good", + "moderate": "Moderate", + "bad": "Bad" + } + }, "timer_time": { "name": "Timer end time" }, diff --git a/requirements_all.txt b/requirements_all.txt index 29cd8401045..e0b7d069b18 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2169,7 +2169,7 @@ pysaj==0.0.16 pyschlage==2024.8.0 # homeassistant.components.sensibo -pysensibo==1.0.36 +pysensibo==1.1.0 # homeassistant.components.serial pyserial-asyncio-fast==0.13 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index f351b43fdb8..137cdf14b86 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1732,7 +1732,7 @@ pysabnzbd==1.1.1 pyschlage==2024.8.0 # homeassistant.components.sensibo -pysensibo==1.0.36 +pysensibo==1.1.0 # homeassistant.components.acer_projector # homeassistant.components.crownstone diff --git a/tests/components/sensibo/snapshots/test_diagnostics.ambr b/tests/components/sensibo/snapshots/test_diagnostics.ambr index a33209f7c88..cc77318239e 100644 --- a/tests/components/sensibo/snapshots/test_diagnostics.ambr +++ b/tests/components/sensibo/snapshots/test_diagnostics.ambr @@ -91,7 +91,8 @@ 'motion_sensors': dict({ }), 'name': 'Kitchen', - 'pm25': 1, + 'pm25': None, + 'pm25_pure': 1, 'pure_ac_integration': False, 'pure_boost_enabled': False, 'pure_conf': dict({ @@ -424,6 +425,7 @@ }), 'name': 'Hallway', 'pm25': None, + 'pm25_pure': None, 'pure_ac_integration': None, 'pure_boost_enabled': None, 'pure_conf': dict({ @@ -550,7 +552,8 @@ 'motion_sensors': dict({ }), 'name': 'Bedroom', - 'pm25': 1, + 'pm25': None, + 'pm25_pure': 1, 'pure_ac_integration': False, 'pure_boost_enabled': False, 'pure_conf': dict({ diff --git a/tests/components/sensibo/snapshots/test_sensor.ambr b/tests/components/sensibo/snapshots/test_sensor.ambr index d645bdbd383..cd8d510b6cc 100644 --- a/tests/components/sensibo/snapshots/test_sensor.ambr +++ b/tests/components/sensibo/snapshots/test_sensor.ambr @@ -1,10 +1,13 @@ # serializer version: 1 # name: test_sensor ReadOnlyDict({ - 'device_class': 'pm25', - 'friendly_name': 'Kitchen PM2.5', - 'state_class': , - 'unit_of_measurement': 'µg/m³', + 'device_class': 'enum', + 'friendly_name': 'Kitchen Pure AQI', + 'options': list([ + 'good', + 'moderate', + 'bad', + ]), }) # --- # name: test_sensor.1 diff --git a/tests/components/sensibo/test_sensor.py b/tests/components/sensibo/test_sensor.py index 3c6fb584a6e..5fc761f178a 100644 --- a/tests/components/sensibo/test_sensor.py +++ b/tests/components/sensibo/test_sensor.py @@ -5,7 +5,7 @@ from __future__ import annotations from datetime import timedelta from unittest.mock import patch -from pysensibo.model import SensiboData +from pysensibo.model import PureAQI, SensiboData import pytest from syrupy.assertion import SnapshotAssertion @@ -27,17 +27,17 @@ async def test_sensor( """Test the Sensibo sensor.""" state1 = hass.states.get("sensor.hallway_motion_sensor_battery_voltage") - state2 = hass.states.get("sensor.kitchen_pm2_5") + state2 = hass.states.get("sensor.kitchen_pure_aqi") state3 = hass.states.get("sensor.kitchen_pure_sensitivity") state4 = hass.states.get("sensor.hallway_climate_react_low_temperature_threshold") assert state1.state == "3000" - assert state2.state == "1" + assert state2.state == "good" assert state3.state == "n" assert state4.state == "0.0" assert state2.attributes == snapshot assert state4.attributes == snapshot - monkeypatch.setattr(get_data.parsed["AAZZAAZZ"], "pm25", 2) + monkeypatch.setattr(get_data.parsed["AAZZAAZZ"], "pm25_pure", PureAQI(2)) with patch( "homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data", @@ -49,5 +49,5 @@ async def test_sensor( ) await hass.async_block_till_done() - state1 = hass.states.get("sensor.kitchen_pm2_5") - assert state1.state == "2" + state1 = hass.states.get("sensor.kitchen_pure_aqi") + assert state1.state == "moderate"