@@ -292,7 +292,7 @@ def test_parse_advertisement_data_empty():
292292 """Test parse_advertisement_data with empty data does not blow up."""
293293 ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
294294 adv_data = generate_advertisement_data (
295- manufacturer_data = {2409 : b"\xe7 \xab F\xac \x8f \x92 |\x0f \x00 \x11 \x04 " },
295+ manufacturer_data = {2403 : b"\xe7 \xab F\xac \x8f \x92 |\x0f \x00 \x11 \x04 " },
296296 service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"" },
297297 )
298298 result = parse_advertisement_data (ble_device , adv_data )
@@ -609,3 +609,107 @@ def test_switchbot_passive():
609609 device = ble_device ,
610610 rssi = - 50 ,
611611 )
612+
613+
614+ def test_bulb_active ():
615+ """Test parsing bulb as active."""
616+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
617+ adv_data = generate_advertisement_data (
618+ manufacturer_data = {2409 : b"\x84 \xf7 \x03 \xb4 \xcb z\x03 \xe4 !\x00 \x00 " },
619+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"u\x00 d" },
620+ tx_power = - 127 ,
621+ rssi = - 50 ,
622+ )
623+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .BOT )
624+ assert result == SwitchBotAdvertisement (
625+ address = "aa:bb:cc:dd:ee:ff" ,
626+ data = {
627+ "data" : {
628+ "brightness" : 100 ,
629+ "color_mode" : 1 ,
630+ "delay" : False ,
631+ "isOn" : True ,
632+ "loop_index" : 0 ,
633+ "preset" : False ,
634+ "sequence_number" : 3 ,
635+ "speed" : 0 ,
636+ },
637+ "isEncrypted" : False ,
638+ "model" : "u" ,
639+ "modelFriendlyName" : "Color Bulb" ,
640+ "modelName" : SwitchbotModel .COLOR_BULB ,
641+ "rawAdvData" : b"u\x00 d" ,
642+ },
643+ device = ble_device ,
644+ rssi = - 50 ,
645+ )
646+
647+
648+ def test_bulb_passive ():
649+ """Test parsing bulb as passive."""
650+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
651+ adv_data = generate_advertisement_data (
652+ manufacturer_data = {2409 : b"\x84 \xf7 \x03 \xb4 \xcb z\x03 \xe4 !\x00 \x00 " },
653+ service_data = {},
654+ tx_power = - 127 ,
655+ rssi = - 50 ,
656+ )
657+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .BOT )
658+ assert result == SwitchBotAdvertisement (
659+ address = "aa:bb:cc:dd:ee:ff" ,
660+ data = {
661+ "data" : {
662+ "brightness" : 100 ,
663+ "color_mode" : 1 ,
664+ "delay" : False ,
665+ "isOn" : True ,
666+ "loop_index" : 0 ,
667+ "preset" : False ,
668+ "sequence_number" : 3 ,
669+ "speed" : 0 ,
670+ },
671+ "isEncrypted" : False ,
672+ "model" : "u" ,
673+ "modelFriendlyName" : "Color Bulb" ,
674+ "modelName" : SwitchbotModel .COLOR_BULB ,
675+ "rawAdvData" : None ,
676+ },
677+ device = ble_device ,
678+ rssi = - 50 ,
679+ )
680+
681+
682+ def test_lightstrip_passive ():
683+ """Test parsing lightstrip as passive."""
684+ ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
685+ adv_data = generate_advertisement_data (
686+ manufacturer_data = {
687+ 2409 : b"`U\xf9 (\xe5 \x96 \x00 d\x02 \xb0 \x00 \x00 \x00 \x00 \x00 \x00 "
688+ },
689+ service_data = {},
690+ tx_power = - 127 ,
691+ rssi = - 50 ,
692+ )
693+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .BOT )
694+ assert result == SwitchBotAdvertisement (
695+ address = "aa:bb:cc:dd:ee:ff" ,
696+ data = {
697+ "data" : {
698+ "brightness" : 100 ,
699+ "color_mode" : 2 ,
700+ "delay" : False ,
701+ "isOn" : False ,
702+ "loop_index" : 0 ,
703+ "preset" : False ,
704+ "sequence_number" : 0 ,
705+ "speed" : 48 ,
706+ },
707+ "isEncrypted" : False ,
708+ "model" : "r" ,
709+ "modelFriendlyName" : "Light Strip" ,
710+ "modelName" : SwitchbotModel .LIGHT_STRIP ,
711+ "rawAdvData" : None ,
712+ },
713+ device = ble_device ,
714+ rssi = - 50 ,
715+ )
0 commit comments