Bluetooth zu Gladys 4 hinzufügen

Nana nana nana :stuck_out_tongue:

Wenn wir davon ausgehen (nobles Ziel), wie kann ich helfen?

Ich habe gesehen, dass dein Code (bereits recht umfangreich) bereits die nut unterstützt, aber nichts über Xiaomi-Temperatursensoren.

Muss ich eine neue Datei für dieses Gerät erstellen oder erfolgt die Kommunikation mit der generischen Funktion?

Hallo, ich sah:

  • 1 generischen Bluetooth-Dienst, der die Standards kennt und vor allem den Kern implementiert
  • 1 Dienst pro „Marke“, der auf dem Bluetooth-Dienst basiert und seine eigenen Merkmale enthält: nut, awox… xiaomi…

Heute, wenn mein Code immer noch die nut unterstützt, ist das mein Fehler. Ich dachte, ich hätte alle Spuren der „Marken“ gelöscht.

Beim Durchsehen der Dateien des Pull Requests auf GitHub dachte ich, irgendwo nut gelesen zu haben. Aber vielleicht war es nicht der letzte Commit.

Ich denke, es ist die beste Idee, mit einem generischen Dienst zu beginnen und dann eine Datei pro Marke zu erstellen.

Das wird es vor allem ermöglichen, einige Modelle schneller in Gladys zu unterstützen und die Unterstützung mit den Updates zu verbessern.

Hast du eine To-Do-Liste oder so etwas, um die Punkte zu listen, die vor einem PR (Pull Request) zu lösen sind?
Das würde mir helfen, dir bei einem bestimmten Punkt zu helfen, ohne dass wir uns in die Quere kommen!

Ich denke, es wird schwierig sein, parallel zu arbeiten, aber ich habe trotzdem eine To-Do-Liste: https://github.com/atrovato/Gladys/projects/10

Ich bin schon recht weit gekommen, ich prüfe gerade die Grundfunktionen und plane dann, mit den erweiterten Funktionen fortzufahren.

Ich denke, ich kann bis zur Rückkehr von Pierre-Gilles fertig sein, auch wenn ich der Gemeinschaft gerne vorher ein stabiles Test-Image zur Verfügung stellen würde.

Darüber nachzudenken, sollte man den Zeitabstand zwischen zwei Anfragen an einen Sensor steuern können.

Das ist eher eine globale Überlegung für Gladys. Bei manchen Sensoren macht es Sinn, die Werte alle 1 Minute zu sammeln (z. B. Türöffnungssensor?), aber ein Temperatursensor muss nicht so oft abgefragt werden.

@pierre-gilles, was meinst du dazu (natürlich erst nach deiner Rückkehr aus dem Urlaub)?

Ich bin mit dir einer Meinung, das ist eine Information, die auf Geräteebene zu parametrisieren ist, aber standardmäßig habe ich den maximalen definierten Wert eingestellt.
Dieser Wert wird über eine gemeinsame grafische Komponente editierbar sein. Die Änderung wurde bereits in der Tasmota HTTP PR vorgenommen, die auf Tester wartet… Da ich Konflikte nicht riskieren möchte, betrachte ich dieses Formular nicht als Teil dieses Dienstes.

Genau das ist es, es muss auf globaler Ebene erledigt werden. Umso besser, wenn es bereits erledigt ist, ich würde es mit dem Bluetooth-Modul testen, sobald es möglich ist (im Moment habe ich nur das).

Das Beste wäre sogar, etwas wie Folgendes zu tun:

  • tagsüber die Werte alle 15 Minuten abrufen
  • nachts alle 30 Minuten

Da die Sensoren in der Regel batteriebetrieben sind, sollte so viel Energie wie möglich gespart und nicht unnötig abgefragt werden.

@pierre-gilles ich greife ein Thema wieder auf, das für den Bluetooth-Dienst aktuell wird: Abonnieren eines Ereignisses auf Serverseite, um die Erstellung eines neuen Geräts über die klassische API zu erkennen.

Das Ziel ist es, sich für die « notify »-Nachrichten anmelden zu können, die vom Bluetooth-Gerät gesendet werden, sobald es erstellt wird. Dadurch kann man das Gerät nicht abfragen, sondern das Gerät kann die Daten senden.

Dafür muss ich jedoch:

  • entweder ein neues Endpunkt im Bluetooth-Dienst erstellen, um die Erstellung des Geräts zu verwalten (aber ich mag diese Option nicht),
  • oder über die Erstellung eines neuen Geräts informiert werden

In diesem Fall benötige ich diese Information nur für Bluetooth-Geräte, aber langfristig (GoogleHome-Connector) könnte man auch über die Erstellung eines beliebigen Geräts informiert werden müssen.

Hallo @AlexTrovato

Was du vorhast, klingt nach dem Prinzip des MQTT-Brokers, oder habe ich das falsch verstanden?

Hallo @Reno,
was meinst du mit dem Prinzip des MQTT-Brokers?

In Bezug auf meine letzte Nachricht möchte ich vor allem, dass der Gladys-Kern ein Event sendet, sobald die Erstellung eines Geräts erfolgreich war, damit die Dienste es empfangen und bei Bedarf eine Verarbeitung durchführen können. Im Fall von Bluetooth wäre es das Abonnieren der Benachrichtigungen des Geräts.

Guten Abend zusammen,
Eine erste testbare Version des Bluetooth-Dienstes ist verfügbar: v4.0.0-bluetooth.1.

Nur der „reine“ Bluetooth-Dienst ist verfügbar, die generischen Funktionen, die durch die anerkannten Spezifikationen definiert sind, sind:

  • der Batteriestand
  • der Temperatursensor (in seinen 3 Formen gemäß der GATT-Spezifikation)

Hier sind die Bluetooth GATT-Spezifikationen, zögern Sie nicht, mir eine mit Gladys kompatible Funktion zu melden, ich werde versuchen, sie hinzuzufügen.

Theoretisch sollte Gladys sich an Geräte anmelden, die Benachrichtigungen ermöglichen, aber im Moment nur beim Start von Gladys.
Dadurch können die direkt vom Gerät gesendeten Daten empfangen werden, anstatt in einer Schleife die Daten vom Gerät anzufordern.

Ich habe es nicht geschafft, den Dienst unter Windows, sogar über Docker, zum Laufen zu bringen, aber Gladys startet trotzdem.

Ich arbeite weiter an der Öffnung des Dienstes für andere spezifische Dienste (darunter AwoX und die Migration bekannter Module aus der v3).

Zur Erinnerung, die Testbilder sind hier verfügbar:

Danke, ich warte gespannt auf euer Feedback.

Hallo, ich wollte es ausprobieren, aber ich kann nicht über den Browser darauf zugreifen.

Standardmäßig habe ich auf dem Raspberry Gladys auf Port 80, Gladys Zigbee2mqtt auf Port 81 und dann wollte ich die Bewegung weiterführen, also auf Port 82. Das Ergebnis ist, dass der Browser nicht darauf zugreifen kann.

Ich verwende diesen Docker-Eintrag:

docker run -d \
--restart=always \
--privileged \
--network=gladys-net \
--name gladys-BT \
-p 82:82 \
-e NODE_ENV=production \
-e SERVER_PORT=82 \
-e TZ=Europe/Paris \
-e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production-bt.db \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ${PWD}/gladysassistant:/var/lib/gladysassistant \
-v /dev:/dev \
atrovato/gladys

Dennoch denke ich, dass ich es richtig gemacht habe, oder?

Hallo,
ich denke, du musst das Tag zum Bild hinzufügen (bei dieser Version konnte ich das Manifest nicht generieren).

Eine andere Version mit einigen UI-Änderungen wird gerade generiert.

Ich empfehle dir daher, atrovato/gladys durch atrovato/gladys:v4.0.0-bluetooth.1-arm zu ersetzen.

@AlexTrovato, danke, daran werde ich jetzt denken, den Tag hinzuzufügen.

Ich kann zwar auf Gladys zugreifen, aber ich habe eine Fehlermeldung in der Bluetooth-Konfiguration:
Das Bluetooth-Modul ist nicht verfügbar. Bitte stellen Sie sicher, dass es aktiviert ist.

Trotzdem funktioniert Bluetooth über die Befehlszeile einwandfrei.

Seltsam…
Ich weiß, dass für noble (node-ble) Node Zugriff auf Bluetooth haben muss, aber mit Docker weiß ich nicht, wie man das anwendet. Ich bin mir nicht sicher, ob das für Docker überhaupt notwendig ist.

Hast du vielleicht Infos in den Logs?

Oups, vergessen, entschuldige
pi@gladys:~ $ docker logs gladys-BT

> gladys-server@ start:prod /src/server
> cross-env NODE_ENV=production node index.js

Initialising OpenZWave 1.6.1051 binary addon for Node.JS.
    OpenZWave Security API is ENABLED
    ZWave device db    : /usr/local/etc/openzwave
    User settings path : /src/server/services/zwave/node_modules/openzwave-shared/build/Release/../../
    Option Overrides : --Logging false --ConsoleOutput false --SaveConfiguration true
2020-10-03T21:16:02+0200 <info> index.js:19 (Object.start) Starting telegram service
2020-10-03T21:16:02+0200 <info> index.js:13 (Object.start) Starting usb service
2020-10-03T21:16:02+0200 <info> index.js:16 (Object.start) Starting zwave service
2020-10-03T21:16:02+0200 <info> index.js:15 (Object.start) Starting Bluetooth service
2020-10-03T21:16:03+0200 <info> index.js:20 (Object.start) Starting Open Weather service
2020-10-03T21:16:03+0200 <warn> service.start.js:18 (Service.start) Unable to start service bluetooth
2020-10-03T21:16:03+0200 <warn> service.start.js:19 (Service.start) Error: EAFNOSUPPORT, Address family not supported by protocol
at new Hci (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/hci.js:74:18)
at new NobleBindings (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:25:15)
at Object.<anonymous> (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:546:18)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at module.exports (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/resolve-bindings.js:13:12)
at Object.<anonymous> (/src/server/services/bluetooth/node_modules/@abandonware/noble/index.js:2:49)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at BluetoothManager.start (/src/server/services/bluetooth/lib/commands/bluetooth.start.js:16:20)
at Object.start (/src/server/services/bluetooth/index.js:16:22)
at Service.start (/src/server/lib/service/service.start.js:13:19)
at /src/server/lib/service/service.startAll.js:9:79
at Array.map (<anonymous>)
at Service.startAll (/src/server/lib/service/service.startAll.js:9:54)
at Object.start (/src/server/lib/index.js:104:23)
at async /src/server/index.js:18:3 {
  errno: 97,
  code: 'EAFNOSUPPORT',
  syscall: 'socket'
}
2020-10-03T21:16:03+0200 <info> service.start.js:16 (Service.start) Service telegram is not configured, so it was not started.
2020-10-03T21:16:03+0200 <info> service.start.js:16 (Service.start) Service zwave is not configured, so it was not started.
2020-10-03T21:16:03+0200 <info> service.start.js:16 (Service.start) Service openweather is not configured, so it was not started.
2020-10-03T21:16:03+0200 <info> service.start.js:16 (Service.start) Service mqtt is not configured, so it was not started.
2020-10-03T21:16:03+0200 <info> index.js:63 (Server.<anonymous>) Server listening on port 82
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! gladys-server@ start:prod: `cross-env NODE_ENV=production node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the gladys-server@ start:prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-10-03T19_33_41_998Z-debug.log

> gladys-server@ start:prod /src/server
> cross-env NODE_ENV=production node index.js

Initialising OpenZWave 1.6.1051 binary addon for Node.JS.
    OpenZWave Security API is ENABLED
    ZWave device db    : /usr/local/etc/openzwave
    User settings path : /src/server/services/zwave/node_modules/openzwave-shared/build/Release/../../
    Option Overrides : --Logging false --ConsoleOutput false --SaveConfiguration true
2020-10-03T21:35:36+0200 <info> index.js:16 (Object.start) Starting zwave service
2020-10-03T21:35:36+0200 <info> index.js:13 (Object.start) Starting usb service
2020-10-03T21:35:36+0200 <info> index.js:19 (Object.start) Starting telegram service
2020-10-03T21:35:36+0200 <info> index.js:15 (Object.start) Starting Bluetooth service
2020-10-03T21:35:37+0200 <info> index.js:20 (Object.start) Starting Open Weather service
2020-10-03T21:35:37+0200 <warn> service.start.js:18 (Service.start) Unable to start service bluetooth
2020-10-03T21:35:37+0200 <warn> service.start.js:19 (Service.start) Error: EAFNOSUPPORT, Address family not supported by protocol
at new Hci (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/hci.js:74:18)
at new NobleBindings (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:25:15)
at Object.<anonymous> (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:546:18)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at module.exports (/src/server/services/bluetooth/node_modules/@abandonware/noble/lib/resolve-bindings.js:13:12)
at Object.<anonymous> (/src/server/services/bluetooth/node_modules/@abandonware/noble/index.js:2:49)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at BluetoothManager.start (/src/server/services/bluetooth/lib/commands/bluetooth.start.js:16:20)
at Object.start (/src/server/services/bluetooth/index.js:16:22)
at Service.start (/src/server/lib/service/service.start.js:13:19)
at /src/server/lib/service/service.startAll.js:9:79
at Array.map (<anonymous>)
at Service.startAll (/src/server/lib/service/service.startAll.js:9:54)
at Object.start (/src/server/lib/index.js:104:23)
at async /src/server/index.js:18:3 {
  errno: 97,
  code: 'EAFNOSUPPORT',
  syscall: 'socket'
}
2020-10-03T21:35:37+0200 <info> service.start.js:16 (Service.start) Service zwave is not configured, so it was not started.
2020-10-03T21:35:37+0200 <info> service.start.js:16 (Service.start) Service telegram is not configured, so it was not started.
2020-10-03T21:35:37+0200 <info> service.start.js:16 (Service.start) Service openweather is not configured, so it was not started.
2020-10-03T21:35:37+0200 <info> service.start.js:16 (Service.start) Service mqtt is not configured, so it was not started.
2020-10-03T21:35:37+0200 <info> index.js:63 (Server.<anonymous>) Server listening on port 82
pi@gladys:~ $

Bist du nicht auf Windows?

nicht auf Raspberry Pi 3B+