Skip to content

Commit 5a85696

Browse files
authored
Merge pull request #1490 from custom-components/H5191
Add Govee H5191
2 parents 3ce517f + 01858f0 commit 5a85696

File tree

8 files changed

+56
-1
lines changed

8 files changed

+56
-1
lines changed

custom_components/ble_monitor/ble_parser/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,10 @@ def parse_advertisement(
413413
# Thermobeacon
414414
sensor_data = parse_thermobeacon(self, man_spec_data, mac)
415415
break
416+
elif comp_id == 0xAC63 and data_len in [0x17, 0x2D]:
417+
# Govee H5191
418+
sensor_data = parse_govee(self, man_spec_data, service_class_uuid16, local_name, mac)
419+
break
416420
elif comp_id == 0xEA1C and data_len == 0x17:
417421
# Govee H50555
418422
sensor_data = parse_govee(self, man_spec_data, service_class_uuid16, local_name, mac)

custom_components/ble_monitor/ble_parser/govee.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,18 @@ def parse_govee(self, data: str, service_class_uuid16: int, local_name: str, mac
211211
"temperature probe 2": decode_temps_probes(temp_probe_2),
212212
"temperature alarm probe 2": decode_temps_probes(high_temp_alarm_2),
213213
})
214+
elif msg_length == 24 and (
215+
service_class_uuid16 == 0x5191
216+
or device_id == 0xAC63
217+
):
218+
device_type = "H5191"
219+
(temp_probe_1, high_temp_alarm_1, _, temp, _, _) = unpack(
220+
">hhhhhh", data[12:24])
221+
result.update({
222+
"temperature probe 1": decode_temps_probes(temp_probe_1),
223+
"temperature alarm probe 1": decode_temps_probes(high_temp_alarm_1),
224+
"temperature": decode_temps_probes(temp),
225+
})
214226
elif msg_length == 24 and service_class_uuid16 == 0x5198:
215227
device_type = "H5198"
216228
sensor_id = data[10]

custom_components/ble_monitor/const.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,6 +2085,7 @@ class BLEMonitorBinarySensorEntityDescription(
20852085
'H5183' : [["temperature probe 1", "temperature alarm probe 1", "rssi"], [], []],
20862086
'H5184' : [["temperature probe 1", "temperature alarm probe 1", "temperature probe 2", "temperature alarm probe 2", "temperature probe 3", "temperature alarm probe 3", "temperature probe 4", "temperature alarm probe 4", "rssi"], [], []],
20872087
'H5185' : [["temperature probe 1", "temperature alarm probe 1", "temperature probe 2", "temperature alarm probe 2", "rssi"], [], []],
2088+
'H5191' : [["temperature probe 1", "temperature alarm probe 1", "temperature", "rssi"], [], []],
20882089
'H5198' : [["temperature probe 1", "temperature alarm probe 1", "low temperature alarm probe 1", "temperature probe 2", "temperature alarm probe 2", "low temperature alarm probe 2", "temperature probe 3", "temperature alarm probe 3", "low temperature alarm probe 3", "temperature probe 4", "temperature alarm probe 4", "low temperature alarm probe 4", "rssi"], [], []],
20892090
'Ruuvitag' : [["temperature", "humidity", "pressure", "battery", "voltage", "rssi"], ["acceleration"], ["motion"]],
20902091
'iNode Energy Meter' : [["battery", "voltage", "rssi"], ["energy", "power"], []],
@@ -2233,6 +2234,7 @@ class BLEMonitorBinarySensorEntityDescription(
22332234
'H5183' : 'Govee',
22342235
'H5184' : 'Govee',
22352236
'H5185' : 'Govee',
2237+
'H5191' : 'Govee',
22362238
'H5198' : 'Govee',
22372239
'Ruuvitag' : 'Ruuvitag',
22382240
'iNode Energy Meter' : 'iNode',

custom_components/ble_monitor/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
"btsocket>=0.3.0",
1515
"pyric>=0.1.6.3"
1616
],
17-
"version": "13.8.0"
17+
"version": "13.9.0"
1818
}

custom_components/ble_monitor/test/test_govee_parser.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,24 @@ def test_Govee_H5185_alarm(self):
320320
assert sensor_msg["temperature alarm probe 2"] == 93.32
321321
assert sensor_msg["rssi"] == -54
322322

323+
def test_Govee_H5191(self):
324+
"""Test Govee H5191 parser."""
325+
data_string = "043E240201000107158038C1A41817ff63ac83010001014c5d040fa01324ffff0af0ffffffffC6"
326+
data = bytes(bytearray.fromhex(data_string))
327+
# pylint: disable=unused-variable
328+
ble_parser = BleParser()
329+
sensor_msg, tracker_msg = ble_parser.parse_raw_data(data)
330+
331+
assert sensor_msg["firmware"] == "Govee"
332+
assert sensor_msg["type"] == "H5191"
333+
assert sensor_msg["mac"] == "A4C138801507"
334+
assert sensor_msg["packet"] == "no packet id"
335+
assert sensor_msg["data"]
336+
assert sensor_msg["temperature probe 1"] == 40.0
337+
assert sensor_msg["temperature alarm probe 1"] == 49.0
338+
assert sensor_msg["temperature"] == 28.0
339+
assert sensor_msg["rssi"] == -58
340+
323341
def test_Govee_H5198(self):
324342
"""Test Govee H5198 parser with alarm."""
325343
data_string = "043e4a020100016c22303031c63e0201060303519817ff30226c01000101c0010fffff1ce8ffffffff189cffff1aff4c000215494e54454c4c495f524f434b535f48575075f2ff0c00000000c5"

docs/_devices/Govee_H5191.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
manufacturer: Govee
3+
name: Meat Thermometer
4+
model: H5191
5+
image: Govee_H5191.png
6+
physical_description: Rectangular black body with rounded corners, with one probe.
7+
broadcasted_properties:
8+
- temperature probe
9+
- temperature alarm probe
10+
- temperature (ambient)
11+
- rssi
12+
broadcasted_property_notes:
13+
broadcast_rate:
14+
active_scan: true
15+
encryption_key:
16+
custom_firmware:
17+
notes:
18+
- actve scan needs to be enabled in the BLE Monitor settings for this sensor to work.
19+
---

docs/assets/images/Govee_H5191.png

41.1 KB
Loading
9.82 KB
Loading

0 commit comments

Comments
 (0)