meter.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. """Meter parser."""
  2. from __future__ import annotations
  3. import struct
  4. from typing import Any
  5. from ._sensor_th import decode_temp_humidity
  6. CO2_UNPACK = struct.Struct(">H").unpack_from
  7. def process_wosensorth(data: bytes | None, mfr_data: bytes | None) -> dict[str, Any]:
  8. """Process woSensorTH/Temp sensor services data."""
  9. temp_data: bytes | None = None
  10. battery: int | None = None
  11. if mfr_data:
  12. temp_data = mfr_data[8:11]
  13. if data:
  14. if not temp_data:
  15. temp_data = data[3:6]
  16. battery = data[2] & 0b01111111
  17. if not temp_data:
  18. return {}
  19. return decode_temp_humidity(temp_data, battery)
  20. def process_wosensorth_c(data: bytes | None, mfr_data: bytes | None) -> dict[str, Any]:
  21. """Process woSensorTH/Temp sensor services data with CO2."""
  22. _wosensorth_data = process_wosensorth(data, mfr_data)
  23. if _wosensorth_data and mfr_data and len(mfr_data) >= 15:
  24. co2_data = mfr_data[13:15]
  25. _wosensorth_data["co2"] = CO2_UNPACK(co2_data)[0]
  26. return _wosensorth_data