Node red et nombre de requête

Bonjour,

Ce matin, je fais appelle à vos connaissances node-red.
J’ai écrit un petit flow qui requête une api, met à jour des entités boolean entre autre.
Si je l’exécute manuellement pas de souci, je vois bien la valeur de l’entité changer manuellement. Maintenant, si je programme l’inject toutes les 1s pour rafraichir les valeurs, je n’ai plus de mise à jour comme si des requêtes se perdaient.

[{"id":"c1b1ea0f4a62265d","type":"inject","z":"8317ef5773521c0d","g":"1be99c712d556386","name":"Door_buanderie","props":[{"p":"url","v":"/home/nodes/17","vt":"str"},{"p":"id","v":"door","vt":"str"},{"p":"room","v":"buanderie","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":140,"y":140,"wires":[["c1fd86e37183397b"]]},{"id":"c1fd86e37183397b","type":"api","z":"8317ef5773521c0d","g":"1be99c712d556386","name":"","url":"","server":"439b482fa48fa1d6","x":390,"y":140,"wires":[["6923feaf3d605fd4"]]},{"id":"6923feaf3d605fd4","type":"function","z":"8317ef5773521c0d","g":"1be99c712d556386","name":"Dispatch","func":"let Message = msg.payload;\nfor (var i = 0; i < Message.show_endpoints.length; i++) {\n    if (Message.show_endpoints[i].value_type == \"bool\") {\n        let entite = \"input_boolean.alarm_\" + msg.id + \"_\" + msg.room + \"_\" + i;\n        if (Message.show_endpoints[i].value){\n            msg.payload = {\n                domain: \"input_boolean\",\n                service: \"turn_on\",\n                target: {\n                    \"entity_id\": entite\n                },\n            }\n        } else {\n            msg.payload = {\n                domain: \"input_boolean\",\n                service: \"turn_off\",\n                target: {\n                    \"entity_id\": entite\n                },\n            }\n        }\n        if (entite == \"input_boolean.alarm_door_buanderie_3\"){\n            node.warn(msg.payload);\n        }\n\n        node.send(msg);\n    \n    } else if (Message.show_endpoints[i].value_type == \"int\") {\n        let entite = \"input_number.alarm_\" + msg.id + \"_\" + msg.room + \"_\" + i;\n        msg.payload = {\n            domain: \"input_number\",\n            service: \"set_value\",\n            target: {\n                \"entity_id\": entite\n            },\n            data: {\n                \"value\": Number(Message.show_endpoints[i].value)\n            }\n        }\n        //node.warn(msg.payload);\n        node.send(msg);\n    } else if (Message.show_endpoints[i].value_type == \"string\") {\n        let entite = \"input_text.alarm_\" + msg.id + \"_\" + msg.room + \"_\" + i;\n        let message = Message.show_endpoints[i].value;\n        if (typeof (Message.show_endpoints[i].value) !== \"string\") {\n            message = \"\";\n        }\n        msg.payload = {\n            domain: \"input_text\",\n            service: \"set_value\",\n            target: {\n                \"entity_id\": entite\n            },\n            data: {\n                \"value\": message\n            }\n        }\n        //node.warn(msg.payload);\n        node.send(msg);\n    }\n}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":140,"wires":[["145dfe16b3c7cc79"]]},{"id":"145dfe16b3c7cc79","type":"api-call-service","z":"8317ef5773521c0d","g":"1be99c712d556386","name":"","server":"8ba7aec4.1022e","version":5,"debugenabled":false,"domain":"","service":"","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":140,"wires":[[]]},{"id":"439b482fa48fa1d6","type":"freebox-server","host":"https://mafreebox.freebox.fr","port":"443"},{"id":"8ba7aec4.1022e","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Ca vous parle?

Merci

Salut.
J’ai pas ouvert le flow (je suis sur mobile) mais que souhaite tu faire à cette fréquence ?
Pour te donner une idée, les événements ha sont traités en temps réels mais les templates sont recalculés toutes les minutes.
Par ailleurs, si tu garde l’historique, chaque mise à jour déclenche une valeur en base.
Bref j’ai comme dans l’idée que conceptuellement c’est pas une bonne idée, de faire ça à la seconde.

1 « J'aime »

Je partage l’avis de @Pulpy-Luke . Faire ce genre de refresh toutes les secondes, ça ne parait pas une bonne approche.
Mais, pour vérifier ou ça se perd, comme d’habitude, mettre en noeud debug en sortie de ta fonction pour voir tous les messages qui en sortent.
La fonction m’a l’air correcte, même si en plus de faire le truc toutes les secondes, il y a une boucle for dedans qui peut (je ne sais pas ce que renvoie l’API) envoyer plusieurs données dans la même exécution de la fonction.

Merci messieurs,

En fait je cherche à récupérer le statut de mes périphériques d’alarme Freebox. N’arrivant pas à faire fonctionner l’intégration freebox, j’ai tenté une autre approche.
Il dois y avoir une techno qui met inconnu car si je comprends bien vos dires, ha ne peut mettre à jour une entité qu’une fois par minute. c’est bien ça?
Quand on fait tourner une intégration elle remonte des entités qui elles se mettent à jour « en temps réel » sans surcharger le serveur? Comment les valeur sont-elles récupérées API, MQTT ou équivalent.

C’est pour ma culture personnelle. :slight_smile:

Maintenant s’il est plus simple d’utiliser l’intégration, je n’ai pas réussi à avoir d’infos pour faire remonter correctement mes entités même si je suis à jour et que je vois sur le git de HA que les fichiers liés à la Freebox évoluent de façon régulière sur la branche de dèv.
J’ai tenté de télécharger cette branche et d’en extraire le répertoire freebox sans pouvoir améliorer les choses :smiling_face_with_tear:

Voilà où j’en suis. Je comprends l’histoire de la charge lié à mon code. Donc une autre voie s’impose.

Non, ça peut être plus fréquent.
Il faut être « raisonnable ». Une seconde c’est quand même fréquent…

HA prends l’initiative de recalculer les templates toutes les minutes.
Il n’empêche pas que les evenements temps réels (intégration etc) déclenchent aussi la mise à jour des entités concernées.

Je rejoints l’avis de @golfvert … Toutes les secondes pour en gros : 1 ou 2 activations/désactivations par jour + éventuellement une alarme de temps en temps (fausse manip), ça me parait bien gourmand !

Je crois comprendre

Je n’ai effectivement pas besoin de requêter les entités aussi souvent s’il n’y a pas de modification.
En revanche, quand je vais enclencher mon alarme, il me faudrait être sûr d’être averti en temps réel d’une détection pour déclencher la sirène ou vous partiriez du principe que la box s’en charge et dans ce cas, HA ne servirait qu’à la configuration des entité?

Je fais appelle à votre œil d’expert

Perso, j’ai du mal à concevoir qu’une alarme « dépende » de HA pour sonner… quand on sait déjà que pour gérer la lumière ou le chauffage, c’est pas toujours 100% fiable…
Ensuite, déclencher la sirène dans la seconde, ou dans les 5 secondes qui suivent l’effraction, j’ai pas l’impression que ce soit très différent. Quant à l’éventuelle notif de l’intrusion, en partant du principe que tu es loin … Même si c’est 1min après, ça changera rien
Par ailleurs, rien n’empêche de gérer toi même le fait de n’informer HA QUE quand il y a changement, NR se chargeant de faire le tri

Je te remercie pour ces éclaircissements. Je vais en tenir compte pour l’avenir. Avant je vais retenter d’installer l’intégration freebox de la branche de dev pour voir.

encore merci à vous 2.
En route pour de nouvelles aventures :slight_smile: