diff --git a/custom_components/ble_monitor/ble_parser/__init__.py b/custom_components/ble_monitor/ble_parser/__init__.py index b82855f8..a4c7f41e 100644 --- a/custom_components/ble_monitor/ble_parser/__init__.py +++ b/custom_components/ble_monitor/ble_parser/__init__.py @@ -202,6 +202,10 @@ def parse_advertisement( uuid16 = (service_data[3] << 8) | service_data[2] if uuid16 == 0x1809: # UUID16 = Health Thermometer service (used by Relsib) + if len(service_data_list) == 3: + uuid16_2 = (service_data_list[1][3] << 8) | service_data_list[1][2] + if uuid16_2 == 0x181A: + service_data = b"".join(service_data_list) sensor_data = parse_relsib(self, service_data, mac) break if uuid16 == 0x181A: diff --git a/custom_components/ble_monitor/ble_parser/acconeer.py b/custom_components/ble_monitor/ble_parser/acconeer.py index 0dc522c5..0c3dd7ae 100644 --- a/custom_components/ble_monitor/ble_parser/acconeer.py +++ b/custom_components/ble_monitor/ble_parser/acconeer.py @@ -13,7 +13,7 @@ } -def parse_acconeer(self, data: bytes, mac: str): +def parse_acconeer(self, data: bytes, mac: bytes): """Acconeer parser""" msg_length = len(data) firmware = "Acconeer" diff --git a/custom_components/ble_monitor/ble_parser/airmentor.py b/custom_components/ble_monitor/ble_parser/airmentor.py index 2db1905e..2a7d8d30 100644 --- a/custom_components/ble_monitor/ble_parser/airmentor.py +++ b/custom_components/ble_monitor/ble_parser/airmentor.py @@ -104,7 +104,7 @@ def parse_2s(msg_type, xvalue): return None -def parse_airmentor(self, data: bytes, mac: str): +def parse_airmentor(self, data: bytes, mac: bytes): """Parser for Air Mentor""" data_length = len(data) diff --git a/custom_components/ble_monitor/ble_parser/almendo.py b/custom_components/ble_monitor/ble_parser/almendo.py index 099afb42..ffa79c35 100644 --- a/custom_components/ble_monitor/ble_parser/almendo.py +++ b/custom_components/ble_monitor/ble_parser/almendo.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_almendo(self, data: bytes, mac: str): +def parse_almendo(self, data: bytes, mac: bytes): """Almendo parser""" result = { "mac": to_unformatted_mac(mac), diff --git a/custom_components/ble_monitor/ble_parser/altbeacon.py b/custom_components/ble_monitor/ble_parser/altbeacon.py index 96b9b102..a48faee7 100644 --- a/custom_components/ble_monitor/ble_parser/altbeacon.py +++ b/custom_components/ble_monitor/ble_parser/altbeacon.py @@ -14,7 +14,7 @@ DEVICE_TYPE: Final = "AltBeacon" -def parse_altbeacon(self, data: str, comp_id: int, mac: str): +def parse_altbeacon(self, data: bytes, comp_id: int, mac: bytes): """parser for Alt Beacon""" if len(data) >= 27: uuid = data[6:22] diff --git a/custom_components/ble_monitor/ble_parser/amazfit.py b/custom_components/ble_monitor/ble_parser/amazfit.py index 4b9f59d2..2bdd586d 100644 --- a/custom_components/ble_monitor/ble_parser/amazfit.py +++ b/custom_components/ble_monitor/ble_parser/amazfit.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_amazfit(self, service_data: str, man_spec_data: str, mac: str): +def parse_amazfit(self, service_data: str | None, man_spec_data: str, mac: bytes): """parser for Amazfit scale and Miband 4 and 5""" if service_data: service_data_length = len(service_data) diff --git a/custom_components/ble_monitor/ble_parser/atc.py b/custom_components/ble_monitor/ble_parser/atc.py index 7332c77c..2c951e0d 100644 --- a/custom_components/ble_monitor/ble_parser/atc.py +++ b/custom_components/ble_monitor/ble_parser/atc.py @@ -9,7 +9,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_atc(self, data: bytes, mac: str): +def parse_atc(self, data: bytes, mac: bytes): """Parse ATC BLE advertisements""" device_type = "ATC" msg_length = len(data) diff --git a/custom_components/ble_monitor/ble_parser/bluemaestro.py b/custom_components/ble_monitor/ble_parser/bluemaestro.py index 1f2a1fe6..cf3ab85c 100644 --- a/custom_components/ble_monitor/ble_parser/bluemaestro.py +++ b/custom_components/ble_monitor/ble_parser/bluemaestro.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_bluemaestro(self, data: bytes, mac: str): +def parse_bluemaestro(self, data: bytes, mac: bytes): """Parse BlueMaestro advertisement.""" msg_length = len(data) firmware = "BlueMaestro" diff --git a/custom_components/ble_monitor/ble_parser/blustream.py b/custom_components/ble_monitor/ble_parser/blustream.py index 97abd87f..44b40d91 100644 --- a/custom_components/ble_monitor/ble_parser/blustream.py +++ b/custom_components/ble_monitor/ble_parser/blustream.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_blustream(self, data: bytes, mac: str): +def parse_blustream(self, data: bytes, mac: bytes): """Parse Blustream advertisement.""" msg_length = len(data) firmware = "Blustream" diff --git a/custom_components/ble_monitor/ble_parser/bparasite.py b/custom_components/ble_monitor/ble_parser/bparasite.py index 030673b5..a35b809d 100644 --- a/custom_components/ble_monitor/ble_parser/bparasite.py +++ b/custom_components/ble_monitor/ble_parser/bparasite.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_bparasite(self, data: bytes, mac: str): +def parse_bparasite(self, data: bytes, mac: bytes): """Check for adstruc length""" msg_length = len(data) if msg_length == 22: # TODO: Use protocol bits? diff --git a/custom_components/ble_monitor/ble_parser/helpers.py b/custom_components/ble_monitor/ble_parser/helpers.py index 10d43985..6fe08193 100644 --- a/custom_components/ble_monitor/ble_parser/helpers.py +++ b/custom_components/ble_monitor/ble_parser/helpers.py @@ -2,16 +2,16 @@ from uuid import UUID -def to_uuid(uuid: str) -> str: +def to_uuid(uuid: bytes) -> str: """Return formatted UUID""" return str(UUID(''.join(f'{i:02X}' for i in uuid))) -def to_mac(addr: str) -> str: +def to_mac(addr: bytes) -> str: """Return formatted MAC address""" return ':'.join(f'{i:02X}' for i in addr) -def to_unformatted_mac(addr: str) -> str: +def to_unformatted_mac(addr: bytes) -> str: """Return unformatted MAC address""" return ''.join(f'{i:02X}' for i in addr[:]) diff --git a/custom_components/ble_monitor/ble_parser/ibeacon.py b/custom_components/ble_monitor/ble_parser/ibeacon.py index 994f72d2..a174f45b 100644 --- a/custom_components/ble_monitor/ble_parser/ibeacon.py +++ b/custom_components/ble_monitor/ble_parser/ibeacon.py @@ -14,7 +14,7 @@ DEVICE_TYPE: Final = "iBeacon" -def parse_ibeacon(self, data: str, mac: str): +def parse_ibeacon(self, data: bytes, mac: bytes): """Parse iBeacon advertisements""" if data[5] == 0x15 and len(data) >= 27: uuid = data[6:22] diff --git a/custom_components/ble_monitor/ble_parser/inkbird.py b/custom_components/ble_monitor/ble_parser/inkbird.py index f7ed6af9..8e7e27ce 100644 --- a/custom_components/ble_monitor/ble_parser/inkbird.py +++ b/custom_components/ble_monitor/ble_parser/inkbird.py @@ -16,7 +16,7 @@ def convert_temperature(temp): return temperature -def parse_inkbird(self, data: bytes, complete_local_name: str, mac: str): +def parse_inkbird(self, data: bytes, complete_local_name: str, mac: bytes): """Inkbird parser""" msg_length = len(data) firmware = "Inkbird" diff --git a/custom_components/ble_monitor/ble_parser/inode.py b/custom_components/ble_monitor/ble_parser/inode.py index 54453163..6cf4ecbf 100644 --- a/custom_components/ble_monitor/ble_parser/inode.py +++ b/custom_components/ble_monitor/ble_parser/inode.py @@ -41,7 +41,7 @@ def adj_acc(acc): return acc -def parse_inode(self, data: bytes, mac: str): +def parse_inode(self, data: bytes, mac: bytes): """iNode parser""" msg_length = len(data) firmware = "iNode" diff --git a/custom_components/ble_monitor/ble_parser/jaalee.py b/custom_components/ble_monitor/ble_parser/jaalee.py index d1b3b688..977b6de6 100644 --- a/custom_components/ble_monitor/ble_parser/jaalee.py +++ b/custom_components/ble_monitor/ble_parser/jaalee.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_jaalee(self, data: bytes, mac: str): +def parse_jaalee(self, data: bytes, mac: bytes): """Jaalee parser""" msg_length = len(data) firmware = "Jaalee" diff --git a/custom_components/ble_monitor/ble_parser/jinou.py b/custom_components/ble_monitor/ble_parser/jinou.py index 9a7e7ac6..f8216d16 100644 --- a/custom_components/ble_monitor/ble_parser/jinou.py +++ b/custom_components/ble_monitor/ble_parser/jinou.py @@ -6,7 +6,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_jinou(self, data: bytes, mac: str): +def parse_jinou(self, data: bytes, mac: bytes): """Jinou parser""" msg_length = len(data) firmware = "Jinou" diff --git a/custom_components/ble_monitor/ble_parser/kegtron.py b/custom_components/ble_monitor/ble_parser/kegtron.py index 3429457f..09f3b0a3 100644 --- a/custom_components/ble_monitor/ble_parser/kegtron.py +++ b/custom_components/ble_monitor/ble_parser/kegtron.py @@ -21,7 +21,7 @@ } -def parse_kegtron(self, data: bytes, mac: str): +def parse_kegtron(self, data: bytes, mac: bytes): """Parser for Kegtron sensors""" msg_length = len(data) if msg_length == 31: diff --git a/custom_components/ble_monitor/ble_parser/kkm.py b/custom_components/ble_monitor/ble_parser/kkm.py index b39ad0bb..49f6b964 100644 --- a/custom_components/ble_monitor/ble_parser/kkm.py +++ b/custom_components/ble_monitor/ble_parser/kkm.py @@ -8,7 +8,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_kkm(self, data: bytes, mac: str): +def parse_kkm(self, data: bytes, mac: bytes): """Parser for KKM sensors.""" device_type = "K6 Sensor Beacon" result = { diff --git a/custom_components/ble_monitor/ble_parser/laica.py b/custom_components/ble_monitor/ble_parser/laica.py index 7f914f6c..c1c9b790 100755 --- a/custom_components/ble_monitor/ble_parser/laica.py +++ b/custom_components/ble_monitor/ble_parser/laica.py @@ -30,7 +30,7 @@ def read_impedance(data): return impedance -def parse_laica(self, data: bytes, mac: str): +def parse_laica(self, data: bytes, mac: bytes): """Parser for Laica sensors""" xvalue = data[4:] diff --git a/custom_components/ble_monitor/ble_parser/mikrotik.py b/custom_components/ble_monitor/ble_parser/mikrotik.py index ebdc6ee3..0a40ad73 100644 --- a/custom_components/ble_monitor/ble_parser/mikrotik.py +++ b/custom_components/ble_monitor/ble_parser/mikrotik.py @@ -13,7 +13,7 @@ def convert_8_8_to_float(val_1, val_2): return val_1 + (val_2 / 256) -def parse_mikrotik(self, data: bytes, mac: str): +def parse_mikrotik(self, data: bytes, mac: bytes): """Inkbird parser""" msg_length = len(data) firmware = "Mikrotik" diff --git a/custom_components/ble_monitor/ble_parser/miscale.py b/custom_components/ble_monitor/ble_parser/miscale.py index 1946b1c4..8c20e9b2 100644 --- a/custom_components/ble_monitor/ble_parser/miscale.py +++ b/custom_components/ble_monitor/ble_parser/miscale.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_miscale(self, data: bytes, mac: str): +def parse_miscale(self, data: bytes, mac: bytes): """Parser for Xiaomi Mi Scales.""" msg_length = len(data) uuid16 = (data[3] << 8) | data[2] diff --git a/custom_components/ble_monitor/ble_parser/moat.py b/custom_components/ble_monitor/ble_parser/moat.py index 4822c860..af039b36 100644 --- a/custom_components/ble_monitor/ble_parser/moat.py +++ b/custom_components/ble_monitor/ble_parser/moat.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_moat(self, data: bytes, mac: str): +def parse_moat(self, data: bytes, mac: bytes): """Parser for Moat sensors""" msg_length = len(data) firmware = "Moat" diff --git a/custom_components/ble_monitor/ble_parser/oral_b.py b/custom_components/ble_monitor/ble_parser/oral_b.py index e203cf34..ede71761 100644 --- a/custom_components/ble_monitor/ble_parser/oral_b.py +++ b/custom_components/ble_monitor/ble_parser/oral_b.py @@ -28,7 +28,7 @@ } -def parse_oral_b(self, data: bytes, mac: str): +def parse_oral_b(self, data: bytes, mac: bytes): """Parser for Oral-B toothbrush.""" msg_length = len(data) firmware = "Oral-B" diff --git a/custom_components/ble_monitor/ble_parser/oras.py b/custom_components/ble_monitor/ble_parser/oras.py index 0cbaf590..41fade7f 100644 --- a/custom_components/ble_monitor/ble_parser/oras.py +++ b/custom_components/ble_monitor/ble_parser/oras.py @@ -23,7 +23,7 @@ } -def parse_oras(self, data: bytes, mac: str): +def parse_oras(self, data: bytes, mac: bytes): """Parser for Oras toothbrush or Garnet tank.""" msg_length = len(data) result = {"mac": to_unformatted_mac(mac)} diff --git a/custom_components/ble_monitor/ble_parser/qingping.py b/custom_components/ble_monitor/ble_parser/qingping.py index b40816b6..52bd6637 100644 --- a/custom_components/ble_monitor/ble_parser/qingping.py +++ b/custom_components/ble_monitor/ble_parser/qingping.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_qingping(self, data: bytes, mac: str): +def parse_qingping(self, data: bytes, mac: bytes): """Qingping parser""" msg_length = len(data) if msg_length > 12: diff --git a/custom_components/ble_monitor/ble_parser/relsib.py b/custom_components/ble_monitor/ble_parser/relsib.py index ad14845c..faa60b24 100644 --- a/custom_components/ble_monitor/ble_parser/relsib.py +++ b/custom_components/ble_monitor/ble_parser/relsib.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_relsib(self, data: bytes, mac: str): +def parse_relsib(self, data: bytes, mac: bytes): """Relsib parser""" msg_length = len(data) uuid16 = (data[3] << 8) | data[2] @@ -43,6 +43,14 @@ def parse_relsib(self, data: bytes, mac: str): result.update({"battery": 100}) else: result.update({"battery": battery & 0b01111111}) + elif uuid16 in [0x1809] and msg_length == 20: + device_type = "WH52" + try: + temp = round((int.from_bytes(data[4:6], byteorder='big') / 65535) * 175 - 45, 2) + humi = round((int.from_bytes(data[10:12], byteorder='big') / 65535) * 175 - 45, 2) + result.update({"temperature": temp, "humidity": humi}) + except ValueError: + device_type = None elif uuid16 in [0x1809] and msg_length == 10: device_type = "WT51" try: diff --git a/custom_components/ble_monitor/ble_parser/ruuvitag.py b/custom_components/ble_monitor/ble_parser/ruuvitag.py index 07e3f8a2..443eab15 100644 --- a/custom_components/ble_monitor/ble_parser/ruuvitag.py +++ b/custom_components/ble_monitor/ble_parser/ruuvitag.py @@ -9,7 +9,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_ruuvitag(self, data: bytes, mac: str): +def parse_ruuvitag(self, data: bytes, mac: bytes): """Ruuvitag parser""" device_type = "Ruuvitag" result = { diff --git a/custom_components/ble_monitor/ble_parser/sensirion.py b/custom_components/ble_monitor/ble_parser/sensirion.py index c72a0bfe..da1a5f74 100644 --- a/custom_components/ble_monitor/ble_parser/sensirion.py +++ b/custom_components/ble_monitor/ble_parser/sensirion.py @@ -13,7 +13,7 @@ ] -def parse_sensirion(self, data: bytes, complete_local_name: str, mac: str): +def parse_sensirion(self, data: bytes, complete_local_name: str, mac: bytes): """Sensirion parser""" result = {"firmware": "Sensirion"} device_type = complete_local_name diff --git a/custom_components/ble_monitor/ble_parser/sensorpush.py b/custom_components/ble_monitor/ble_parser/sensorpush.py index 4a0a87f1..5d3476d7 100644 --- a/custom_components/ble_monitor/ble_parser/sensorpush.py +++ b/custom_components/ble_monitor/ble_parser/sensorpush.py @@ -67,7 +67,7 @@ def decode_values(mfg_data: bytes, device_type_id: int) -> dict: return values -def parse_sensorpush(self, data: bytes, mac: str): +def parse_sensorpush(self, data: bytes, mac: bytes): """Sensorpush parser""" result = {"firmware": "SensorPush"} device_type = None diff --git a/custom_components/ble_monitor/ble_parser/senssun.py b/custom_components/ble_monitor/ble_parser/senssun.py index 5d18e339..145828b2 100644 --- a/custom_components/ble_monitor/ble_parser/senssun.py +++ b/custom_components/ble_monitor/ble_parser/senssun.py @@ -12,7 +12,7 @@ def read_stable(ctr1): """Parse Stable""" return int((ctr1 & 0xA0) == 0xA0) -def parse_senssun(self, data: bytes, mac: str): +def parse_senssun(self, data: bytes, mac: bytes): """Parser for Senssun Scales.""" xvalue = data[13:19] diff --git a/custom_components/ble_monitor/ble_parser/smartdry.py b/custom_components/ble_monitor/ble_parser/smartdry.py index 290fcb10..78d09f93 100644 --- a/custom_components/ble_monitor/ble_parser/smartdry.py +++ b/custom_components/ble_monitor/ble_parser/smartdry.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_smartdry(self, data: bytes, mac: str): +def parse_smartdry(self, data: bytes, mac: bytes): """Parser for SmartDry cloth dryer""" msg_length = len(data) if msg_length == 16: diff --git a/custom_components/ble_monitor/ble_parser/switchbot.py b/custom_components/ble_monitor/ble_parser/switchbot.py index 7cc90ee1..c841adb5 100644 --- a/custom_components/ble_monitor/ble_parser/switchbot.py +++ b/custom_components/ble_monitor/ble_parser/switchbot.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_switchbot(self, data: bytes, mac: str): +def parse_switchbot(self, data: bytes, mac: bytes): """Switchbot parser""" msg_length = len(data) device_id = data[4] diff --git a/custom_components/ble_monitor/ble_parser/teltonika.py b/custom_components/ble_monitor/ble_parser/teltonika.py index 948e69da..45cf2973 100644 --- a/custom_components/ble_monitor/ble_parser/teltonika.py +++ b/custom_components/ble_monitor/ble_parser/teltonika.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_teltonika(self, data: bytes, complete_local_name: str, mac: str): +def parse_teltonika(self, data: bytes, complete_local_name: str, mac: bytes): """Teltonika parser""" result = {"firmware": "Teltonika"} device_id = (data[3] << 8) | data[2] diff --git a/custom_components/ble_monitor/ble_parser/thermobeacon.py b/custom_components/ble_monitor/ble_parser/thermobeacon.py index 286847f1..b21fe75c 100644 --- a/custom_components/ble_monitor/ble_parser/thermobeacon.py +++ b/custom_components/ble_monitor/ble_parser/thermobeacon.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_thermobeacon(self, data: bytes, mac: str): +def parse_thermobeacon(self, data: bytes, mac: bytes): """Thermobeacon parser""" msg_length = len(data) device_id = data[2] diff --git a/custom_components/ble_monitor/ble_parser/thermopro.py b/custom_components/ble_monitor/ble_parser/thermopro.py index 97c58507..358da258 100644 --- a/custom_components/ble_monitor/ble_parser/thermopro.py +++ b/custom_components/ble_monitor/ble_parser/thermopro.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_thermopro(self, data: bytes, device_type, mac: str): +def parse_thermopro(self, data: bytes, device_type, mac: bytes): """Thermopro parser""" if device_type in ["TP357", "TP359"]: firmware = "Thermopro" diff --git a/custom_components/ble_monitor/ble_parser/tilt.py b/custom_components/ble_monitor/ble_parser/tilt.py index 460d42eb..32f1622b 100644 --- a/custom_components/ble_monitor/ble_parser/tilt.py +++ b/custom_components/ble_monitor/ble_parser/tilt.py @@ -11,7 +11,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_tilt(self, data: bytes, mac: str, ): +def parse_tilt(self, data: bytes, mac: bytes): """Tilt parser""" if data[5] == 0x15 and len(data) == 27: uuid = data[6:22] diff --git a/custom_components/ble_monitor/ble_parser/xiaogui.py b/custom_components/ble_monitor/ble_parser/xiaogui.py index 7333c2bb..e837b60d 100644 --- a/custom_components/ble_monitor/ble_parser/xiaogui.py +++ b/custom_components/ble_monitor/ble_parser/xiaogui.py @@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__) -def parse_xiaogui(self, data: bytes, mac: str): +def parse_xiaogui(self, data: bytes, mac: bytes): """Xiaogui Scales parser""" msg_length = len(data) diff --git a/custom_components/ble_monitor/ble_parser/xiaomi.py b/custom_components/ble_monitor/ble_parser/xiaomi.py index f8819fac..277cb400 100755 --- a/custom_components/ble_monitor/ble_parser/xiaomi.py +++ b/custom_components/ble_monitor/ble_parser/xiaomi.py @@ -1293,7 +1293,7 @@ def obj5a16(xobj): } -def parse_xiaomi(self, data: bytes, mac: str): +def parse_xiaomi(self, data: bytes, mac: bytes): """Parser for Xiaomi sensors""" # check for adstruc length i = 9 # till Frame Counter diff --git a/custom_components/ble_monitor/const.py b/custom_components/ble_monitor/const.py index 74e99d3f..c8ffb25b 100755 --- a/custom_components/ble_monitor/const.py +++ b/custom_components/ble_monitor/const.py @@ -2165,6 +2165,7 @@ class BLEMonitorBinarySensorEntityDescription( 'CGP23W' : 'Qingping', 'EClerk Eco' : 'Relsib', 'WT51' : 'Relsib', + 'WH52' : 'Relsib', 'Blue Puck T' : 'Teltonika', 'Blue Coin T' : 'Teltonika', 'Blue Puck RHT' : 'Teltonika', diff --git a/custom_components/ble_monitor/manifest.json b/custom_components/ble_monitor/manifest.json index cfaa88a9..7ec4932d 100644 --- a/custom_components/ble_monitor/manifest.json +++ b/custom_components/ble_monitor/manifest.json @@ -14,5 +14,5 @@ "btsocket>=0.2.0", "pyric>=0.1.6.3" ], - "version": "12.17.0" + "version": "12.18.0" } diff --git a/custom_components/ble_monitor/test/test_relsib.py b/custom_components/ble_monitor/test/test_relsib.py index 11e99408..289b0657 100644 --- a/custom_components/ble_monitor/test/test_relsib.py +++ b/custom_components/ble_monitor/test/test_relsib.py @@ -105,3 +105,20 @@ def test_relsib_WT51(self): assert sensor_msg["data"] assert sensor_msg["temperature"] == 23.5 assert sensor_msg["rssi"] == -62 + + def test_relsib_WH52(self): + """Test Relsib parser for Relsib WH52.""" + data_string = "043e200201030130ddf27cb6fa14051609184dea05161a18b14c0716a2aa30333531c2" + data = bytes(bytearray.fromhex(data_string)) + # pylint: disable=unused-variable + ble_parser = BleParser() + sensor_msg, tracker_msg = ble_parser.parse_raw_data(data) + + assert sensor_msg["firmware"] == "Relsib" + assert sensor_msg["type"] == "WH52" + assert sensor_msg["mac"] == "FAB67CF2DD30" + assert sensor_msg["packet"] == "no packet id" + assert sensor_msg["data"] + assert sensor_msg["temperature"] == 8.26 + assert sensor_msg["humidity"] == 76.2 + assert sensor_msg["rssi"] == -62 diff --git a/docs/_devices/Relsib-WH52.md b/docs/_devices/Relsib-WH52.md new file mode 100644 index 00000000..528c6f0b --- /dev/null +++ b/docs/_devices/Relsib-WH52.md @@ -0,0 +1,17 @@ +--- +manufacturer: Relsib +name: Portable temperature humidity sensor +model: WH52 +image: Relsib-WH52.png +physical_description: Portable temperature humidity sensor +broadcasted_properties: + - temperature + - humidity + - rssi +broadcasted_property_notes: +broadcast_rate: +active_scan: +encryption_key: +custom_firmware: +notes: +--- diff --git a/docs/assets/images/Relsib-WH52.png b/docs/assets/images/Relsib-WH52.png new file mode 100644 index 00000000..92df750a Binary files /dev/null and b/docs/assets/images/Relsib-WH52.png differ