[Neues Modul] Xiaomi Smart Home ohne Gateway direkt an FHEM

Begonnen von neumann, 22 Februar 2018, 18:00:22

Vorheriges Thema - Nächstes Thema

wertz

Hallo zusammen,
erst mal Dankeschööööön für die Aktualisierung, welche ich gleich installiert habe.
Pairing, Autocreate hat sofort funktioniert und auch mein switch wurde erkannt und zu den gepairten Komponenten hinzugefügt. TOP!!
Leider musste ich feststellen dass nach einigen Stunden (es waren 10) die Werte der Sensoren nicht mehr aktualisiert werden.
erst nach einem
pi@raspberrypi:~/xiaomi-zb2mqtt $ node index.js
werden Daten weitergegeben und aktualisiert.

-pi@raspberrypi:~/xiaomi-zb2mqtt $ node index.js
-Starting bridge using Chip usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B001                                                                                                                                                             2022E2B-if00
-Bridge is ready. Current devices:
-0x00158d000182f363 45561 lumi.sensor_magnet
-0x00158d0001bb5212 65018 lumi.sensor_magnet
-0x00158d0001c2aeb0 65235 lumi.sensor_ht
-0x00158d00015b8246 55807 lumi.sensor_motion
-0x00158d0001824915 60085 lumi.sensor_switch

Es sieht so aus als würden die gepairten Sensoren "einschlafen" oder die Bridge "schläft ein".
Kann es auch an etwas anderem liegen, dass die Daten nicht mehr aktualisiert weden?
bin für jeden Hinweis offen.... ;)

Gruß wertz

bin nach

thorsten.d

Hallo Oskar,
ich habe meine Sensoren jetzt seit meinem letzten Post in Betrieb und es läuft ausgezeichnet! Vielen Dank für deinen Guide hier!
Lediglich die unglaublich helle grüne LED am USB Stick stört mich ein wenig.
Ist es möglich diese (evt. per Firmware?) zu deaktivieren? Aus dem Hex File in deiner Git Repository werde ich leider überhaupt nicht schlau.

Würde mich über eine Antwort freuen!

neumann

Zitat von: thorsten.d am 10 April 2018, 19:48:41
Hallo Oskar,
ich habe meine Sensoren jetzt seit meinem letzten Post in Betrieb und es läuft ausgezeichnet! Vielen Dank für deinen Guide hier!
Lediglich die unglaublich helle grüne LED am USB Stick stört mich ein wenig.
Ist es möglich diese (evt. per Firmware?) zu deaktivieren? Aus dem Hex File in deiner Git Repository werde ich leider überhaupt nicht schlau.

Würde mich über eine Antwort freuen!

die Firmware ist nur teilweise anpassbar und nur mit einem kommerziellen Compiler kompilierbar. Ich habe die LED einfach entfernt.
Modulentwickler
- Spotify #72490
- Nello #75127

neumann

Zitat von: wertz am 09 April 2018, 13:57:36
Hallo zusammen,
erst mal Dankeschööööön für die Aktualisierung, welche ich gleich installiert habe.
Pairing, Autocreate hat sofort funktioniert und auch mein switch wurde erkannt und zu den gepairten Komponenten hinzugefügt. TOP!!
Leider musste ich feststellen dass nach einigen Stunden (es waren 10) die Werte der Sensoren nicht mehr aktualisiert werden.
erst nach einem
pi@raspberrypi:~/xiaomi-zb2mqtt $ node index.js
werden Daten weitergegeben und aktualisiert.

-pi@raspberrypi:~/xiaomi-zb2mqtt $ node index.js
-Starting bridge using Chip usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B001                                                                                                                                                             2022E2B-if00
-Bridge is ready. Current devices:
-0x00158d000182f363 45561 lumi.sensor_magnet
-0x00158d0001bb5212 65018 lumi.sensor_magnet
-0x00158d0001c2aeb0 65235 lumi.sensor_ht
-0x00158d00015b8246 55807 lumi.sensor_motion
-0x00158d0001824915 60085 lumi.sensor_switch

Es sieht so aus als würden die gepairten Sensoren "einschlafen" oder die Bridge "schläft ein".
Kann es auch an etwas anderem liegen, dass die Daten nicht mehr aktualisiert weden?
bin für jeden Hinweis offen.... ;)

Gruß wertz

bin nach

kannst du mal die betroffenen Sensoren direkt neben den Stick legen und testen? Klingt für mich nach einem Empfangsproblem.

Lg
Modulentwickler
- Spotify #72490
- Nello #75127

wertz

Zitat von: neumann am 10 April 2018, 21:30:06
kannst du mal die betroffenen Sensoren direkt neben den Stick legen und testen? Klingt für mich nach einem Empfangsproblem.

Lg

Hi neumann,
meine Sensoren liegen etwa 50 cm neben dem Stik ohne jedwelche Hindernisse dazwischen.
Ich habe eine Vermutung woran das liegen könnte, bin mir aber nicht sicher wie ich das prüfen kann.
In der Datei "xiaomi.service" habe ich die Einträge unter  -ExecStart=/usr/bin/nodejs /root/xiaomi-zb2mqtt/index.js diese Anpassungen gemacht.
mit einem "service xiaomi status" erhalte ich folgende Meldung
-
pi@raspberrypi:~/xiaomi-zb2mqtt $ service xiaomi status
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2018-04-10 21:49:55 CST; 3s ago
  Process: 1037 ExecStart=/usr/bin/nodejs /root/xiaomi-zb2mqtt/index.js (code=exited, status=8)
Main PID: 1037 (code=exited, status=8)
-
Habe ich an der Stelle einen falschen Pfad angegeben?
und wie kann ich das prüfen...
An dieser Stelle schon mal vielen Dank für deine Mühen.
Gruss
wertz

Himberger

Das mit dem "Einschlafen" der Sensoren hab ich auch beobachtet.
Fing bei mir damit an dass das pairen nur geklappt hat wenn ich node index.js "händisch" aufgerufen habe.
Dann klappt das sogar in wenigen Sekunden.
Die Sensoren übertragen dann brav all ihre Werte in Echtzeit.
Aber sobald ich Putty schließe ist wieder Ruhe.
Auch ich vermute dass ich einen Fehler im Pfad habe. Ich schau heute Abend mal was bei mir so eingetragen ist.

neumann

Die Sensoren schlafen nicht ein, euer Prozess läuft einfach nicht mehr sobald die Sitzung zu ist.
Das testet ihr, indem ihr mit sudo den execStart Befehl ausführt.
Modulentwickler
- Spotify #72490
- Nello #75127

Himberger

Zitat von: neumann am 11 April 2018, 18:01:25
Die Sensoren schlafen nicht ein, euer Prozess läuft einfach nicht mehr sobald die Sitzung zu ist.
Das testet ihr, indem ihr mit sudo den execStart Befehl ausführt.

Jup, stimmt.
Ich habe inzwischen auch meinen Fehler gefunden.
Zum einen war es der Dateipfad (wie schon vermutet) und zum anderen bin ich alle Schritte noch mal durchgegangen und habe festgestellt dass der Service gar nicht aktiviert war. Hab ich, warum auch immer, übersehen.
Jetzt kommen auch brav alle Werte an. Ich hoffe mal dass das morgen auch noch so ist ;-)


Falls wir hier nicht mehr voneinander hören:

Danke für die feine Anleitung. Hat mich als Linux-DAU zwar etwas Recherche gekostet weil mir einige Dinge nicht klar bzw selbstverständlich waren (wie z.B. dass man Nodejs vorher installieren muss) aber nun löppt es ja erst mal.

wertz

Zitat von: neumann am 11 April 2018, 18:01:25
Die Sensoren schlafen nicht ein, euer Prozess läuft einfach nicht mehr sobald die Sitzung zu ist.
Das testet ihr, indem ihr mit sudo den execStart Befehl ausführt.

Hallo neumann,
ich habe das so verstanden dass man über ssh folgendes eingeben muss:

pi@raspberrypi:~/xiaomi-zb2mqtt $ sudo node index.js
Starting bridge using Chip usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0012022E2B-if00
Bridge is ready. Current devices:
0x00158d000182f363 45561 lumi.sensor_magnet
0x00158d0001bb5212 65018 lumi.sensor_magnet
0x00158d0001c2aeb0 65235 lumi.sensor_ht
0x00158d00015b8246 55807 lumi.sensor_motion
0x00158d0001824915 60085 lumi.sensor_switch

Danach werden die Werte der Sensoren weitergegeben,
aber nur so lange wie die Sitzung geöffnet ist.
Sobald die Sitzung geschlossen ist, läuft der Prozess nicht mehr...

Was mache ich falsch?
@ Himberger:
Wie hast du die Dateipfade geprüft und entsprechend angepasst?

Vielen Dank für eure Mühen...

thorsten.d

Zitat von: neumann am 10 April 2018, 21:29:19
die Firmware ist nur teilweise anpassbar und nur mit einem kommerziellen Compiler kompilierbar. Ich habe die LED einfach entfernt.

Habe sie nun auch erfolgreich ausgelötet, schon viel schöner! :)

Zitat von: wertz am 14 April 2018, 06:59:42
Hallo neumann,
ich habe das so verstanden dass man über ssh folgendes eingeben muss:

pi@raspberrypi:~/xiaomi-zb2mqtt $ sudo node index.js
Starting bridge using Chip usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0012022E2B-if00
Bridge is ready. Current devices:
0x00158d000182f363 45561 lumi.sensor_magnet
0x00158d0001bb5212 65018 lumi.sensor_magnet
0x00158d0001c2aeb0 65235 lumi.sensor_ht
0x00158d00015b8246 55807 lumi.sensor_motion
0x00158d0001824915 60085 lumi.sensor_switch

Danach werden die Werte der Sensoren weitergegeben,
aber nur so lange wie die Sitzung geöffnet ist.
Sobald die Sitzung geschlossen ist, läuft der Prozess nicht mehr...

Was mache ich falsch?
@ Himberger:
Wie hast du die Dateipfade geprüft und entsprechend angepasst?

Vielen Dank für eure Mühen...

Lies dir noch einmal den ersten Beitrag von Oskar durch, da steht, wie du es mit systemctl auch bei jedem Neustart vom System starten lassen kannst.
Mit sudo systemctl status xiaomi.service kannst du dann die Node Ausgabe checken und schnell erkennen ob es richtig läuft


Ansonsten gibts auch noch https://pm2.keymetrics.io/ oder https://www.gnu.org/software/screen/manual/screen.html uvm.

wertz

Zitat von: thorsten.d am 16 April 2018, 02:26:05
Habe sie nun auch erfolgreich ausgelötet, schon viel schöner! :)

Lies dir noch einmal den ersten Beitrag von Oskar durch, da steht, wie du es mit systemctl auch bei jedem Neustart vom System starten lassen kannst.
Mit sudo systemctl status xiaomi.service kannst du dann die Node Ausgabe checken und schnell erkennen ob es richtig läuft


Ansonsten gibts auch noch https://pm2.keymetrics.io/ oder https://www.gnu.org/software/screen/manual/screen.html uvm.

Hallo thorsten.d
herzlichen Dank für deinen Hinweis,
habe ich auch sofort ausprobiert, leider ohne Erfolg.
Ich habe nun alles runtergeschmissen und nochmals von vorne angefangen und nochmals versucht den service mittels sudo zu starten,
Das Ergebnis hat sich leider zum schlechten verändert, jetzt habe ich zusätzlich noch eine Fehlermeldung

pi@raspberrypi:~/xiaomi-zb2mqtt $ sudo systemctl status xiaomi.service -l
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled)
   Active: active (exited) (Result: exit-code) since Sun 2018-04-15 20:01:09 CST                                                                   ; 24h ago
Main PID: 453 (code=exited, status=203/EXEC)
   CGroup: /system.slice/xiaomi.service

Apr 15 20:01:09 raspberrypi systemd[1]: Starting Xiaomi...
Apr 15 20:01:09 raspberrypi systemd[1]: Started Xiaomi.
Apr 15 20:01:09 raspberrypi systemd[1]: xiaomi.service: main process exited, cod                                                                   e=exited, status=203/EXEC
Apr 15 20:02:26 raspberrypi systemd[1]: Started Xiaomi.
pi@raspberrypi:~/xiaomi-zb2mqtt $ clear
pi@raspberrypi:~/xiaomi-zb2mqtt $ sudo systemctl status xiaomi.service -l
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled)
   Active: active (exited) (Result: exit-code) since Sun 2018-04-15 20:01:09 CST; 24h ago
Main PID: 453 (code=exited, status=203/EXEC)
   CGroup: /system.slice/xiaomi.service

Apr 15 20:01:09 raspberrypi systemd[1]: Starting Xiaomi...
Apr 15 20:01:09 raspberrypi systemd[1]: Started Xiaomi.
Apr 15 20:01:09 raspberrypi systemd[1]: xiaomi.service: main process exited, code=exited, status=203/EXEC
Apr 15 20:02:26 raspberrypi systemd[1]: Started Xiaomi.
pi@raspberrypi:~/xiaomi-zb2mqtt $ sudo node index.js
Starting bridge using serial port /dev/ttyACM0
Error: ENOENT: no such file or directory, rename '/home/pi/xiaomi-zb2mqtt/node_modules/zigbee-shepherd/lib/database/dev.db~' -> '/home/pi/xiaomi-zb2mqtt/node_modules/zigbee-shepherd/lib/database/dev.db'
Bridge is ready. Current devices:
0x00158d0001c2aeb0 30348 lumi.sensor_ht

die Datei dev.db ist im angegebenen Verzeichnis vorhanden, zumindest wenn ich mittels WinSCP verbunden bin sehe ich die datei im explorer. Komisch...

Meine Xiaomi.service liegt unter /etc/systemd/system sieht wie folgt aus:

[Unit]
Description=Xiaomi

[Service]
ExecStart=/usr/local/bin/node /home/pi/xiaomi-zb2mqtt/index.js
Restart=always
RestartSec=5
RemainAfterExit=yes
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=xiaomi

[Install]
WantedBy=multi-user.target

meine index.js liegt unter /home/pi/xiaomi-zb2mqtt/ und sieht wie folgt aus

var debug = require('debug')('xiaomi-zb2mqtt')
var util = require("util");
var perfy = require('perfy');
var ZShepherd = require('zigbee-shepherd');
var mqtt = require('mqtt')
var Q = require('q')
var serialport = require('serialport');
var config = require('yaml-config');

var bridgeID = 'bridge';
var shepherd = new ZShepherd('/dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0012022E2B-if00');
var serial_port;

var settings = config.readConfig(__dirname + '/configuration.yaml');

if (settings.zigbee && settings.zigbee.bridge) {
    bridgeID = settings.zigbee.bridge;
}

var options;
if (settings.mqtt.user && settings.mqtt.password) {
    options = {
        username: settings.mqtt.user,
        password: settings.mqtt.password,
    };
}

var client = mqtt.connect('mqtt://localhost');


var fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

Nun bin ich mit meinem Latei (welches eh schon sehr begrenzt ist) total am Ende.

Hab nun 35 Sensoren angelernt (gepairt) die nur funktionieren solange die SSH Sitzung geöffnet ist...
Würde mich über weitere Hilfe freuen
Gruß
wertz



thorsten.d

#41
Existiert tatsächlich dev.db oder nur dev.db~?
Check mal den Inhalt mit
cat ~/xiaomi-zb2mqtt/node_modules/zigbee-shepherd/lib/database/dev.db

Funktioniert es momentan noch, wenn du das Skript direkt mit sudo node index.js aufrufst?

Wenn ja, dann nimm einfach pm2, das ist auch sehr gut.
https://pm2.keymetrics.io/docs/usage/quick-start/


Die index.js solltest du übrigens nicht verändern.

wertz

#42
Hallo Thorsten.d
vielen Dank für deine Antworten.
den Inhalt der dev.db habe ich mit dem Befehl
- cat ~/xiaomi-zb2mqtt/node_modules/zigbee-shepherd/lib/database/dev.db
nachgeschaut und finde dort unter Anderem die ID´s meiner Sensoren.
Des Weiteren habe ich die originale index.js wieder eingefügt.
Komisch ist, dass ich nach dieser Aktion die Fehlermeldung nicht mehr habe.

momentan funktioniert der Dienst sauber aber nur solange die SSH Sitzung aktiv ist
ich Starte den Dienst (angemeldet als pi) mit
pi@raspberrypi:~ $ sudo systemctl enable xiaomi und
pi@raspberrypi:~/xiaomi-zb2mqtt $ sudo node index.js
Wenn du noch eine Idee hast, gerne her damit, deinen Hinweis auf pm2 werde ich mir aus jeden Fall durchlesen, vielleicht finde ich dort des Rätsels Lösung.
Vielen Dank nochmal
Gruß
wertz

thorsten.d

Nach
sudo systemctl enable xiaomi

musst du ebenfalls noch
sudo systemctl start xiaomi

Du solltest das Skript dabei nicht von Hand mit sudo node index.js starten, weil es nicht doppelt laufen darf.

Also starte den Pi am besten noch einmal neu und dann nur die Befehle:
sudo systemctl enable xiaomi
sudo systemctl start xiaomi
sudo systemctl status xiaomi

wertz

Zitat von: thorsten.d am 17 April 2018, 21:38:31
Nach
sudo systemctl enable xiaomi

musst du ebenfalls noch
sudo systemctl start xiaomi

Du solltest das Skript dabei nicht von Hand mit sudo node index.js starten, weil es nicht doppelt laufen darf.

Also starte den Pi am besten noch einmal neu und dann nur die Befehle:
sudo systemctl enable xiaomi
sudo systemctl start xiaomi
sudo systemctl status xiaomi

Juhuuuu!!! Super, jetzt funkitioniert es!!!
Du weist gar nicht wie ich mich jetzt freue!!!
vielen vielen Dank für deine Geduld und Zeiit die du aufgewendet hast
Danke