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.
    • Homoran
      Homoran Global Moderator Administrators last edited by Homoran

      Sowas ähnliches hab ich mal vor gefühlten Jahrzehnten mit dem IKEA Tradfri Adapter gemacht.

      Screenshot_20250615-102946_Firefox.jpg

      Damals hatte ich mich für Tradfri, und nicht für Zigbee allgemein, entschieden, weil ich die Kopplung nur direkt (5cm) an der Fernbedienung als zusätzliche Sicherheit haben wollte

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

        @lucifor1976 Wenn das so funktioniert, ja 👍 Habe es jetzt nicht getestet. Ich hatte damals die Osterberechnungsformel aus Wikipedia für den Mikrocontroller nachprogrammiert. Heutzutage ist das ja Luxus mit dem Feiertage-Adapter 😀

        Homoran 1 Reply Last reply Reply Quote 0
        • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            763
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            25
                                            295
                                            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