gerne würde ich mit NodeRed unsere Weihnachtsbeleuchtung automatisieren. Leider stehe ich vollkommen vor der Wand.
Wunschszenario wäre es, dynamisch das Datum vom 1.Advent zu ermitteln und entsprechend zu vergleichen…
" Wenn Datum aktueller Tag >= Datum 1.Advent → dann turn_on "
Ich habe daran gedacht das Datum von dem Sonntag vor dem 24.12.20XX zu vermittelt und von da aus 21 Tage vorzählen.
Du könntest folgendenCode mal in einem Function-Node versuchen:
var end_month = (Number(msg.end_month)) -1 || 0 ;
var end_day = (Number(msg.end_day) ) || 6 ;
var firstAdvent = new Date();
var currentDate = new Date();
firstAdvent.setMonth(11); // Dezember
firstAdvent.setDate(25);
firstAdvent.setDate(firstAdvent.getDate() - (21 + firstAdvent.getDay()));
msg.payload = (firstAdvent <= currentDate && currentDate <= new Date(firstAdvent.getFullYear(), 11, 31)) || currentDate <= new Date(currentDate.getFullYear(), end_month, end_day);
return msg;
Befindet sich das aktuelle Datum zwischen 1.Advent und dem Enddatum, wird true zurückgegeben, sonst false.
Das Enddatum ist per Default der 6.1. im nächsten Jahr, kann aber auch durch entsprechende Werte in msg.end_month und msg.end_day übersteuert werden. (Habe den Code aber nicht groß getestet!!!)
Vielen Dank für deine Mühe, genau sowas habe ich gesucht.
Ich probiere es aus und werde es mal in Ruhe studieren, um zu sehen was da wie passiert. Bei dem Code kann ich auf jeden Fall wieder etwas dazu lernen
firstAdvent.getDay() gibt nicht 25 zurück sondern den Wochentag auf den der 25. fällt. Es wird also eigentlich gerechnet 25.12.2023 - (21+1) da der 25. auf einen Montag fällt.