From 1b076c139218db36e8f39be8f6cdc10f89366aa6 Mon Sep 17 00:00:00 2001 From: kamilko Date: Thu, 21 Aug 2025 15:59:31 +0200 Subject: [PATCH 1/2] update airSensor latest firmware Update for airSensor latest api (20210118) and also extend on new values like overall air quality level and measurement trend. --- blebox_uniapi/box_types.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/blebox_uniapi/box_types.py b/blebox_uniapi/box_types.py index 6a1d4d9..8607a1f 100644 --- a/blebox_uniapi/box_types.py +++ b/blebox_uniapi/box_types.py @@ -72,6 +72,29 @@ def get_latest_api_level(product_type: str) -> Union[dict, int]: }, ] ], + }, + 20210118: { + "api_path": "/state", + "sensors": [ + [ + "0.air", + { + "airQualityLevel": "air.airQualityLevel", + "pm1.value": "air.sensors[?type == 'pm1']|[0]|value", + "pm1.state": "air.sensors[?type == 'pm1']|[0]|state", + "pm1.trend": "air.sensors[?type == 'pm1']|[0]|trend", + "pm1.qualityLevel": "air.sensors[?type == 'pm1']|[0]|qualityLevel", + "pm2_5.value": "air.sensors[?type == 'pm2.5']|[0]|value", + "pm2_5.state": "air.sensors[?type == 'pm2.5']|[0]|state", + "pm2_5.trend": "air.sensors[?type == 'pm2.5']|[0]|trend", + "pm2_5.qualityLevel": "air.sensors[?type == 'pm2.5']|[0]|qualityLevel", + "pm10.value": "air.sensors[?type == 'pm10']|[0]|value", + "pm10.state": "air.sensors[?type == 'pm10']|[0]|state", + "pm10.trend": "air.sensors[?type == 'pm10']|[0]|trend", + "pm10.qualityLevel": "air.sensors[?type == 'pm10']|[0]|qualityLevel", + }, + ] + ], } }, # dimmerBox From 2c7a822a5e16ecb06c15768092c89da3b690bf8c Mon Sep 17 00:00:00 2001 From: kamilko Date: Thu, 21 Aug 2025 16:25:20 +0200 Subject: [PATCH 2/2] update test_sensor.py according api 20210118 changes Changes to test unit wit latest api (20210118): - new info endpoint (just /info) - new status endpoint (just /status) - overall airQualityLevel field - fixed typo in api for sensors (from elaspedTimeS to elapsedTimeS) --- tests/test_sensor.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/tests/test_sensor.py b/tests/test_sensor.py index ad53f8c..9b7d32a 100644 --- a/tests/test_sensor.py +++ b/tests/test_sensor.py @@ -279,7 +279,7 @@ async def test_multisensor_update(self, aioclient_mock): class TestAirSensor(DefaultBoxTest): """Tests for sensors representing BleBox airSensor.""" - DEV_INFO_PATH = "api/air/state" + DEV_INFO_PATH = "state" DEVCLASS = "sensors" ENTITY_CLASS = BleBoxSensorEntity @@ -287,12 +287,13 @@ class TestAirSensor(DefaultBoxTest): DEVICE_INFO = json.loads( """ { - "deviceName": "My air 1", + "deviceName": "airSensor", "type": "airSensor", - "fv": "0.973", - "hv": "0.6", - "apiLevel": "20180403", - "id": "1afe34db9437", + "product": "airSensor", + "fv": "0.1007", + "hv": "1.6", + "apiLevel": "20210118", + "id": "0af9e06b71d4", "ip": "192.168.1.11" } """ @@ -327,14 +328,15 @@ def patch_version(apiLevel): """ { "air": { + "airQualityLevel": 6, "sensors": [ { "type": "pm1", "value": 49, "trend": 3, "state": 0, - "qualityLevel": 0, - "elaspedTimeS": -1 + "qualityLevel": -1, + "elapsedTimeS": -1 }, { "type": "pm2.5", @@ -342,7 +344,7 @@ def patch_version(apiLevel): "trend": 1, "state": 0, "qualityLevel": 4, - "elaspedTimeS": -1 + "elapsedTimeS": -1 }, { "type": "pm10", @@ -350,7 +352,7 @@ def patch_version(apiLevel): "trend": 0, "state": 0, "qualityLevel": 6, - "elaspedTimeS": -1 + "elapsedTimeS": -1 } ] } @@ -358,8 +360,8 @@ def patch_version(apiLevel): """ ) - # DEVICE_EXTENDED_INFO - # DEVICE_EXTENDED_INFO_PATH + DEVICE_EXTENDED_INFO = DEVICE_INFO + DEVICE_EXTENDED_INFO_PATH = 'info' async def test_init(self, aioclient_mock): """Test air quality sensor default state."""