@@ -857,6 +857,70 @@ def test_wosensor_passive_only():
857857 )
858858
859859
860+ def test_woiosensor_passive_and_active ():
861+ """Test parsing woiosensor as passive with active data as well."""
862+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
863+ adv_data = generate_advertisement_data (
864+ manufacturer_data = {2409 : b"\xaa \xbb \xcc \xdd \xee \xff \xe0 \x0f \x06 \x98 5\x00 " },
865+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"w\x00 \xe4 " },
866+ tx_power = - 127 ,
867+ rssi = - 50 ,
868+ )
869+ result = parse_advertisement_data (ble_device , adv_data )
870+ assert result == SwitchBotAdvertisement (
871+ address = "aa:bb:cc:dd:ee:ff" ,
872+ data = {
873+ "data" : {
874+ "battery" : 100 ,
875+ "fahrenheit" : False ,
876+ "humidity" : 53 ,
877+ "temp" : {"c" : 24.6 , "f" : 76.28 },
878+ "temperature" : 24.6 ,
879+ },
880+ "isEncrypted" : False ,
881+ "model" : "w" ,
882+ "modelFriendlyName" : "Indoor/Outdoor Meter" ,
883+ "modelName" : SwitchbotModel .IO_METER ,
884+ "rawAdvData" : b"w\x00 \xe4 " ,
885+ },
886+ device = ble_device ,
887+ rssi = - 50 ,
888+ active = True ,
889+ )
890+
891+
892+ def test_woiosensor_passive_only ():
893+ """Test parsing woiosensor with only passive data."""
894+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
895+ adv_data = generate_advertisement_data (
896+ manufacturer_data = {2409 : b"\xaa \xbb \xcc \xdd \xee \xff \xe0 \x0f \x06 \x98 5\x00 " },
897+ service_data = {},
898+ tx_power = - 127 ,
899+ rssi = - 50 ,
900+ )
901+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .IO_METER )
902+ assert result == SwitchBotAdvertisement (
903+ address = "aa:bb:cc:dd:ee:ff" ,
904+ data = {
905+ "data" : {
906+ "battery" : None ,
907+ "fahrenheit" : False ,
908+ "humidity" : 53 ,
909+ "temp" : {"c" : 24.6 , "f" : 76.28 },
910+ "temperature" : 24.6 ,
911+ },
912+ "isEncrypted" : False ,
913+ "model" : "w" ,
914+ "modelFriendlyName" : "Indoor/Outdoor Meter" ,
915+ "modelName" : SwitchbotModel .IO_METER ,
916+ "rawAdvData" : None ,
917+ },
918+ device = ble_device ,
919+ rssi = - 50 ,
920+ active = False ,
921+ )
922+
923+
860924def test_motion_sensor_clear ():
861925 """Test parsing motion sensor with clear data."""
862926 ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
0 commit comments