Xiaomi Smart Home Komponenten

Begonnen von FosCo, 21 Dezember 2016, 18:59:59

Vorheriges Thema - Nächstes Thema

FosCo

Update: https://github.com/T0RST3N/fhem-XiaomiSmartHome/wiki

Vielen lieben Dank an Torte, das Modul läuft prima! Fast reif für nen Check in bei FHEM 😊

Teste später ausgiebiger, kaum Zeit, freue mich riesig, dass die Idee so aufgenommen und perfektioniert wurde!!!

Sensoren werden beim ersten Mal genauso langsam erkannt wie beim Testscript, nicht wundern, liegt am Gateway und der API.

Die Reaktion auf Schalter und Motion ist top!
---

Zu den Xiamoi Smarthome Komponenten selbst möchte ich gar nicht viel erzählen, im Forum gibt es vereinzelte Fragen dazu und über Google wird die Hardware und Original App recht gut erklärt.

Direkte Bezugsquellen in Europa sind mir nicht direkt bekannt, diverse Seiten bieten die Geräte allerdings auch zum Versand nach Deutschland an.
Ob sie ein CE-Zeichen tragen oder nicht, weiß ich nicht, da ich die Geräte direkt in China gekauft und natürlich auch nur dort getestet habe.

Zum Vergleich findet Ihr eine Preisliste im Anhang aus einem offiziellen chinesichen Mi-Store, für die Währungs-Umrechnung kann jeder Google, XCurrency o.Ä. bemühen.

Diskussionen über Rechte der originalen App oder was man von "Billiglösungen" halten mag, bitte ich woanders zu führen, mir geht es in diesem Thread um die Einbindung der Daten in FHEM und nichts anderes.
Einen solchen Diskussionsthread Thread verlinke ich auch gerne an dieser Stelle, Hauptsache dieser bleibt technisch :-D

Für die erstmalige Einrichtung des Gateways und der Sub-Devices muss, meinem aktuellen Kenntnisstand nach, zwangsweise die originale Mi Home App inkl. Mi-Konto genutzt werden, ebenso für Updates der Komponenten.

Wer an der Stelle auf Nummer sicher gehen möchte, nutzt dafür ein ausrangiertes Android-Gerät und eine Fake-Emailadresse.

Die chinesischen Seiten lassen sich problemlos per Google oder Bing übersetzen, eine manuelle Einzelübersetzung oder das direkte Einfügen der Google-Ergebnisse habe ich mir daher bisher gespart. Wer Lust und Zeit hat kann dies gerne über einen Fork im Github tun :-)

Als Einstieg diente mir dieser Blog-Eintrag, ebenso für das Xiaomi 2 MQTT Testscript:
https://notes.jmsinfor.com/blog/post/admin/Xiaomi-Hub (inklusive ganz unten verlinkter weiterführender Erklärungen)
Dieses Repository als Proof-Of-Concept und Linksammlung:
https://github.com/snOOrz/homebridge-aqara/blob/master/README.md
Zur Freischaltung des Entwicklermodus dieser Link aus dem vorherigen GitHub:
http://bbs.xiaomi.cn/t-13198850 (Chinesisch, Chrome verwenden oder anders übersetzen)
Und als API-Spec dieses Repository, welches ich mir eigentlich vorgenommen habe zu übersetzen bis zu diesem Post, aber langsam muss ich das mal niederschreiben und es geht auf Weihnachten zu :D:
https://github.com/louisZL/lumi-gateway-local-api

Nun zur Einrichtung:

  • Einrichtung der Geräte gemäß https://techtest.org/smart-home-von-xiaomi-das-xiaomi-mi-smart-gateway-im-test/ oder mit Googles Hilfe.
    Ich musste auf die 3.9er Android-APK downgraden, da die 3.10er App mein Gateway trotz "Mainland China" Einstellung nicht fand. Ebenso wollte die 3.9er App dann mein WLAN (Zwei Fritzboxen im Repeater Modus nicht als Verbindungspartner akzeptieren, ein anderes reines 2.4GHz WLAN eines alten Linksys Routers war dann für das Gateway ok...)
  • Datenabgriff über die Erklärung unter https://notes.jmsinfor.com/blog/post/admin/Xiaomi-Hub und mit https://github.com/louisZL/lumi-gateway-local-api. Zum Testen empfiehlt sich hier auch eine Android App namens "Multicast Tester". Die Befehlslänge ist zwar begrenzt, aber ein {"cmd":"whois"} auf IP 224.0.0.50:4321 oder andere Befehle auf 224.0.0.50:9898 zeigen einem, ob das Gateway im Netzwerk erreichbar ist.
  • Einrichtung eines MQTT-Brokers, ich habe zum Testen auf dem raspi3 "mosquitto" verwendet. Falls Ihr auch mosquitto verwenden möchtet, empfiehlt es sich über apt auch das mosquitto-tools Paket zu installieren, welches praktische subscribe und publish Befehle zum Testen der Schnittstelle bereitstellt. Ebenso gibt es für Android sinnvolle Apps, wie z.B. das "MQTT Dashboard".
    Als MQTT Neuling wunderte es mich, dass das subscribe und provide in genau dieser Reihenfolge geschehen muss, da man als neuer "Subscriber" keine alten Daten sehen kann, dies ist aber im MQTT Standard begründet.
  • Bridge zum Testen einrichten zwischen den UDP-Multicast-JSON-Nachrichten und MQTT mit dem Code aus https://notes.jmsinfor.com/blog/post/admin/Xiaomi-Hub starten. Am einfachsten geht das zum (dauerhaften) Testen via ner "screen" session
  • Einbindung in FHEM via MQTT ist nach den vorherigen Schritten recht einfach, sobald man via xiaomi/# einmal alle Pfade im MQTT dashboard gesehen hat.
    In FHEM ist dies dann ein MQTT_device mit dem Attribut autoSubscribeReadings auf xiaomi/sensor_hr/+/temperature oder xiaomi/motion/+/status oder xiaomi/switch/+/status nach der Einrichtung des MQTT Servers gemäß commandref.
  • Einbindung in FHEM via FHEM-Modul inkl. autocreate wäre meine bevorzugte Variante, da ich mich mit Perl und FHEM-Modulstruktur allerdings noch nicht näher beschäftigt habe, steht das als ToDo auf dem Plan.
    Vielleicht könnt Ihr mir dabei ein paar gute Ansätze liefern, UDP-Server, JSON Parser und gut strukturierte Module gibt es ja bereits, für tiefergehende Recherche hatte ich aber bisher leider keine Zeit.

Mit etwas mehr Zeit habe ich mir vorgenommen die Geräte direkt via FHEM-Modul anzubinden, über Vorschläge, Kommentare und Code-Schnipsel freue ich mich daher :)

{Edit}

Preisliste als Bild hinzugefügt, hier eine etwas miese automatische Übersetzung:
Übersetzung der Liste:

White intelligent camera 399 (nur mit Original App interessant)
Millet multi-function gateway 149 (mus have Gateway)
Cube side of the stem device 69 (lustiger Würfel der durch Drehen Kommandos auslösen kann, habe ich keinen use case für)
Millet door and window sensors 39 (müsste jemand anderes testen, keine Lust noch mehr Batterien zu wechseln, daher nicht gekauft :))
Millet f body specifically sensitive device 49 (Bewegungsmelder, erfolgreich getestet, kommt über die MQTT Variante Recht schnell im FHEM an)
Millet temperature and humidity sensors 39 (Mein Hauptgrund für den Kauf des Systems, bisher acht Stück in Betrieb, einer scheint um 1 Grad versetzt, der Rest stimmt mit der Danfoss CF2 Regelung überein)
Millet wireless switch 29 (Billiger geht's nicht für nen Universalknopf und im Gegensatz zu den gleich teuren Dashbuttons vom großen Fluss reagiert er nicht nur sofort sondern kann auch Double Click, sowie Long Press und Release Stati absetzen! Funktioniert über MQTT bisher auch zuverlässig)

coyote-x

Vielen dank, dass sich jemand der Thematik annimmt.
Ich habe hier xiaomi komponenten im einsatz und bin begeistert vom design und größe.
Mit der app funktionieren diese einwandfrei.
Es wäre grandios, wenn zukünftig eine "einfache" anbindung ins fhem klapen würde.

FosCo

"Einfach" wäre mir auch lieber, allerdings musste ich feststellen, dass die Informationsbeschaffung das Aufwändigste war.
Ebenso verhält es sich für mich nun mit dem Reinfuchsen in Perl und FHEM, aber irgendwann wird das schon.

Ohne auch nur ein bisschen Code selbst geschrieben zu haben, bekomme ich mit der aktuellen Lösung immerhin die Werte zeitnah im FHEM angezeigt.

Den Entwicklermodus kannst du aber schon aktivieren solange dein Gateway die 1.41 Firmware hat. Um den Schritt werden wir auch bei einer direkten Implementierung nicht herumkommen.
Und wenn dir dein Gateway via Multicast Tester App antwortet gibts nen schnelles Erfolgserlebnis gratis :D

thaliondrambor

Hallo FosCo,

super, dass sich jemand mit dem Gateway beschäftigt.
Ich habe in den letzten zwei-drei Wochen ein Modul für die Wifi Lampen von Xiaomi geschrieben (https://forum.fhem.de/index.php/topic,62570.0/all.html) und mich im Zuge dessen auch schon ein bisschen mit dem Gateway beschäftigt.
So weit ich das richtig gesehen habe, ist die "API" (es gibt ja leider keine offizielle für das Gateway, für die Lampen schon), ähnlich wie bei den Lampen. Zwar ein andere Port für den Socket, aber die Nachrichten sind auch JSON-formatiert.

Leider habe ich kein Gateway und es war die letzten Wochen auch überall nicht lieferbar, so dass ich das alles nicht richtig testen kann. Aber wie schon im anderen Post geschrieben, würde mich als nächstes wirklich das Gateway interessieren. Vor allem auch wegen den echt günstigen Tastern und weil mich die Lampen in ihrem Umfang und auch ihrer Einfachheit echt überzeugt haben.

Für mich waren das auch meine ersten größeren Erfahrungen mit Perl und das erste eigene Modul. Ich würde aber trotzdem mal versuchen, ganz "quick and dirty" mein Modul umzuschreiben, so dass es theoretisch mit dem Gateway funktionieren sollte. Allerdings erst wenn ich dafür Zeit habe. Zum Jahreswechsel steht immer viel anderes an und ich möchte noch zwei, drei Kleinigkeiten bei den YeeLights machen.

Gruß

thaliondrambor


Mathea

Hallo,

hat jemand von euch den Xiaomi Roboterstaubsauger? Das Gerät hat auch eine Schnittstelle per App und wäre ebenfalls interessant, in fhem einzubinden.

Gruß,
Mathea

torte

Hallo zusammen,

hat sich jemand die API Dokumentation schon mal angeschaut?

Ich bin gerade dran das in Perl zu gießen, tue mich da zwar noch schwer komme da mehr aus der C# Welt.

Was bei mir bis jetzt geht ist das Finden des Gateyways und das auslesen der Sensoren und abfragen deren Status.
So wie ich die API lese soll aber das Gateway über UDP Multicast 224.0.0.50 Port 9898 Heartbeats (alle 10min) und Statusänderungen senden.
Habe bei mir Wireshark am laufen es kommt aber nix vom Gateway ohne das ich vorher zb. einen CMD:Read sende.
Geht das bei jemanden? Denke es kann nicht Sinn sein das wir im Modul alle x Sekunden den Status aller Sensoren abfragen, oder?

Grüße
Torte


FosCo


torte

4321 ist nur der Port um das Gateway im Lan mit CMD:Whois zu finden das Funktioniert auch  :D

Ich meine mehr das hier :
https://louiszl.gitbooks.io/lumi-gateway-local-api/content/device_heartbeat.html

1. Gateway-Herzschlag

Gateway-Herzschlag Multicasts (ip: 224.0.0.50, Port: 9898). Gateway sendet eine Heartbeat-Meldung alle 10 Sekunden, um den Gateway-PC zu sagen, richtig zu arbeiten.
{"cmd":"heartbeat","model":"gateway","sid":"1022780","short_id":0,"token":"1234567890abcdef","data":"{\"ip\":\"172.22.4.130\"}" }+

Einer der "Token" für das Gateway erzeugt eine zufällige Zeichenfolge für Benutzer-generierte Schreibgerät von "Schlüssel".


Was ich nicht weiß ob ich dem Gateway noch irgendwie beibringen muss das es den Heartbeat senden soll, über die APP oder wie auch immer ich hab da noch nix gefunden.
Mein GW sendet auch nix selbständig ohne das ich vorher was anfrage.

torte

Hallo,

hab mein Gateway komplett resettet nun bekomme ich die Heartbeat und Report Meldungen.
Versuche mich gerade an meinem ersten FHEM Modul, wer also lust hat ist gerne eingeladen mitzumachen.   :D

Grüße
Torte

CoolTux

Hierfür empfehle ich das FHEM Developerguide zu lesen.
Für Dich interessant wäre unter anderem der Teil zum 2 stufigen Modul.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

torte

#11
Hallo CoolTux & hallo alle anderen  8)

Hab mich die Tage durch den Developerguide durchgearbeitet und auch bei so dem ein und anderem Modul mal reingeschaut.

Habe nun angefangen und habe ein Verständnisproblem bzw. komme nicht weiter, sorry wenn ich hier so Anfänger Sachen frage.

Im Developerguide steht im Notify sub das hier:
if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events}))

nach diesem IF rufe ich meine Connect Funktion auf nur wird das bei mir nie so ausgeführt.

Habe dann einfach im Notify einfach auf Init_done abgefragt und dann läuft das Modul erstmal und ich bekomme Readings.

Ist jetzt erstmal nur alles in einem Modul das mit dem 2 Stufigen kommt wenn ich das komplett gecheckt hab (wenn ich das jemals checke  :D )

Hänge hier das pre pre pre pre alpha Modul an.





torte

ach so vielleicht sollte ich die Frage auch richtig stellen  :-\

Kann mir einer Sagen warum das
if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events}))

Bei mir nicht zutrifft. Ich finde meinen Fehler nicht.

Danke

torte

Hallo zusammen,

so bin einen Schritt weitergekommen.

Ist aber noch einiges zu tun.
Zur Zeit geht nur lesen und da ich auch nur MagnetSensoren habe, habe ich auch nur diese getestet. Dank der API sollte
es aber relative schnell gehen das für die andere Devices zu erweitern.
Der Bewegungsmelder ist auf dem Weg von China zu mir, dann geht es mit dem weiter.

Falls jemand testen will bitte melden!

Grüße
Torte





CoolTux

Wenn ich mir Deine Screenshots so ansehe würde ich sagen hast Du doch das 2 stufige Modulprinzip gut verstanden. Super.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net