Call service Local Calendar Nodered

Bonjour tout le monde,

Vu les tarifs de l’électricité qui vont encore augmenter, j’essaye de couper la marche de mon chauffe-eau suivant mon planning de travail en poste.
Donc il faut que je récupère mon planning de travail sur les 3 jours précédents (dans local calendar) et de faire des tests dessus pour permettre ou non le fonctionnement du chauffe-eau, le tout via nodered.

J’ai essayé via l’appel de service, ça fonctionne très bien, j’ai bien accès aux événements précédents :

Mais j’essaye d’être cohérent et tout passer via nodered, pour l’instant je n’arrive pas à avoir un résultat en sortie :

Capture d'écran 2024-01-06 110425

Capture d'écran 2024-01-06 110454
Capture d'écran 2024-01-06 110517

Sur le forum anglais, j’ai lu qu’il fallait passer par le wesocket en version 0.6 pour pouvoir exploiter le retour de message via « results », mais ça ne change pas les résultats.

Est-ce que quelqu’un a réussi à faire quelque chose de similaire, est ce que j’ai mal configuré le call service dans norered ?

Merci.

Si tu « déplies » le calendar.planning_chauffage les évènements n’y sont pas ?

@golfvert, merci pour la réponse.

2024 commence fort pour moi, effectivement, en revenant dessus et en dépliant, ça apparait :

image

Du coup, j’ai pu isoler le message du résultat en copiant le chemin et mettant ça dans le noeud debug :

payload["calendar.planning_chauffage"].events[0].summary

pour avoir :

"REPOS"

C’est peut-être pas le plus propre, mais ça fonctionne.

Merci :wink:

Par contre, comment modifier « extérieurement » la date de début et de fin pour qu’elle évolue au fil du temps, et régler l’heure ? Si c’est faisable. Merci.

Edit :
J’essaye de définir l’heure de début avec une durée en utilisant une variable locale gérée via date/time formatter, pour commencer 3 jours avant :

et en modifiant la charge :

{"start_date_time":flow.journee,"duration":"23:59:00"}

Mais c’est pas pris en compte, le résultat commence à la date d’aujourd’hui.

La concaténation et l’accès aux variables du contexte flow ça ne marche pas comme ça dans jsonata.
Si tu affiches {"start_date_time":flow.journee,"duration":"23:59:00"} dans un noeud debug, ça ne va pas avoir le format voulu.

Ou veux tu configurer la date de début, de fin et les heures ?
J’aurais tendance à faire ça avec un input_date :

[{"id":"44b4b6fdef012dbb","type":"api-current-state","z":"f889cf0b770cdb33","name":"","server":"d28c9492.f419c8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_datetime.mydate","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","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":5160,"wires":[["a3e6ef3422433082"]]},{"id":"eec091af6d02f319","type":"inject","z":"f889cf0b770cdb33","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":5160,"wires":[["44b4b6fdef012dbb"]]},{"id":"33185c97d9624530","type":"debug","z":"f889cf0b770cdb33","name":"debug 135","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":990,"y":5160,"wires":[]},{"id":"a3e6ef3422433082","type":"api-call-service","z":"f889cf0b770cdb33","name":"","server":"d28c9492.f419c8","version":5,"debugenabled":false,"domain":"calendar","service":"get_events","areaId":[],"deviceId":[],"entityId":["calendar.chauffage"],"data":"{\t   \"start_date_time\": payload,\t   \"end_date_time\":\"2024-07-01 22:00:00\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":740,"y":5160,"wires":[["33185c97d9624530"]]},{"id":"d28c9492.f419c8","type":"server","name":"hassio","version":5,"addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

En fait je voudrais 3 jours en arrière par rapport à la date d’aujourd’hui, pour faire des tests sur 4 jours.

Donc, tu veux utiliser la date de J-3 comme date de début systématiquement ?
Et que nodered fasse le boulot pour toi de savoir ce qu’est J-3 ?

Alors, pour ça, le noeud moment (node-red-contrib-moment (node) - Node-RED) est idéal.

C’est bien celui que j’utilise (certainement très mal)

de cette façon
Capture d'écran 2024-01-06 194101

Ca doit le faire :

[{"id":"0d2a33090ecd7e56","type":"moment","z":"f889cf0b770cdb33","name":"","topic":"","input":"","inputType":"date","inTz":"Europe/Paris","adjAmount":"3","adjType":"days","adjDir":"subtract","format":"YYYY-MM-DD HH:mm:ss","locale":"en_US","output":"payload","outputType":"msg","outTz":"Europe/Paris","x":460,"y":5100,"wires":[["ab9cba45ae7857b4"]]},{"id":"d9d6a67d10d414e8","type":"inject","z":"f889cf0b770cdb33","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":260,"y":5100,"wires":[["0d2a33090ecd7e56"]]},{"id":"ab9cba45ae7857b4","type":"debug","z":"f889cf0b770cdb33","name":"debug 135","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":5100,"wires":[]}]

On doit pas être loin,

[{"id":"0d2a33090ecd7e56","type":"moment","z":"2c11c5d29a3399a7","name":"","topic":"","input":"","inputType":"date","inTz":"Europe/Paris","adjAmount":"3","adjType":"days","adjDir":"subtract","format":"YYYY-MM-DD HH:mm:ss","locale":"en_US","output":"payload","outputType":"msg","outTz":"Europe/Paris","x":520,"y":1420,"wires":[["ab9cba45ae7857b4","f06f07a295f43bea"]]},{"id":"d9d6a67d10d414e8","type":"inject","z":"2c11c5d29a3399a7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":290,"y":1420,"wires":[["0d2a33090ecd7e56"]]},{"id":"ab9cba45ae7857b4","type":"debug","z":"2c11c5d29a3399a7","name":"debug 135","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":1340,"wires":[]},{"id":"e91ae31835eabbed","type":"debug","z":"2c11c5d29a3399a7","name":"debug 135","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1070,"y":1420,"wires":[]},{"id":"f06f07a295f43bea","type":"api-call-service","z":"2c11c5d29a3399a7","name":"","server":"35ed60ee.1830b","version":5,"debugenabled":false,"domain":"calendar","service":"get_events","areaId":[],"deviceId":[],"entityId":["calendar.chauffage"],"data":"{\t   \"start_date_time\": payload,\t   \"end_date_time\":\"2024-07-01 22:00:00\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":820,"y":1420,"wires":[["e91ae31835eabbed"]]},{"id":"35ed60ee.1830b","type":"server","name":"Home Assistant","addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false}]

Mais je retrouve la même erreur que précédement :

Capture d'écran 2024-01-06 200317

Edit : apparemment, c’est le passage de la date/heure qui pose problème

En remettant mon serveur HA et un calendrier qui existe ça marche.
Quelle version de NodeRed et de palette qui fait le lien HA / NR ?
Je suis en 3.1.3 et 0.62.2 et ça roule.

Bon, je viens d’essayer à distance sur mon téléphone (sans rien modifier) et ça fonctionne, à part que j’ai fait des maj sur des intégrations et relancé HA.

Merci :wink: