33from bleak .backends .device import BLEDevice
44from bleak .backends .scanner import AdvertisementData
55
6- from switchbot import SwitchbotModel
6+ from switchbot import LockStatus , SwitchbotModel
77from switchbot .adv_parser import parse_advertisement_data
88from switchbot .models import SwitchBotAdvertisement
99
@@ -1094,7 +1094,9 @@ def test_motion_sensor_motion_passive():
10941094 tx_power = - 127 ,
10951095 rssi = - 87 ,
10961096 )
1097- result = parse_advertisement_data (ble_device , adv_data )
1097+ result = parse_advertisement_data (
1098+ ble_device , adv_data , SwitchbotModel .MOTION_SENSOR
1099+ )
10981100 assert result == SwitchBotAdvertisement (
10991101 address = "aa:bb:cc:dd:ee:ff" ,
11001102 data = {
@@ -1118,3 +1120,71 @@ def test_motion_sensor_motion_passive():
11181120 rssi = - 87 ,
11191121 active = False ,
11201122 )
1123+
1124+
1125+ def test_parsing_lock_active ():
1126+ """Test parsing lock with active data."""
1127+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
1128+ adv_data = generate_advertisement_data (
1129+ manufacturer_data = {2409 : b"\xf1 \t \x9f E\x1a ]\x07 \x83 \x00 " },
1130+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"o\x80 d" },
1131+ rssi = - 67 ,
1132+ )
1133+ result = parse_advertisement_data (ble_device , adv_data )
1134+ assert result == SwitchBotAdvertisement (
1135+ address = "aa:bb:cc:dd:ee:ff" ,
1136+ data = {
1137+ "data" : {
1138+ "auto_lock_paused" : False ,
1139+ "battery" : 100 ,
1140+ "calibration" : True ,
1141+ "door_open" : False ,
1142+ "double_lock_mode" : False ,
1143+ "status" : LockStatus .LOCKED ,
1144+ "unclosed_alarm" : False ,
1145+ "unlocked_alarm" : False ,
1146+ "update_from_secondary_lock" : False ,
1147+ },
1148+ "isEncrypted" : False ,
1149+ "model" : "o" ,
1150+ "modelFriendlyName" : "Lock" ,
1151+ "modelName" : SwitchbotModel .LOCK ,
1152+ "rawAdvData" : b"o\x80 d" ,
1153+ },
1154+ device = ble_device ,
1155+ rssi = - 67 ,
1156+ active = True ,
1157+ )
1158+
1159+
1160+ def test_parsing_lock_passive ():
1161+ """Test parsing lock with active data."""
1162+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
1163+ adv_data = generate_advertisement_data (
1164+ manufacturer_data = {2409 : b"\xf1 \t \x9f E\x1a ]\x07 \x83 \x00 " }, rssi = - 67
1165+ )
1166+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .LOCK )
1167+ assert result == SwitchBotAdvertisement (
1168+ address = "aa:bb:cc:dd:ee:ff" ,
1169+ data = {
1170+ "data" : {
1171+ "auto_lock_paused" : False ,
1172+ "battery" : None ,
1173+ "calibration" : True ,
1174+ "door_open" : False ,
1175+ "double_lock_mode" : False ,
1176+ "status" : LockStatus .LOCKED ,
1177+ "unclosed_alarm" : False ,
1178+ "unlocked_alarm" : False ,
1179+ "update_from_secondary_lock" : False ,
1180+ },
1181+ "isEncrypted" : False ,
1182+ "model" : "o" ,
1183+ "modelFriendlyName" : "Lock" ,
1184+ "modelName" : SwitchbotModel .LOCK ,
1185+ "rawAdvData" : None ,
1186+ },
1187+ device = ble_device ,
1188+ rssi = - 67 ,
1189+ active = False ,
1190+ )
0 commit comments