Nodered limit message

Mon problème

Bonjour,
Débutant sous HA et nodeRed et venant de Jeedom, je cherche une fonctionnalité de « limite » d’envoi d’un message.

Mon cas :

Je souhaite demander à NodeRed de m’informer d’une température basse ou haute d’une pièce, le soucis est lors de l’utilisation du node « delay » dès que le node reçoit une température « valide » basse ou haute, il m’envoi s’en cesse un message.
J’ai donc appliqué un delay de 1h, mais solution pas terrible car soit je risque de ne pas être informé, soit je reste d’être spam chaque heure.

Existe t-il une solution pour être informé 1 seule fois lors de la validation de la condition jusqu’à que la condition soit de nouveau invalide ?

En vous remerciant par avance.

[{"id":"bb8b051facd69482","type":"server-state-changed","z":"0a98787315733251","name":"Température buanderie ?","server":"2ac13f9d67a76d68","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.temperature_buanderie","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":1280,"wires":[["82a6e59bdaec2ef4","fbb3ae328d8969aa"]]},{"id":"e063f5dde14387e2","type":"switch","z":"0a98787315733251","name":"Alerte température","property":"payload","propertyType":"msg","rules":[{"t":"lte","v":"16","vt":"num"},{"t":"gt","v":"28","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":450,"y":1440,"wires":[["6b6980c027f6ba04"],["915357f385a9f954"]]},{"id":"fbb3ae328d8969aa","type":"delay","z":"0a98787315733251","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":250,"y":1440,"wires":[["e063f5dde14387e2"]]},{"id":"2ac13f9d67a76d68","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]

Ma configuration


[center]## System Health

version core-2022.6.6
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.12
os_name Linux
os_version 5.10.0-13-amd64
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4866
Installed Version 1.25.5
Stage running
Available Repositories 1061
Downloaded Repositories 2
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2022.05.3
agent_version 1.2.2
docker_version 20.10.14
disk_total 27.3 GB
disk_used 9.3 GB
healthy true
supported true
supervisor_api ok
version_api ok
installed_addons Z-Wave JS (0.1.60), Node-RED (12.0.2), File editor (5.3.3), Samba share (9.7.0), Home Assistant Google Drive Backup (0.108.2), Terminal & SSH (9.4.0)
Dashboards
dashboards 1
resources 0
views 5
mode storage
MiWifi
version 2.7.4
192.168.31.1 (xiaomi.router.rm1800) ok
Recorder
oldest_recorder_run 11 juin 2022, 13:34
current_recorder_run 20 juin 2022, 23:49
estimated_db_size 442.80 MiB
database_engine sqlite
database_version 3.34.1

Salut

Pas informé il n’y a pas de raison, mais si ça reste plus d’une heure c’est certain

A la place du node 'event states" tu peux utiliser un node ‹ trigger state › en indiquant un état ‹ before ›

2 « J'aime »

Un truc comme ça fonctionne, mais comme au « Compte est bon », bien moins élégant que la solution de Pulpy, mais je laisse, ça peut donner des idées pour autre chose.


On récupère la température:

On teste si elle est comprise entre 17 et 27:
image
Si oui, on écrit Température Normale dans le message Payload:
image
Si non, on écrit Température Anormale dans le message Payload:
image
Et on fini avec un filtre RBE qui ne laisse passer un message que s’il est différent du précédent, donc on évite toute répétition.
image

[{"id":"c0d0e120e7f8aa80","type":"tab","label":"Flow 3","disabled":false,"info":"","env":[]},{"id":"bb8b051facd69482","type":"server-state-changed","z":"c0d0e120e7f8aa80","name":"Température buanderie ?","server":"2ac13f9d67a76d68","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_number.clim_temperature","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"","halt_if_type":"num","halt_if_compare":"gt","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":150,"y":260,"wires":[["12900908fbf389bb"]]},{"id":"a6bf5e6dbb6d30b6","type":"debug","z":"c0d0e120e7f8aa80","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":950,"y":240,"wires":[]},{"id":"83037f2e09c45b2a","type":"rbe","z":"c0d0e120e7f8aa80","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":770,"y":240,"wires":[["a6bf5e6dbb6d30b6"]]},{"id":"627dd6c564df17ab","type":"change","z":"c0d0e120e7f8aa80","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"Température anormale","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":560,"y":300,"wires":[["83037f2e09c45b2a"]]},{"id":"0e5f0e065073d19d","type":"change","z":"c0d0e120e7f8aa80","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"Température normale","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":560,"y":220,"wires":[["83037f2e09c45b2a"]]},{"id":"12900908fbf389bb","type":"switch","z":"c0d0e120e7f8aa80","name":"","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"17","vt":"num","v2":"27","v2t":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":370,"y":260,"wires":[["0e5f0e065073d19d"],["627dd6c564df17ab"]]},{"id":"2ac13f9d67a76d68","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]
1 « J'aime »

Merci à vous deux.
je suis partie sur ta solution, avec ajout d’informations température basse, haute et retour à la normal.

[{"id":"acaa9d94bc831aaa","type":"server-state-changed","z":"d9f0894f79496ce6","name":"Température buanderie ?","server":"2ac13f9d67a76d68","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.temperature_buanderie","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"","halt_if_type":"num","halt_if_compare":"gt","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":130,"y":260,"wires":[["54bc0dbbd6e04be0"]]},{"id":"6fd6050e78bd70c1","type":"rbe","z":"d9f0894f79496ce6","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":650,"y":260,"wires":[["af6abbf7397c9fac"]]},{"id":"cd46a7343ed71ac9","type":"change","z":"d9f0894f79496ce6","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"Température haute","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":300,"wires":[["6fd6050e78bd70c1"]]},{"id":"d68509bc5b2bdf3a","type":"change","z":"d9f0894f79496ce6","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"Température basse","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":260,"wires":[["6fd6050e78bd70c1"]]},{"id":"54bc0dbbd6e04be0","type":"switch","z":"d9f0894f79496ce6","name":"","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"16","vt":"num","v2":"28","v2t":"num"},{"t":"lt","v":"16","vt":"num"},{"t":"gt","v":"28","vt":"num"}],"checkall":"true","repair":false,"outputs":3,"x":310,"y":260,"wires":[["b8f2ef74b1e1bc85"],["d68509bc5b2bdf3a"],["cd46a7343ed71ac9"]]},{"id":"af6abbf7397c9fac","type":"switch","z":"d9f0894f79496ce6","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Température normale","vt":"str"},{"t":"eq","v":"Température basse","vt":"str"},{"t":"eq","v":"Température haute","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":790,"y":260,"wires":[["9644d3bf78d0d7da"],["3c6c9ea6a68fa3aa"],["4dfb378b94522374"]]},{"id":"b8f2ef74b1e1bc85","type":"change","z":"d9f0894f79496ce6","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"Température normale","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":220,"wires":[["6fd6050e78bd70c1"]]},{"id":"2ac13f9d67a76d68","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]

Un grand merci pour votre aide !

Bonne soirée.

1 « J'aime »

Une question, c’est quoi l’option pour formater le code JSON sur une seule ligne ?

C’est ce bouton

Je l’utilisais mal mais ça marche, merci !