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.
    • P
      peterfido @Lucifor1976 last edited by

      @lucifor1976
      Danke fürs Teilen.

      Früher habe ich Wecker selbst gebaut. Eines Karfreitags habe ich ihm aus gegebenem Anlasse dann noch die Feiertage beigebracht. 😁

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

        @peterfido

        Du Meinst du so?
        Jetzt wird allerdings (Falls man die Feiertagsfunktion nutzen möchte) der Adapater Feiertage D/A/CH benötigt.

        *** EDIT: Script wurde akuallisiert, siehe weiter unten im Thread

        P 1 Reply Last reply Reply Quote 0
        • 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

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        711
                        Online

                        31.7k
                        Users

                        79.9k
                        Topics

                        1.3m
                        Posts

                        3
                        11
                        120
                        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