Calculer les horaires ON/OFF

L’ordre vers HA est synchrone et il n’y a pas de confirmation de HA vers NodeRed pour valider la bonne exécution de l’ordre.
Donc, si tu veux être sûr, il faut effectivement un truc en plus.

Bonjour,

J’ai copié votre code dans nodered seulement la node CRON n’est pas paramétrée.
J’essais de l’adapter a ma température / position etc.

Pourriez vous partager votre configuration de la node CRON s’il vous plait ?

Cdlt

Bonjour,

Voici mon flow :


[{"id":"e54b160f.e9e4f8","type":"tab","label":"Piscine","disabled":false,"info":""},{"id":"df7ae9c2.ee3e18","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la T° de l'eau","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.pool_temperature","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"temperature","propertyType":"msg","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":780,"wires":[["e8e6c528.5d79d8"]]},{"id":"36f45a3b.b5e726","type":"function","z":"e54b160f.e9e4f8","name":"Calcul du temps de filtration","func":"// Pour assurer un temps minimum de filtration la temperature de calcul est forcée a 10°C\nvar temperature = Math.max(10, msg.temperature);\n\n// Calcul de la durée de filtration suivant l'équation\nvar duration = Math.floor(((0.00335 * Math.pow(temperature, 3)) + (-0.14953 * Math.pow(temperature, 2)) + (2.43489 * temperature) - 10.72859) * 60);\n// La durée de filtration ne peux etre inférieure à 3h et supérieure à 14h\nduration = Math.min(Math.max(duration, 3*60), 14*60);\nmsg.duration = duration;\n\n// On calcul les heures de début et de fin de filtration\nmsg.offset = {};\nmsg.offset.start = Math.floor(-duration * ((msg.season == \"off\") ? 2/3 : 1/2));\nmsg.offset.end = Math.floor(duration * ((msg.season == \"off\") ? 1/3 : 1/2));\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":240,"y":860,"wires":[["aa977ce.9e0bc8"]]},{"id":"1760779a.db8268","type":"comment","z":"e54b160f.e9e4f8","name":"Mode Automatique : Calcul des horaires de filtration et de nettoyage de la piscine","info":"","x":320,"y":660,"wires":[]},{"id":"e8e6c528.5d79d8","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la saison","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.swimming_season","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"season","propertyType":"msg","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":230,"y":820,"wires":[["36f45a3b.b5e726"]]},{"id":"aa977ce.9e0bc8","type":"switch","z":"e54b160f.e9e4f8","name":"Est ce l'été ?","property":"season","propertyType":"msg","rules":[{"t":"eq","v":"off","vt":"str"},{"t":"eq","v":"on","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":190,"y":920,"wires":[["7115b4c3.b1ed0c"],["22e50bc0.c54c44"]]},{"id":"ed2007a4.083a68","type":"cronplus","z":"e54b160f.e9e4f8","name":"CRON","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[],"x":750,"y":600,"wires":[["e016296b.35ad38","6ec13a00.431f98","36fd9668.a22dda"]]},{"id":"846aabe8.4aac38","type":"function","z":"e54b160f.e9e4f8","name":"Effacer les tâches","func":"msg.payload = {\n    \"command\": \"remove-all\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":210,"y":700,"wires":[["ed2007a4.083a68"]]},{"id":"23421ff0.35042","type":"debug","z":"e54b160f.e9e4f8","name":"Debug CRON","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1140,"y":780,"wires":[]},{"id":"7115b4c3.b1ed0c","type":"function","z":"e54b160f.e9e4f8","name":"Ajout tâches d'hiver","func":"// On initialise notre liste de taches\nmsg.payload = [];\n\n// On ajout le CRON de démarrage de la piscine\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"start_filtration\",\n    \"name\": \"start_filtration\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"sunrise\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": msg.offset.start\n});\n\n// On ajoute le CRON d'arrêt de la piscine\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"stop_filtration\",\n    \"name\": \"stop_filtration\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"sunrise\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": msg.offset.end\n});\n\n// On ajoute le calcul du levé du soleil\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"sunrise\",\n    \"name\": \"sunrise\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"sunrise\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": 0\n});\n\n// Affichage des tâches plannifiée\nmsg.payload.push({\n    \"command\": \"list-all\",\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":390,"y":900,"wires":[["ed2007a4.083a68"]]},{"id":"22e50bc0.c54c44","type":"function","z":"e54b160f.e9e4f8","name":"Ajout tâches d'été","func":"// On initialise notre liste de taches\nmsg.payload = [];\n\n\n// On ajout le CRON de démarrage de la piscine\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"start_filtration\",\n    \"name\": \"start_filtration\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"solarNoon\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": msg.offset.start\n});\n\n// On ajoute le CRON d'arrêt de la piscine\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"stop_filtration\",\n    \"name\": \"stop_filtration\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"solarNoon\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": msg.offset.end\n});\n\n// On ajout le CRON de démarrage du robot\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"start_robot\",\n    \"name\": \"start_robot\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"solarNoon\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": msg.offset.start\n});\n\n// On ajoute le CRON d'arrêt du robot\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"stop_robot\",\n    \"name\": \"stop_robot\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"solarNoon\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": msg.offset.start + 150\n});\n\n// On ajoute le calcul du point le plus élevé du soleil\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"solarNoon\",\n    \"name\": \"solarNoon\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"solar\",\n    \"solarType\": \"selected\",\n    \"solarEvents\": \"solarNoon\",\n    \"location\": \"48.884544434795146 2.695956928655505\",\n    \"offset\": 0\n});\n\n// Affichage des tâches plannifiée\nmsg.payload.push({\n    \"command\": \"list-all\",\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":390,"y":940,"wires":[["ed2007a4.083a68"]]},{"id":"e016296b.35ad38","type":"switch","z":"e54b160f.e9e4f8","name":"Commandes","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"start_filtration","vt":"str"},{"t":"eq","v":"stop_filtration","vt":"str"},{"t":"eq","v":"start_robot","vt":"str"},{"t":"eq","v":"stop_robot","vt":"str"},{"t":"eq","v":"switch_auto","vt":"str"}],"checkall":"true","repair":false,"outputs":5,"x":950,"y":500,"wires":[["726902af.ecba0c"],["54b1762b.de7c18"],["44b21d05.9e9bb4"],["f20641b1.71883"],["b5a44d8e.d2a1d"]]},{"id":"726902af.ecba0c","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Start Filtration","server":"cfe85b65.cca4e8","version":5,"debugenabled":true,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.piscine_filtration"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1160,"y":420,"wires":[[]]},{"id":"54b1762b.de7c18","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Filtration","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.piscine_filtration"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1160,"y":460,"wires":[[]]},{"id":"44b21d05.9e9bb4","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Start Robot","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.piscine_surpresseur"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1150,"y":500,"wires":[[]]},{"id":"f20641b1.71883","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Robot","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.piscine_surpresseur"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1150,"y":540,"wires":[[]]},{"id":"b608ed80.ad76e","type":"inject","z":"e54b160f.e9e4f8","name":"Récupérer la liste des taches plannifiées","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"debug","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"list-all","payload":"","payloadType":"date","x":240,"y":1040,"wires":[["ed2007a4.083a68"]]},{"id":"6ec13a00.431f98","type":"switch","z":"e54b160f.e9e4f8","name":"Liste des tâches ?","property":"payload.command.command","propertyType":"msg","rules":[{"t":"eq","v":"list-all","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":970,"y":640,"wires":[["92d75f07.26dc7","d50d2ac7.d6f528"]]},{"id":"d98bc806.e95ab8","type":"api-call-service","z":"e54b160f.e9e4f8","name":"MAJ Texte Heures Filtration","server":"cfe85b65.cca4e8","version":5,"debugenabled":true,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.pool_pump_hours"],"data":"{\"value\":msg.payload}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1540,"y":640,"wires":[[]]},{"id":"92d75f07.26dc7","type":"function","z":"e54b160f.e9e4f8","name":"Récupération heures de filtration","func":"if (msg.payload.result.filter(elm => elm.config.name == \"stop_filtration\").pop() == undefined) {\n    // La piscine est en arrêt\n    msg.payload = \"-\";\n} else {\n    if (msg.payload.result.filter(elm => elm.config.name == \"switch_auto\").pop() == undefined) {\n        // On est en filtration automatique\n        var start = new Date(msg.payload.result.filter(elm => elm.config.name == \"start_filtration\").pop().status.nextDateTZ)\n        var end = new Date(msg.payload.result.filter(elm => elm.config.name == \"stop_filtration\").pop().status.nextDateTZ)\n        msg.payload = start.getHours() + \"h\" + (start.getMinutes() < 10 ? \"0\": \"\") + start.getMinutes() + \" à \" + end.getHours() + \"h\" + (end.getMinutes() < 10 ? \"0\": \"\") + end.getMinutes();\n    } else {\n        // On est en marche forcée\n        var end = new Date(msg.payload.result.filter(elm => elm.config.name == \"stop_filtration\").pop().status.nextDateTZ)\n        msg.payload = \"\" + (end.getDate() < 10 ? \"0\" : \"\") + end.getDate() + \"/\" + (end.getMonth() < 9 ? \"0\": \"\") + (end.getMonth() + 1) + \"/\" + end.getFullYear() + \" à \" + end.getHours() + \"h\" + (end.getMinutes() < 10 ? \"0\": \"\") + end.getMinutes();\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1240,"y":640,"wires":[["d98bc806.e95ab8"]]},{"id":"4424ec80.483744","type":"delay","z":"e54b160f.e9e4f8","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":180,"y":740,"wires":[["df7ae9c2.ee3e18"]]},{"id":"c6c339cf.b97078","type":"comment","z":"e54b160f.e9e4f8","name":"Mode Off : On arrete tous et on vide le CRON","info":"","x":210,"y":480,"wires":[]},{"id":"53b16ebf.cb726","type":"comment","z":"e54b160f.e9e4f8","name":"Mode Marche forcée : On défini la date de retour au mode automatique","info":"","x":290,"y":220,"wires":[]},{"id":"efd9cd79.b8803","type":"function","z":"e54b160f.e9e4f8","name":"Effacer les tâches","func":"// On initialise notre liste de taches\nmsg.payload = [];\n\n// On efface les tâches plannifiée\nmsg.payload.push({\n    \"command\": \"remove-all\",\n});\n\n// Affichage des tâches plannifiée\nmsg.payload.push({\n    \"command\": \"list-all\",\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":210,"y":520,"wires":[["ed2007a4.083a68"]]},{"id":"de7b8c62.5a8eb","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Filtration","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.piscine_filtration"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":220,"y":560,"wires":[[]]},{"id":"51d23c2a.0ae864","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Robot","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.piscine_surpresseur"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":210,"y":600,"wires":[[]]},{"id":"36574321.8c548c","type":"comment","z":"e54b160f.e9e4f8","name":"Lister les tâches programmées","info":"","x":170,"y":1000,"wires":[]},{"id":"b5093fa2.4742b","type":"server-state-changed","z":"e54b160f.e9e4f8","name":"Changement du mode de fonctionnement","server":"cfe85b65.cca4e8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_select.pool_pump","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":220,"y":120,"wires":[["9ed36abe.bb0a68"]]},{"id":"e9d890ef.d83b","type":"comment","z":"e54b160f.e9e4f8","name":"A chaque changement de mode de fonctionnement où a 0h01 chaque jour, on met à jour le CRON","info":"","x":370,"y":40,"wires":[]},{"id":"640a9a26.4d8a54","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Mode de fonctionnement","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.pool_pump","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":390,"y":160,"wires":[["18c2d6d7.1e4a49"]]},{"id":"d2e5a3e1.13734","type":"inject","z":"e54b160f.e9e4f8","name":"Chaque jour à 00:01","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"01 00 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":160,"wires":[["640a9a26.4d8a54"]]},{"id":"7bc7b6b6.dcf668","type":"switch","z":"e54b160f.e9e4f8","name":"Routage","property":"payload.state","propertyType":"msg","rules":[{"t":"eq","v":"Marche forcée","vt":"str"},{"t":"eq","v":"Off","vt":"str"},{"t":"eq","v":"Automatique","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":900,"y":120,"wires":[["1240b502.db692b"],["3780896f.bddaf6"],["c5ae4368.5433f"]]},{"id":"9ed36abe.bb0a68","type":"function","z":"e54b160f.e9e4f8","name":"Mise en forme du message","func":"var mode = msg.payload;\nmsg = {};\nmsg.payload = {\n    state: mode,\n    type: \"new\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":520,"y":120,"wires":[["7bc7b6b6.dcf668"]]},{"id":"18c2d6d7.1e4a49","type":"function","z":"e54b160f.e9e4f8","name":"Mise en forme du message","func":"var mode = msg.payload;\nmsg = {};\nmsg.payload = {\n    state: mode,\n    type: \"update\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":160,"wires":[["7bc7b6b6.dcf668"]]},{"id":"44370ca1.a6d834","type":"link in","z":"e54b160f.e9e4f8","name":"Mode : Marche forcée","links":["1240b502.db692b"],"x":55,"y":340,"wires":[["a1b4b70d.560208"]]},{"id":"1240b502.db692b","type":"link out","z":"e54b160f.e9e4f8","name":"Mode : Marche forcée","links":["44370ca1.a6d834"],"x":1015,"y":80,"wires":[]},{"id":"9fd79e85.31482","type":"link in","z":"e54b160f.e9e4f8","name":"Mode : Off","links":["3780896f.bddaf6"],"x":55,"y":520,"wires":[["efd9cd79.b8803","de7b8c62.5a8eb","51d23c2a.0ae864"]]},{"id":"3780896f.bddaf6","type":"link out","z":"e54b160f.e9e4f8","name":"Mode : Off","links":["9fd79e85.31482"],"x":1015,"y":120,"wires":[]},{"id":"462203dd.a45e1c","type":"link in","z":"e54b160f.e9e4f8","name":"Mode : Automatique","links":["c5ae4368.5433f"],"x":55,"y":700,"wires":[["846aabe8.4aac38","4424ec80.483744"]]},{"id":"c5ae4368.5433f","type":"link out","z":"e54b160f.e9e4f8","name":"Mode : Automatique","links":["462203dd.a45e1c"],"x":1015,"y":160,"wires":[]},{"id":"a1b4b70d.560208","type":"switch","z":"e54b160f.e9e4f8","name":"Passage en marche forcée ?","property":"payload.type","propertyType":"msg","rules":[{"t":"eq","v":"new","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":220,"y":340,"wires":[["e589b13.024115"]]},{"id":"b5a44d8e.d2a1d","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Passage en mode automatique","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":["input_select.pool_pump"],"data":"{\"option\":\"Automatique\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1210,"y":580,"wires":[[]]},{"id":"439a47e4.3c66c8","type":"server-state-changed","z":"e54b160f.e9e4f8","name":"Changement durée marche forcée","server":"cfe85b65.cca4e8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_select.pump_forced_duration","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":180,"y":260,"wires":[["7cc7ebd6.cbccb4"]]},{"id":"e589b13.024115","type":"function","z":"e54b160f.e9e4f8","name":"Effacer les tâches","func":"msg.payload = {\n    \"command\": \"remove-all\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":490,"y":340,"wires":[["ed2007a4.083a68","ea462805.f51258"]]},{"id":"ea462805.f51258","type":"delay","z":"e54b160f.e9e4f8","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":200,"y":380,"wires":[["8887826c.383b9","3ad10e23.04cc52"]]},{"id":"8d006703.e14448","type":"function","z":"e54b160f.e9e4f8","name":"Calcul arrêt","func":"// On récupère la durée de la marche forcée\nvar offset = 1;\nswitch(msg.payload) {\n    case \"2 jours\":\n        offset = 2;\n        break;\n    case \"1 semaine\":\n        offset = 7;\n        break;\n}\n\n// On initialise notre liste de taches\nmsg.payload = [];\n\n// On calcul l'heure au format CRON de l'arrêt de la piscine\nvar now = new Date();\nvar endTime = new Date(now.getTime() + offset * 24 * 60 * 60000);\nvar cronEnd = endTime.getSeconds() + \" \" + endTime.getMinutes() + \" \" +  endTime.getHours() + \" \" +  endTime.getDate() + \" \" +  (endTime.getMonth() + 1) + \" * \" + endTime.getFullYear();\n\n// On ajout le CRON d'arret de la piscine\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"stop_filtration\",\n    \"name\": \"stop_filtration\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"cron\",\n    \"expression\": cronEnd\n});\n\n// On ajout le CRON de passage en automatique\nmsg.payload.push({\n    \"command\": \"add\",\n    \"topic\": \"switch_auto\",\n    \"name\": \"switch_auto\",\n    \"payloadType\": \"default\",\n    \"payload\": \"payload\",\n    \"type\": \"default\",\n    \"expressionType\": \"cron\",\n    \"expression\": cronEnd\n});\n\n\n// Affichage des tâches plannifiée\nmsg.payload.push({\n    \"command\": \"list-all\",\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":510,"y":420,"wires":[["ed2007a4.083a68"]]},{"id":"a677f49c.6a5e78","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Passage en mode marche forcée","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":["input_select.pool_pump"],"data":"{\"option\":\"Marche forcée\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":520,"y":300,"wires":[[]]},{"id":"25b433f2.8a55fc","type":"switch","z":"e54b160f.e9e4f8","name":"Marche forcée ?","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"Marche forcée","vt":"str"},{"t":"eq","v":"Marche forcée","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":260,"y":300,"wires":[["a677f49c.6a5e78"],["e589b13.024115"]]},{"id":"7cc7ebd6.cbccb4","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Mode de fonctionnement","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.pool_pump","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":450,"y":260,"wires":[["25b433f2.8a55fc"]]},{"id":"8887826c.383b9","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Durée marche forcée","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.pump_forced_duration","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":320,"y":420,"wires":[["8d006703.e14448"]]},{"id":"3ad10e23.04cc52","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Start Filtration","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.piscine_filtration"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":400,"y":380,"wires":[[]]},{"id":"36fd9668.a22dda","type":"switch","z":"e54b160f.e9e4f8","name":"Debugage ?","property":"debug","propertyType":"msg","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":950,"y":780,"wires":[["23421ff0.35042"]]},{"id":"b03f3a6c.b0a988","type":"comment","z":"e54b160f.e9e4f8","name":"Pilotage électrolyseur de seil","info":"","x":160,"y":1140,"wires":[]},{"id":"a42417fb.d2ed38","type":"server-state-changed","z":"e54b160f.e9e4f8","name":"Changement du niveau d'ORP","server":"cfe85b65.cca4e8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_number.pool_orp","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":180,"y":1180,"wires":[["fb1f6b24.1f6a38"]]},{"id":"fb1f6b24.1f6a38","type":"switch","z":"e54b160f.e9e4f8","name":"Routage ORP","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"675","vt":"str"},{"t":"gte","v":"750","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":420,"y":1180,"wires":[["fed9f67e.5a8c88"],["8c5b2125.ac383"]]},{"id":"fed9f67e.5a8c88","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Start Electrolyseur","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.piscine_electrolyseur_sel"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":1160,"wires":[[]]},{"id":"8c5b2125.ac383","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Electrolyseur","server":"cfe85b65.cca4e8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.piscine_electrolyseur_sel"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":1200,"wires":[[]]},{"id":"e1f750a2.2b32c","type":"server-state-changed","z":"e54b160f.e9e4f8","name":"Changement de la saison","server":"cfe85b65.cca4e8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.pool_season","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":80,"wires":[["c154e7fd.563338"]]},{"id":"bcdeb351.9cf3d","type":"function","z":"e54b160f.e9e4f8","name":"Mise en forme du message","func":"var mode = msg.payload;\nmsg = {};\nmsg.payload = {\n    state: mode,\n    type: \"new\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":660,"y":80,"wires":[["7bc7b6b6.dcf668"]]},{"id":"c154e7fd.563338","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Mode de fonctionnement","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.pool_pump","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"for":0,"forType":"num","forUnits":"minutes","x":410,"y":80,"wires":[["bcdeb351.9cf3d"]]},{"id":"d50d2ac7.d6f528","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la saison","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.swimming_season","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"season","propertyType":"msg","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":1210,"y":680,"wires":[["f42e8206.a485e","e2166d34.e80f2"]]},{"id":"f42e8206.a485e","type":"function","z":"e54b160f.e9e4f8","name":"Récupération heures pivot","func":"if (msg.season == \"off\") {\n    // On récupère l'heure de levée du soleil en hiver\n    var sunrise = new Date(msg.payload.result.filter(elm => elm.config.name == \"sunrise\").pop().status.nextDateTZ);\n    msg.payload = sunrise.getHours() + \"h\" + (sunrise.getMinutes() < 10 ? \"0\": \"\") + sunrise.getMinutes();\n    \n} else {\n    // On récupère l'heure du zenit en été\n    var sunrise = new Date(msg.payload.result.filter(elm => elm.config.name == \"solarNoon\").pop().status.nextDateTZ);\n    msg.payload = sunrise.getHours() + \"h\" + (sunrise.getMinutes() < 10 ? \"0\": \"\") + sunrise.getMinutes();\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1470,"y":680,"wires":[["c9e2f8fb.ccdd28"]]},{"id":"c9e2f8fb.ccdd28","type":"api-call-service","z":"e54b160f.e9e4f8","name":"MAJ Texte Heure Pivot Filtration","server":"cfe85b65.cca4e8","version":5,"debugenabled":true,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.pool_pump_pivot"],"data":"{\"value\":msg.payload}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1770,"y":680,"wires":[[]]},{"id":"e2166d34.e80f2","type":"function","z":"e54b160f.e9e4f8","name":"Récupération heures robot","func":"if (msg.season == \"off\") {\n    // On récupère l'heure de levée du soleil en hiver\n    msg.payload = \"-\";\n} else {\n    // On récupère les heures de fonctionnement du robot\n    var start = new Date(msg.payload.result.filter(elm => elm.config.name == \"start_robot\").pop().status.nextDateTZ)\n    var end = new Date(msg.payload.result.filter(elm => elm.config.name == \"stop_robot\").pop().status.nextDateTZ)\n    msg.payload = start.getHours() + \"h\" + (start.getMinutes() < 10 ? \"0\": \"\") + start.getMinutes() + \" à \" + end.getHours() + \"h\" + (end.getMinutes() < 10 ? \"0\": \"\") + end.getMinutes();\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1480,"y":720,"wires":[["df9af042.033dd"]]},{"id":"df9af042.033dd","type":"api-call-service","z":"e54b160f.e9e4f8","name":"MAJ Texte Heures Robot","server":"cfe85b65.cca4e8","version":5,"debugenabled":true,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.robot_hours"],"data":"{\"value\":msg.payload}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1750,"y":720,"wires":[[]]},{"id":"3cc19b32.b74034","type":"comment","z":"e54b160f.e9e4f8","name":"Pilotage du mode Hors Gel","info":"","x":150,"y":1280,"wires":[]},{"id":"14b77dd2.600942","type":"server-state-changed","z":"e54b160f.e9e4f8","name":"Changement de la température extérieure","server":"cfe85b65.cca4e8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"weather.pomponne","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":220,"y":1320,"wires":[["c0e61938.741248"]]},{"id":"c0e61938.741248","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la température extérieure","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"weather.pomponne","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"weather","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":280,"y":1360,"wires":[["24c87f6.e1dba8"]]},{"id":"24c87f6.e1dba8","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la T° de l'eau","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.pool_temperature","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"water","propertyType":"msg","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":1400,"wires":[["a35ea4d8.a290c8"]]},{"id":"a35ea4d8.a290c8","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de l'état Hors Gel","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.pool_pump_frost","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"frost","propertyType":"msg","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":1440,"wires":[["65c729a1.d754c8"]]},{"id":"65c729a1.d754c8","type":"switch","z":"e54b160f.e9e4f8","name":"Hors Gel actif ?","property":"frost","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":560,"y":1400,"wires":[["1e267488.96b75b"],["efe6e779.44cdb8"]]},{"id":"1e267488.96b75b","type":"switch","z":"e54b160f.e9e4f8","name":"T° ext sup -1°C ?","property":"weather.attributes.temperature","propertyType":"msg","rules":[{"t":"gte","v":"-1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":770,"y":1380,"wires":[["4bdb6f3c.65a77"]]},{"id":"4bdb6f3c.65a77","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Arrêt du mode Hors Gel","server":"cfe85b65.cca4e8","version":5,"debugenabled":true,"domain":"input_boolean","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.pool_pump_frost"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":1380,"wires":[[]]},{"id":"efe6e779.44cdb8","type":"switch","z":"e54b160f.e9e4f8","name":"T° ext inf -3°C ?","property":"weather.attributes.temperature","propertyType":"msg","rules":[{"t":"lte","v":"-3","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":760,"y":1420,"wires":[["1966cb5c.32b255"]]},{"id":"1966cb5c.32b255","type":"switch","z":"e54b160f.e9e4f8","name":"T° eauf inf 3°C ?","property":"water","propertyType":"msg","rules":[{"t":"lte","v":"3","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":960,"y":1420,"wires":[["ffc4f1dc.e9aad"]]},{"id":"ffc4f1dc.e9aad","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Activation du mode Hors Gel","server":"cfe85b65.cca4e8","version":5,"debugenabled":true,"domain":"input_boolean","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.pool_pump_frost"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1200,"y":1420,"wires":[[]]},{"id":"2f80d3fb.0bff5c","type":"comment","z":"e54b160f.e9e4f8","name":"En mode automatique, on vérifie toutes les 5 minutes l'état de la filtration et du robot","info":"","x":330,"y":1540,"wires":[]},{"id":"702b3ae.57210c4","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Mode de fonctionnement","server":"cfe85b65.cca4e8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.pool_pump","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"for":0,"forType":"num","forUnits":"minutes","x":410,"y":1580,"wires":[["1b50ffe0.69243"]]},{"id":"e773a1df.74e2e","type":"inject","z":"e54b160f.e9e4f8","name":"Toutes les 5 minutes","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":1580,"wires":[["702b3ae.57210c4"]]},{"id":"7fb3f641.915cc8","type":"debug","z":"e54b160f.e9e4f8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":910,"y":1580,"wires":[]},{"id":"1b50ffe0.69243","type":"switch","z":"e54b160f.e9e4f8","name":"Fonctionnement automatique ?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Automatique","vt":"str"},{"t":"neq","v":"Automatique","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":690,"y":1580,"wires":[["7fb3f641.915cc8"],[]]},{"id":"cfe85b65.cca4e8","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}]

Top, merci pour le partage de cette réalisation, je ne connaissais pas les nodes Link :wink:
Bob

Merci pour le partage !

Le calcul du temps de filtration et de départ semble fonctionner, par contre le mode debug afin de récupèrer les heures je bloc un peu.

je ne trouve pas la correspondance:

msg.payload.result.filter

image

C’est peut etre une mauvaise connaissance de ma part !

Cdlt

SI tu ouvre tes 5 objets dans le resultats, tu dois avoir la programmation du CRON

Il est vrai que j’ai un peu de mal a comprendre la node function « Récupération heures de filtration »
mais ce qu’il en sort avec la node debug :

image

par contre si je met une node function en sortie de CRON avec

msg.payload = msg.payload.result[0].status.nextDateTZ
return msg;

je récupère bien l’info :
image

Je sais pas s’il y a une petite erreur ou si c’est une erreur de compréhension de ma part!