test_adv_parser.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from switchbot.adv_parser import parse_advertisement_data
  2. from bleak.backends.scanner import AdvertisementData
  3. from bleak.backends.device import BLEDevice
  4. from switchbot.models import SwitchBotAdvertisement
  5. from switchbot import SwitchbotModel
  6. def test_parse_advertisement_data_curtain():
  7. """Test parse_advertisement_data for curtain."""
  8. ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
  9. adv_data = AdvertisementData(
  10. manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
  11. service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"c\xc0X\x00\x11\x04"},
  12. )
  13. result = parse_advertisement_data(ble_device, adv_data)
  14. assert result == SwitchBotAdvertisement(
  15. address="aa:bb:cc:dd:ee:ff",
  16. data={
  17. "rawAdvData": b"c\xc0X\x00\x11\x04",
  18. "data": {
  19. "calibration": True,
  20. "battery": 88,
  21. "inMotion": False,
  22. "position": 100,
  23. "lightLevel": 1,
  24. "deviceChain": 1,
  25. },
  26. "isEncrypted": False,
  27. "model": "c",
  28. "modelFriendlyName": "Curtain",
  29. "modelName": SwitchbotModel.CURTAIN,
  30. },
  31. device=ble_device,
  32. )
  33. def test_parse_advertisement_data_empty():
  34. """Test parse_advertisement_data with empty data does not blow up."""
  35. ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
  36. adv_data = AdvertisementData(
  37. manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
  38. service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b""},
  39. )
  40. result = parse_advertisement_data(ble_device, adv_data)
  41. assert result is None
  42. def test_new_bot_firmware():
  43. """Test parsing adv data from new bot firmware."""
  44. ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
  45. adv_data = AdvertisementData(
  46. manufacturer_data={89: b"\xd8.\xad\xcd\r\x85"},
  47. service_data={"00000d00-0000-1000-8000-00805f9b34fb": b"H\x10\xe1"},
  48. service_uuids=["CBA20D00-224D-11E6-9FB8-0002A5D5C51B"],
  49. )
  50. result = parse_advertisement_data(ble_device, adv_data)
  51. assert result == SwitchBotAdvertisement(
  52. address="aa:bb:cc:dd:ee:ff",
  53. data={
  54. "rawAdvData": b"H\x10\xe1",
  55. "data": {"switchMode": False, "isOn": False, "battery": 97},
  56. "model": "H",
  57. "isEncrypted": False,
  58. "modelFriendlyName": "Bot",
  59. "modelName": SwitchbotModel.BOT,
  60. },
  61. device=ble_device,
  62. )