Comparer valeur capteur à input select

Bonjour,

J’ai un input select qui determine une valeur d’humidité cible, j’y soustrais 2 et additionne 2 afin de borner l’hysteresie de travail; je veux donc comparer l’humidité d’une pièce avec cible+2 et cible-2 pour allumer ou eteindre l’humidificateur.

[{"id":"065a679317c74b4c","type":"calculator","z":"eb04ae37.a0f68","name":"","inputMsgField":"payload","outputMsgField":"payload","operation":"sum","constant":"2","round":false,"decimals":0,"x":610,"y":360,"wires":[["1c733fd7c024a5d1"]]},{"id":"58865237a311e788","type":"trigger-state","z":"eb04ae37.a0f68","name":"Humidité <= cible-2 ?","server":"f2e51979.838dd8","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sensor.temperature_dependance","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"<=","comparatorValueDatatype":"str","comparatorValue":"payload"}],"inputs":1,"outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"num","enableInput":true,"x":800,"y":440,"wires":[["e40c6dbad76b3dc0"],[]]},{"id":"e695d42c90af635c","type":"calculator","z":"eb04ae37.a0f68","name":"","inputMsgField":"payload","outputMsgField":"payload","operation":"sub","constant":"2","round":false,"decimals":0,"x":620,"y":440,"wires":[["58865237a311e788"]]},{"id":"47049b013160fc9e","type":"server-state-changed","z":"eb04ae37.a0f68","name":"Humidité cible (input.select)","server":"f2e51979.838dd8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_select.humidite_cible","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","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":360,"y":400,"wires":[["e695d42c90af635c","065a679317c74b4c"]]},{"id":"1c733fd7c024a5d1","type":"trigger-state","z":"eb04ae37.a0f68","name":"Humidité > cible+2 ?","server":"f2e51979.838dd8","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sensor.temperature_dependance","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":">","comparatorValueDatatype":"str","comparatorValue":"payload"}],"inputs":1,"outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"num","enableInput":true,"x":790,"y":360,"wires":[["8455affe041d2f34"],[]]},{"id":"e40c6dbad76b3dc0","type":"api-call-service","z":"eb04ae37.a0f68","name":"Humidificateur On","server":"f2e51979.838dd8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.humidificateur"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1010,"y":440,"wires":[[]]},{"id":"8455affe041d2f34","type":"api-call-service","z":"eb04ae37.a0f68","name":"Humidificateur Off","server":"f2e51979.838dd8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.humidificateur"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1010,"y":360,"wires":[[]]},{"id":"f2e51979.838dd8","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}]

A priori rien de méchant mais je butte sur le edit trigger state note Humidité > cible+2 ?

merci de votre aide


System Health

version core-2022.4.6
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.9
os_name Linux
os_version 5.10.108
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.24.5
Stage running
Available Repositories 1097
Downloaded Repositories 23
Home Assistant Cloud
logged_in true
subscription_expiration 23 avril 2022, 02:00
relayer_connected true
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled false
remote_server eu-central-1-3.ui.nabu.casa
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 7.6
update_channel stable
supervisor_version supervisor-2022.04.0
docker_version 20.10.9
disk_total 111.1 GB
disk_used 12.0 GB
healthy true
supported true
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons deCONZ (6.12.0), Mosquitto broker (6.0.1), ESPHome (2022.3.1), Z-Wave JS (0.1.56), Samba share (9.5.1), Node-RED (10.4.0), File editor (5.3.3)
Dashboards
dashboards 3
resources 15
views 9
mode storage
___

OK, mon probléme commence bien avant cela, comment recupérer sous node red la valeur de mon input « cible » (qui dans lovelace n’est rien de plus qu’une valeur choisie avec un slider) ?

Salut,

En fait c’est difficile de répondre, je ne en fait pas si la logique générale que tu as mise en place peut marcher.
Tu as 3 noeuds de type « trigger » qui réagissent à des évènements.
Et ton premier noeud « Humidité Cible » ne sera activé que si tu change la valeur de ta cible. Ce qui n’arrive surement jamais ou pas souvent.

Mais pour faire ce que tu veux je ne sais pas trop la meilleure méthode.
Y’a surement possibilité d’un côté de récupérer ta valeur cible et la stocker dans une variable de flow ou globale.
Et ensuite avec une events:change pour détecter les changements d’humidité. Suivi d’un noeud « Switch » pour comparer la valeur de l’entitié avec ta cible avec l’option « is Between »…

Mais bon comme souvent si ton humidité est volatile, tu risque d’avoir des alternances rapides de on/off… faudra penser à une logique pour limiter ou éviter ça.

Tu as raison, il faut que je stocke la valeur cible, je vais essayer de passer par un switch node variable flow.
Merci

mais c’est ça que je sais pas faire :no_mouth:

Salut,

je t’ai fait un exemple simple, celui là récupère la valeur cible à chaque mise à jour de l’humidité. Pas gênant si l’humidité est mesurée toutes les minutes… un peu plus si c’est toutes les secondes :slight_smile:

[{"id":"5ea4a926e662c52c","type":"server-state-changed","z":"e747e193cdb9c0d8","name":"","server":"ab763e9f.9a91b","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.sonde_sonoff_salon_humidity","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","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":"input","propertyType":"flow","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":290,"y":400,"wires":[["4543916473c0d962"]]},{"id":"4543916473c0d962","type":"api-current-state","z":"e747e193cdb9c0d8","name":"","server":"ab763e9f.9a91b","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.volume","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","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":700,"y":400,"wires":[["893d781180598cd7"]]},{"id":"ef7aaed27cb0ce09","type":"switch","z":"e747e193cdb9c0d8","name":"Test Payload","property":"input","propertyType":"flow","rules":[{"t":"gt","v":"max","vt":"flow"},{"t":"lte","v":"min","vt":"flow"}],"checkall":"true","repair":false,"outputs":2,"x":1270,"y":400,"wires":[["2fb2f69d3a67a415"],["d87ffcb89d21ae00"]]},{"id":"2fb2f69d3a67a415","type":"api-call-service","z":"e747e193cdb9c0d8","name":"","server":"ab763e9f.9a91b","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.essai"],"data":"{\"value\": msg.payload}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1520,"y":360,"wires":[[]]},{"id":"d87ffcb89d21ae00","type":"api-call-service","z":"e747e193cdb9c0d8","name":"","server":"ab763e9f.9a91b","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.essai"],"data":"{\"value\": msg.payload}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1520,"y":420,"wires":[[]]},{"id":"893d781180598cd7","type":"change","z":"e747e193cdb9c0d8","name":"","rules":[{"t":"set","p":"max","pt":"flow","to":"payload +2","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1010,"y":440,"wires":[["c5a4cd72e92f8ec3"]]},{"id":"c5a4cd72e92f8ec3","type":"change","z":"e747e193cdb9c0d8","name":"","rules":[{"t":"set","p":"min","pt":"flow","to":"payload -2","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1010,"y":380,"wires":[["ef7aaed27cb0ce09"]]},{"id":"ab763e9f.9a91b","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}]

Merci Alex d’avoir pris le temps de m’avoir fait un exemple qui me permet de mieux comprendre la manipulation des « entity state » « payload »… je ne maitrisais pas complétement cela donc ça va me faire avancer dans node red.

A l’occasion de mes multiples essais (j’ai cherché avant de soliciter votre aide :wink: ) j’avais un retour :
« Entity could not be found in cache for entity_id: input_number.input_select_humidite_cible » qui bloquait tout; dans les réglages du serveur HA, il fallait décocher « Delay connection attempts »


https://community.home-assistant.io/t/entity-not-found-in-cache-for-one-node-but-fine-for-others/157215

Royal, j’ai tout ce qu’il me faut maintenant, merci