Blitz-Sensor XIAOMI Mijia Bluetooth lywsd03 für Jeedom

NB : Zur Vergrößerung der Bilder: Rechtsklick / Bild in neuer Registerkarte öffnen

/!\ ACHTUNG /!\ unter 30% Batterie, die auf Jeedom angezeigt wird, gibt es eine Abnahme der Zuverlässigkeit der Informationen, um 20% Ein LOW BATTERIE-Display ist auf dem LCD mit Bluetooth-Verlust sichtbar

Wenn wir mit der Hausautomation beginnen, kehren wir tastend zurück, und unsere Entscheidungen orientieren sich schnell an den billigsten Produkten. Viele von uns beginnen mit einer nicht (zu) teuren Marke und einem guten Ruf, Xiaomi!

Angesichts des Preises entscheiden sich viele von uns für dieses Produkt:

Aber da wir in diesem Moment mit der Hausautomation beginnen, können wir uns die Galeere nicht vorstellen, in die uns dieses kleine, schöne und billige Thermometer versetzen wird!

Erforderlich:

  • Ein Sensor
  • Jeedom mit Bluetooth-Antenne (lokal oder deportiert)
  • BLEA (Plugin)
  • JeeXplorer (Plugin)
  • Ein PC / Handy mit Bluetooth

Es gibt mehrere Themen, die erklären, wie man BLEA mit BindKeys betäubt, blinkt und betäubt oder nichts berührt und ein Xiaomi-Gateway in Kombination mit einem Alexa-Skill verwendet und es dank des AlexaAPI/smarthome-Plugins in Jeedom wieder aufnimmt.

Wir zollen all jenen Tribut, die mit diesen Quellen gearbeitet haben:

https://github.com/atc1441/ATC_MiThermometer

http://atcnetz.blogspot.com/2020/09/custom-firmware-fur-das-4-xiaomi.html

https://github.com/pvvx/ATC_MiThermometer#bluetooth-advertising-formats

https://community.jeedom.com/t/refresh-xiaomi-lywsd03mmc/17216

https://community.jeedom.com/t/valeurs-non-remontees/44590/10

https://community.jeedom.com/t/refresh-xiaomi-lywsd03mmc/17216/77

Jede Methode hat ihre Vor- und Nachteile:

AlexaAPI/Smarthome:

Vorteile:

  • Keine Hacks
  • Sehr einfach
  • Kein Blitzen

Nachteile:

  • Erfordert ein Xiaomi Bluetooth-Gateway
  • Mit Alexa
  • Löcher in den Liften (sehr selten, aber ärgerlich, wenn man eine Heizung steuert)
  • Nicht CloudFree (Internetabhängig)

BLEA mit BindKey:

Vorteile:

  • CloudFree (Internetabhängig)
  • Kein Blitzen

Nachteile:

  • Komplex (Wiederherstellung @MAC, BindKey)
  • Löcher in den Liften (sehr selten, aber ärgerlich, wenn man eine Heizung steuert)
  • BindKey-Änderungen bei Verbindung mit MihHome/Sonstiges
  • Haben Sie eine Bluetooth-Antenne
  • Installation einer Schlüsselentschlüsselungsabhängigkeit

BLEA mit Blitzlicht:

Vorteile:

  • Einfach
  • Parametrierbarer Sensor
  • Bergauf ohne Loch (oder bisher noch nicht festgestellt)

Nachteile:

  • Flashing
  • Haben Sie eine Bluetooth-Antenne

Selbst das alles ist nicht so kompliziert, in einigen Fällen sogar sehr einfach, es ist nicht unbedingt die Vision, die man von Anfang an haben kann. Ich habe lange Zeit herumgetrampelt, getappt, Fehler gemacht und oft nicht sehr einfache Dinge verstanden.

Deshalb schreibe ich dieses Tutorial über die letzte Lösung, wobei ich den Jeedom-Anfänger so weit wie möglich bekannt mache.

Warum diese Methode wählen?

Ich habe sie alle getestet und war nie wirklich zufrieden, zu viel Loch im Lift oder zu viel Haltedruck. Am Ende blieb ich auf der stabilsten zu meinem Geschmack AlexaAPI/smarthome. Ich hatte mich damals nicht für das Blitzen entschieden, da es keine Möglichkeit gab, es in BLEA zu integrieren.

Die neue Firmware hat mich überzeugt, denn diese Lösung scheint mir die stabilste in Bezug auf Aufzüge, bessere Akku-Optimierung und Nachteile können als Vorteile angesehen werden.

Für Vergleich auf 1H mit meinen Sonden noch unter Alexa:

Alexa

BLEA blitzt auf

Festgestellt ohne Anruf!

Wichtiger Hinweis:

Für diejenigen, die die verschiedenen Methoden auf längere Sicht vergleichen möchten, möchte ich Sie daran erinnern, dass die Protokolle standardmäßig täglich über 2 Stunden im CRON-Archiv (ca. 4 Stunden) mit einem Durchschnittswert pro Stunde geglättet/mittelt werden:

Die Archivierung erfolgt einmal täglich in der Nacht die 2h werden von dort angewendet

Dies ergibt sich aus:

Vor 3.00 Uhr gab es nicht nur einen stündlichen Aufstieg, sondern alle Aufstiege wurden im Stundendurchschnitt zusammengefasst.

Diese Parameter müssen für einen objektiven Vergleich geändert werden.

  1. Blitzen

Auch wenn die von Aaron Christophel vorgeschlagene alte Blitzmethode bereits nicht schlecht war

https://atc1441.github.io/TelinkFlasher.html

https://github.com/atc1441/ATC_MiThermometer

http://atcnetz.blogspot.com/2020/09/custom-firmware-fur-das-4-xiaomi.html

Victor pvvx hat es übernommen und verbessert!

https://github.com/pvvx/ATC_MiThermometer

https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

Zusammenfassend lässt sich sagen, dass diese neue Schleife ein automatisches Laden der neuesten Firmware, eine Batterieoptimierung sowie eine Vielzahl zusätzlicher Einstellungen (einschließlich eines physikalischen Aktionsauslösers am Teststift, dazu muss man schweißen:p )

Besuchen Sie die Seite https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

Anmerkung: Wenn Sie einen Sensor haben, der bereits im T1441-Format geblitzt wurde, müssen Sie möglicherweise entweder den T1441-Blitzer verwenden, um die Xiaomi-Firmware zurückzugeben, oder die Seite verwenden https://pvvx.github.io/ATC_MiThermometer/TelinkOTA.html und um ein OTA-Update von T1441 auf PVVX durchzuführen. Kehren Sie dann zum PVVX-Blitzer zurück, um die Einstellungen zu ändern.

  • Aktivieren Sie das Bluetooth des PCs/Mobilgeräts, bevor Sie versuchen, eine Verbindung herzustellen 
  • Geben Sie „LYWSD03“ in „BLE device name prefix filter“ (damit haben Sie nur Xiaomi-Thermometer), „ATC“ wird den Filter für ein bereits geblitztes Thermometer setzen
  • Tippen Sie auf "Verbinden" und wählen Sie Ihr Thermometer
  • Warten Sie, bis die Verbindung hergestellt ist
  • Tippen Sie auf "Do Activation"
  • Warten Sie auf die Wiederherstellung von Xiaomi-Schlüsseln
  • Tippen Sie auf "Custom Firmware ver 2.x"
    • Beachten Sie, dass der Knopf daneben der ist, um die Xiaomi-Basisversion zurückzugeben
  • Tippen Sie auf "Start Flashing"
    • Flash dauert mehrere Sekunden oder Minuten
  • Wenn dies nicht von alleine geschieht, drücken Sie "Reconnect"
  • Sofern nichts Besonderes erforderlich ist, empfehle ich, nur zwei Werte zu berühren:
  • Advertising type ist das Frame-Format, standardmäßig ist es auf „ALL“ und sendet daher auch Frames im Xiaomi-Format, von dem ich denke, dass es die Quelle für verrückte Werte ist, die Sie im letzten Video sehen werden, da ich vergessen habe, diese Einstellung am Anfang zu ändern.

Man wählt also »Atc1441« denn für dieses Format wurde der Code entwickelt, der später verwendet werden soll, und 5000ms.

Durch die Wahl von „Atc1441“ anstelle von „ALL“ werden inkohärente Temperaturen vermieden (z. B.: 3000°C), außerdem das "ALL" zu halten, wird die Batterie für nutzlose Informationen verderben und die Veröffentlichung des Formats, an dem Sie interessiert sind, durch 4 teilen.

Mit diesen Einstellungen stellen wir fest, dass wir 2x mehr verwertbare Daten (5s Vs 10s) mit fast 2x weniger Batterie haben (siehe folgendes Diagramm)
  • Advertising interval ist der Frame Refresh-Wert, den ich gewählt habe, da er die Batterielebensdauer um 7 Monate optimiert, ohne die Refresh-Frequenz zu stark zu beeinträchtigen.
  • Sobald die Einstellungen ausgewählt sind, drücken Sie "Send Config"

Das Blitzen ist vorbei!

  • Ändern der Datei lywsd03.py

Anmerkung: es scheint, dass die ursprüngliche .Py diese Flash-Version ohne Änderung lesen kann (vorbehaltlich Bestätigung), der Unterschied im Code (Parse) würde es ermöglichen, die Daten (bemerkt in der Kopfzeile) zum Zeitpunkt der Anwesenheitsüberprüfung wiederzugeben, ohne eine Verbindung herzustellen, ein bisschen, als ob Sie nach einem WLAN-Netzwerk suchen und hinter dem Namen gab es klare Informationen. Der folgende Code kann also nützlich sein, um den Refresh indirekt zu erzwingen, ohne die Sonde zu blockieren.

Wenn man an Jeedom gewöhnt ist, mag das dumm klingen, aber wenn man anfängt, fragt man sich, wie man eine Datei ändert; Winscp funktioniert nicht ohne Root-Rechte, PuTTY ist unpraktisch, wenn Sie nicht vollständig mit linux… vertraut sind.

Die Antwort ist einfach, JeeXplorer!

JeeXplorer ist ein „Explorer“-Plugin, wie der Name schon sagt, es ermöglicht das Bearbeiten, Erstellen, Löschen von Dateien/Ordnern

  • Öffnen Sie JeeXplorer
  • Navigieren Sie durch die Baumstruktur zu html/plugins/blea/resources/blead/devices/
  • Speichern Sie die Datei lywsd03.py
    • Rechtsklick
  • Lassen Sie die duplizierte Datei wird es dienen, wenn Sie es jemals wiederherstellen möchten
  • Bearbeiten Sie die Datei (Rechtsklick bearbeiten oder Doppelklick links) mit dem Code mit dem Dudusse optimiert durch DrKamp  und geändert durch skillix Um negative Werte zu berücksichtigen:
# coding: utf-8 from bluepy import btle import time import logging import globals import struct from multiconnect import Connector from notification import Notification class Lywsd03(): def __init__(self): self.name = 'lywsd03' self.ignoreRepeat = False def isvalid(self,name,manuf='',data='',mac=''): logging.debug('LYWSD03------isvalid data=%s, mac=%s, name=%s, manuf=%s' % (data, mac, name, manuf)) if name.lower() in [self.name]: return True if data.lower().startswith("1a18") and (mac.lower().startswith("a4:c1:38")): #broadcasted advertising data return True def parse(self,data,mac,name,manuf): logging.info('LYWSD03------adv data=%s, mac=%s, name=%s, manuf=%s' % (data, mac, name, manuf)) action={} action['heute'] = 1 bd = bytes.fromhex(data) (temp,) = struct.unpack('>H', bd[8:10]) if temp > 60000 : temp = 0 - ( 65530 - temp ) temp = temp / 10 humi = bd[10] batt = bd[11] action["temperature"] = temp action["moisture"] = humi action["battery"] = batt logging.info('LYWSD03-----mac=%s, temp=%s, humi=%s, batt=%s' % (mac, temp,humi,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] message = Notification(conn,Lywsd03) notification.subscribe(10) result['battery'] = battery result['id'] = mac logging.debug('LYWSD03------'+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'] = mouture result['temperature'] = temperature result['id'] = conn.mac result['source'] = globals.daemonname globals.JEEDOM_COM.add_changes('devices::'+conn.mac,result) globals.COMPATIBILITY.append(Lywsd03)
  • Speichern und beenden
  • Sichern Sie Ihre Datei, indem Sie sie duplizieren und umbenennen
  • BLEA:
  • Den Dämon wiederbeleben
Nach der alten Version des Codes musste nach unbekannten Währungen gesucht werden, nicht nach der neuen!

/! \ WICHTIG: Wenn Sie eine Remote-Antenne verwenden, denken Sie an

Und

  • Starten Sie einen Scan
    • /! \ Denken Sie daran, das Bluetooth des PCs/Mobiltelefons auszuschalten, da es immer verbunden ist, und dies ist der Fall der Sensor und wird nicht nachweisbar sein oder überprüfen, ob sich das @ MAC nicht bereits in den unbekannten Geräten von BLEA befindet
  • Wählen Sie „lywsd03“ und folgen Sie der klassischen Inklusion
  • Deaktivieren Sie die erzwungene refresh
  • Kreuzen Sie historisieren an, wenn Sie Graphen haben oder Ihre Aufstiege überprüfen möchten

Hier sind Sie fertig!

NB: Wenn Sie extreme Temperaturen haben, vergewissern Sie sich, dass Sie den Adversering-Typ gewechselt haben. Ist dies der Fall, können Sie eine zweite Sicherheit verwenden, indem Sie einen Höchstwert anwenden:

Bonus – Alexa-Plugin (ASH)

Für diejenigen, die ihre Thermometer an Alexa senden möchten, um mündlich darauf zuzugreifen, ist dies die Einrichtung:

  • Finden Sie Geräte in Alexa Plugin, Check weiterleiten, Typ auswählen Temperatursensor
Auch wenn dies nicht erforderlich ist, rate ich Ihnen, ein Nein zu wählen, da er es sonst ernennen wird. „[Objekt]+[Ausrüstung]„ 
  • Wenn Sie sich mit einem NOK (Das funktioniert auch mit dem OK) Klicken Sie darauf, er erklärt Ihnen, was er braucht
notieren Sie die erwarteten generischen Typen
  • Übertragen Sie sie auf die entsprechende Bestellung:
Getriebe der Ausrüstung

Dann, Getriebe der Temperaturregelung

Schließlich wählen wir die generische Art unserer Bestellung, dh, Umgebung/Temperatur
  • Sichern, kehren Sie zum Alexa-Plugin zurück, sichern Sie erneut.
  • Starten Sie einen Scan in der ALEXA-Anwendung

Normalerweise wird Ihr Thermometer entdeckt und OK im Plugin.

Bonus-Bonus

Im letzten Bild habe ich meine Temperatursteuerung so eingestellt, dass sie benachrichtigt wird (Sprache und SMS), wenn mein Kühlschrank länger als 10 Minuten über 11 Grad steigt. Dies vermeidet das Erstellen von Szenarien.

Schreibe einen Kommentar