JS Verwirrung um das Monatsfenster

  • Hallo zusammen,

    leider sind meine Rolladen im EG noch nicht mit neuen Motoren ausgestattet und ich kann nicht kalibrieren, sprich den Zustand im iOBroker abfragen.

    Daher muss ich mit meinen Scripten etwas kreativ sein :/

    Eigentlich gehts die Wohnzimmerrollade um 19:30 Uhr runter. Kann keiner mehr rein schauen ;)

    Aber jetzt wenns wieder früher Dunkel wird soll das natürlich wie auch die anderen zum Sonnenuntergang passieren. Da ich keine Lust habe immer wieder das Script anzupassen, sollen natürlich beide Optionen enthalten sein.

    Ich habe also zuerst einen Astrotrigger (Auszug) der Januar bis April und Oktober bis Dezember ziehen soll

    Code
      // Wohnzimmer
      if ((new Date().getMonth() + 1) <= 4 || (new Date().getMonth() + 1) >= 10) {
        setStateDelayed("shelly.0.SHSW-25#40F5202418C1#1.Relay0.Switch"/*Switch*/, true, 0, false);
        sendTo("whatsapp-cmb", "send", {
            text: 'Wohnzimmerollade herunter gefahren Sonnenuntergang!'
        });
        console.log('Rollade Wohnzimmer wurde runter gefahren');
      }

    Und dann einen simplen Cron Eintrag für 19:30 Uhr der die restlichen Monate abdeckt:

    Code
    schedule('{"time":{"exactTime":true,"start":"19:30"},"period":{"days":1}}', async function () {
      // Wohnzimmer
      if ((new Date().getMonth() + 1) >= 5 || (new Date().getMonth() + 1) <= 9) {
        setState("shelly.0.SHSW-25#40F5202418C1#1.Relay0.Switch"/*Switch*/, true);
        sendTo("whatsapp-cmb", "send", {
            text: 'Wohnzimmerollade herunter gefahren nach Zeitplan'
        });
        console.log('Rollade Wohnzimmer wurde runter gefahren');
      }
    });

    Leider habe ich aktuell den Effekt das die Rollade zum Sonnenuntergang runter fährt (erstes Script) und dann um 19:30 Uhr wieder hoch (zweites Script) ob wohl das gemäß Monatsbedingung nicht passieren dürfte.

    Irgendwie sehe ich den Fehler aber gerade nicht, jemand eine Idee?

    Ich würde ungern noch eine Variable mit dem Zustand einführen, wäre aber eine Option....

  • Ich denke ich habs gerade trial und error herausgefunden....

    Es braucht für die warmen Monate eine logische UND-Abfrage

    Code
    if ((new Date().getMonth() + 1) >= 5 && (new Date().getMonth() + 1) <= 9) {

    Und für die kalten Monate kann die ODER Bedingung bleiben......