Node Red - Fonction Maximum

Bonjour,

J’ai besoin de ressortir la T° maximum de ces 3 consignes pour l’exploiter en réseau primaire.
Je pense à la fonction math.max mais je ne vois pas comment la formuler.
Dans l’exemple, je veux retenir la valeur 22.5 (celle du Séjour).
Merci pour vos conseils,
patrickp78

[{"id":"c0b182ce4823d1ee","type":"api-current-state","z":"efc74f09177072ce","name":"Séjour","server":"f1388c55.bbcd1","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.consigne_sejour_2","state_type":"num","blockInputOverrides":true,"outputProperties":[{"property":"payload","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":410,"y":1760,"wires":[["1dbce4652ccfb00e"]]},{"id":"7a3b4a5cd8701e23","type":"api-current-state","z":"efc74f09177072ce","name":"SdB","server":"f1388c55.bbcd1","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.consigne_sdb_sauna_2","state_type":"num","blockInputOverrides":true,"outputProperties":[{"property":"payload","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":410,"y":1820,"wires":[["1dbce4652ccfb00e"]]},{"id":"1762d0338ddaf518","type":"api-current-state","z":"efc74f09177072ce","name":"Chambre","server":"f1388c55.bbcd1","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.consigne_chambre_2","state_type":"num","blockInputOverrides":true,"outputProperties":[{"property":"payload","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":420,"y":1880,"wires":[["1dbce4652ccfb00e"]]},{"id":"c101072e850d94a9","type":"inject","z":"efc74f09177072ce","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":190,"y":1820,"wires":[["c0b182ce4823d1ee","7a3b4a5cd8701e23","1762d0338ddaf518"]]},{"id":"307ab5db045623bf","type":"debug","z":"efc74f09177072ce","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":840,"y":1820,"wires":[]},{"id":"1dbce4652ccfb00e","type":"function","z":"efc74f09177072ce","name":"math.max","func":"msg.payload = Math.max(xxx);\nreturn msg;","outputs":1,"timeout":0,"noerr":1,"initialize":"","finalize":"","libs":[],"x":660,"y":1820,"wires":[["307ab5db045623bf"]]},{"id":"f1388c55.bbcd1","type":"server","name":"Home Assistant RBT","addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false}]

Bonjour,

Je verrai plus la fonction comme ça :

// Récupérer les trois valeurs des messages
var value1 = global.get('homeassistant').homeAssistant.states["sensor.tdegc_h_chambre_arriere_temperature"].state;
var value2 = global.get('homeassistant').homeAssistant.states["sensor.tdegc_h_chambre_avant_temperature"].state;
var value3 = global.get('homeassistant').homeAssistant.states["sensor.tdegc_h_salon_temperature"].state;


// Calculer la valeur maximale
const maxValue = Math.max(value1, value2, value3);

// Retourner le résultat
msg.payload = { max: maxValue };
return msg;

Capture d'écran 2025-01-18 190633

Même sans le commentaire d’entrée, il n’a pas l’air d’aimer…
Mais une fois la correction faite, je voudrais tester ces valeurs en permanence, alors que le node Fonction réclame un node en entrée…
Pour l’exemple j’ai mis un inject mais ce serait plutôt un events:state
Merci d’avance,

Salut,

ce que @Ludoc a partagé n’ais pas à « importer » dans NR, mais du code à coller dans uen fonction.
De plus les entités utilisées sont les siennes, il faudra adapter ça.

Pour que ça se mette à jour à chaque changement de valeur, il faut utiliser le noeud « Events:state » et y mettre les 3 entités, du coup le flux sera déclencher à chaque fois qu’une des valeurs change. Ensuite le plus simple c’est de mettre un fonction avec le code donné au dessus.

La logique avec un eclatement comme tu as fait au début ne peut pas marcher ça a pour effect de tripler le flux.

1 « J'aime »

Merci pour le code et les précisions, ça marche !