|
@@ -2842,3 +2842,103 @@ def test_air_purifier_with_empty_data() -> None:
|
|
|
rssi=-97,
|
|
|
active=True,
|
|
|
)
|
|
|
+
|
|
|
+
|
|
|
+def test_hub3_active() -> None:
|
|
|
+ """Test parsing hub3 with active data."""
|
|
|
+ ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
|
|
|
+ adv_data = generate_advertisement_data(
|
|
|
+ manufacturer_data={2409: b"\xb0\xe9\xfen^)\x00\xffh&\xd6d\x83\x03\x994\x80"},
|
|
|
+ service_data={
|
|
|
+ "0000fd3d-0000-1000-8000-00805f9b34fb": b"\x00\x00d\x00\x10\xb9@"
|
|
|
+ },
|
|
|
+ rssi=-97,
|
|
|
+ )
|
|
|
+ result = parse_advertisement_data(ble_device, adv_data)
|
|
|
+ assert result == SwitchBotAdvertisement(
|
|
|
+ address="aa:bb:cc:dd:ee:ff",
|
|
|
+ data={
|
|
|
+ "rawAdvData": b"\x00\x00d\x00\x10\xb9@",
|
|
|
+ "data": {
|
|
|
+ "sequence_number": 0,
|
|
|
+ "network_state": 2,
|
|
|
+ "sensor_inserted": True,
|
|
|
+ "lightLevel": 3,
|
|
|
+ "illuminance": 90,
|
|
|
+ "temperature_alarm": False,
|
|
|
+ "humidity_alarm": False,
|
|
|
+ "temp": {"c": 25.3, "f": 77.5},
|
|
|
+ "temperature": 25.3,
|
|
|
+ "humidity": 52,
|
|
|
+ "motion_detected": True,
|
|
|
+ },
|
|
|
+ "isEncrypted": False,
|
|
|
+ "model": b"\x00\x10\xb9@",
|
|
|
+ "modelFriendlyName": "Hub3",
|
|
|
+ "modelName": SwitchbotModel.HUB3,
|
|
|
+ },
|
|
|
+ device=ble_device,
|
|
|
+ rssi=-97,
|
|
|
+ active=True,
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_hub3_passive() -> None:
|
|
|
+ """Test parsing hub3 with passive data."""
|
|
|
+ ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
|
|
|
+ adv_data = generate_advertisement_data(
|
|
|
+ manufacturer_data={2409: b"\xb0\xe9\xfen^)\x00\xffh&\xd6d\x83\x03\x994\x80"},
|
|
|
+ rssi=-97,
|
|
|
+ )
|
|
|
+ result = parse_advertisement_data(ble_device, adv_data, SwitchbotModel.HUB3)
|
|
|
+ assert result == SwitchBotAdvertisement(
|
|
|
+ address="aa:bb:cc:dd:ee:ff",
|
|
|
+ data={
|
|
|
+ "rawAdvData": None,
|
|
|
+ "data": {
|
|
|
+ "sequence_number": 0,
|
|
|
+ "network_state": 2,
|
|
|
+ "sensor_inserted": True,
|
|
|
+ "lightLevel": 3,
|
|
|
+ "illuminance": 90,
|
|
|
+ "temperature_alarm": False,
|
|
|
+ "humidity_alarm": False,
|
|
|
+ "temp": {"c": 25.3, "f": 77.5},
|
|
|
+ "temperature": 25.3,
|
|
|
+ "humidity": 52,
|
|
|
+ "motion_detected": True,
|
|
|
+ },
|
|
|
+ "isEncrypted": False,
|
|
|
+ "model": b"\x00\x10\xb9@",
|
|
|
+ "modelFriendlyName": "Hub3",
|
|
|
+ "modelName": SwitchbotModel.HUB3,
|
|
|
+ },
|
|
|
+ device=ble_device,
|
|
|
+ rssi=-97,
|
|
|
+ active=False,
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_hub3_with_empty_data() -> None:
|
|
|
+ """Test parsing hub3 with empty data."""
|
|
|
+ ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
|
|
|
+ adv_data = generate_advertisement_data(
|
|
|
+ manufacturer_data={2409: None},
|
|
|
+ service_data={
|
|
|
+ "0000fd3d-0000-1000-8000-00805f9b34fb": b"\x00\x00d\x00\x10\xb9@"
|
|
|
+ },
|
|
|
+ rssi=-97,
|
|
|
+ )
|
|
|
+ result = parse_advertisement_data(ble_device, adv_data)
|
|
|
+ assert result == SwitchBotAdvertisement(
|
|
|
+ address="aa:bb:cc:dd:ee:ff",
|
|
|
+ data={
|
|
|
+ "rawAdvData": b"\x00\x00d\x00\x10\xb9@",
|
|
|
+ "data": {},
|
|
|
+ "isEncrypted": False,
|
|
|
+ "model": b"\x00\x10\xb9@",
|
|
|
+ },
|
|
|
+ device=ble_device,
|
|
|
+ rssi=-97,
|
|
|
+ active=True,
|
|
|
+ )
|