[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,
nachdem jetzt die Sensordaten in FHEM ankommen habe ich diese auch in mein FTUI integriert.
Passt soweit alles, ausser dass bei den Fenstersensoren der Wert "battery" (Batteriespannung) nicht übermittelt wird.
Wenn ich das richtig gesehen habe wird der Wert auch im MQTT nicht angezeigt.
Seither hatte ich die Sensoren über das Xiaomi Gateway eingebunden und auch die Batteriewerte erhalten.

Ist das über den MQTT nicht möglich? Oder kann das noch implementiert werden?

Gruß und Dank
wertz

tigru77

Hallo Zusammen,

gibt es die Möglichkeit den Wasser Sensor (XIAOMI Aqara Water Sensor) zu pairen?

Grüße
Timo

neumann

Sind das Aqara?

Zitat von: wertz am 21 April 2018, 10:51:32
Hallo zusammen,
nachdem jetzt die Sensordaten in FHEM ankommen habe ich diese auch in mein FTUI integriert.
Passt soweit alles, ausser dass bei den Fenstersensoren der Wert "battery" (Batteriespannung) nicht übermittelt wird.
Wenn ich das richtig gesehen habe wird der Wert auch im MQTT nicht angezeigt.
Seither hatte ich die Sensoren über das Xiaomi Gateway eingebunden und auch die Batteriewerte erhalten.

Ist das über den MQTT nicht möglich? Oder kann das noch implementiert werden?

Gruß und Dank
wertz

Modulentwickler
- Spotify #72490
- Nello #75127

neumann

Hast du den da?
Geht bestimmt, bräuchte ein Auszug aus dem Log.

Zitat von: tigru77 am 21 April 2018, 10:52:30
Hallo Zusammen,

gibt es die Möglichkeit den Wasser Sensor (XIAOMI Aqara Water Sensor) zu pairen?

Grüße
Timo
Modulentwickler
- Spotify #72490
- Nello #75127

tigru77

Habe ich da, aber im Log wird nichts geschrieben. Laut Anleitung müsste man das Teil beim Pairen mit der offiziellen App hin- und herschütteln.

Zitat von: neumann am 21 April 2018, 11:02:11
Hast du den da?
Geht bestimmt, bräuchte ein Auszug aus dem Log.

neumann

Das Batterie-Reading ist nun auch für die restlichen Geräte drin.
Am besten die Repo neu clonen, alle Dateien ersetzen (node_modules Order nicht löschen!), im node_modules Ordner den zcl-packet Ordner löschen und dann npm install ausführen.
Dann werden in Zukunft Battere-Readings erfasst.
Modulentwickler
- Spotify #72490
- Nello #75127

wertz

Zitat von: neumann am 22 April 2018, 14:54:20
Das Batterie-Reading ist nun auch für die restlichen Geräte drin.
Am besten die Repo neu clonen, alle Dateien ersetzen (node_modules Order nicht löschen!), im node_modules Ordner den zcl-packet Ordner löschen und dann npm install ausführen.
Dann werden in Zukunft Battere-Readings erfasst.

SUPER!!
Die Batterie-Readings funktionieren einwandfrei
vielen Dank für die tolle Arbeit. ;D

mark79

Hallo, erstmal danke für das tolle Projekt. :)

Ich habe ein paar Fragen:

Hat man mit dieser Lösung irgendwelche Nachteile, im Gegensatz zum Xiaomi Gateway?

Wie sieht es mit Firmware updates der Sensoren aus, sofern diese überhaupt updatebar sind?

Wenn Xiaomi neue Sensoren raus bringen sollte, muss die CC2531ZNP Firmware dazu angepasst werden und benötigt man dazu auch wieder den CC Debuger?

Denn ich habe mir vor ein paar Tagen, einige Xiaomi Komponenten bestellt.
Nun überlege ich welche Lösung ich nehmen soll, um die Sensoren an Fhem anzubinden.


Viele Grüße
Mark
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

jay-jey

Die Frage nach dem Debugger finde ich auch interessant, weil wenn man den nur einmal braucht könnte man sich ja zusammentun also eine Bestellung von ein paar  CC2531 Sticks machen und die dann flashen und weiter verschicken.

MarkusN

Hallo!

Ich verfolge die Integration ohne "China Cloud" mit hohem Interesse, aber: Gibt es da auch was mit IP? Sprich, einen Neumann CUN? Oder sogar via WiFi (ESP 8266?)?
In meinem Fall wäre der Anschluss via USB an meinem FHEM Server nicht sehr zweckmässig, da der im Keller und recht weit von potenziellen Geräten steht.

Grüße,

Markus

venuel79

#55
Hey, evt. kann mich jemand auf die richtiege Spur Bringen,
Hab alles instaliert, auch den Stick anscheinend erfolgreich instaliert, doch irgendwas stimmt nicht, es will einfach nicht funktionieren :(

ein: sudo systemctl status xiaomi.service -l    gibt mir folgendes aus:
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mi 2018-05-09 15:55:34 CEST; 1s ago
  Process: 1583 ExecStart=/home/brix/xiaomi-zb2mqtt/xiaomi-zb2mqtt/index.js (code=exited, status=203/EXEC)
Main PID: 1583 (code=exited, status=203/EXEC)

Mai 09 15:55:34 ubuntu-Server systemd[1]: xiaomi.service: Unit entered failed state.
Mai 09 15:55:34 ubuntu-Server systemd[1]: xiaomi.service: Failed with result 'exit-code'.

Edit again:

Hab nochmal nach npm instaliert, das kam dabei raus:
brix@ubuntu-Server:~$ git clone https://github.com/oskarn97/xiaomi-zb2mqtt.git
Klone nach 'xiaomi-zb2mqtt' ...
remote: Counting objects: 150, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 150 (delta 0), reused 1 (delta 0), pack-reused 145
Empfange Objekte: 100% (150/150), 265.58 KiB | 0 bytes/s, Fertig.
Löse Unterschiede auf: 100% (79/79), Fertig.
Prüfe Konnektivität ... Fertig.
brix@ubuntu-Server:~$ cd xiaomi-zb2mqtt
brix@ubuntu-Server:~/xiaomi-zb2mqtt$ npm install
npm WARN deprecated parser-byte-length@1.0.2: renamed to @serialport/parser-byte                                                                                        -length
npm WARN deprecated parser-delimiter@1.0.2: reanmed to @serialport/parser-delimi                                                                                        ter
npm WARN deprecated parser-cctalk@1.0.2: reanmed to @serialport/parser-cctalk
npm WARN deprecated parser-ready@1.0.2: reanmed to @serialport/parser-ready
npm WARN deprecated parser-readline@1.0.2: reanmed to @serialport/parser-readlin                                                                                        e
npm WARN deprecated parser-regex@1.0.2: reanmed to @serialport/parser-regex
npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0

> serialport@4.0.7 install /home/brix/xiaomi-zb2mqtt/node_modules/cc-znp/node_modules/serialport
> node-pre-gyp install --fallback-to-build

node-pre-gyp info it worked if it ends with ok
node-pre-gyp verb cli [ '/home/brix/.nvm/versions/node/v8.11.1/bin/node',
node-pre-gyp verb cli   '/home/brix/xiaomi-zb2mqtt/node_modules/cc-znp/node_modules/serialport/node_modules/.bin/node-pre-gyp',
node-pre-gyp verb cli   'install',
node-pre-gyp verb cli   '--fallback-to-build' ]
node-pre-gyp info using node-pre-gyp@0.6.32
node-pre-gyp info using node@8.11.1 | linux | x64
node-pre-gyp verb command install []
node-pre-gyp info check checked for "/home/brix/xiaomi-zb2mqtt/node_modules/cc-znp/node_modules/serialport/build/Release/serialport.node" (not found)
node-pre-gyp http GET https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v57-linux-x64.tar.gz
node-pre-gyp http 404 https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v57-linux-x64.tar.gz
node-pre-gyp ERR! Tried to download(404): https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v57-linux-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@8.11.1 (node-v57 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 404 status code downloading tarball https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v57-linux-x64.tar.gz
node-pre-gyp verb command build [ 'rebuild' ]
make: Verzeichnis ,,/home/brix/xiaomi-zb2mqtt/node_modules/cc-znp/node_modules/serialport/build" wird betreten
  CXX(target) Release/obj.target/serialport/src/serialport.o
../src/serialport.cpp: In function 'int getIntFromObject(v8::Local<v8::Object>, std::__cxx11::string)':
../src/serialport.cpp:90:52: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   return getValueFromObject(options, key)->ToInt32()->Int32Value();
                                                    ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'double getDoubleFromObject(v8::Local<v8::Object>, std::__cxx11::string)':
../src/serialport.cpp:102:53: warning: 'v8::Local<v8::Number> v8::Value::ToNumber() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   return getValueFromObject(options, key)->ToNumber()->NumberValue();
                                                     ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9760:15: note: declared here
Local<Number> Value::ToNumber() const {
               ^
../src/serialport.cpp: In function 'void EIO_AfterOpen(uv_work_t*)':
../src/serialport.cpp:174:31: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
     int fd = argv[1]->ToInt32()->Int32Value();
                               ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp:180:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(2, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'Nan::NAN_METHOD_RETURN_TYPE Update(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport.cpp:193:29: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   int fd = info[0]->ToInt32()->Int32Value();
                             ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp:217:116: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   baton->baudRate = Nan::Get(options, Nan::New<v8::String>("baudRate").ToLocalChecked()).ToLocalChecked()->ToInt32()->Int32Value();
                                                                                                                    ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'void EIO_AfterUpdate(uv_work_t*)':
../src/serialport.cpp:240:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'Nan::NAN_METHOD_RETURN_TYPE Write(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport.cpp:252:29: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   int fd = info[0]->ToInt32()->Int32Value();
                             ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'void EIO_AfterWrite(uv_work_t*)':
../src/serialport.cpp:339:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'Nan::NAN_METHOD_RETURN_TYPE Close(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport.cpp:369:32: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   baton->fd = info[0]->ToInt32()->Int32Value();
                                ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'void EIO_AfterClose(uv_work_t*)':
../src/serialport.cpp:403:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'void EIO_AfterList(uv_work_t*)':
../src/serialport.cpp:465:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(2, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'Nan::NAN_METHOD_RETURN_TYPE Flush(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport.cpp:480:29: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   int fd = info[0]->ToInt32()->Int32Value();
                             ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'void EIO_AfterFlush(uv_work_t*)':
../src/serialport.cpp:516:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(2, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'Nan::NAN_METHOD_RETURN_TYPE Set(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport.cpp:528:29: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   int fd = info[0]->ToInt32()->Int32Value();
                             ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'void EIO_AfterSet(uv_work_t*)':
../src/serialport.cpp:573:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport.cpp: In function 'Nan::NAN_METHOD_RETURN_TYPE Drain(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport.cpp:585:29: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   int fd = info[0]->ToInt32()->Int32Value();
                             ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport.cpp: In function 'void EIO_AfterDrain(uv_work_t*)':
../src/serialport.cpp:617:30: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:7:0,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
  CXX(target) Release/obj.target/serialport/src/serialport_unix.o
../src/serialport_unix.cpp: In function 'OpenBatonPlatformOptions* ParsePlatformOptions(const v8::Local<v8::Object>&)':
../src/serialport_unix.cpp:44:109: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   result->vmin = Nan::Get(options, Nan::New<v8::String>("vmin").ToLocalChecked()).ToLocalChecked()->ToInt32()->Int32Value();
                                                                                                             ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport_unix.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
../src/serialport_unix.cpp:45:111: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   result->vtime = Nan::Get(options, Nan::New<v8::String>("vtime").ToLocalChecked()).ToLocalChecked()->ToInt32()->Int32Value();
                                                                                                               ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/./serialport.h:7,
                 from ../src/serialport_unix.cpp:1:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
  CXX(target) Release/obj.target/serialport/src/serialport_poller.o
../src/serialport_poller.cpp: In member function 'void SerialportPoller::callCallback(int)':
../src/serialport_poller.cpp:47:26: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated [-Wdeprecated-declarations]
   callback_->Call(1, argv);
                          ^
In file included from ../src/serialport_poller.cpp:5:0:
../../../../nan/nan.h:1618:3: note: declared here
   Call(int argc, v8::Local<v8::Value> argv[]) const {
   ^
../src/serialport_poller.cpp: In static member function 'static Nan::NAN_METHOD_RETURN_TYPE SerialportPoller::New(Nan::NAN_METHOD_ARGS_TYPE)':
../src/serialport_poller.cpp:86:31: warning: 'v8::Local<v8::Int32> v8::Value::ToInt32() const' is deprecated: Use maybe version [-Wdeprecated-declarations]
   obj->fd_ = info[0]->ToInt32()->Int32Value();
                               ^
In file included from /home/brix/.node-gyp/8.11.1/include/node/node.h:63:0,
                 from ../../../../nan/nan.h:51,
                 from ../src/serialport_poller.cpp:5:
/home/brix/.node-gyp/8.11.1/include/node/v8.h:9796:14: note: declared here
Local<Int32> Value::ToInt32() const {
              ^
  SOLINK_MODULE(target) Release/obj.target/serialport.node
  COPY Release/serialport.node
make: Verzeichnis ,,/home/brix/xiaomi-zb2mqtt/node_modules/cc-znp/node_modules/serialport/build" wird verlassen
node-pre-gyp info ok

> serialport@6.2.0 install /home/brix/xiaomi-zb2mqtt/node_modules/serialport
> prebuild-install || node-gyp rebuild

npm notice created a lockfile as package-lock.json. You should commit this file.
added 951 packages from 848 contributors in 67.016s
brix@ubuntu-Server:~/xiaomi-zb2mqtt$


edit: hab noch etwas verändert : enable und start ausgeführt, und pfad noch mal angepasst/überprüft.
ähnliches Ergebnis :(

● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mi 2018-05-09 16:33:03 CEST; 2s ago
  Process: 3069 ExecStart=/home/brix/xiaomi-zb2mqtt/index.js (code=exited, status=203/EXEC)
Main PID: 3069 (code=exited, status=203/EXEC)

Mai 09 16:33:03 ubuntu-Server systemd[1]: xiaomi.service: Main process exited, code=exited, status=203/EXEC
Mai 09 16:33:03 ubuntu-Server systemd[1]: xiaomi.service: Unit entered failed state.
Mai 09 16:33:03 ubuntu-Server systemd[1]: xiaomi.service: Failed with result 'exit-code'.


ich versuche schon seit Stunden das ans laufen zu bringen, aber da ich nicht so viel Ahnung habe, komme ich einfach nicht weiter.
würde mich sehr über eure Hilfe freuen.

Gruß

edit: System=Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-124-generic x86_64) auf einem Brix


ich gebs auf :( .......

brix@ubuntu-Server:~/xiaomi-zb2mqtt$ node index.js
Starting bridge using serial port /dev/ttyACM0
(node:2511) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
Error: ENOENT: no such file or directory, rename '/home/brix/xiaomi-zb2mqtt/node_modules/zigbee-shepherd/lib/database/dev.db' -> '/home/brix/xiaomi-zb2mqtt/devices.db'
Error: Error: Permission denied, cannot open /dev/ttyACM0



venuel79

#56
brix@ubuntu-Server:~/xiaomi-zb2mqtt$ sudo node index.js
[sudo] Passwort für brix:
Starting bridge using serial port /dev/ttyACM0
(node:9081) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.

hab nochmal alles neu gemacht,
geht natürlich immer noch nicht...
warum steht bei mir using serial port,
und nicht mein Chip = usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0012013B5F-if00 -> ../../ttyACM0

Index sieht jetzt so 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___0X00124B0012013B5F-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');
+settings.mqtt.server,options, {
    will: {
        topic: settings.mqtt.base_topic + '/' + bridgeID + '/state',
        payload: 'offline',
        retain: true
    }
};


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

try {
   fs.rename(__dirname + '/node_modules/zigbee-shepherd/lib/database/dev.db', __dirname + '/' + settings.dbfile);
} catch (e){}

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

client.on('connect', function() {
    client.subscribe(settings.mqtt.base_topic+'/cmnd/#');
})

client.on('message', function(topic, message) {
    try {
        // message is Buffer
        var array = topic.split("cmnd/")
        if (array.length > 1) {
            array = array[1].split('/');
            if (array.length > 1) {
                var device = array[0];
                var path = array[1];
                if (device == bridgeID) {
                    if (path == 'pair') {
                        var duration = parseInt(message);
                        if (!duration || duration == 0) duration = 60;
                        shepherd.permitJoin(duration, function(err) {
                            if (err)
                                console.log(err);
                        });
                        console.log("Pairing enabled for " + duration + " seconds");

                    } else if (path == 'send') {
                                var element = array[2]; // element ID
                                var channel = parseInt(array[3], 10); // channel ID
                                console.log("element: ", channel, " channel: ", channel);
                                var dev = shepherd.find(element, (channel + 1)); //channelID starts on 2 so always one more
                                if ( typeof dev !== 'undefined' && dev ) { //returns undefined if not found
                                        dev.getSimpleDesc();
                                        dev.functional('genOnOff', 'toggle', {}, function (err, rsp) {
                                        if (!err) //error control
                                            console.log(rsp);
                                        });
                                }
               }
                } else {
                    if (path == 'unpair') {
                        try {
                            var dev = shepherd.find(device, 1).getDevice();
                            Q.ninvoke(shepherd._devbox, 'remove', dev._getId());
                            Q.ninvoke(shepherd._devbox, 'sync', dev._getId());

                        } catch (e) {}
                        client.publish(settings.mqtt.base_topic+'/' + device + '/unpair', '');
                    }
                }
            }
        }
    } catch (e) {}

})

function selectChip() {
        if (settings.serial && settings.serial.port) {
            serial_port = settings.serial.port;
            initShepherd();
      } else {
            var found = [];
            serialport.list(function(err, ports) {
                ports.forEach(function(port) {
                    if ((port.pnpId && port.pnpId.match(/TI_CC253/i)) || (port.vendorId && port.vendorId.match('0451'))) {
                        found.push(port.comName);
               }
                });

                if (found.length > 1) {
                    console.log("Found multiple ZigBee Chips.");
                    var i = 0;
                    found.forEach(function(port) {
                        console.log("[" + i++ + "] " + port);
                    });

                    rl.question('Please enter the number of the Chip you would like to use: ', (answer) => {
                        if (answer >= 0 && answer < found.length) {
                            serial_port = found[answer];
                            saveSettings();
                            initShepherd();
                        } else {
                            console.error("Invalid input.");
                            process.exit();
                        }

                        rl.close();
                    });
                    return;
                } else if (found.length == 0) {
                    console.error("Error: Did not detect any available ZigBee Chips. Trying again...");
                    setTimeout(selectChip, 10 * 1000);
                    return;
                }

                //only one chip
            try {
                serial_port = found[0];
                saveSettings();
                initShepherd();
            } catch(err) {
               console.log(err)
            }
            });
      }
}

function saveSettings() {
   if (!settings.serial)
      settings.serial = Object();
   if (!settings.zigbee)
      settings.zigbee = Object();
   settings.serial.port = serial_port;
   settings.zigbee.bridge = bridgeID;
   config.updateConfig(settings, __dirname + "/configuration.yaml", "default");
}

function startShepherd() {
    shepherd.start(function(err) { // start the server
        if (err) {
            if (err.message.match(/timeout/)) {
                console.error("Error: Could not connect to the chip, trying again...");
                shepherd.controller._znp.close(function(err){});
                shepherd.stop();
                setTimeout(startShepherd, 10 * 1000);
            } else {
                bridgeError(err.message);
            }
        }
    });
}

function initShepherd() {
    console.log("Starting bridge using serial port " + serial_port);
    shepherd = new ZShepherd(serial_port.toString(), {
        net: {
            panId: 0x1a62
        },
        dbPath: `${__dirname}/${settings.dbfile}`
    });

    shepherd.on('ready', function() {
        console.log('Bridge is ready. Current devices:');
        shepherd.list().forEach(function(dev) {
            if (dev.type === 'EndDevice') {
                console.log(dev.ieeeAddr + ' ' + dev.nwkAddr + ' ' + dev.modelId);
            } else if ((!settings.zigbee || !settings.zigbee.bridge) && dev.type === 'Coordinator') {
            bridgeID = dev.ieeeAddr;
            saveSettings()
         }

            if (dev.manufId === 4151) // set all xiaomi devices to be online, so shepherd won't try to query info from devices (which would fail because they go to sleep)
                shepherd.find(dev.ieeeAddr, 1).getDevice().update({
                    status: 'online',
                    joinTime: Math.floor(Date.now() / 1000)
                });
        });

        reportBridgeStatus();
        reportConnectedDevices();
    });

    shepherd.on('permitJoining', function(joinTimeLeft) {
        if (joinTimeLeft % 5 == 0) {
            client.publish(settings.mqtt.base_topic+'/' + bridgeID + '/joinTimeLeft', joinTimeLeft.toString())
        }
        if (joinTimeLeft == 0) console.log("Pairing ended.");
    });

    shepherd.on('ind', function(msg) {
        // debug('msg: ' + util.inspect(msg, false, null));
        var pl = null;
        var topic = settings.mqtt.base_topic+'/';

        switch (msg.type) {
            case 'devIncoming':
                reportConnectedDevices();
                console.log('Device: ' + msg.data + ' joining the network!');
                break;
            case 'attReport':

                console.log('attreport: ' + msg.endpoints[0].device.ieeeAddr + ' ' + msg.endpoints[0].devId + ' ' + msg.endpoints[0].epId + ' ' + util.inspect(msg.data, false, null));

                // defaults, will be extended or overridden based on device and message
                topic += msg.endpoints[0].device.ieeeAddr;
                pl = null;

                var modelId = msg.endpoints[0].device.modelId;
                if (modelId) modelId = modelId.replace("\u0000", "");

                switch (msg.data.cid) {
                    case 'genBasic':
                        if (msg.data.data['modelId']) {
                            if (!modelId || modelId != msg.data.data['modelId']) {
                                var device = shepherd.find(msg.endpoints[0].device.ieeeAddr, 1).getDevice();
                                device.update({
                                    modelId: msg.data.data['modelId']
                                });
                                Q.ninvoke(shepherd._devbox, 'set', device._getId(), device);
                                Q.ninvoke(shepherd._devbox, 'sync', device._getId());
                                client.publish(settings.mqtt.base_topic+'/' + msg.endpoints[0].device.ieeeAddr + '/model', shortModel(msg.data.data['modelId']));
                                reportConnectedDevices();
                            }
                        }

                        var battery;
                        if (msg.data.data['65281'] && Array.isArray(msg.data.data['65281']) && msg.data.data['65281'].length > 1) {
                           battery = msg.data.data['65281'][0]['data'];
                       }

                       if (msg.data.data['65282'] && Array.isArray(msg.data.data['65282']) && msg.data.data['65282'].length > 1) {
                           battery = msg.data.data['65282'][1];
                       }

                        if (battery) {
                            if (settings.battery == "percentage") {
                                var minvolt = 2500; //2.5V as minimum allowed voltage
                                var maxvolt = 3000; //3.0V as maximum allowed voltage
                                if (battery > maxvolt){
                                  battery = maxvolt;
                                }else if (battery < minvolt){
                                  battery = minvolt;
                                }
                                var result = (battery - minvolt) / (maxvolt - minvolt);
                                var battery_prc = (result * 100).toFixed(2); //Result to %
                                client.publish(settings.mqtt.base_topic+'/' + msg.endpoints[0].device.ieeeAddr + '/battery_level', battery_prc.toString());
                            } else {
                                client.publish(settings.mqtt.base_topic+'/' + msg.endpoints[0].device.ieeeAddr + '/battery_level', battery.toString());
                            }
                        }
                        break;

                    case 'genOnOff': // various switches
                        pl = msg.data.data['onOff'];
                        if (modelId.match(/magnet/)) pl = pl ? 'open' : 'close'
                        if (modelId.match(/86sw(1|2)/)) { //one or two channel wall switch
                            topic += '/channel_' + (msg.endpoints[0].epId - 1);
                            pl = 'click';
                        } else if (modelId.match(/ctrl_neutral2/)) { //QBKG03LM
                            topic += '/channel_' + (msg.endpoints[0].epId - 1);
                        } else topic += '/state';
                        break;
                    case 'msTemperatureMeasurement': // Aqara Temperature/Humidity
                        topic += "/temperature";
                        pl = parseFloat(msg.data.data['measuredValue']) / 100.0;
                        break;
                    case 'msRelativeHumidity':
                        topic += "/humidity";
                        pl = parseFloat(msg.data.data['measuredValue']) / 100.0;
                        break;
                    case 'msPressureMeasurement':
                        topic += "/pressure";
                        pl = parseFloat(msg.data.data['16']) / 10.0;
                        break;
                    case 'msOccupancySensing': // motion sensor
                        topic += "/state";
                        pl = msg.data.data['occupancy'] ? 'motion' : 'no_motion';
                        break;
                    case 'msIlluminanceMeasurement':
                        topic += "/lux";
                        pl = msg.data.data['measuredValue'];
                        break;

                    default:
                        console.log(msg.data);
                        break;
                }

                if (modelId.match(/switch/)) { // click counting
                    if (msg.data.data['onOff'] == 0) { // click down
                        perfy.start(msg.endpoints[0].device.ieeeAddr); // start timer
                        pl = null;
                        setTimeout(function() {
                            if (perfy.exists(msg.endpoints[0].device.ieeeAddr)) {
                                client.publish(topic, 'long_click_press');
                            }
                        }, 300);
                    } else if (msg.data.data['onOff'] == 1) { // click release
                        if (perfy.exists(msg.endpoints[0].device.ieeeAddr)) { // do we have timer running
                            var clicktime = perfy.end(msg.endpoints[0].device.ieeeAddr); // end timer
                            if (clicktime.seconds > 0 || clicktime.milliseconds > 240) { // seems like a long press so ..
                                pl = 'long_click_release';
                            } else {
                                pl = 'click_release';
                            }
                        } else {
                           pl = 'click_release';
                        }
                    } else if (msg.data.data['32768']) { // multiple clicks
                        var count = msg.data.data['32768'];
                        if (count == 2) pl = 'double_click';
                        else pl = 'multiple_' + msg.data.data['32768'];
                    }
                }

                if (modelId.match(/magnet/)) { //filter duplicate messages (happens when device does not receive ack from gateway)
                    var timerID = msg.endpoints[0].device.ieeeAddr + "_" + pl;
                    var timerCounterID = msg.endpoints[0].device.ieeeAddr + "_" + (pl == 'open' ? 'close' : 'open');
                    if (perfy.exists(timerID)) {
                        if (!perfy.exists(timerCounterID)) {
                            var lastTime = perfy.end(timerID);
                            pl = null;
                        } else {
                            perfy.end(timerCounterID);
                        }
                    }
                    setTimeout(function() {
                        if (perfy.exists(timerID)) {
                            perfy.end(timerID);
                        }
                    }, 2000);
                    perfy.start(timerID);
                }
        }

        if (pl != null) { // only publish message if we have not set payload to null
            console.log("MQTT Reporting to ", topic, " value ", pl)
            client.publish(topic, pl.toString());
        }
    });

    startShepherd();
}

process.on('uncaughtException', function(err) {
    var message = err.message;
    if (err.message.match(/Cannot get the Node Descriptor/i)) {
        message = "Pairing failed, the device went to sleep. Please try again and keep it awake by shortly pressing the paring button every 2 seconds until paring succeeds.";
    }
    bridgeError(message);
});

function reportBridgeStatus() {
    client.publish(settings.mqtt.base_topic+'/' + bridgeID + '/state', shepherd.info().enabled ? 'online' : 'offline', {retain: true});
}

function bridgeError(message) {
    console.error("Error: " + message);
    client.publish(settings.mqtt.base_topic+'/' + bridgeID + '/error', message);
}

setInterval(reportBridgeStatus, 60 * 1000);

function reportConnectedDevices() {
    var devices = shepherd.list().filter(function(dev) {
        return dev.type === 'EndDevice';
    }).map(function(dev) {
        var modelId = shortModel(dev.modelId);
        if (!modelId) modelId = 'unknown';
        return {
            sid: dev.ieeeAddr,
            model: modelId
        }
    });
    client.publish(settings.mqtt.base_topic+'/' + bridgeID + '/devices', JSON.stringify(devices), {retain: true})
}

function shortModel(model) {
    if (model && typeof model === 'string') model = model.replace(/^lumi\.(sensor_)?/, '');
    return model;
}

selectChip();


Edit:irgendwas hat funktioniert:
ABER nur wenn die konsole läuft, sobald ich diese schliesse geht nichts mehr,gepairter sensor reagiert nicht mehr, neustart des systems hilft nichts.Nur wenn ich die index von hand aufruffe.
bei xiaomi service kommt dann das:

brix@ubuntu-Server:~$ sudo systemctl enable xiaomi
[sudo] Passwort für brix:
brix@ubuntu-Server:~$ sudo systemctl start xiaomi
brix@ubuntu-Server:~$ sudo systemctl status xiaomi
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled; vendor preset: e
   Active: activating (auto-restart) (Result: exit-code) since Do 2018-05-10 08:
  Process: 1603 ExecStart=/home/brix/xiaomi-zb2mqtt/index.js (code=exited, statu
Main PID: 1603 (code=exited, status=203/EXEC)

Mai 10 08:55:26 ubuntu-Server systemd[1]: xiaomi.service: Unit entered failed st
Mai 10 08:55:26 ubuntu-Server systemd[1]: xiaomi.service: Failed with result 'ex
lines 1-8/8 (END)...skipping...
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Do 2018-05-10 08:55:26 CEST; 1s ago
  Process: 1603 ExecStart=/home/brix/xiaomi-zb2mqtt/index.js (code=exited, status=203/EXEC)
Main PID: 1603 (code=exited, status=203/EXEC)

Mai 10 08:55:26 ubuntu-Server systemd[1]: xiaomi.service: Unit entered failed state.
Mai 10 08:55:26 ubuntu-Server systemd[1]: xiaomi.service: Failed with result 'exit-code'.

das ergebnis habe ich nun, neu gestartet,der sensor den ich angelernt habe reagiert nicht mehr, aber ich kann in den paring mode gehen.....
wasn krampf ... :( :(
sobald ich die konsole schliesse , reagieren die sensoren nicht mehr...
dann muss ich neu starten und die index von hand aufruffen, weil der service irgendwie nicht läd, dann geht alles solange die konsole offen ist, aber nur dann

Edit: so siehts aus wenn ich neu starte:

brix@ubuntu-Server:~$ sudo systemctl status xiaomi.service
[sudo] Passwort für brix:
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled; vendor preset: e
   Active: activating (auto-restart) (Result: exit-code) since Do 2018-05-10 09:
  Process: 3571 ExecStart=/home/brix/xiaomi-zb2mqtt/index.js (code=exited, statu
Main PID: 3571 (code=exited, status=203/EXEC)

Mai 10 09:33:10 ubuntu-Server systemd[1]: xiaomi.service: Main process exited, c
Mai 10 09:33:10 ubuntu-Server systemd[1]: xiaomi.service: Unit entered failed st
Mai 10 09:33:10 ubuntu-Server systemd[1]: xiaomi.service: Failed with result 'ex
lines 1-9/9 (END)...skipping...
● xiaomi.service - Xiaomi
   Loaded: loaded (/etc/systemd/system/xiaomi.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Do 2018-05-10 09:33:10 CEST; 4s ago
  Process: 3571 ExecStart=/home/brix/xiaomi-zb2mqtt/index.js (code=exited, status=203/EXEC)
Main PID: 3571 (code=exited, status=203/EXEC)

Mai 10 09:33:10 ubuntu-Server systemd[1]: xiaomi.service: Main process exited, code=exited, status=203/EXEC
Mai 10 09:33:10 ubuntu-Server systemd[1]: xiaomi.service: Unit entered failed state.
Mai 10 09:33:10 ubuntu-Server systemd[1]: xiaomi.service: Failed with result 'exit-code'.



mark79

Moin, versuch mal ein
addgroup brix dialout

Damit der User brix Zugriff darauf bekommt:
Error: Permission denied, cannot open /dev/ttyACM0
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

venuel79

#58
Danke mark79!!
Irgendwie geht es ja wenn ich den brix neu starte, dann öffne ich die index von hand, dann kommt da:

brix@ubuntu-Server:~$ cd xiaomi-zb2mqtt
brix@ubuntu-Server:~/xiaomi-zb2mqtt$ node index.js
Starting bridge using serial port /dev/ttyACM0
(node:1674) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
Bridge is ready. Current devices:

Dann geht der status in Fhem auch gleich in online über, aber alles nur solange ich die konsole offen habe.
Status ist zwar dann immer noch online, aber nichts geht mehr :(

bei den readings in fhem steht im Augenblick: error EACCES: permission denied, open '/home/brix/xiaomi-zb2mqtt/devices.db'


Solange die Konsole offen ist, geht auch das parring 1A.
Wenn Konsole geschlossen wird, geht nichts mehr :(
Habe auch schon ewig HAbridge am laufen, da hat das von anfang an super funktioniert mit dem startscript,aber hier ist irgendwie der wurm drin :(


mark79

#59
Das der Dienst wieder beendet wird, wenn du dich ausloggst, liegt daran das du den Dienst nicht über systemctl startest. :)
Das ist dein Dienst der dafür sorgt, das es beim booten gestartet wird und beim shutdown heruntergefahren wird, oder wenn der Dienst abschmiert, dieser neugestartet wird.

Eine schnelle alternative den Dienst zu starten und zu halten, wären:
node index.js &

Oder besser: screen -mdS "xiaomi" node index.js
screen müsstest du noch installieren... apt-get install screen

Aber ich würde lieber schauen, warum systemctl es nicht starten kann... liegt bestimmt an einem Berechtigungsproblem.

>>error EACCES: permission denied, open '/home/brix/xiaomi-zb2mqtt/devices.db'
Da liegt auch ein Berechtigungsproblem vor, weil Fhem nicht auf die Datei zugreifen darf.

Entweder: addgroup brix dialout
oder: chmod 0666 /home/brix/xiaomi-zb2mqtt/devices.db
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten