Bonsoir,
J’ai bien bien galérer à comprendre comment faire fonctionner le CRON mais je m’en suis sorti. Merci à vous deux pour vos conseils.
[{"id":"e54b160f.e9e4f8","type":"tab","label":"Piscine","disabled":false,"info":""},{"id":"5a9f229f.4501ac","type":"inject","z":"e54b160f.e9e4f8","name":"Chaque jour à 00:05","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"05 00 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":100,"wires":[["df7ae9c2.ee3e18","846aabe8.4aac38"]]},{"id":"df7ae9c2.ee3e18","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la T° de l'eau","server":"cfe85b65.cca4e8","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"input_number.pool_temperature","state_type":"str","state_location":"temperature","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":250,"y":160,"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":280,"wires":[["aa977ce.9e0bc8"]]},{"id":"1760779a.db8268","type":"comment","z":"e54b160f.e9e4f8","name":"Calcul des horaires de filtration et de nettoyage de la piscine","info":"","x":260,"y":60,"wires":[]},{"id":"e8e6c528.5d79d8","type":"api-current-state","z":"e54b160f.e9e4f8","name":"Récupération de la saison","server":"cfe85b65.cca4e8","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"input_boolean.swimming_season","state_type":"str","state_location":"season","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":230,"y":220,"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":360,"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":630,"y":240,"wires":[["23421ff0.35042","e016296b.35ad38","6ec13a00.431f98"]]},{"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":410,"y":100,"wires":[["ed2007a4.083a68"]]},{"id":"23421ff0.35042","type":"debug","z":"e54b160f.e9e4f8","name":"Debug Ordonnanceur","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":860,"y":420,"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// Affichage des tâches plannifiée\nmsg.payload.push({\n \"command\": \"list-all\",\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":400,"y":340,"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// On défini l'heure pivot\nvar pivot = new Date();\npivot.setHours(13, 0, 0, 0);\n\n// On calcul l'heure au format CRON de la mise en marche de la piscine\nvar startTime = new Date(pivot.getTime() + msg.offset.start * 60000);\nvar cronStart = startTime.getSeconds() + \" \" + startTime.getMinutes() + \" \" + startTime.getHours() + \" * * * *\";\n\n// On calcul l'heure au format CRON de l'arret de la piscine\nvar endTime = new Date(pivot.getTime() + msg.offset.end * 60000);\nvar cronEnd = endTime.getSeconds() + \" \" + endTime.getMinutes() + \" \" + endTime.getHours() + \" * * * *\";\n\n// On calcul l'heure au format CRON de l'arret de la piscine\nvar endTimeRobot = new Date(pivot.getTime() + (msg.offset.start + 150) * 60000);\nvar cronEndRobot = endTimeRobot.getSeconds() + \" \" + endTimeRobot.getMinutes() + \" \" + endTimeRobot.getHours() + \" * * * *\";\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\": \"cron\",\n \"expression\": cronStart\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\": \"cron\",\n \"expression\": cronEnd\n});\n\n// On ajout le CRON de démarrage du robot de piscine\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\": \"cron\",\n \"expression\": cronStart\n});\n\n// On ajout le CRON d'arret du robot de piscine\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\": \"cron\",\n \"expression\": cronEndRobot\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":410,"y":380,"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"}],"checkall":"true","repair":false,"outputs":4,"x":830,"y":160,"wires":[["726902af.ecba0c"],["54b1762b.de7c18"],["44b21d05.9e9bb4"],["f20641b1.71883"]]},{"id":"726902af.ecba0c","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Start Filtration","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"automation","service":"turn_on","entityId":"switch.piscine_filtration","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1020,"y":100,"wires":[[]]},{"id":"54b1762b.de7c18","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Filtration","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"automation","service":"turn_off","entityId":"switch.piscine_filtration","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1020,"y":140,"wires":[[]]},{"id":"44b21d05.9e9bb4","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Start Robot","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"automation","service":"turn_on","entityId":"switch.piscine_surpresseur","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1010,"y":180,"wires":[[]]},{"id":"f20641b1.71883","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Stop Robot","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"automation","service":"turn_off","entityId":"switch.piscine_surpresseur","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1010,"y":220,"wires":[[]]},{"id":"7833840c.33350c","type":"comment","z":"e54b160f.e9e4f8","name":"Changer la saison de la piscine","info":"","x":170,"y":560,"wires":[]},{"id":"3096bc3a.7299e4","type":"inject","z":"e54b160f.e9e4f8","name":"Eté","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":130,"y":600,"wires":[["a0d71e43.6bef4"]]},{"id":"ae0e7895.c95948","type":"inject","z":"e54b160f.e9e4f8","name":"Hiver","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":130,"y":640,"wires":[["743bb49.595014c"]]},{"id":"743bb49.595014c","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Passage en mode : Hivernage","server":"cfe85b65.cca4e8","version":1,"debugenabled":true,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.swimming_season","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":350,"y":640,"wires":[[]]},{"id":"a0d71e43.6bef4","type":"api-call-service","z":"e54b160f.e9e4f8","name":"Passage en mode : Eté","server":"cfe85b65.cca4e8","version":1,"debugenabled":true,"service_domain":"input_boolean","service":"turn_on","entityId":"input_boolean.swimming_season","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":330,"y":600,"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"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"list-all","payload":"","payloadType":"date","x":340,"y":440,"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":850,"y":280,"wires":[["92d75f07.26dc7"]]},{"id":"d98bc806.e95ab8","type":"api-call-service","z":"e54b160f.e9e4f8","name":"MAJ Texte Heures Filtration","server":"cfe85b65.cca4e8","version":1,"debugenabled":false,"service_domain":"input_text","service":"set_value","entityId":"input_text.pool_pump_hours","data":"{\"value\":msg.payload}","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":980,"y":360,"wires":[[]]},{"id":"92d75f07.26dc7","type":"function","z":"e54b160f.e9e4f8","name":"Récupération heures","func":"var start = new Date(msg.payload.result.filter(elm => elm.config.name == \"start_filtration\").pop().status.nextDateTZ)\nvar end = new Date(msg.payload.result.filter(elm => elm.config.name == \"stop_filtration\").pop().status.nextDateTZ)\nmsg.payload = \"De \" + start.getHours() + \"h\" + (start.getMinutes() < 10 ? \"0\": \"\") + start.getMinutes() + \" à \" + end.getHours() + \"h\" + (end.getMinutes() < 10 ? \"0\": \"\") + end.getMinutes();\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":920,"y":320,"wires":[["d98bc806.e95ab8"]]},{"id":"cfe85b65.cca4e8","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]