Si...Sinon (if…else) en Node-Red

Ahhhhh merci, je croyais qu’il se trouvait dans ma palette lol.
Par contre, ça n’a rien à voir avec ce fil mais j’ai essayé le ssh avec putty, et ça ne marche pas. Mais pour installer le noeud, il donne une commande en ssh je pense… je suis encore largué

image

Merci, faut que j’essaye. Je ne suis pas chez moi. J’essayerai ce soir. En tout cas, encore un grand merci à vous tous pour vos aides.

Non non… :innocent:

  1. Configuration → Plans

Ou

  1. Configuration → Automatisations

Avec NodeRed, rien de plus simple dés qu’il y a de la conditionnelle → code en javascript dans le node de developpement

If (condition 1){
return X
}
Else if (condition 2){
return Y
}
else{
return W
}

Un message a été scindé en un nouveau sujet : Installer l’API domogeek

Bonjour,

Je viens de tenter de programmer la fermeture de mes volets avec node-red en suivant la méthode de @evenisse
Seulement, je bloque. Je pensais avoir fait ce qu’il fallait mais le debug n’indique parfois rien ou quand il indique, c’est pour me dire qu’il ne trouve pas de valeur (alors que je la vois indiquée).
Petite question aussi, la requête de l’API domogeek semble beuguer régulièrement (réponse: unknown). Comment puis-je faire pour qu’il attende une réponse correcte?
Je vous post le code de node-red. Savez-vous me dire où je fais mal?

Merci

[{"id":"89990f99.a6d4e","type":"tab","label":"Volets","disabled":false,"info":""},{"id":"946fc8b0.e47f18","type":"debug","z":"89990f99.a6d4e","name":"Débug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1110,"y":480,"wires":[]},{"id":"f5e891c3.81dac","type":"api-call-service","z":"89990f99.a6d4e","name":"","server":"f2797c98.ae263","version":1,"debugenabled":false,"service_domain":"cover","service":"close_cover","entityId":"cover.montee_descente_totale","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1160,"y":540,"wires":[[]]},{"id":"7771658e.a06c2c","type":"switch","z":"89990f99.a6d4e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"fall","vt":"str"},{"t":"eq","v":"winter","vt":"str"},{"t":"eq","v":"spring","vt":"str"},{"t":"eq","v":"summer","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":550,"y":460,"wires":[["ab1a6250.88dfe"],["ab1a6250.88dfe"],["25b435d1.170caa"],["25b435d1.170caa"]]},{"id":"5374377.252e5c8","type":"inject","z":"89990f99.a6d4e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":80,"y":460,"wires":[["358d363f.bf91aa"]]},{"id":"358d363f.bf91aa","type":"api-current-state","z":"89990f99.a6d4e","name":"","server":"f2797c98.ae263","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.saison","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":320,"y":460,"wires":[["7771658e.a06c2c"]]},{"id":"ab1a6250.88dfe","type":"cronplus","z":"89990f99.a6d4e","name":"Heure d'hiver","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"schedule1","payloadType":"default","payload":"","expressionType":"solar","expression":"0 * * * * * *","location":"49.97697041919103 5.487235290929675","offset":"15","solarType":"selected","solarEvents":"sunset"}],"x":810,"y":440,"wires":[["946fc8b0.e47f18","f5e891c3.81dac"]]},{"id":"25b435d1.170caa","type":"cronplus","z":"89990f99.a6d4e","name":"Heure d'été","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"schedule1","payloadType":"default","payload":"","expressionType":"solar","expression":"0 * * * * * *","location":"49.97697737275994 5.487342579290271","offset":"30","solarType":"selected","solarEvents":"sunset"}],"x":800,"y":520,"wires":[["946fc8b0.e47f18","f5e891c3.81dac"]]},{"id":"f2797c98.ae263","type":"server","name":"Home Assistant","addon":true}]

Plusieurs choses:

  • le timestamp au début ne sera lancé que si tu cliques dessus. Donc, pour programmer un flot à faire régulièrement ça ne va pas
  • la logique de cron-plus c’est de programmer l’exécution une fois pour toute et de ne pas lancer un nouveau cron-plus à chaque fois que tu cliques sur time-stamp. Sinon, tu vas te retrouver avec plusieurs exécution de ton dernier noeud
  • pour le calcul de la saison, on trouve des exemples en javascript qui font ça en qq lignes de codes. J’ai juste pompé ce que j’ai trouvé là https://stackoverflow.com/questions/5670678/javascript-coding-input-a-specific-date-output-the-season
  • si j’ai compris ce que tu voulais faire c’est décaler la fermeture des volets de 15 minutes quand on est en été et printemps. C’est ça?

Si c’est un bon résumé, voilà une méthode:

[{"id":"8f6957f4.01c118","type":"function","z":"f5b50430.ea48b8","name":"Saison","func":"const md = (month, day) => ({month, day})\nconst toMd = date => md(date.getMonth(), date.getDate())\n\nconst before = (md1, md2) => (md1.month < md2.month) \n  || ((md1.month === md2.month) && (md1.day <= md2.day)) \n\nconst after = (md1, md2) => !before(md1, md2)\n\nconst between = (mdX, mdLow, mdHigh) => \n  after(mdX, mdLow) && before(mdX, mdHigh)\n \nconst season = (date, seasons) => ((md = toMd(date)) =>\n  Object.keys(seasons).find(season => seasons[season](md))\n)()\n\nconst MARCH_EQUINOX = md(2, 20)\nconst JUNE_SOLSTICE = md(5, 21)\nconst SEPTEMBER_EQUINOX = md(8, 23)\nconst DECEMBER_SOLSTICE = md(11, 21)\nconst NEW_YEAR = md(0, 1)\n\nconst seasons = {\n  spring: d => between(d, MARCH_EQUINOX, JUNE_SOLSTICE),\n  summer: d => between(d, JUNE_SOLSTICE, SEPTEMBER_EQUINOX),\n  fall: d => between(d, SEPTEMBER_EQUINOX, DECEMBER_SOLSTICE),\n  winter: d => \n    between(d, DECEMBER_SOLSTICE, NEW_YEAR) ||\n    between(d, NEW_YEAR, MARCH_EQUINOX)\n}\n\nmsg.payload = season(new Date(), seasons) \n  \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":350,"y":1560,"wires":[["3a1c9876.944e48"]]},{"id":"3a1c9876.944e48","type":"switch","z":"f5b50430.ea48b8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"regex","v":"winter|fall","vt":"str","case":false},{"t":"regex","v":"summer|spring","vt":"str","case":false}],"checkall":"true","repair":false,"outputs":2,"x":490,"y":1560,"wires":[["1b7e2d5f.f619a3"],["ff544df5.0da09"]]},{"id":"6d0b2a76.3e8864","type":"cronplus","z":"f5b50430.ea48b8","name":"Sunset + 15","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"schedule1","payloadType":"default","payload":"","expressionType":"solar","expression":"0 * * * * * *","location":"49.97697041919103 5.487235290929675","offset":"15","solarType":"selected","solarEvents":"sunset"}],"x":190,"y":1560,"wires":[["8f6957f4.01c118"]]},{"id":"1b7e2d5f.f619a3","type":"api-call-service","z":"f5b50430.ea48b8","name":"","server":"f2797c98.ae263","version":1,"debugenabled":false,"service_domain":"cover","service":"close_cover","entityId":"cover.montee_descente_totale","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":860,"y":1540,"wires":[[]]},{"id":"ff544df5.0da09","type":"delay","z":"f5b50430.ea48b8","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":650,"y":1600,"wires":[["1b7e2d5f.f619a3"]]},{"id":"f2797c98.ae263","type":"server","name":"Home Assistant","addon":true}]

Le cron se lance à sunset + 15 et en fonction de la saison attend 15 minutes ou pas avant d’appeler la fermeture des volets.

1 « J'aime »