Skip to content

Commit 2f648d6

Browse files
authored
Merge pull request #1300 from custom-components/RS1BB
Add Linptech Immersion sensor RS1BB
2 parents cc2fdc7 + 2b5e8ea commit 2f648d6

File tree

7 files changed

+53
-2
lines changed

7 files changed

+53
-2
lines changed

custom_components/ble_monitor/ble_parser/xiaomi.py

+8
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
0x20DB: "MJZNZ018H",
7575
0x18E3: "ZX1",
7676
0x11C2: "SV40",
77+
0x3F0F: "RS1BB",
7778
}
7879

7980
# Structured objects for data conversions
@@ -721,6 +722,12 @@ def obj4805(xobj):
721722
return {"illuminance": illu}
722723

723724

725+
def obj4806(xobj):
726+
"""Moisture detected (wet/dry)"""
727+
wet = xobj[0]
728+
return {"moisture detected": wet}
729+
730+
724731
def obj4810(xobj):
725732
"""Sleep State"""
726733
sleep_state = xobj[0]
@@ -1052,6 +1059,7 @@ def obj5a16(xobj):
10521059
0x4803: obj4803,
10531060
0x4804: obj4804,
10541061
0x4805: obj4805,
1062+
0x4806: obj4806,
10551063
0x4810: obj4810,
10561064
0x4811: obj4811,
10571065
0x4818: obj4818,

custom_components/ble_monitor/const.py

+1
Original file line numberDiff line numberDiff line change
@@ -1950,6 +1950,7 @@ class BLEMonitorBinarySensorEntityDescription(
19501950
'Tilt Pink' : 'Tilt',
19511951
'MMC-W505' : 'Xiaomi',
19521952
'SJWS01LM' : 'Xiaomi',
1953+
'RS1BB' : 'Linptech',
19531954
}
19541955

19551956

custom_components/ble_monitor/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
"btsocket>=0.2.0",
1515
"pyric>=0.1.6.3"
1616
],
17-
"version": "12.8.2"
17+
"version": "12.9.0"
1818
}

custom_components/ble_monitor/test/test_xiaomi_parser.py

+26
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,32 @@ def test_Xiaomi_SJWS01LM(self):
340340
assert sensor_msg["moisture detected"]
341341
assert sensor_msg["rssi"] == -88
342342

343+
def test_Xiaomi_RS1BB(self):
344+
"""Test Xiaomi parser for LINP-RS1BB."""
345+
self.aeskeys = {}
346+
data_string = "043E2902010000674cb938c1a41d020106191695fe58590F3F4A674CB938C1A4D6E57B83040000D01E0B4BC0"
347+
data = bytes(bytearray.fromhex(data_string))
348+
349+
aeskey = "33ede53321bc73c790a8daae4581f3d5"
350+
351+
is_ext_packet = True if data[3] == 0x0D else False
352+
mac = (data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
353+
mac_address = mac.hex()
354+
p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
355+
p_key = bytes.fromhex(aeskey.lower())
356+
self.aeskeys[p_mac] = p_key
357+
# pylint: disable=unused-variable
358+
ble_parser = BleParser(aeskeys=self.aeskeys)
359+
sensor_msg, tracker_msg = ble_parser.parse_raw_data(data)
360+
361+
assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
362+
assert sensor_msg["type"] == "RS1BB"
363+
assert sensor_msg["mac"] == "A4C138B94C67"
364+
assert sensor_msg["packet"] == 74
365+
assert sensor_msg["data"]
366+
assert sensor_msg["moisture detected"] == 0
367+
assert sensor_msg["rssi"] == -64
368+
343369
def test_Xiaomi_MJYD02YL(self):
344370
"""Test Xiaomi parser for MJYD02YL."""
345371

docs/_devices/RS1BB.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
manufacturer: Linptech
3+
name: Water Immersion and Rainwater sensor
4+
model: RS1BB
5+
image: RS1BB.png
6+
physical_description:
7+
broadcasted_properties:
8+
- moisture detected
9+
- rssi
10+
broadcasted_property_notes:
11+
broadcast_rate:
12+
active_scan:
13+
encryption_key: true
14+
custom_firmware:
15+
notes:
16+
---

docs/_devices/SJWS01LM.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ model: SJWS01LM
55
image: SJWS01LM.png
66
physical_description:
77
broadcasted_properties:
8-
- moisture
8+
- moisture detected
99
- button
1010
- battery
1111
- rssi

docs/assets/images/RS1BB.png

36.3 KB
Loading

0 commit comments

Comments
 (0)