Dans le cadre d'un réseau MESH couplé à Node-Red, la mise à jour des flows après scrutation du réseau MESH afin de créer les éléments nécessaires est envisagée.
L'idée de modifier dynamiquement les flows est apparue, mais il est techniquement, à ma connaissance pas possible de l'envisager.
Une alternative est possible, qui n'automatise pas tout, mais assure une grosse partie du travail.
ATTENTION : Node-red ne pouvant pas être modifié en route, il est pour le moment impossible de recharger ces flows automatiquement. Ceci impose les manipulations suivantes pour sa mise à jour.
Tous les éléments sont identifiés par un id unique puis des liens entre les éléments sont fait via ces id. Il en va de même pour les subflows, dont les id des éléments doivent être uniques.
L'affectation des objets dans l'interface utilisateur se fait via la des groupes {“type”: “ui_group”,} eux mêmes affectés à une page via l'ID de la page.
L'usage d'un subflow nécessite deux parties :
Prochainement une illustration sur la structure d'un subflow.
Le script python doit à partir du jeu de flows de base effectuer ceci :
Pour la création du subflow et de son nœud, la procédure est la suivante :
{ "id": "#IDE_NOEUD_CARTE_RELAIS2#", "type": "subflow:#ID_SUBFLOW#", "z": "#IDE_TAB_CONTROLE#", "name": "#IDE_NOEUD_MESH#", "env": [], "x": "#POS_X#", "y": "#POS_Y#", "wires": [] }, {
la portion de subflow générique pour introduire le nœud sur le subflow.
{ "id": "#ID_SUBFLOW#", "type": "subflow", "name": "RELAIS2", "info": "", "in": [ { "x": 40, "y": 80, "wires": [ { "id": "#ID_ENTREE1#" }, { "id": "#ID_ENTREE2#" }, { "id": "#ID_ENTREE3#" } ] } ], "out": [] },
la définition du subflow, avec les indication de raccordement du noeud d'entrée du subflow sur les éléments internes.
{ "id": "#ID_ELEMENT4#", "type": "ui_button", "z": "#ID_SUBFLOW#", "name": "ETAT VOYANT 2", "group": "#ID_GROUPE_CONTROLE#", "order": 2, "width": 1, "height": 1, "passthru": false, "label": "{{msg.state2}}", "tooltip": "", "color": "", "bgcolor": "{{msg.background2}}", "icon": "", "payload": "", "payloadType": "str", "topic": "", "x": 720, "y": 540, "wires": [ [] ] },
Un élément du subflow qui doit apparaître dans l'interface utilisateur via un groupe dont l'id est #ID_GROUPE_CONTROLE#
{ "id": "#ID_GROUPE_CONTROLE#", "type": "ui_group", "z": "", "name": "#IDE_NOEUD_MESH#", "tab": "#IDE_UITAB_CONTROLE#", "disp": "true", "width": "6", "collapse": "true" },
le groupe de contrôle qui apparaît dans la page de l'interface utilisateur #IDE_UITAB_CONTROLE#
ATTENTION : Cette étape de production du json générique est fondamentale, il est indispensable de bien décortiquer comment il est constitué. En effet dans un subflow, certains élements {id} sont interne au subflow, d'autres sont liés à l'extérieur.
Exemple : l'id du subflow doit être connue pour la création du nœud dans le flow. Alors que les id des éléments du subflow peuvent rester inconnus du reste.
C'est pourquoi j'ai choisi de NOTER #IDE_XXX" les id extérieurs au flow et ID ceux internes au flow.