From 5ab93eb9f0e9d7667b639448d9f7c24a2d031d9a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 22 Oct 2024 06:43:13 -1000 Subject: [PATCH] Add support for reading the co2 value from meter pro --- switchbot/adv_parsers/meter.py | 18 +++++++++++++----- tests/test_adv_parser.py | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/switchbot/adv_parsers/meter.py b/switchbot/adv_parsers/meter.py index b58b059..016fabb 100644 --- a/switchbot/adv_parsers/meter.py +++ b/switchbot/adv_parsers/meter.py @@ -1,13 +1,16 @@ """Meter parser.""" from __future__ import annotations -from typing import Any +import struct +from typing import Any, Optional + +CO2_UNPACK = struct.Struct(">H").unpack_from def process_wosensorth(data: bytes | None, mfr_data: bytes | None) -> dict[str, Any]: """Process woSensorTH/Temp sensor services data.""" - temp_data = None - battery = None + temp_data: bytes | None = None + battery: bytes | None = None if mfr_data: temp_data = mfr_data[8:11] @@ -45,11 +48,13 @@ def process_wosensorth(data: bytes | None, mfr_data: bytes | None) -> dict[str, def process_wosensorth_c(data: bytes | None, mfr_data: bytes | None) -> dict[str, Any]: """Process woSensorTH/Temp sensor services data with CO2.""" - temp_data = None - battery = None + temp_data: bytes | None = None + battery: bytes | None = None + co2_data: bytes | None if mfr_data: temp_data = mfr_data[8:11] + co2_data = mfr_data[13:15] if data: if not temp_data: @@ -79,4 +84,7 @@ def process_wosensorth_c(data: bytes | None, mfr_data: bytes | None) -> dict[str "battery": battery, } + if co2_data: + _wosensorth_data["co2"] = CO2_UNPACK(co2_data)[0] + return _wosensorth_data diff --git a/tests/test_adv_parser.py b/tests/test_adv_parser.py index 7960490..83525d5 100644 --- a/tests/test_adv_parser.py +++ b/tests/test_adv_parser.py @@ -1640,6 +1640,7 @@ def test_meter_pro_c_active() -> None: "humidity": 36, "temp": {"c": 27.7, "f": 81.86}, "temperature": 27.7, + "co2": 725, }, "isEncrypted": False, "model": "5", @@ -1671,6 +1672,7 @@ def test_meter_pro_c_passive() -> None: "humidity": 36, "temp": {"c": 27.7, "f": 81.86}, "temperature": 27.7, + "co2": 725, }, "isEncrypted": False, "model": "5",