remote.py 980 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """Remote adv parser."""
  2. from __future__ import annotations
  3. import logging
  4. _LOGGER = logging.getLogger(__name__)
  5. def process_woremote(
  6. data: bytes | None, mfr_data: bytes | None
  7. ) -> dict[str, int | None]:
  8. """Process WoRemote adv data."""
  9. if data is None or len(data) < 3:
  10. return {
  11. "battery": None,
  12. }
  13. _LOGGER.debug("data: %s", data.hex())
  14. return {
  15. "battery": data[2] & 0b01111111,
  16. }
  17. def process_wouniversal_remote(
  18. data: bytes | None, mfr_data: bytes | None
  19. ) -> dict[str, bool | int | None]:
  20. """Process Universal Remote adv data."""
  21. if mfr_data is None or len(mfr_data) < 8:
  22. return {
  23. "battery": None,
  24. "charging": None,
  25. }
  26. _LOGGER.debug("mfr_data: %s", mfr_data.hex())
  27. # mfr_data[7]: bit 7 is charging; bits 6-0 are battery percentage.
  28. return {
  29. "battery": mfr_data[7] & 0b01111111,
  30. "charging": bool((mfr_data[7] >> 7) & 1),
  31. }