@@ -1737,3 +1737,151 @@ def test_parse_advertisement_data_relay_switch_1():
1737
1737
rssi = - 67 ,
1738
1738
active = True ,
1739
1739
)
1740
+
1741
+
1742
+ def test_leak_active ():
1743
+ """Test parse_advertisement_data for the leak detector."""
1744
+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
1745
+ adv_data = generate_advertisement_data (
1746
+ manufacturer_data = {2409 : b"\xc4 407Lz\x18 N\x98 g^\x94 Q<\x05 \x00 \x00 \x00 \x00 " },
1747
+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"&\x00 N" },
1748
+ rssi = - 72 ,
1749
+ )
1750
+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .LEAK )
1751
+ assert result == SwitchBotAdvertisement (
1752
+ address = "aa:bb:cc:dd:ee:ff" ,
1753
+ data = {
1754
+ "data" : {
1755
+ "leak" : False ,
1756
+ "tampered" : False ,
1757
+ "battery" : 78 ,
1758
+ "low_battery" : False ,
1759
+ },
1760
+ "isEncrypted" : False ,
1761
+ "model" : "3" ,
1762
+ "modelFriendlyName" : "Leak Detector" ,
1763
+ "modelName" : SwitchbotModel .LEAK ,
1764
+ "rawAdvData" : b"&\x00 N" ,
1765
+ },
1766
+ device = ble_device ,
1767
+ rssi = - 72 ,
1768
+ active = True ,
1769
+ )
1770
+
1771
+
1772
+ def test_leak_passive ():
1773
+ """Test parse_advertisement_data for the leak detector."""
1774
+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
1775
+ adv_data = generate_advertisement_data (
1776
+ manufacturer_data = {2409 : b"\xc4 407Lz\x18 N\x98 g^\x94 Q<\x05 \x00 \x00 \x00 \x00 " },
1777
+ rssi = - 72 ,
1778
+ )
1779
+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .LEAK )
1780
+ assert result == SwitchBotAdvertisement (
1781
+ address = "aa:bb:cc:dd:ee:ff" ,
1782
+ data = {
1783
+ "data" : {},
1784
+ "isEncrypted" : False ,
1785
+ "model" : "3" ,
1786
+ "rawAdvData" : None ,
1787
+ },
1788
+ device = ble_device ,
1789
+ rssi = - 72 ,
1790
+ active = False ,
1791
+ )
1792
+
1793
+
1794
+ def test_leak_no_leak_detected ():
1795
+ """Test parse_advertisement_data for the leak detector."""
1796
+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "Any" )
1797
+ adv_data = generate_advertisement_data (
1798
+ manufacturer_data = {
1799
+ 2409 : b"\xc4 407LzJd\x98 ga\xc4 \n <\x05 \x00 \x00 \x00 \x00 "
1800
+ }, # no leak, batt
1801
+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"&\x00 d" },
1802
+ rssi = - 73 ,
1803
+ )
1804
+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .LEAK )
1805
+ assert result == SwitchBotAdvertisement (
1806
+ address = "aa:bb:cc:dd:ee:ff" ,
1807
+ data = {
1808
+ "data" : {
1809
+ "leak" : False ,
1810
+ "tampered" : False ,
1811
+ "battery" : 100 ,
1812
+ "low_battery" : False ,
1813
+ },
1814
+ "isEncrypted" : False ,
1815
+ "model" : "3" ,
1816
+ "modelFriendlyName" : "Leak Detector" ,
1817
+ "modelName" : SwitchbotModel .LEAK ,
1818
+ "rawAdvData" : b"&\x00 d" ,
1819
+ },
1820
+ device = ble_device ,
1821
+ rssi = - 73 ,
1822
+ active = True ,
1823
+ )
1824
+
1825
+
1826
+ def test_leak_leak_detected ():
1827
+ """Test parse_advertisement_data for the leak detector."""
1828
+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "Any" )
1829
+ adv_data = generate_advertisement_data (
1830
+ manufacturer_data = {
1831
+ 2409 : b"\xc4 407LzGd\xf9 ga\xc4 \x08 <\x05 \x00 \x00 \x00 \x00 "
1832
+ }, # leak, batt
1833
+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"&\x00 d" },
1834
+ rssi = - 73 ,
1835
+ )
1836
+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .LEAK )
1837
+ assert result == SwitchBotAdvertisement (
1838
+ address = "aa:bb:cc:dd:ee:ff" ,
1839
+ data = {
1840
+ "data" : {
1841
+ "leak" : True ,
1842
+ "tampered" : False ,
1843
+ "battery" : 100 ,
1844
+ "low_battery" : False ,
1845
+ },
1846
+ "isEncrypted" : False ,
1847
+ "model" : "3" ,
1848
+ "modelFriendlyName" : "Leak Detector" ,
1849
+ "modelName" : SwitchbotModel .LEAK ,
1850
+ "rawAdvData" : b"&\x00 d" ,
1851
+ },
1852
+ device = ble_device ,
1853
+ rssi = - 73 ,
1854
+ active = True ,
1855
+ )
1856
+
1857
+
1858
+ def test_leak_low_battery ():
1859
+ """Test parse_advertisement_data for the leak detector."""
1860
+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "Any" )
1861
+ adv_data = generate_advertisement_data (
1862
+ manufacturer_data = {
1863
+ 2409 : b"\xc4 407Lz\x02 \t \x98 \x00 \x00 \x00 \x00 <\x05 \x00 \x00 \x00 \x00 "
1864
+ }, # no leak, low battery
1865
+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"&\x00 d" },
1866
+ rssi = - 73 ,
1867
+ )
1868
+ result = parse_advertisement_data (ble_device , adv_data , SwitchbotModel .LEAK )
1869
+ assert result == SwitchBotAdvertisement (
1870
+ address = "aa:bb:cc:dd:ee:ff" ,
1871
+ data = {
1872
+ "data" : {
1873
+ "leak" : False ,
1874
+ "tampered" : False ,
1875
+ "battery" : 9 ,
1876
+ "low_battery" : False ,
1877
+ },
1878
+ "isEncrypted" : False ,
1879
+ "model" : "3" ,
1880
+ "modelFriendlyName" : "Leak Detector" ,
1881
+ "modelName" : SwitchbotModel .LEAK ,
1882
+ "rawAdvData" : b"&\x00 d" ,
1883
+ },
1884
+ device = ble_device ,
1885
+ rssi = - 73 ,
1886
+ active = True ,
1887
+ )
0 commit comments