Automatisation Flux Node red

Bonjour,

J’ai installé et Node Red avec telegram et j’arrive à envoyer des photos et vidéo prises par une caméra quand elle détecte une alerte. Ca c’est OK.

maintenant je voudrai apprendre à faire un envoi simple, toutes les heures par exemple ou 1 fois par jour, d’une valeur d’entité, par exemple, température extérieure.

J’ai préparé un flux avec Injecter, Current_state de mon entité, définir msg.payload, function, Telegram sender. Ca fontionne quand j’active Injecter.

J’ai ajouté une input boolean côté HA avec une automatisation qui le passe « true » a une heure précise et le repasse « false » 10 secondes après. c’est OK.

Coté Node Red j’ai un noeud Trigger qui sait détecter le passage en « true », je le vois avec le debug en sortie.

ce que je ne sais pas faire c’est comment ce trigger peut activer mon flux à la place du noeud Injecter.

je mets le schéma de mon flux, et si je dois copier d’autres éléments je peux faire, dites moi.

Là j’ai juste mis le trigger en entrée du noeud current_state mais ça ne suffit pas

je pense qu’il me faut un noeud qui crée le msg.payload derrière le trigger ?

oups, trouvé, il me suffisait d’ajouter un custom output dans le trigger avec mon msg.payload qui était dans l’injecter.

Ca fontionne.

Il me reste à trouver comment déclencher toutes les heures par exemple ? ou tous les jours , coté HA je suppose…

Ca va venir…

Bonjour @bemo47
Tu peux utiliser le noeud cron-plus:

Bob

Bonjour,

le node « injecter » le fait de base, il suffit de double cliquer dessus :
par exemple si tu veux a 12h


mais tu peux choisir aussi toutes les heures, etc…
après, tu peux aussi rajouter le node BigTimer qui est super complet
node-red-contrib-bigtimer (node) - Node-RED

Ah ok, moi j’ai fait une automatisation côté HA et j’ai découvert le time_pattern, ou redécouvert, j’avais déjà vu ça, mais le temps de me souvenir… c’est l’age :joy:

Mais ok je vais pouvoir regarder vos propositions aussi côté nodered

Ce qu’il me reste à refaire fonctionner c’est le menu telegram avec plusieurs choix puis réponse, sender et receiver, mais j’y reviendrai plus tard…

Bonjour @bemo47
côté automatisation HA voici ce que j’ai pour les boutons dans la notification Telegram:


Les automatisations:

Détail automatisation:

Résultat :

Si ça peux t’aider :wink:
Si tu préfères avec Node Red j’ai aussi :wink:
EDIT :
Juste un noeud Switch sur lequel on « câble » des noeuds action.
image

Bob

ahh y a tellement de possibilités, merci des idées !

Petite complexité (pour moi …) supplémentaire, comment inclure 2 valeurs d’entités dans le même message sur Télégram avec un flux de ce type ?


J’ai tenté d’appeler chaque entité avec un nom de payload différent, mais je ne comprends pas cette logique de payload que l’on retrouve dans chaque noeud, current state, change et function…

L’idée serait de sortir un message de ce type :

« Température extérieure : 25°, Humidité extérieure : 60% » dans 1 seul message.

Ce n’est pas une solution recommandée par les spécialistes mais ça fonctionne.
Voici comment je le fait avec des variables globales.
En entrée:


Qui entre sur un nœud fonction:

Même chose pour une deuxième température.

Puis un noeud Change avant l’envoi du message:

Bob

ah j’ai du mal à comprendre, faut que j’essaye ta solution.

là je teste 2 current_state déclenchés en // pour récupérer les valeurs de mes 2 entités, output sur 2 payload, pauyload1 et paylod2, par exemple, et injecté dans 1 noeud, template ou change, qui va dans le noeud function puis send telegram.
résultat j’ai 2 messages successifs…

exemple là avec un noeud change pour finaliser le message

finalement j’ai trouvé cette solution qui fonctionne pas mal mais ça m’a pris un temps fou pour arriver à ce que ça fonctionne correctement

contenu du noeud join

comme ça ça fonctionne, mais qu’est ce que c’est compliqué pour arriver à comprendre tout ça… et 36 façons différentes de faire, et la case à cocher « et tous les messages suivants » qui n’envoie qu’une seule fois, et le « après un nombre de parties du message » ou si je mets 2 rien ne se passe, mais avec 1sec d’attente ça marche !

bref ça avance :joy:

quoique j’ai quand même ce message dans le debug sur le join :


là je ne sais pas comment rectifier mais ça fonctionne

J’avais il y a longtemps testé ça:


Je vais tester à partir de ton post.
pourrais-tu partager ton flow json stp :wink:
Bob

ah dis moi juste comment je le récupère ?

Clic de droit sur la grille de ton flux → Exporter → Flux actuel - Copier presse papier et coller sur HACF :wink:
Bob

c’est ça ?

[
    {
        "id": "c93d76e425518d9b",
        "type": "tab",
        "label": "Flux 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "ef0a1cd26af51e3f",
        "type": "api-current-state",
        "z": "c93d76e425518d9b",
        "name": "Temp Ext",
        "server": "59781b09.703574",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "sensor.ecojoko_temperature_exterieure",
        "state_type": "num",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload2",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 120,
        "y": 100,
        "wires": [
            [
                "342aa5ba09b4c93f"
            ]
        ]
    },
    {
        "id": "8d09554d4110583d",
        "type": "api-current-state",
        "z": "c93d76e425518d9b",
        "name": "Humid Ext",
        "server": "59781b09.703574",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "sensor.ecojoko_humidite_exterieure",
        "state_type": "num",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload1",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 130,
        "y": 200,
        "wires": [
            [
                "342aa5ba09b4c93f"
            ]
        ]
    },
    {
        "id": "390a4ed619ea2191",
        "type": "telegram sender",
        "z": "c93d76e425518d9b",
        "name": "",
        "bot": "f9e88713e8567cb0",
        "haserroroutput": false,
        "outputs": 1,
        "x": 410,
        "y": 280,
        "wires": [
            []
        ]
    },
    {
        "id": "79b1128fd97b2f0d",
        "type": "inject",
        "z": "c93d76e425518d9b",
        "name": "",
        "props": [],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 90,
        "y": 40,
        "wires": [
            [
                "ef0a1cd26af51e3f",
                "8d09554d4110583d"
            ]
        ],
        "info": "msg.reset = true;\r\nnode.warn(\"Reset envoyé !\");\r\nreturn msg;"
    },
    {
        "id": "7f45fbb3ee27a720",
        "type": "function",
        "z": "c93d76e425518d9b",
        "name": "function 9",
        "func": "msg.payload = {\n    chatId: '5699281820',\n    type: 'message',\n    content: \"Humidité: \" + msg.payload[0] + \" %, Température: \" + msg.payload[1]\n}\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 120,
        "y": 280,
        "wires": [
            [
                "390a4ed619ea2191"
            ]
        ]
    },
    {
        "id": "342aa5ba09b4c93f",
        "type": "join",
        "z": "c93d76e425518d9b",
        "name": "",
        "mode": "custom",
        "build": "array",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "useparts": false,
        "accumulate": false,
        "timeout": "1",
        "count": "",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 350,
        "y": 160,
        "wires": [
            [
                "7f45fbb3ee27a720",
                "1c5c59d8a9cc4297"
            ]
        ]
    },
    {
        "id": "1c5c59d8a9cc4297",
        "type": "debug",
        "z": "c93d76e425518d9b",
        "name": "debug 1",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 400,
        "y": 80,
        "wires": []
    },
    {
        "id": "59781b09.703574",
        "type": "server",
        "name": "Home Assistant",
        "addon": true
    },
    {
        "id": "f9e88713e8567cb0",
        "type": "telegram bot",
        "botname": "Alerte",
        "usernames": "Alerte47bot",
        "chatids": "5699281820",
        "baseapiurl": "",
        "testenvironment": false,
        "updatemode": "polling",
        "addressfamily": "",
        "pollinterval": "300",
        "usesocks": false,
        "sockshost": "",
        "socksprotocol": "socks5",
        "socksport": "6667",
        "socksusername": "anonymous",
        "sockspassword": "",
        "bothost": "",
        "botpath": "",
        "localbotport": "8443",
        "publicbotport": "8443",
        "privatekey": "",
        "certificate": "",
        "useselfsignedcertificate": false,
        "sslterminated": false,
        "verboselogging": false
    }
]

et je viens d’ajouter un noeud cronplus devant, génial !

Oui c’était ça pour le flow @bemo47
Suite à ton post je suis reparti « jouer » avec Node Red.


bobdata me donne un flux json avec mes trois valeurs:

Mais je n’arrive pas a les récupérer dans un nœud change comme je peux le faire avec une global…

Peut être auras-tu une idée, c’est un peu pour le fun.
Sinon @golfvert peut-être :wink:

Cool que tu y sois arrivé, j’ai quelques flux cool pour de la lumières ou des prises de snapshot.

Bob

Alors là, déjà c’est un peu par hasard que je suis arrivé à ce résultat, donc te trouver ta solution là je crains que ce soit un peu difficile pour moi :joy:
Mais merci des échanges et j’espère que tu vas trouver
Je vais regarder quand même…

Une méthode avec jsonata (l’espèce de J:):

[
    {
        "id": "41b7990510e5fc4f",
        "type": "inject",
        "z": "d2625d7adeb0d329",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"temp\": \"19.9\", \"hum\": \"54\"}",
        "payloadType": "json",
        "x": 220,
        "y": 580,
        "wires": [
            [
                "aa8581ca074ec553"
            ]
        ]
    },
    {
        "id": "aa8581ca074ec553",
        "type": "change",
        "z": "d2625d7adeb0d329",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "\"La température extérieure est de \" & payload.temp & \" dégrés\"",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 400,
        "y": 580,
        "wires": [
            [
                "79a811d0fb53107b"
            ]
        ]
    },
    {
        "id": "79a811d0fb53107b",
        "type": "debug",
        "z": "d2625d7adeb0d329",
        "name": "debug 3",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 620,
        "y": 580,
        "wires": []
    }
]

Bonjour @golfvert
super, merci beaucoup :wink:


"La température extérieure est de " & payload.temp & " dégrés, l'humidité de " & payload.hum & " et la pression de " & payload.pression & " mb"

Si ça peut aussi te servir @bemo47

Bob