@@ -620,7 +620,7 @@ def test_bulb_active():
620620 tx_power = - 127 ,
621621 rssi = - 50 ,
622622 )
623- result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel . BOT )
623+ result = parse_advertisement_data (ble_device , adv_data )
624624 assert result == SwitchBotAdvertisement (
625625 address = "aa:bb:cc:dd:ee:ff" ,
626626 data = {
@@ -645,8 +645,6 @@ def test_bulb_active():
645645 )
646646
647647
648-
649-
650648def test_lightstrip_passive ():
651649 """Test parsing lightstrip as passive."""
652650 ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
@@ -658,7 +656,7 @@ def test_lightstrip_passive():
658656 tx_power = - 127 ,
659657 rssi = - 50 ,
660658 )
661- result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel . BOT )
659+ result = parse_advertisement_data (ble_device , adv_data )
662660 assert result == SwitchBotAdvertisement (
663661 address = "aa:bb:cc:dd:ee:ff" ,
664662 data = {
@@ -681,3 +679,93 @@ def test_lightstrip_passive():
681679 device = ble_device ,
682680 rssi = - 50 ,
683681 )
682+
683+
684+ def test_wosensor_passive_and_active ():
685+ """Test parsing wosensor as passive with active data as well."""
686+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
687+ adv_data = generate_advertisement_data (
688+ manufacturer_data = {2409 : b"\xd7 \xc1 }]\xeb C\xde \x03 \x06 \x98 5" },
689+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"T\x00 \xe4 \x06 \x98 5" },
690+ tx_power = - 127 ,
691+ rssi = - 50 ,
692+ )
693+ result = parse_advertisement_data (ble_device , adv_data )
694+ assert result == SwitchBotAdvertisement (
695+ address = "aa:bb:cc:dd:ee:ff" ,
696+ data = {
697+ "data" : {
698+ "battery" : 100 ,
699+ "fahrenheit" : False ,
700+ "humidity" : 53 ,
701+ "temp" : {"c" : 24.6 , "f" : 76.28 },
702+ },
703+ "isEncrypted" : False ,
704+ "model" : "T" ,
705+ "modelFriendlyName" : "Meter" ,
706+ "modelName" : SwitchbotModel .METER ,
707+ "rawAdvData" : b"T\x00 \xe4 \x06 \x98 5" ,
708+ },
709+ device = ble_device ,
710+ rssi = - 50 ,
711+ )
712+
713+
714+ def test_wosensor_active ():
715+ """Test parsing wosensor with active data as well."""
716+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
717+ adv_data = generate_advertisement_data (
718+ manufacturer_data = {},
719+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"T\x00 \xe4 \x06 \x98 5" },
720+ tx_power = - 127 ,
721+ rssi = - 50 ,
722+ )
723+ result = parse_advertisement_data (ble_device , adv_data )
724+ assert result == SwitchBotAdvertisement (
725+ address = "aa:bb:cc:dd:ee:ff" ,
726+ data = {
727+ "data" : {
728+ "battery" : 100 ,
729+ "fahrenheit" : False ,
730+ "humidity" : 53 ,
731+ "temp" : {"c" : 24.6 , "f" : 76.28 },
732+ },
733+ "isEncrypted" : False ,
734+ "model" : "T" ,
735+ "modelFriendlyName" : "Meter" ,
736+ "modelName" : SwitchbotModel .METER ,
737+ "rawAdvData" : b"T\x00 \xe4 \x06 \x98 5" ,
738+ },
739+ device = ble_device ,
740+ rssi = - 50 ,
741+ )
742+
743+
744+ def test_wosensor_passive_only ():
745+ """Test parsing wosensor with only passive data."""
746+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
747+ adv_data = generate_advertisement_data (
748+ manufacturer_data = {2409 : b"\xd7 \xc1 }]\xeb C\xde \x03 \x06 \x98 5" },
749+ service_data = {},
750+ tx_power = - 127 ,
751+ rssi = - 50 ,
752+ )
753+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .METER )
754+ assert result == SwitchBotAdvertisement (
755+ address = "aa:bb:cc:dd:ee:ff" ,
756+ data = {
757+ "data" : {
758+ "battery" : None ,
759+ "fahrenheit" : False ,
760+ "humidity" : 53 ,
761+ "temp" : {"c" : 24.6 , "f" : 76.28 },
762+ },
763+ "isEncrypted" : False ,
764+ "model" : "T" ,
765+ "modelFriendlyName" : "Meter" ,
766+ "modelName" : SwitchbotModel .METER ,
767+ "rawAdvData" : None ,
768+ },
769+ device = ble_device ,
770+ rssi = - 50 ,
771+ )
0 commit comments