Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Java Script: Sanftes Aufstehen mit Zigbee

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Java Script: Sanftes Aufstehen mit Zigbee

    This topic has been deleted. Only users with topic management privileges can see it.
    • Lucifor1976
      Lucifor1976 @Homoran last edited by Lucifor1976

      Lucifor einmal im Ideenwahn:

      V0.3 mit Feiertagsprüfung am nächsten Tag und Alexa Ansage WENN ein Feiertag folgt und der Tag ein Werkstag ist.
      Ist am Folgetag ein Feiertag, wird die "Nachttischlampe" nicht eingeschaltet.
      (Fubktion abschaltbar, für die jenigen die auch an Feiertagen arbeiten müssen)
      Der Zeitpunkt der Ansage ist einstellbar.
      Die Ansage ist definierbar.

      AKTUELLES SCRIPT:

      //Sanftes Auftehen fuer ZigBee dimmbare Lampen by Lucifor V0.3
      
      // === KONFIGURATION ===
      const lampeBrightness = 'zigbee.1.403059fffef3f001.brightness'; // Helligkeits-State deiner Lampe
      const lampeState      = 'zigbee.1.403059fffef3f001.state'; // Einschaltpunkt der Lampe
      
      // Zeiten
      const startZeit     = "03:45"; // Zeitpunkt zum Einschalten (Format: "HH:MM")
      const endZeit       = "04:00"; // Zeitpunkt, bis auf 100% hochgedimmt wird
      const abschaltZeit  = "04:10"; // Zeitpunkt zum Ausschalten der Lampe um ggf. weitere Personen im Bett nicht zu stören
      
      // Werte
      const startBrightness = 5; //Anfängliche Helligkeit
      const endBrightness   = 100; //Endgültige Helligkeit
      
      // Optionen
      const wochenendeAktiv = false; // true = auch Sa/So, false = nur Mo-Fr
      const feiertageAktiv  = true; //Feiertagscheck an = Keine aktivität an Feiertagen
      
      // Feiertagsdatenpunkt vom ical-Adapter
      const feiertagState   = 'feiertage.0.heute.boolean';
      
      // === ALEXA-ANSAGE-KONFIGURATION ===
      const alexaAnsageAktiv = true;
      const alexaAnsageZeit  = "21:00";
      const alexaDevice      = 'alexa2.0.Echo-Devices.3ab65f72f1964fd58c68590cba81cb3f';
      const feiertagMorgen   = 'feiertage.0.morgen.boolean';
      
      // === HILFSFUNKTIONEN ===
      function zeitInMinuten(zeitStr) {
         const [h, m] = zeitStr.split(':').map(Number);
         return h * 60 + m;
      }
      
      function istWerktagOderFreigeschaltet(callback) {
         const heute = new Date().getDay(); // 0 = So, 6 = Sa
      
         if (!wochenendeAktiv && (heute === 0 || heute === 6)) {
             return callback(false);
         }
      
         if (feiertageAktiv) {
             getState(feiertagState, (err, state) => {
                 if (err || !state) {
                     console.warn("Feiertagsprüfung fehlgeschlagen oder Datenpunkt fehlt. Fallback: Aktiv.");
                     return callback(true);
                 }
                 return callback(!state.val);
             });
         } else {
             callback(true);
         }
      }
      
      // === DIMMFUNKTION ===
      function starteDimmen(startMin, endMin) {
         let aktuelleStufe = 0;
         const fadeMinuten = endMin - startMin;
         const schrittweite = (endBrightness - startBrightness) / fadeMinuten;
      
         fadeTimer = setInterval(() => {
             aktuelleStufe++;
             const neueHelligkeit = Math.round(startBrightness + schrittweite * aktuelleStufe);
             setState(lampeBrightness, neueHelligkeit);
             console.log(`Dimme auf ${neueHelligkeit}%`);
             if (aktuelleStufe >= fadeMinuten) {
                 clearInterval(fadeTimer);
             }
         }, 60 * 1000);
      }
      
      // === HAUPTSCHEDULER ===
      let fadeTimer = null;
      
      schedule('* * * * *', () => {
         const now = new Date();
         const aktuelleMinuten = now.getHours() * 60 + now.getMinutes();
         const startMin = zeitInMinuten(startZeit);
         const endMin = zeitInMinuten(endZeit);
         const stopMin = zeitInMinuten(abschaltZeit);
      
         istWerktagOderFreigeschaltet((aktiv) => {
             if (!aktiv) return;
      
             if (aktuelleMinuten === startMin) {
                 setState(lampeState, true, true);
                 console.log("Lampe eingeschaltet (Zustand auf true gesetzt)");
      
                 setTimeout(() => {
                     setState(lampeBrightness, startBrightness, true);
                     console.log(`Lampe auf ${startBrightness}% gesetzt`);
                     starteDimmen(startMin, endMin);
                 }, 100);
             }
      
             if (aktuelleMinuten === stopMin) {
                 setState(lampeBrightness, 0);
                 console.log("Lampe ausgeschaltet");
                 clearInterval(fadeTimer);
             }
         });
      });
      
      // === ALEXA-ANSAGE-DYNAMISCH NACH UHRZEIT-VARIABLE ===
      schedule('* * * * *', () => {
         if (!alexaAnsageAktiv) return;
      
         const jetzt = new Date();
         const [ansageStunde, ansageMinute] = alexaAnsageZeit.split(':').map(Number);
      
         if (jetzt.getHours() === ansageStunde && jetzt.getMinutes() === ansageMinute) {
             getState(feiertagMorgen, (err, state) => {
                 if (err || !state) {
                     console.warn("Feiertagsprüfung (morgen) fehlgeschlagen.");
                     return;
                 }
      
                 if (state.val === true) {
                     const text = 'Achtung, morgen ist ein Feiertag. Sanftes Aufstehen ist deaktiviert.';
                     setState(`${alexaDevice}.Commands.announcement`, text);
                     console.log(`Alexa-Ansage um ${alexaAnsageZeit} wurde gesendet.`);
                 } else {
                     console.log("Morgen ist kein Feiertag – keine Alexa-Ansage.");
                 }
             });
         }
      });
      
      

      1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @peterfido last edited by

        @peterfido sagte in Java Script: Sanftes Aufstehen mit Zigbee:

        Ich hatte damals die Osterberechnungsformel

        darauf baut ja der Feiertage-Adapter ja auch auf.

        @peterfido sagte in Java Script: Sanftes Aufstehen mit Zigbee:

        Heutzutage ist das ja Luxus mit dem Feiertage-Adapter

        der ist von 2016!
        Screenshot_20250615-104818_Firefox.jpg

        Lucifor1976 1 Reply Last reply Reply Quote 0
        • Lucifor1976
          Lucifor1976 @Homoran last edited by

          @homoran sagte in Java Script: Sanftes Aufstehen mit Zigbee:

          @peterfido sagte in Java Script: Sanftes Aufstehen mit Zigbee:

          Ich hatte damals die Osterberechnungsformel

          darauf baut ja der Feiertage-Adapter ja auch auf.

          @peterfido sagte in Java Script: Sanftes Aufstehen mit Zigbee:

          Heutzutage ist das ja Luxus mit dem Feiertage-Adapter

          der ist von 2016!
          Screenshot_20250615-104818_Firefox.jpg

          Öh.. den also besser nicht benutzen?

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @Lucifor1976 last edited by

            @lucifor1976 sagte in Java Script: Sanftes Aufstehen mit Zigbee:

            Öh.. den also besser nicht benutzen?

            warum nicht?
            Der läuft super

            Lucifor1976 1 Reply Last reply Reply Quote 0
            • Lucifor1976
              Lucifor1976 @Homoran last edited by

              @homoran

              OK, alles gut, ich dachte der bringt Werte aus 2016, du hast mich verwirrt...

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @Lucifor1976 last edited by

                @lucifor1976 sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                ich dachte der bringt Werte aus 2016,

                nein, den gibt es bereits seit 2016.

                war auf

                @peterfido sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                Heutzutage ist das ja Luxus

                bezogen

                M 1 Reply Last reply Reply Quote 1
                • M
                  martin_olw @Homoran last edited by martin_olw

                  Hallo! Ich bin gerade der Verzweiflung nahe, da ich mir nicht erklären kann, warum mein Skript für die Feiertagserkennung nicht funktioniert.
                  Ich rufe die Feiertage über den Adapter ab. Soweit kein Problem. Jetzt habe ich einen Schalter in meinem Homee, der bei Feiertag = true auf wahr und bei Feiertag = false auf falsch gesetzt werden soll. Aber irgendwo habe ich wohl einen Denkfehler:
                  e3fd34f6-8968-4a0f-a8d5-13242f4369fa-image.png
                  Der Schalter im Homee reagiert aber so:
                  6bde782d-64d1-40ca-b8d5-e8a9cce289c2-image.png
                  32adaaf2-b338-4ccd-903f-b4d7fb0aa265-image.png
                  Wir haben zur Zeit Ferien - der Ferienschalter wird über exakt den selben Weg geschaltet und zeigt exakt das selbe Verhalten.
                  Warum schaltet der sich nach 4 Minuten wieder ab? Im Homee habe ich nichts eingestellt, was den Schaltvorgang beeinflusst.
                  Kann mir jemand beim finden meines Denkfehlers helfen?
                  Danke!

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @martin_olw last edited by

                    @martin_olw sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                    Warum schaltet der sich nach 4 Minuten wieder ab?

                    zeig mal einen Größeren Ausschnitt.
                    Wie sieht die Liste mit den Verlaufsdaten aus?

                    M Homoran 2 Replies Last reply Reply Quote 0
                    • M
                      martin_olw @Homoran last edited by

                      @homoran dd749474-e67a-42ad-bb3f-9a67acd2e4a6-image.png
                      Das ist ein Beispiel für die Ferien (Adapter liefert die Werte true und false identisch zum Feiertagsadapter). Warum der Freitag (letzter Schultag) an war - ich weiß es nicht.

                      1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @Homoran last edited by

                        @homoran sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                        Wie sieht die Liste mit den Verlaufsdaten aus?

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          martin_olw @Homoran last edited by

                          @homoran Die tracke ich leider nicht mit / habe den History-Adapter nicht.

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @martin_olw last edited by

                            @martin_olw sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                            @homoran Die tracke ich leider nicht mit / habe den History-Adapter nicht.

                            dann kann ich fir nicht sagen wer das zurückschaltet

                            M 1 Reply Last reply Reply Quote 0
                            • M
                              martin_olw @Homoran last edited by

                              @homoran Ich habe den Adapter installiert und für die Datenpunkte eingestellt. Dann kann ich in ein paar Tagen die Daten bereit stellen.

                              Homoran 1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @martin_olw last edited by

                                @martin_olw sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                                für die Datenpunkte eingestellt.

                                wird auch die Quelle geloggt.

                                M 1 Reply Last reply Reply Quote 0
                                • M
                                  martin_olw @Homoran last edited by

                                  @homoran ja, die wird mit geloggt.

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @martin_olw last edited by

                                    @martin_olw dann siehst du wer die jeweiligen Änderungen auslöst.
                                    zumindest erstmal ganz grob

                                    M 1 Reply Last reply Reply Quote 0
                                    • M
                                      martin_olw @Homoran last edited by

                                      @homoran Moin! Das sieht heute so aus:
                                      9c2ec29c-09bb-42e4-a1eb-f3ba9fe843f0-image.png

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @martin_olw last edited by Homoran

                                        @martin_olw nur der letzte Wert wurde von homee geschrieben, alle anderen (diesmal) von history.
                                        aber keinerlei Werteänderungen

                                        Wie sieht deine Konfiguration der history Instanz aus?
                                        hast du da was bei "null-Werte...." aktiviert?

                                        M 1 Reply Last reply Reply Quote 0
                                        • M
                                          martin_olw @Homoran last edited by martin_olw

                                          @homoran Hier sieht man es besser:
                                          bcc65ea2-a40c-43bf-86c9-7429d588af32-image.png
                                          Der Ferienmodus wurde heute morgen durch mein Skript auf true gesetzt und dann ein paar Minuten später von homee wieder auf false.
                                          Ich habe aber kein Homeegramm laufen was den zurück setzt. Nur Homeegramme, die den Wert des Schalters in den Bedingungen haben:
                                          48405931-89ca-4079-8942-14ab670fa91f-image.png

                                          Adaptereinstellungen:
                                          dbd8db66-a918-42c2-bbfe-eb0f414cedec-image.png
                                          f65e1588-ab25-41ab-a2f3-c39b8a389fef-image.png

                                          Homoran 1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators @martin_olw last edited by Homoran

                                            @martin_olw sagte in Java Script: Sanftes Aufstehen mit Zigbee:

                                            Hier sieht man es besser:

                                            dann musst du dir dein Homee näher ansehen.
                                            Der false Befehl kommt von da

                                            In der Konfiguration den Haken bei "null-werte...." entfernen, wenn du diese nicht im log haben willst

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            790
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            25
                                            300
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo