Intégration node-red NRX-800

Suite à la mise à jour de Raspberry OS vers Debian Trixie, libgpiod v2 devient la librairie par défaut et grace au projet opengpio, j’ai migré l’intégration node-red que j’avais basé sur pigpiod sur ces nouvelles librairies qui me paraisse plus appropriées pour un usage en locale.

Il n’est pas encore prévus de déployer la module sur npm, j’ai des soucis avec la gestion de la traduction. Cependant si cela peut simplifier la gestion des relais et entrées sans se préoccuper de la numérotation GPIO pour certains, l’intégration est dispo ici

2 « J'aime »

Bonjour @dduransseau ,

Super j’ai testé ca marches nickel, belle implémentation !

L’upgrade en Trixie a été un peu laborieux sans plus (j’ai juste du réinstaller npm)

par contre dans ton prog il y a une erreur ligne 122 il manque un bout => out ? ‹ green › :

node.status({fill:grey,shape:dot,text:relayStatusMapping[out]});

=> node.status({fill:out ? ‹ green › : ‹ grey ›, shape:dot,text:relayStatusMapping[out]});
pour ceux qui préfère en rouge comme moi
=> node.status({fill:out ? ‹ red › : ‹ grey ›, shape:dot,text:relayStatusMapping[out]});

Plus qu’à merger la PR :wink:

1 « J'aime »

Salut,

Cool que ça marche bien aussi pour toi.

Coté upgrade vers Trixie j’ai pas eu de soucis particulier contrairement à un autre système où c’est plus la galère. Mais du coup tu as eu à installer libgpiod manuellement ou il était de base (j’avais déjà installé la version 2 avant l’upgrade) ?

Coté cosmétique j’ai pas trop d’avis tranché sur les couleurs à définir pour chaque états, rouge ça me paraissait “alarmiste” pour un contact ouvert. J’hésite aussi entre gris un jaune comme pour une lampe. Mais c’est assez facile à rendre paramétrable, je peux me pencher dessus.

1 « J'aime »

c’est juste les validations, ca bloque et on oublie de défiler pour valider les Yes pour continuer donc la première fois bah j’ai rebooté direct !

déjà installé

Par contre, j’ai adapté pour cette arborescence plus standard mais comme toi j’ai buté sur l’internationalisation (pas beaucoup de doc, je pense qu’il faut investiguer sur les nodes standard intégrés puisqu’ils sont en français)


avec le package.json adapté :

{
  "name": "node-red-contrib-gce-nrx800",
  "version": "0.2.2",
  "description": "Node-RED nodes for GCE NRX800 controller",
  "author": "dduransseau",
  "license": "MIT",
  "keywords": [
    "node-red",
    "gpio",
    "GCE",
    "NRX800",
    "digital input",
    "relay",
    "led"
  ],
  "node-red": {
    "version": ">=3.0.0",
    "nodes": {
      "gce-nrx800-digital-input": "nodes/gce-nrx800-digital-input.js",
      "gce-nrx800-relay": "nodes/gce-nrx800-relay.js",
      "gce-nrx800-led-user": "nodes/gce-nrx800-led-user.js"
    }
  },
  "engines": {
    "node": ">=14.0.0"
  },
  "dependencies": {
    "opengpio": "^2.0.2"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/dduransseau/node-red-contrib-gce-nrx-800.git"
  },
  "bugs": {
    "url": "https://github.com/dduransseau/node-red-contrib-gce-nrx-800/issues"
  },
  "homepage": "https://github.com/dduransseau/node-red-contrib-gce-nrx-800#readme",
  "maintainers": [
    {
      "name": "duransseau",
      "email": "votre-email@gmail.com"
    }
  ],
  "contributors": [
    {
      "name": "dduransseau",
      "email": "votre-email@gmail.com",
      "url": "https://github.com/dduransseau"
    }
  ]

j’ai regardé comment étaient formulés les autres nodes et j’ai adapté.

En tout cas, ca m’as permis de voir plus en profondeur comment étaient construits les nodes, j’avais juste survolé jusque là ! :slightly_smiling_face:

2 « J'aime »

L’internationalisation je ne suis pas du tout au clair sur son fonctionnement, mais c’est un sujet que je souhaite creuser. Je vais comparer avec d’autres custom node pour comprendre l’intégration.

Pour l’arborescence, c’est en effet préférable de faire comme cela. Simplement en cour de développement c’est plus pratique/rapide de faire un npm link et d’utiliser la librairie dans le répertoire courant. Si j’atteins un niveau de maturité acceptable, je regarderai comment la publier sur npm pour qu’elle soit directement installable dans node-red. Auquel cas l’arborescence ne sera plus à gérer.

salut @dduransseau

j’ai commencé à regarder et je me demande si le nom du package avec - ou _ pose pas problème, un bon exemple ici pour la structure et l’implémentation :

ca concerne la gestion des fichiers au niveau du core

De ce que je comprends, la traduction est codée en dur dans le html pour chaque branche de traduction (au passage fr et pas fr-FR pour la branche)

voila, on devrait faire avancer le schmilblik avec tout cela ! :wink:

1 « J'aime »

Bien vu, il faut en effet utiliser fr et non fr-FR. En changeant simplement cela, ça marche :slight_smile:
Je vais finir la traduction du coup.

Il y a en effet des cas où les - peuvent poser problème mais pas dans ce cas là, pour e-mail c’est supporté: node-red-nodes/social/email/61-email.html at master · node-red/node-red-nodes · GitHub

En revanche pour le nom des nœuds à afficher j’ai dû trouver un subterfuge pour afficher NRX-800 en utilisant un autre caractère unicode: NRX\u2011800 Input.

1 « J'aime »

L’intégration est dispo à l’installation directement dans node-red:

2 « J'aime »

Bonsoir Damien,

Super, juste quelques correctifsfaudrait corriger le payload

node-red-contrib-gce-nrx-800/locales/fr/nrx800.html at main · dduransseau/node-red-contrib-gce-nrx-800 · GitHub

ligne 45 => l’état souhaité de la LED, true = allumée, false = éteinte.

et utiliser le terme « LED » partout plutôt que DEL (français mais bien moins commun)

node-red-contrib-gce-nrx-800/nrx800.js at main · dduransseau/node-red-contrib-gce-nrx-800 · GitHub

ligne 34 : false: « cpen » au lieu de false: « open »

ligne 175 if (msg.payload === « On »)
msg.payload = true;
else if (msg.payload === « Off »)

mais ligne 187 : else { node.warn(« Invalid value: « +out+ » (Supported value are 0,1,true,false,ON,OFF) ») }

ON,OFF au lieu de On,Off

Pour le reste :+1:

Top, merci pour les corrections, je viens de pousser une mise à jour :grinning_face:

Pour les lignes 175 et 187 j’ai corrigé mais je me pose la question de l’opportunité de les garder, ça me semble assez superflus en fin de compte.

J’avais oublié mais je vais aussi regarder pour rendre les couleurs de statuts configurable :wink:

de rien

tu peux simplifier en ne prenant en entrée pour le node relay que true ou false

idée d’amélioration : ajouter la possibilité de prendre en entrée payload d’un node relay une chaine binaire « 01010101 » qui basculerai les relais correspondant au masque binaire ici le 2,4,6,8

La possibilité de spécifier les relais en entrée c’est clairement une fonctionnalité que j’ai en tête, elle est présente dans la version utilisant pigpio. En revanche elle soulève quelques défis car il y a un délai entre l’instanciation d’une GPIO et la possibilité de définir son état. Une solution pourrait être d’instancier toutes les GPIO des relais au déploiement mais ça implique un usage des relais exclusif à node-red, si un besoin ou un cas d’usage se présente pas de soucis pour ajouter ça.

En amélioration il y a aussi la gestion de plusieurs même nœuds, actuellement cela ne fonctionne pas bien, cependant, je suis perplexe sur le cas d’usage.

c’est juste pour simplifier le flow, par exemple pour une alarme avec un trigger on peut faire flasher directement les relais si ils sont associés à des lampes, si on entre en mode alarme armée on met tous les relais à 0 pour éteindre les lumières ou les 7 1ers à 0 et le dernier à 1 si il alimente une caméra et inversement si on quitte le mode alarme (associé à un capteur luminosité ou un node weather qui indique la luminosité)

Pareil pour les entrées, on peut avoir une possibilité d’entrer un binaire (11110000) qui renvoie true si au moins une des 4 premières entrées associées à des capteur d’ouverture est à 1 etc :wink:

Bref la fonction créé le besoin et lycée de Versailles :slightly_smiling_face:

Bon au moins ce dev ouvres la boite de pandore sur de futurs développements à qui veut participer donc :+1: !