From 5017541ab3fb6584f079db0212c34790169c669d Mon Sep 17 00:00:00 2001 From: tancou Date: Fri, 5 Feb 2021 19:20:31 +0100 Subject: [PATCH 1/2] Add support for atc1441 custom firmware to Lywsd03 --- resources/blead/devices/lywsd03.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/resources/blead/devices/lywsd03.py b/resources/blead/devices/lywsd03.py index c84239e..80c93a1 100755 --- a/resources/blead/devices/lywsd03.py +++ b/resources/blead/devices/lywsd03.py @@ -18,10 +18,31 @@ def isvalid(self,name,manuf='',data='',mac=''): if data.lower().startswith("95fe") and (mac.lower().startswith("a4:c1:38")): #broadcasted advertising data return True + if data.lower().startswith("1a18") and (mac.lower().startswith("a4:c1:38")): + #broadcasted advertising data from custom firmware + # https://github.com/atc1441/ATC_MiThermometer#advertising-format-of-the-custom-firmware + return True def parse(self,data,mac,name,manuf): action={} action['present'] = 1 + # broadcasted advertising data from custom firmware + # https://github.com/atc1441/ATC_MiThermometer#advertising-format-of-the-custom-firmware + # Also compatible with the recommended custom firmware made by pvvx + # At https://github.com/pvvx/ATC_MiThermometer > atc1441 mode + logging.debug("Lywsd03 PARSE data: %s for %s " % (data, len(data)) ) + if (data.lower().startswith("1a18") and len(data) == 30): + received = data[16:] + logging.debug('Lywsd03 PARSE received: %s' % received ) + temp = int.from_bytes(bytearray.fromhex(received[0:4]), byteorder='big', signed=True) / 10.0 + logging.debug('Lywsd03------ Advertising Data=> Temp: ' + str(temp)) + action['temperature'] = temp + hum = int(received[4:6],16) + logging.debug('Lywsd03------ Advertising Data=> Moist: ' + str(hum)) + action['moisture'] = hum + batt = int(received[6:8],16) + logging.debug('Lywsd03------ Advertising Data=> Batt: ' + str(batt)) + action['battery'] = batt return action def read(self,mac): From 4f8674c4fcafffb238a211a49608acbb389c116e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tancr=C3=A8de=20SUARD?= Date: Mon, 14 Aug 2023 20:09:28 +0200 Subject: [PATCH 2/2] Make a new model in the UI --- .../config/devices/lywsd03/lywsd03atc1441.jpg | Bin 0 -> 61242 bytes .../devices/lywsd03/lywsd03atc1441.json | 93 ++++++++++++++++++ resources/blead/devices/lywsd03.py | 21 ---- resources/blead/devices/lywsd03atc1441.py | 80 +++++++++++++++ 4 files changed, 173 insertions(+), 21 deletions(-) create mode 100644 core/config/devices/lywsd03/lywsd03atc1441.jpg create mode 100644 core/config/devices/lywsd03/lywsd03atc1441.json create mode 100755 resources/blead/devices/lywsd03atc1441.py diff --git a/core/config/devices/lywsd03/lywsd03atc1441.jpg b/core/config/devices/lywsd03/lywsd03atc1441.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8de49efaa1f4751be8c70f3fee491386df392446 GIT binary patch literal 61242 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 BGKByD literal 0 HcmV?d00001 diff --git a/core/config/devices/lywsd03/lywsd03atc1441.json b/core/config/devices/lywsd03/lywsd03atc1441.json new file mode 100644 index 0000000..234a8ce --- /dev/null +++ b/core/config/devices/lywsd03/lywsd03atc1441.json @@ -0,0 +1,93 @@ +{ + "lywsd03atc1441": { + "name": "Xiaomi Lywsd03 atc1441", + "groupe" : "Température", + "configuration" : { + "needsrefresh" : 0, + "name" : "lywsd03atc1441", + "battery_type" : "1x3V CR2032", + "xiaomi" : 1, + "delay" : 900, + "cancontrol" : 0 + }, + "commands": [ + { + "name": "Température", + "type": "info", + "subtype": "numeric", + "display": { + "icon": "<\/i>", + "generic_type": "DONT" + }, + "isVisible": 1, + "isHistorized": 0, + "unite": "°C", + "logicalId": "temperature", + "template": { + "dashboard": "line", + "mobile": "line" + } + }, + { + "name": "Humidité", + "type": "info", + "subtype": "numeric", + "display": { + "icon": "<\/i>", + "generic_type": "DONT" + }, + "isVisible": 1, + "isHistorized": 0, + "unite": "%", + "logicalId": "moisture", + "template": { + "dashboard": "line", + "mobile": "line" + } + }, + { + "name": "Batterie", + "type": "info", + "subtype": "numeric", + "display": { + "icon": "<\/i>", + "generic_type": "DONT" + }, + "isVisible": 0, + "isHistorized": 0, + "unite": "%", + "logicalId": "battery", + "template": { + "dashboard": "line", + "mobile": "line" + } + }, + { + "name": "Refresh", + "type": "action", + "subtype": "other", + "display": { + "generic_type": "GENERIC" + }, + "isVisible": 1, + "isHistorized": 0, + "unite": "", + "logicalId": "refresh" + } + ], + "compatibility": [ + { + "manufacturer": "Xiaomi", + "name": "Température Humidité", + "doc": "", + "type": "Capteurs", + "battery_type": "1x3V CR2032", + "ref" : "", + "comlink": "", + "remark": "Capteurs de Température Humidité avec écran (Lywsd03)", + "inclusion" : "Mode inclusion, le module doit avoir été flashé avec le framework atc1441 ATC_MiThermometer pour fonctionner.", + "imglink": "xiaomiht" + } + ] + } +} diff --git a/resources/blead/devices/lywsd03.py b/resources/blead/devices/lywsd03.py index 80c93a1..c84239e 100755 --- a/resources/blead/devices/lywsd03.py +++ b/resources/blead/devices/lywsd03.py @@ -18,31 +18,10 @@ def isvalid(self,name,manuf='',data='',mac=''): if data.lower().startswith("95fe") and (mac.lower().startswith("a4:c1:38")): #broadcasted advertising data return True - if data.lower().startswith("1a18") and (mac.lower().startswith("a4:c1:38")): - #broadcasted advertising data from custom firmware - # https://github.com/atc1441/ATC_MiThermometer#advertising-format-of-the-custom-firmware - return True def parse(self,data,mac,name,manuf): action={} action['present'] = 1 - # broadcasted advertising data from custom firmware - # https://github.com/atc1441/ATC_MiThermometer#advertising-format-of-the-custom-firmware - # Also compatible with the recommended custom firmware made by pvvx - # At https://github.com/pvvx/ATC_MiThermometer > atc1441 mode - logging.debug("Lywsd03 PARSE data: %s for %s " % (data, len(data)) ) - if (data.lower().startswith("1a18") and len(data) == 30): - received = data[16:] - logging.debug('Lywsd03 PARSE received: %s' % received ) - temp = int.from_bytes(bytearray.fromhex(received[0:4]), byteorder='big', signed=True) / 10.0 - logging.debug('Lywsd03------ Advertising Data=> Temp: ' + str(temp)) - action['temperature'] = temp - hum = int(received[4:6],16) - logging.debug('Lywsd03------ Advertising Data=> Moist: ' + str(hum)) - action['moisture'] = hum - batt = int(received[6:8],16) - logging.debug('Lywsd03------ Advertising Data=> Batt: ' + str(batt)) - action['battery'] = batt return action def read(self,mac): diff --git a/resources/blead/devices/lywsd03atc1441.py b/resources/blead/devices/lywsd03atc1441.py new file mode 100755 index 0000000..9f18eb5 --- /dev/null +++ b/resources/blead/devices/lywsd03atc1441.py @@ -0,0 +1,80 @@ +# coding: utf-8 +from bluepy import btle +import time +import logging +import globals +import struct +from multiconnect import Connector +from notification import Notification + +class Lywsd03Atc1441(): + def __init__(self): + self.name = 'lywsd03atc1441' + self.ignoreRepeat = False + + def isvalid(self,name,manuf='',data='',mac=''): + if name.lower() in [self.name]: + return True + if data.lower().startswith("1a18") and (mac.lower().startswith("a4:c1:38")): + #broadcasted advertising data from custom firmware + # https://github.com/atc1441/ATC_MiThermometer#advertising-format-of-the-custom-firmware + return True + + def parse(self,data,mac,name,manuf): + action={} + action['present'] = 1 + # broadcasted advertising data from custom firmware + # https://github.com/atc1441/ATC_MiThermometer#advertising-format-of-the-custom-firmware + # Also compatible with the recommended custom firmware made by pvvx + # At https://github.com/pvvx/ATC_MiThermometer > atc1441 mode + logging.debug("Lywsd03Atc1441 PARSE data: %s for %s " % (data, len(data)) ) + if (data.lower().startswith("1a18") and len(data) == 30): + received = data[16:] + logging.debug('Lywsd03Atc1441 PARSE received: %s' % received ) + temp = int.from_bytes(bytearray.fromhex(received[0:4]), byteorder='big', signed=True) / 10.0 + logging.debug('Lywsd03Atc1441------ Advertising Data=> Temp: ' + str(temp)) + action['temperature'] = temp + hum = int(received[4:6],16) + logging.debug('Lywsd03Atc1441------ Advertising Data=> Moist: ' + str(hum)) + action['moisture'] = hum + batt = int(received[6:8],16) + logging.debug('Lywsd03Atc1441------ Advertising Data=> Batt: ' + str(batt)) + action['battery'] = batt + return action + + def read(self,mac): + result={} + try: + conn = Connector(mac) + conn.connect() + if not conn.isconnected: + conn.connect() + if not conn.isconnected: + return + batt = bytearray(conn.readCharacteristic('0x3a')) + battery = batt[0] + conn.writeCharacteristic('0x38','0100',response=True) + conn.writeCharacteristic('0x46','f40100',response=True) + notification = Notification(conn,Lywsd03) + notification.subscribe(10) + result['battery'] = battery + result['id'] = mac + logging.debug('Lywsd03Atc1441------'+str(result)) + return result + except Exception as e: + logging.error(str(e)) + return result + + def handlenotification(self,conn,handle,data,action={}): + result={} + if hex(handle) == '0x36': + received = bytearray(data) + temperature = float(received[1] * 256 + received[0]) / 100 + moisture = received[2] + result['moisture'] = moisture + result['temperature'] = temperature + result['id'] = conn.mac + result['source'] = globals.daemonname + globals.JEEDOM_COM.add_changes('devices::'+conn.mac,result) + +globals.COMPATIBILITY.append(Lywsd03Atc1441) \ No newline at end of file