Ajouter le bluetooth à Gladys 4

Je suis d’accord avec toi, c’est une information à paramétrer au niveau du device, mais défaut j’ai mis la valeur max définie pour le moment.
Cette valeur sera éditable via un composant graphique commun. La modification a déjà été faite sur la PR Tasmota HTTP qui est en attente de testeurs… Ne voulant pas risquer les conflits, je considère que ce formulaire ne fait pas parti de ce service.

C’est tout à fait ça, il faut que ça soit fait au niveau global. Tant mieux si c’est déjà fait, je le testerais avec le module Bluetooth des que possible (pour le moment je n’ai que ca).

Le must serait même de pouvoir faire quelque chose comme :

  • la journée je récupère les valeurs toutes les 15 minutes
  • la nuit ce sera toutes les 30 minutes

Les capteurs fonctionnant sur pile généralement, il faut économiser le plus possible l’énergie et ne pas requeter pour rien.

@pierre-gilles je relance un sujet, qui devient d’actualité pour le service Bluetooth : s’abonner à un événement côté serveur afin de détecter la création d’un nouveau device via l’API classique.

Le but est de pouvoir s’inscrire aux messages “notify” émis par le périphérique Bluetooth dès sa création. Cela permet de ne pas faire de poll sur ce device, mais laisser le device envoyer les données.

Mais pour cela, je dois :

  • soit créer un nouvel endpoint dans le service Bluetooth pour gérer la création du device (mais je n’aime pas cette option),
  • soit être averti de la création d’un nouveau périphérique

Dans ce cas, j’ai besoin de connaître cette information uniquement pour les devices Bluetooth, mais à terme (connecteur GoogleHome) on pourrait avoir besoin d’être informé de la création de n’importe quel device.

Salut @AlexTrovato

Ce que tu veux faire ressemble au principe du broker MQTT ou j’ai pas bien compris ?

Salut @Reno,
qu’entends tu par le principe du broker MQTT ?

En rapport à mon dernier message, je veux surtout que le core Gladys envoie un event une fois que la création d’un device est en succes pour que les services puisse le recevoir et faire un traitement si besoin. Dans le cas du Bluetooth, ce serait souscrire aux notifications du périphérique.

Bonsoir tout le monde,
une première version testable du service Bluetooth est disponible : v4.0.0-bluetooth.1.

Seul le service Bluetooth « pur » est disponible, les fonctionnalités génériques définies par les spécifications reconnues sont :

  • le niveau de batterie
  • le capteur de température (sous ses 3 formes selon la spec GATT)

Ici les spécifications Bluetooth GATT, n’hésitez à mes signaler une fonctionnalité comptatible avec Gladys, je tenterai de l’ajouter.

En théorie, Gladys devrait s’abonner aux appareils permettant les notifications, mais pour les moment uniquement au démarrage de Gladys.
Cela permet de recevoir les données envoyées directement par le périphérique, plutôt que de boucler pour demander les données au périphérique.

Je n’ai pas réussi à faire fonctionner le service sous Windows, même via Docker, mais Gladys démarre quand même.

Je continue à travailler si l’ouverture du service à d’autres services spécifiques (dont AwoX et les migrations de modules connus dans la v3).

Pour rappel, les images de test sont disponible ici :

Merci, j’attends vos retours avec impatience.

4 « J'aime »

Salut, j’ai voulu l’essayer mais impossible d’y accéder via le navigateur.

De base sur le raspberry j’ai gladys sur le port 80, gladys zigbee2mqtt sur le port 81 et don je voulais faire suivre le mouvement, donc sur le port 82, résultat le navigateur n’y accède pas.

j’utilise cette insertion sur docker :

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

Pourtant je pense avoir bon non ?

Salut,
je pense que tu dois ajouter le tag sur l’image (sur cette version, je n’ai pas réussi à générer le manifest).

Une autre version avec quelques changement UI est en cours de génération.

Je te conseille donc de remplace atrovato/gladys par atrovato/gladys:v4.0.0-bluetooth.1-arm.

1 « J'aime »

@AlexTrovato , merci, je m’en rappelerais d’ajouter le tag maintenant.

J’accède bien a gladys cependant j’ai un message d’erreur dans la config du bluetooth :
Le module Bluetooth n’est pas disponible, merci de vérifier qu’il est bien activé.

Pourtant en ligne de commande le bluetooth fonctionne bien.

Bizarre…
Je sais que pour noble (node-ble) il faut autoriser node a acceder au bluetooth, mais avec docker, je ne sais pas comment l’appliquer. Je ne suis pas sûr que ce soit nécessaire pour Docker.

Tu as peut-être des infos dans les logs ?

Oup’s oublié désolé
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:~ $

Tu n’es pas sur Windows ?

non sur raspberry pi 3b+

Vraiment bizarre… j’ai moi aussi testé sur Rpi 3b+, sans souci.
Tu n’as pas un autre Gladys qui fait du Bluetooth sur la même machine ?

Tu es sur que le Bluetooth est up ?

bluetoothclt
> agent on
> power on
pi@gladys:~ $ bluetoothctl
Agent registered
[bluetooth]# agent on
Agent is already registered
[bluetooth]# power on
Changing power on succeeded
[bluetooth]#

Non c’est la seule vm qui use du bluetooth

Dans les échanges sur le github noble, j’ai lu ça

May I sugggest to add a remark in your readme, that BLE adapter will not run when not running your container in host mode ?

En gros, je pense que tu vas devoir changer ton network docker :confused:

En modifiant sur le port 80 par exemple ?

edit, modifier gladys-net par host, je comprends et je test ça

Y’a une histoire de permission (docker) si on veut quelque chose indépendant du network mode, je check ça ASAP

1 « J'aime »

Alors, pas de nouvelles ? Je suis en train de publier la version v4.0.0-bluetooth.4 avec certaines corrections graphiques et du nettoyage au niveau du code.

Je viens de voir l’avancement, vraiment cool !

Au final tu as choisis quelle option pour ta PR?