Skip to content

Commit b6314a0

Browse files
committed
Add garnet 709BT voltage
1 parent 3120c4e commit b6314a0

File tree

3 files changed

+51
-8
lines changed

3 files changed

+51
-8
lines changed

custom_components/ble_monitor/ble_parser/oras.py

+33-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Parser for Oras BLE advertisements."""
1+
"""Parser for Oras/Garnet BLE advertisements."""
22
import logging
33

44
from .helpers import to_mac, to_unformatted_mac
@@ -7,25 +7,50 @@
77

88

99
def parse_oras(self, data: bytes, mac: str):
10-
"""Parser for Oras toothbrush."""
10+
"""Parser for Oras toothbrush or Garnet tank."""
1111
msg_length = len(data)
12-
firmware = "Oras"
13-
result = {"firmware": firmware}
14-
if msg_length == 22:
12+
result = {"mac": to_unformatted_mac(mac)}
13+
14+
if msg_length == 18:
15+
firmware = "Garnet"
16+
device_type = "Garnet 709BT"
17+
18+
sensor_id = data[7]
19+
sensor_data = data[8:11].decode("ASCII")
20+
sensor_volume = data[11:14].decode("ASCII")
21+
sensor_total = data[14:17].decode("ASCII")
22+
sensor_alarm = chr(data[17])
23+
24+
# remove later
25+
result.update({
26+
"sensor_id": sensor_id,
27+
"sensor_data": sensor_data,
28+
"sensor_volume": sensor_volume,
29+
"sensor_total": sensor_total,
30+
"sensor_alarm": sensor_alarm,
31+
})
32+
_LOGGER.info(
33+
"BLE ADV from Oras DEVICE: %s, result: %s",
34+
device_type,
35+
result
36+
)
37+
if sensor_id == 13:
38+
result.update({"voltage": int(sensor_data) / 10})
39+
elif msg_length == 22:
40+
firmware = "Oras"
1541
device_type = "Electra Washbasin Faucet"
1642
battery = data[5]
1743
result.update({"battery": battery})
1844
else:
19-
if self.report_unknown == "Oras":
45+
if self.report_unknown in ["Oras", "Garnet"]:
2046
_LOGGER.info(
21-
"BLE ADV from UNKNOWN Oras DEVICE: MAC: %s, ADV: %s",
47+
"BLE ADV from UNKNOWN Oras/Garnet DEVICE: MAC: %s, ADV: %s",
2248
to_mac(mac),
2349
data.hex()
2450
)
2551
return None
2652

2753
result.update({
28-
"mac": to_unformatted_mac(mac),
2954
"type": device_type,
3055
"packet": "no packet id",
3156
"firmware": firmware,

custom_components/ble_monitor/const.py

+2
Original file line numberDiff line numberDiff line change
@@ -1922,6 +1922,7 @@ class BLEMonitorBinarySensorEntityDescription(
19221922
'Blustream' : 'Blustream',
19231923
'BTHome' : 'BTHome',
19241924
'CQ60' : 'Chef iQ',
1925+
'Garnet 709BT' : 'Garnet',
19251926
'MI401' : 'Grundfos',
19261927
'HHCCJCY10' : 'HHCC',
19271928
'HolyIOT BLE tracker' : 'HolyIOT',
@@ -2067,6 +2068,7 @@ class BLEMonitorBinarySensorEntityDescription(
20672068
"Blustream",
20682069
"BTHome",
20692070
'Chef iQ',
2071+
"Garnet",
20702072
"Govee",
20712073
"Grundfos",
20722074
"HHCC",

custom_components/ble_monitor/test/test_oras.py

+16
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,19 @@ def test_oras_faucet(self):
1919
assert sensor_msg["data"]
2020
assert sensor_msg["battery"] == 100
2121
assert sensor_msg["rssi"] == -52
22+
23+
def test_garmet_battery(self):
24+
"""Test Oras parser for Garnet 709BT battery sensor."""
25+
data_string = "043E2102010000adb9a538c1a41502010611ff31010c464e0d31333230303030303030CC"
26+
data = bytes(bytearray.fromhex(data_string))
27+
# pylint: disable=unused-variable
28+
ble_parser = BleParser()
29+
sensor_msg, tracker_msg = ble_parser.parse_raw_data(data)
30+
31+
assert sensor_msg["firmware"] == "Garnet"
32+
assert sensor_msg["type"] == "Garnet 709BT"
33+
assert sensor_msg["mac"] == "A4C138A5B9AD"
34+
assert sensor_msg["packet"] == "no packet id"
35+
assert sensor_msg["data"]
36+
assert sensor_msg["voltage"] == 13.2
37+
assert sensor_msg["rssi"] == -52

0 commit comments

Comments
 (0)