Woche grade oder ungrade ?

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
turrican944
Beiträge: 513
Registriert: 29.05.2019, 22:19
Wohnort: Bargfeld
Hat sich bedankt: 4 Mal
Danksagung erhalten: 49 Mal

Woche grade oder ungrade ?

Beitrag von turrican944 » 28.10.2019, 12:46

Moin
Ich baue gerade meine Lichtsteuerung von Rega Programm (mit Eugens astro Skrip) auf Node Red um. Das Rega Programm macht mir zu oft was es will.
Nun habe ich im Wohnzimmer bislang das so gemacht eine Lampe an graden Wochen die andere an ungraden Wochen an. Das würde ich gerne wieder so machen, habe aber bislang keine Node gefunden der mir irgendwie die Woche oder noch besser gibt ob die Woche grade oder ungrade ist. Gibt es sowas ?
Licht schalten an sich klappt mit dem Node Lightscheduler bestens.

Gut ich könnte natürlich im Node Red die CCU Systemvariable ob meine Woche grade ist oder nicht abfragen, aber eigentlich will ich das nicht.
Gruß Florian

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Woche grade oder ungrade ?

Beitrag von hobbyquaker » 28.10.2019, 19:42

Probiers mal damit:

Code: Alles auswählen

[{"id":"5c21b63c.285ce8","type":"function","z":"1a3a0b42.18d265","name":"Ungerade Woche","func":"const date = new Date();\nconst target = new Date(date.valueOf());\nconst dayNumber = (date.getUTCDay() + 6) % 7;\nlet firstThursday;\n\ntarget.setUTCDate(target.getUTCDate() - dayNumber + 3);\nfirstThursday = target.valueOf();\ntarget.setUTCMonth(0, 1);\n\nif (target.getUTCDay() !== 4) {\n    target.setUTCMonth(0, 1 + ((4 - target.getUTCDay()) + 7) % 7);\n}\n\nconst week = Math.ceil((firstThursday - target) /  (7 * 24 * 3600 * 1000)) + 1;\n    \nreturn {payload: Boolean(week % 2), week};","outputs":1,"noerr":0,"x":480,"y":260,"wires":[["fe376264.368fa"]]},{"id":"fe376264.368fa","type":"debug","z":"1a3a0b42.18d265","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":680,"y":260,"wires":[]},{"id":"5247e105.7168a","type":"inject","z":"1a3a0b42.18d265","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":260,"y":260,"wires":[["5c21b63c.285ce8"]]}]
Gibt als msg.payload bei geraden Wochen false und bei ungeraden true aus.

(Algorithmus übernommen von https://stackoverflow.com/a/32461104/12048312)

turrican944
Beiträge: 513
Registriert: 29.05.2019, 22:19
Wohnort: Bargfeld
Hat sich bedankt: 4 Mal
Danksagung erhalten: 49 Mal

Re: Woche grade oder ungrade ?

Beitrag von turrican944 » 29.10.2019, 19:36

Moin
Danke das klappt super. Ich benutze aber zusätzlich noch den Boolean Logic Node um damit eine UND Verknüpfung zu machen wenn die Woche true ist. Das funktioniert soweit auch aber ich habe noch eine Change Node einbauen müssen das der Boolean Logic Node eine Topic A und B haben möchte, das ist mir nicht gelungen die Topic in den funktions Node zu setzen.
Dateianhänge
flow.PNG
Gruß Florian

HenningK
Beiträge: 210
Registriert: 22.09.2012, 20:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 11 Mal

Re: Woche grade oder ungrade ?

Beitrag von HenningK » 31.10.2019, 18:25

Hallo Florian, wenn du die Funktionsnode als "Verzweigung" nutzen möchtest, kannst du in der Node unten die Ausgänge auf 2 setzen und ein Array übergeben. null heisst immer kein output/msg.

"Eigentlich" kannst du dann deine Lampen (falls sie true verstehen, sonst sende etwas anderes) direkt anschließen.
Falls es abhängig von ein/aus sein soll, kannst du auch einfach msg.payload als Wert "durchreichen".
Funktionsverzweigung.png

Code: Alles auswählen

[{"id":"845217d6.461fb8","type":"function","z":"55805384.a4695c","name":"Gerade / ungerade Woche","func":"const date = new Date();\nconst target = new Date(date.valueOf());\nconst dayNumber = (date.getUTCDay() + 6) % 7;\nlet firstThursday;\n\ntarget.setUTCDate(target.getUTCDate() - dayNumber + 3);\nfirstThursday = target.valueOf();\ntarget.setUTCMonth(0, 1);\n\nif (target.getUTCDay() !== 4) {\n    target.setUTCMonth(0, 1 + ((4 - target.getUTCDay()) + 7) % 7);\n}\n\nconst week = Math.ceil((firstThursday - target) /  (7 * 24 * 3600 * 1000)) + 1;\n\nlet msg1 = {};\nif (Boolean(week % 2)) {\n    msg = {payload: true}\n    msg1 = null\n} else {\n    msg =  null\n    msg1 = {payload: true}\n}\nreturn [msg, msg1];","outputs":2,"noerr":0,"x":580,"y":180,"wires":[["958d50d9.35b72"],["9e1dddb9.a8f41"]],"outputLabels":["ungerade Woche","gerade Woche"]},{"id":"958d50d9.35b72","type":"debug","z":"55805384.a4695c","name":"ungerade","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":800,"y":160,"wires":[]},{"id":"6eae0eff.73d46","type":"inject","z":"55805384.a4695c","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":360,"y":180,"wires":[["845217d6.461fb8"]]},{"id":"9e1dddb9.a8f41","type":"debug","z":"55805384.a4695c","name":"gerade","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":800,"y":200,"wires":[]}]

turrican944
Beiträge: 513
Registriert: 29.05.2019, 22:19
Wohnort: Bargfeld
Hat sich bedankt: 4 Mal
Danksagung erhalten: 49 Mal

Re: Woche grade oder ungrade ?

Beitrag von turrican944 » 04.11.2019, 09:41

Moin
Danke, probiere ich aus. Die Lampe verstehen true. Beim ersten Flow kommt ja nur true raus deshalb, das gefriemel mit den Und Verknüpfungen und dem Inverter.
Langsam aber sicher gefällt mir node red immer besser.
Gruß Florian

tloeffel
Beiträge: 448
Registriert: 13.09.2017, 05:11
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal

Re: Woche grade oder ungrade ?

Beitrag von tloeffel » 08.11.2019, 21:29

Hallo Zusammen,

ich benutze German-Holiday. Dort wird die unter anderem "week" & "gerade/ungerade" abgebildet.
Diese Node kann ich nur empfehlen.

Gruß Thomas
191108_Kalenderwoche_1.JPG
191108_Kalenderwoche_2.JPG
191108_Kalenderwoche_2.JPG (14.05 KiB) 1161 mal betrachtet
972 Kanäle in 165 Geräten: Davon 16 HM, 145 HMIP, 2 Gruppen und 2 CUXD Geräte

Hypnos
Beiträge: 460
Registriert: 06.01.2018, 12:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 39 Mal

Re: Woche grade oder ungrade ?

Beitrag von Hypnos » 16.11.2019, 23:05

Mit der aktuellen Version der node-red-contrib-sun-position kann man die Kalenderwoche, den Kalendertag oder ob die Kalenderwoche gerade ist auch über den time-inject oder time-calc Node mit bekommen (erweiterter Zeitstempel als Payload).

Da das Paket Teil von RedMatic ist, ist das dann auch direkt vorhanden.

Antworten

Zurück zu „RedMatic“