Xiaomi Smarthome Unterstüzung

Guten Abend,

brauche ich denn für die Xiaomi-Teile trotzdem noch das Gateway? Eigentlich sprechen die ja zigbee…das kann meine Hue-Bridge…

Das Gateway ist zwingend erforderlich. Zum einen verwenden die Skripte die Gateway API über das Netzwerk (was vom Gateway per Zigbee an die Geräte gesendet wird) und zum anderen ist das soweit ich weiß auch ein leicht abgewandeltes Zigbee Protokoll.
Ich habe nicht wirklich Ahnung von Zigbee, daher kann ich Dir dazu keine Details nennen.

Aber postiv ist, dass der Gateway auch als RGB-Signalleuchte und als MP3 Gong arbeiten kann und auch noch rudimentär die Umgebungshelligheit messen kann.
Schlechter als der Kram von eq3 ist der auf jeden Fall nicht, aber billiger …

1 Like

Update, mittlerweile ist das Gateway nicht mehr erforderlich.

Man kann sich einen Zigbee CC2531 USB Stick besorgen und den umflashen.
Ca. 7 Euro.
Dazu braucht man einen CC programmer/debugger. Kostet ca. 8. Euro.
Genaue Beschreibung gibts hier:
https://forum.fhem.de/index.php?topic=84790.0

Dann gibt es eine auf NodeJS basierten Zigbee->MQTT Software von Oscar Neumann

wäre cool wenn man Xiaomi Zigbee direkt in Homegear drin hätte. Technisch sicherlich möglich…
da die Nuss nun geknackt wurde :wink:

3 Likes

Hallo und vielen herzlichen Dank @DasKleingedruckte,

deine Scripts für die Unterstützung der Xiaomi Familie sind nun auch bei mir seit einem halben Jahr zuverlässig im Einsatz. Mittlerweile ist die Anzahl meiner Geräte auf über 50 angestiegen, so dass mittlerweile 2 Gateways im Einsatz sind. Mit einem kürzlichen Update von Homegear auf die 0.8.0-2362 nightly, dem Homegear-Xiaomi Scriptstand vom 20.10. und der Firmware 1.4.1_159.0143 auf den Gateways ist der Einsatz derzeit leider bei mir nicht möglich. Ich werde die Vermutung nicht los, dass es daran liegt, dass ich zwei Gateways einsetze. Das Fehlerbild:

  • alle 5s wird von allen Geräten ein read und ein read_ack ins mihome.log geschrieben
Beispiel
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d00022793ff"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"magnet","sid":"158d00022793ff","short_id":42784,"data":"{\"voltage\":2985,\"status\":\"open\"}"}
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d0001ae964f"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"motion","sid":"158d0001ae964f","short_id":36926,"data":"{\"voltage\":3025}"}
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d0002200cd3"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"magnet","sid":"158d0002200cd3","short_id":43958,"data":"{\"voltage\":3005,\"status\":\"close\"}"}
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d0002153a46"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"smoke","sid":"158d0002153a46","short_id":7604,"data":"{\"voltage\":3085,\"alarm\":\"0\"}"}
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d000215dc45"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"smoke","sid":"158d000215dc45","short_id":49672,"data":"{\"voltage\":3085,\"alarm\":\"0\"}"}
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d0001f26b93"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"magnet","sid":"158d0001f26b93","short_id":39745,"data":"{\"voltage\":2985,\"status\":\"close\"}"}
2018-10-22 20:37:13 >>  {"cmd": "read", "sid":"158d0001f48de3"}
2018-10-22 20:37:13 >>  {"cmd":"read_ack","model":"motion","sid":"158d0001f48de3","short_id":34528,"data":"{\"voltage\":2985}"}
  • dadurch steht auch im homegear.log (level 4) alle 5s für jedes Gerät ein RPC: setValue:
Beispiel
10/22/18 20:35:28.199 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
10/22/18 20:35:28.203 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
10/22/18 20:35:28.206 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
10/22/18 20:35:28.211 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
10/22/18 20:35:28.213 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
10/22/18 20:35:28.215 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
10/22/18 20:35:28.220 Script Engine Server: Info: Client number 21 is calling RPC method: setValue
  • wärend der Startups von homegear wird das Script von peer 11 und 22 (die Gateways) wiederholt beendet
Beispiel
10/22/18 21:07:38.560 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:07:38.561 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:07:45.872 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:07:45.872 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:07:52.710 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:07:52.710 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:07:59.641 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:07:59.641 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:08:06.367 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:08:06.367 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:08:13.600 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:08:13.601 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:08:20.825 Module Miscellaneous: Error: Script of peer 22 was killed. Restarting...
10/22/18 21:08:20.825 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
10/22/18 21:08:27.658 Module Miscellaneous: Error: Script of peer 11 was killed. Restarting...
  • innerhalb eines halben Tages ist das log so groß, dass homegear abschmiert
  • reports z.B. beim Betätigen eines Fensterkontakts stehen nur noch sporadisch im log. ein genaues Muster konnte ich noch nicht herausfinden.
  • wenn reports geloggt werden, so kommen die reports aller Geräte eines Gateways wie sie mit dem alten Stand vor dem Update auch geloggt wurden
  • reports von Geräten des anderen Gateways werden mit vorangestelltem UNKNOWN geloggt:
Beispiel
2018-10-22 20:32:44 >>  {"cmd":"report","model":"magnet","sid":"158d0001e75e56","short_id":48738,"data":"{\"status\":\"close\"}"}
2018-10-22 20:32:44 >>  {"cmd":"report","model":"magnet","sid":"158d0001e75e56","short_id":48738,"data":"{\"status\":\"open\"}"}
2018-10-22 20:32:45 >>  {"cmd":"report","model":"magnet","sid":"158d0001e75e56","short_id":48738,"data":"{\"status\":\"close\"}"}
2018-10-22 20:32:45 >>  {"cmd":"report","model":"magnet","sid":"158d0001e75e56","short_id":48738,"data":"{\"status\":\"open\"}"}
UNKNOWN >> 2018-10-22 20:32:45 >>  {"cmd":"report","model":"magnet","sid":"158d000225036c","short_id":42908,"data":"{\"status\":\"close\"}"}
UNKNOWN >> 2018-10-22 20:32:45 >>  {"cmd":"report","model":"magnet","sid":"158d000225036c","short_id":42908,"data":"{\"status\":\"open\"}"}
UNKNOWN >> 2018-10-22 20:32:46 >>  {"cmd":"report","model":"magnet","sid":"158d000225036c","short_id":42908,"data":"{\"status\":\"close\"}"}
UNKNOWN >> 2018-10-22 20:32:46 >>  {"cmd":"report","model":"magnet","sid":"158d000225036c","short_id":42908,"data":"{\"status\":\"open\"}"}

Es würde mich freuen, wenn jemand eine Idee hätte das Problem einzugrenzen oder gar zu beheben. Eventuell besteht ja auch von Franks Seite Interesse etwas am Quellcode zu ändern, sollte es daran liegen.

danke und einen schönen Abend,
Simon

1 Like

Hallo Simon,

das klingt ganz danach, als ob irgendwo ungeplant eine Exception auftritt. Das liegt dann nicht an Homegear, sondern an meiner Xiaomi Implementierung. Da ich nur einen Gateway besitze, möchte ich nicht ausschließen, dass ich da einen Fehler eingebaut habe. Mit Deiner Mithilfe können wir das aber bestimmt lösen.
Kannst Du einfach einmal Homegear stoppen, dann alle Logdateeien löschen und nochmals starten (ich denke Loglevel 4 ist richtig). Dann nach kurzer Zeit Homegear wieder stoppen und alle Logdateien zusammenpacken und mir als PN senden oder hier anhängen.
Ich erwarte in der mihome.log die Kommunikation zu sehen, in der homegear-script.err den Grund für den Neustart des Moduls zu lesen und ggf in den anderen Dateien noch weitere Info, falls ich nicht weiterkomme.

Gruß,
Frank

2 Likes

Besten Dank Frank für deine Bereitschaft!
Habe eben alles nach deiner Vorgabe gepackt: archiv.targz (29,0 KB)
Das Forum erlaubt kein tar.gz, bitte den Punkt hinzufügen. :wink:
Ich hoffe du wirst fündig, ansonsten bitte melden!

Erste Rückmeldung: Ich bin mir sehr sicher, die Ursache für das Problem gefunden zu haben und ja, es hängt mit dem zweiten Gateway zusammen. Ich muss nur noch Gedanken machen wie das Problem zu lösen ist. Ich hoffe Du hast ein wenig Geduld …

Hallo Simon,

könnte funktionieren … ich kann das ohne zweiten Gateway nur bedingt testen.
Kannst Du bitte die aktuelle Version 0.6.1 von heute ausprobieren? Wenn es nicht geht bitte nochmals die Logdateien als Archiv anhängen.

Gruß,
Frank

1 Like

Hallo Frank,

habe eben getestet. Das Log ist leider noch immer voll. Die scriptengine.err spuckt aus:

unable to bind address [98]: Address already in use
...

Falls du möchtest und es dir etwas bringt, kann ich dir auch anbieten mal abends per TeamViewer drauf zu schauen.

danke und viele Grüße,
Simon

archiv.targz (192,2 KB)

Hallo Simon,

ob Du es glaubst oder nicht, wir sind tatsächlich schon ein Stück weiter. Der zweite Gateway wird jetzt erkannt und behandelt.
Ich will kurz erklären, wo mein Problem liegt: Das “Miscellaneous Device” startet ein Script, das alle Xiaomi Devices einsammelt. Dieses Script ist an den Gateway geknüpft, was dazu führt, dass der zweite Gateway auch nochmal den Vorgang startet. In der alten Version ist dann das Script aufgrund des vom ersten Script belegten Sockets mit einem Fehler abgebrochen und wurde durch Homegear automatisch neu gestartet.
In der aktuellen Version habe ich das Script dann sauber beendet (mit Exitcode 0), allerdings wird das dann von Homegear trotzdem neu gestartet. Das konnte ich bei mir gestern nicht feststellen, ist aber offensichtlich bei Dir der Fall.
Nächster Plan wäre also, dass ich das Script nicht beende wenn ich erkenne, dass schon eine Instanz am Laufen ist, sondern einfach nichts tue, bis Homegear beendet wird.
Als Schnellschuss kannst Du mal die Datei MiSmartHome.php durch die angehängte Version MiSmartHome.txt ersetzen (Dateiname zu MiSmartHome.php ändern). Ich kann es leider gerade nicht ausprobieren. Wenn alles so geht wie gedacht, erhältst Du noch genau eine Fehlermeldung “unable to bind address …”, die sich aber auch unterdrücken lässt. Momentan ist es aber gut so um zu sehen, ob alles wie gewollt läuft.

Gruß,
Frank

MiSmartHome.txt (3,9 KB)

1 Like

Schön, dass du dich so rege darum kümmerst :+1:t4:
Habe wieder getestet; unable to bind address meldet sich immer noch öfters.

Hier das archiv.targz (34,7 KB) :slightly_smiling_face:

1 Like

OK, letzter Schnellschuss, wenn das nicht klappt wird’s ernst …
Ändert bitte Zeile 178 in der MiCentral.php, indem Du ein @ vor Socket_bind( ) schrebst. Das sollte dann so aussehen:
$res = @socket_bind($this->_socket, ‘0.0.0.0’, 9898);
Dann bitte erneut testen. Jetzt gibt es zwar die “unable to bind address …” Meldungen nicht mehr, aber anhand der Logdateien müsste sich trotzdem feststellen lassen ob es nun läuft.

1 Like

sodele, hier wieder das archiv.targz (41,2 KB)

Die Errorlogs sind mittlerweile leer.
Read und read_ack kommen wie gehabt ca. alle 7s. Ob die reports zuverlässig kommen, kann ich erst daheim wieder testen.

1 Like

Die letzten beiden Änderungen haben es leider nicht besser gemacht. Ich bleibe dran, habe aber die voraussichtlich nächsten Tage leider nicht so viel Zeit, daher kann es ein wenig dauern …
Lass und das mal zu Github verlegen, um hier nicht alles zuzuspammen:

1 Like