[V4] Dev service RFlink

Je suis en train de réfléchir a une fonction utile et j’aimerai votre avis:

Est ce que vous pensez que c’est une bonne idée d’ajouter un bouton pour blacklister un device (ce device ne peux plus s’ajouter tout seul a votre liste de device )?

Ca peut être utile si par exemple votre voisin ouvre son portail tout le temps et qu’il apparait dans glayds



Autre demande d’avis :

Pour certains device chinois en 433mhz on ne peut pas détecter si c’est un juste un capteur ou si c’est un objet qui peut recevoir des commandes
Ducoup ça me donne une question pour tout le monde :

Est ce que vous préferez que par défaut , ces devices soient considérer comme des capteurs ou des actionneurs (peuvent recevoir des commandes) ? sachant que l’on peu changer ça après

En gros vous préferez vous retrouvez dans certains cas avec des capteurs dont on peut changer qui on un bouton permettant de changer leur état sans editer le device ou plutot des actionneurs dont vous ne pouvez pas changer l’état sans éditer le device

Je pense qu’il faudrait séparer en 3 catégories les devices :

  • Les nouveaux : ils ont été découverts depuis le dernier accès à la page, ou tout simplement ceux qio ne sont pas encore affecté à une pièce.
  • Les paramétrés et fonctionnels
  • La liste noire

On pourrait voir 2 organisations possibles : soit une page unique avec les 3 catégories séparées, soit 3 pages dans le menu de gauche.

Par défaut, je pense qu’il faudrait qu’ils soient considéré comme des capteurs, c’est pour moi le cas le plus “neutre”. Idéalement il faudrait une info-bulle en haut de la page précisant que certains appareils peuvent être mal reconnu et donc oui, proposer le bouton de changement d’état, uniquement sur ces devices (en tout cas de manière visible).

Mmm non c’est pas normal ^^

Tout devrait fonctionner… Si tu as plus d’informations, ça m’intéresse :slight_smile: Il faut fixer ça.

Effectivement, dans Gladys 4, la directive c’est que les devices ne doivent être jamais ajouté automatiquement: c’est toujours le choix de l’utilisateur, et ce choix doit être fait dans l’UI.

Tu peux voir comment font les autres services comme Philips Hue par exemple:

  1. Le service détecte automatiquement des devices, il les stocke dans une liste de devices en RAM.

  2. Lorsque l’utilisateur arrive sur la page du service, il voit que de nouveaux périphériques ont été détecté, et il a le choix de les ajouter à Gladys, ou non.

  3. Lorsque l’utilisateur clique sur « créer » le device, c’est l’UI qui envoie la requête au backend de créer le device. Ainsi, l’utilisateur a un retour visuel si quelque chose se passe mal. (un device existe déjà avec ce nom par exemple)

Dans Gladys 4, on évite tout ce qui est en arrière plan et qui pourrait mal se passer, car si une erreur intervient, l’utilisateur n’a aucun retour. (Et non, « regarder les logs », n’est pas une solution, dans la v4 on considère que l’utilisateur n’a pas a regarder les logs, comme tout produit)

J’ai l’impression que ça vient des dépendances mais je sais pas lesquelles j’ai résolu le problème en bidouillant les versions de react-compat et d’autre modules

C’est bon , c’est ajouté!

J’ai trouvé, c’est un bug du à la façon dont les services sont traduit dans le front, c’est super con.

En gros, dans certains services (genre le z-wave, un des premiers services que j’ai développé), j’utilise le fichier JSON qui contient la liste des intégrations comme source de traduction, et je fais souvent:

<ZwavePage integration={integrationConfig[props.user.language].zwave}>
      <NetworkTab {...props} />
 </ZwavePage>

Hors, si le props.user.language n’est pas défini, ça pète.

On va arrêter de faire ça pour l’i18, et utiliser partout la lib d’i18n qui gère tout ça tout seul, et virer les traductions des fichiers device.en.json.

J’ai créé une issue github pour référencer le développement:

Bonjour,

Tout d’abord merci de développer ce module :wink:

Je viens de faire quelques tests sachant que je dispose de 2 capteurs :

A noter : j’ai testé en utilisant l’image créée par @peb qui date d’il y a 14 jours comme le repo Github (Images 🐳 pour tester des services en développement)

Voici les messages transmis par RFlink avec mes 2 devices :

  • EV1527 : 20;01;EV1527;ID=0e28a0;SWITCH=0e;CMD=ON;
  • Selectplus : 20;02;SelectPlus;ID=0575f1;SWITCH=02;CMD=ON;CHIME=01;
  • MD-210 : 20;09;Atlantic;ID=3e6835;SWITCH=01;CMD=ON; ou 20;0A;Atlantic;ID=3e6835;SWITCH=01;CMD=OFF;

Constats :

  1. La carte RFlink (sur arduino Mega) est détectée et utilisée sans aucune manipulation nécessaire :slight_smile:
  2. Le capteur de mouvement est bien détecté
  3. Le capteur de mouvement est détecté comme un switch. Il ne devrait pas être motion ?
  4. Le détecteur d’ouverture de porte ne l’est pas. Est-ce que c’est parce que le model “Atlantic” n’a pas encore été implémenté ?
  5. Les devices apparaissent en doublons dans la partie " Devices detected by the gateway"
  6. Quand j’ajoute un premier device à Gladys, tout se passe bien mais quand j’ajoute un device supplémentaire celui que j’ai créé juste avant est duppliqué (juste un problème d’affichage ?)
  7. Comportement étrange de Gladys, il est impossible de refresh la page d’intégrations (la page devient blanche)
  8. Rflink debug console : j’ai une valeur mais c’est toujours la même alors que je capte pléthore de modules 433MHz

A ta dispo pour tous les détails nécessaires.

2 « J'aime »

Merci des retours ,

pour les bugs d’affichage c’est parce que je me suis basé sur le code du service zwave qui avait un défaut , je vais voir comment corriger.

Le capteur de mouvement envoi le message SelectPlus ou EV1527?

J’arrive pas a trouver quelques chose qui différencie les switch des motions pour dans le message Rflink , je bloque un peu :grin: . Si les capteurs on tous la proprieté CHIME , ça m’aiderait.

Pour le détecteur d’ouverture je pensais qu’il serais détecté , t’aurais les logs? je cherche de mon coté en attendant.

Tu veux dire que tu vois toujours le même message affiché dans le rectangle gris mais que dans les logs tu vois les bons?

Les problèmes dont je n’ai pas parlé c’est ceux qui sont sensé être corrigé mais que tu as peut être pas a cause de l’image Docker

Merci de m’aider , j’ai pas énormément de retour du cou je sais pas ou j’en suis dans le service , y’a beaucoup de choses a gérer avec le Rflink :crazy_face:

Je ne sais pas afficher les logs lorsque c’est sur docker. Un peu d’aide, c’est quoi la commande ?

Le capteur envoie l’un ou l’autre fonction du type de mouvement.

docker logs gladys

:wink:

1 « J'aime »

Je pense que la distinction en automatique est impossible. Le Switch semble être utilisé pour tous les modules qui ont un état binaire ? RFLink Gateway - HomeAutomation

A mon sens, il est préférable de laisser la création des devices à l’utilisateur sinon, quand t’es en ville (comme c’est mon cas), tu te retrouves à avoir tous les détecteurs qui vont être ajoutés automatiquement. J’aime bien l’idée de la blacklist que tu évoques ; ça permettra de distinguer les nouveaux devices détectés des devices qu’on a déjà détectés par le passé mais qu’on ne souhaite pas ajouter :slight_smile:

Je me suis mal exprimé , dans gladys switch et motion sont des types de devices utilisés pour savoir comment communiquer avec le device. Pour détecter le type d’un device je me base sur les champs présents dans le message Rflink.

Par exemple si le message contient « RGBW=… » alors le type seras détecté comme Light .
si le message contient « HUM=… » alors ça sera détecté comme un capteur d’humidité

Sauf que pour certains type de devices , je trouve pas de moyen dans le message transmis par Rflink de savoir par exemple si c’est une prise ou un capteur d’ouverture de porte. c’est pour ça que je t’ai demandé si tu pensais que tous les capteurs de mouvements envoyait une propriété CHIME .

D’accord, donc je te confirme que CHIME n’est pas envoyé par tous les détecteurs de mouvements. C’est le cas avec les 2 capteurs que j’ai.

Voici les logs que j’ai dans Gladys :

(node:32) UnhandledPromiseRejectionWarning: TypeError: Cannot read property ‹ includes › of undefined
at RFlinkManager.message (/src/server/services/rflink/lib/events/rflink.message.js:248:47)
at ReadLineParser. (/src/server/services/rflink/lib/commands/rflink.listen.js:9:10)
at ReadLineParser.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:271:13)
at ReadLineParser.Readable.push (_stream_readable.js:209:10)
at ReadLineParser.Transform.push (_stream_transform.js:152:32)
at ReadLineParser._transform (/src/server/services/rflink/node_modules/@serialport/parser-delimiter/lib/index.js:35:12)
at ReadLineParser.Transform._read (_stream_transform.js:191:10)
at ReadLineParser.Transform._write (_stream_transform.js:179:12)
at doWrite (_stream_writable.js:441:12)
at writeOrBuffer (_stream_writable.js:425:5)
at ReadLineParser.Writable.write (_stream_writable.js:316:11)
at SerialPort.ondata (_stream_readable.js:714:22)
at SerialPort.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at SerialPort.Readable.push (_stream_readable.js:209:10)
at /src/server/services/rflink/node_modules/@serialport/stream/lib/index.js:385:12
(node:32) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see Command-line API | Node.js v21.6.1 Documentation). (rejection id: 6)
(node:32) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

c’est corrigé , merci :grin:.

1 « J'aime »

ça fonctionne ! Mon détecteur d’ouverture est détecté maintenant :slight_smile: (toujours en tant que switch en revanche, mais normal vu notre échange récent)

Je vois maintenant les messages.

Je constate un comportement étrange. Aujourd’hui, quand un nouveau device est détecté, le clic sur le bouton Connect/Reconnect ne fonctionne pas ; je dois rafraîchir la page manuellement pour le voir apparaître en haut.

A noter : j’ai abandonné les tests avec Docker sinon je n’aurais pas pu voir les dernières corrections que tu as faites.

@joeypic, après l’après-midi de fonctionnement de Gladys, la liste des devices à créer est énorme. Même si j’ai ajouté le device dans Gladys (Connect/Reconnect), il est listé de multiples fois :sweat_smile:

Le fichier gif pour illustrer : Connecting...

Waou! Y’en à quelques uns :sweat_smile:

j’ai peut être oublié un détail :rofl:
c’est corrigé (normalement)!

1 « J'aime »

j’arrive pas a comprendre ça me le faisait pas avant et j’ai ça aussi d’un coup alors que j’ai pas touché au front depuis 2 semaines pourtant dans mon code il devrait actualiser la liste quand tu clique sur connect

je laisse tourner et te dis comment ça évolue.

J’avance dans mes tests. Je me permets d’ajouter les devices de mes voisins :joy:

Après avoir ajouté les devices sur le dashboard, ils restent sans valeur (No value recorded). Pour une station météo LaCrosse qui transmet un message 20;05;LaCrosse;ID=0c06;TEMP=0116; (température en hexadécimal au passage, je ne sais pas si tu as prévu la conversion en décimal ?), je constate qu’il n’y a pas de feature associé (aucune icône non plus dans la partie Integrations).

Du coup, le message d’erreur ci-dessous, explique peut-être pourquoi je n’ai pas de valeur affichée sur le dashboard :

2020-04-12T14:19:45+0200 rflink.newValue.js:12 (RFlinkManager.newValue) RFlink : value temperature of device rflink:0c06:temperature:undefined changed to 0114
2020-04-12T14:19:45+0200 device.newStateEvent.js:20 (DeviceManager.newStateEvent) NotFoundError: DeviceFeature not found
at DeviceManager.newStateEvent (/home/philippe/gladys-rflink/server/lib/device/device.newStateEvent.js:16:13)
at EventEmitter.emit (events.js:311:20)
at Event.emit (/home/philippe/gladys-rflink/server/lib/event/index.js:8:16)
at RFlinkManager.newValue (/home/philippe/gladys-rflink/server/services/rflink/lib/events/rflink.newValue.js:33:23)
at RFlinkManager.message (/home/philippe/gladys-rflink/server/services/rflink/lib/events/rflink.message.js:350:16)
at ReadLineParser. (/home/philippe/gladys-rflink/server/services/rflink/lib/commands/rflink.listen.js:9:10)
at ReadLineParser.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:271:13)
at ReadLineParser.Readable.push (_stream_readable.js:209:10)
at ReadLineParser.Transform.push (_stream_transform.js:152:32)
at ReadLineParser._transform (/home/philippe/gladys-rflink/server/services/rflink/node_modules/@serialport/parser-delimiter/lib/index.js:35:12)
at ReadLineParser.Transform._read (_stream_transform.js:191:10)
at ReadLineParser.Transform._write (_stream_transform.js:179:12)
at doWrite (_stream_writable.js:441:12)
at writeOrBuffer (_stream_writable.js:425:5)
at ReadLineParser.Writable.write (_stream_writable.js:316:11)
at SerialPort.ondata (_stream_readable.js:714:22)
at SerialPort.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at SerialPort.Readable.push (_stream_readable.js:209:10)
at /home/philippe/gladys-rflink/server/services/rflink/node_modules/@serialport/stream/lib/index.js:385:12 {
message: ‹ DeviceFeature not found ›

J’ai un autre message d’erreur dans les logs :

(node:6791) UnhandledPromiseRejectionWarning: TypeError: Cannot read property ‹ includes › of undefined
at RFlinkManager.message (/home/philippe/gladys-rflink/server/services/rflink/lib/events/rflink.message.js:380:21)
at ReadLineParser. (/home/philippe/gladys-rflink/server/services/rflink/lib/commands/rflink.listen.js:9:10)
at ReadLineParser.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:271:13)
at ReadLineParser.Readable.push (_stream_readable.js:209:10)
at ReadLineParser.Transform.push (_stream_transform.js:152:32)
at ReadLineParser._transform (/home/philippe/gladys-rflink/server/services/rflink/node_modules/@serialport/parser-delimiter/lib/index.js:35:12)
at ReadLineParser.Transform._read (_stream_transform.js:191:10)
at ReadLineParser.Transform._write (_stream_transform.js:179:12)
at doWrite (_stream_writable.js:441:12)
at writeOrBuffer (_stream_writable.js:425:5)
at ReadLineParser.Writable.write (_stream_writable.js:316:11)
at SerialPort.ondata (_stream_readable.js:714:22)
at SerialPort.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at SerialPort.Readable.push (_stream_readable.js:209:10)
at /home/philippe/gladys-rflink/server/services/rflink/node_modules/@serialport/stream/lib/index.js:385:12
(node:6791) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see Command-line API | Node.js v21.6.1 Documentation). (rejection id: 6)
(node:6791) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.