Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hilfe zum Alexa Hue Wecker

    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

    Hilfe zum Alexa Hue Wecker

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active @Mappy last edited by dslraser

      @Mappy
      Und wo ist Dein verwendetes Script ?
      Poste das hier, sonst kann wahrscheinlich auch keiner was dazu sagen.

      Edit: ich habe es in Deinem verlinkten Beitrag, welcher nochmal auf GitHub verlinkt ist gefunden.
      Dort hast Du ja auch schon beim Entwickler angefragt.

      1 Reply Last reply Reply Quote 0
      • Mappy
        Mappy last edited by Mappy

        Ja versuche den schon auf mehre Arten zu erreichen. Bisher war alles erfolglos. Habs parallel Jetzt auch nochmal bei Github versucht.

        Habe oben meine var durationInMinutes = 30; auf 3 gesetzt zum testen. (Wegen den Abweichungen)

        var inSunrise = false;
        var alarmTimes = [];
        
        var alexaDevice = '[The id of your alexa device that is used for the wakeup alarm.]';
        var hueDevice = '[The id of the Hue device or group that is used for the sunrise]';
        var durationInMinutes = 30;
        
        schedule("*/5 * * * *", function () {
            collectAlarmTimesFromAlexa(alexaDevice);
            processAlarmTimes(hueDevice, durationInMinutes);
        });
        
        function collectAlarmTimesFromAlexa(deviceId) {
            console.log("Collecting alarms from "+deviceId);
            var currentAlarmTimes = [];
            collectAlarmTimesOfCategoryFromAlexa(deviceId, 'Alarm', currentAlarmTimes);
            collectAlarmTimesOfCategoryFromAlexa(deviceId, 'MusicAlarm', currentAlarmTimes);
            // Synchronize the global alarm times with the current ones:
            synchronizeAlarmLists(currentAlarmTimes, alarmTimes);
        }
        
        function collectAlarmTimesOfCategoryFromAlexa(deviceId, category, currentAlarmTimes) {
            var alarmEntries = $('state[id='+deviceId+'.'+category+'.*]');
        
            var lastAlarmId = '';
            var isEnabled = false;
            var alarmTime = null;
            
            alarmEntries.each(function (id, i) {
                var alarmId = getId(id);
                if (alarmId!='Alarm') {
                    if (alarmId!=lastAlarmId) {
                        // Next alarm entry reached - process the current one
                        addAlarmTime(isEnabled, alarmTime, currentAlarmTimes);
                        // Reset current values to process the next alarm entry:
                        isEnabled = false;
                        alarmTime = null;
                        lastAlarmId = alarmId;
                    }
        
                    var state = getState(id);
                    var entryType = getEntryType(id);
                    if (entryType=='enabled') {
                        isEnabled = state.val===true;
                    } else if (entryType=='time') {
                        alarmTime = getAlarmTime(state.val);
                    }
                }
            });
            // The last entry was not processed, so we have to process it now:
            addAlarmTime(isEnabled, alarmTime, currentAlarmTimes);
        }
        
        function getId(objectId) {
            var stringParts = objectId.split('.');
            return stringParts[stringParts.length-2];
        }
        
        function getEntryType(objectId) {
            var stringParts = objectId.split('.');
            return stringParts[stringParts.length-1];
        }
        
        function getAlarmTime(alarmTimeString) {
            // Alexa only stores the time of the alarm. In order to be able to 
            // process this time we have to add the correct date:
            var alarmTime = new Date('1970-01-01T' + alarmTimeString);
            var currentTime = new Date();
            alarmTime.setMonth(currentTime.getMonth());
            alarmTime.setFullYear(currentTime.getFullYear());
            alarmTime.setDate(currentTime.getDate());
            // If the current time is greater than the alarm time the alarm must be on the next day:
            if (currentTime.getTime()>alarmTime.getTime()) {
                alarmTime.setDate(currentTime.getDate()+1);
            }
            return alarmTime;
        }
        
        function addAlarmTime(isEnabled, alarmTime, alarmTimes) {
            if (isEnabled && (alarmTime!=null)) {
                alarmTimes.push(alarmTime);
            }        
        }
        
        function synchronizeAlarmLists(currentAlarmTimes, allAlarmTimes) {
            // Add all new entries to the global alarm entries:
            currentAlarmTimes.forEach(function (alarmTime) {
                if (!isInList(alarmTime, allAlarmTimes)) {
                    console.log("Adding alarm at "+alarmTime);
                    allAlarmTimes.push(alarmTime);
                }
            });
            // Remove the global alarm entries that don't exist anymore:
            var i = allAlarmTimes.length;
            while (i--) {
                var alarmTime = allAlarmTimes[i];
                console.log(i+': '+alarmTime);
                if (!isInList(alarmTime, currentAlarmTimes)) {
                    console.log("Removing alarm at "+alarmTime+" because it doesn't exist anymore.");
                    allAlarmTimes.splice(i, 1);
                }
            }
        }
        
        function isInList(alarmTime, alarmTimes) {
            for (var alarmTimeFromList of alarmTimes) {
                if (timesAreEqual(alarmTime, alarmTimeFromList)) {
                    return true;
                }
            }
            return false;
        }
        
        function timesAreEqual(time1, time2) {
            // Alexa only stores the time for the alarm but we need the date as well.
            // So for checking if a time already exists in the list we only compare the time.
             return ((time1.getHours()==time2.getHours()) && (time1.getMinutes()==time2.getMinutes()));
        }
        
        function processAlarmTimes(hueGroupId, durationInMinutes) {
            if (!inSunrise) {
                alarmTimes.forEach(function(alarmTime) {
                    processAlarmTime(alarmTime, hueGroupId, durationInMinutes);
                });
            }
        }
        
        function processAlarmTime(alarmTime, hueGroupId, durationInMinutes) {
            console.log('Alarm will be triggered at '+alarmTime);
            var startTime = new Date(alarmTime);
            startTime.setMilliseconds(alarmTime.getMilliseconds()-(durationInMinutes*60000))
            console.log('Sunrise starts at '+startTime);
            var currentTime = new Date();
            console.log('Current time is '+currentTime);
            if (currentTime>=startTime) {
                doSunrise(hueGroupId, durationInMinutes);
            }
        }
        
        function doSunrise(hueGroupId, durationInMinutes) {
            console.log('Initiating sunrise...');
            inSunrise = true;
            var steps = 10;
            var intervalTime = (durationInMinutes*60000)/steps;
            var brightness = 1;
            var temperature = 2200;
            var tempSpan = (6000-2200); //temperature span of the hue bulb
        
            setState(hueGroupId+'.on', true, false);
            setState(hueGroupId+'.level', brightness, false);
            setState(hueGroupId+'.ct', temperature, false);
        
            var interval = setInterval(function () {
                brightness = Math.round(brightness+100/steps);
                temperature = Math.round(temperature+tempSpan/steps);
        
                if (brightness>101) {
                    clearInterval(interval);
                    inSunrise = false;
                }
        
                console.log('Brightness: '+brightness);
                console.log('Temperature: '+temperature);
        
                setState(hueGroupId+'.level', brightness, false);
                setState(hueGroupId+'.ct', temperature, false);
            }, intervalTime);
        }
        
        dslraser 1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active @Mappy last edited by

          @Mappy sagte in Hilfe zum Alexa Hue Wecker:

          Ja aber leider keine Antwort bekommen

          das ist doch erst Minuten her 😊
          Bildschirmfoto 2019-08-23 um 17.57.55.png

          Mappy 1 Reply Last reply Reply Quote 0
          • Mappy
            Mappy @dslraser last edited by Mappy

            @dslraser said in Hilfe zum Alexa Hue Wecker:

            @Mappy sagte in Hilfe zum Alexa Hue Wecker:

            Ja aber leider keine Antwort bekommen

            das ist doch erst Minuten her 😊
            Bildschirmfoto 2019-08-23 um 17.57.55.png

            Hatte das schon übers Forum vor ein paar Tagen und so versucht. Bei Github jetzt eben parallel. Die Idee kam mir aber auch erst eben.
            Dachte nur vielleicht durchschaut das beim Code das geschulte Auge vom Profi, da ich nur blutiger Anfänger bin.

            dslraser 2 Replies Last reply Reply Quote 0
            • dslraser
              dslraser Forum Testing Most Active @Mappy last edited by

              @Mappy
              Was soll ich sagen, Script eingestellt, Wecker gestellt und es funktioniert wie es soll. Licht ging auch so allmählich an...

              Hier ein Auszug vom Log, wenn ich denn alles richtig erwischt habe

              2019-08-23 18:08:00.688 - info: javascript.0 Stop script script.js.Heiko.11Test.HUE-Wecker
              2019-08-23 18:08:00.698 - info: javascript.0 Start javascript script.js.Heiko.11Test.HUE-Wecker
              2019-08-23 18:08:00.702 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: registered 0 subscriptions and 1 schedule
              2019-08-23 18:10:00.003 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Collecting alarms from alexa2.0.Echo-Devices.xxx
              2019-08-23 18:15:00.004 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Collecting alarms from alexa2.0.Echo-Devices.xxx
              2019-08-23 18:20:00.004 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Collecting alarms from alexa2.0.Echo-Devices.xxx
              2019-08-23 18:20:00.019 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Adding alarm at Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:20:00.019 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: 0: Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:20:00.020 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Alarm will be triggered at Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:20:00.020 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Sunrise starts at Fri Aug 23 2019 18:00:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:20:00.020 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Current time is Fri Aug 23 2019 18:20:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:20:00.020 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Initiating sunrise...
              2019-08-23 18:23:00.021 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Brightness: 11
              2019-08-23 18:23:00.021 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Temperature: 2580
              2019-08-23 18:25:00.014 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Collecting alarms from alexa2.0.Echo-Devices.xxx
              2019-08-23 18:25:00.040 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: 0: Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:26:00.021 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Brightness: 21
              2019-08-23 18:26:00.022 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Temperature: 2960
              2019-08-23 18:29:00.021 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Brightness: 31
              2019-08-23 18:29:00.022 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Temperature: 3340
              2019-08-23 18:30:00.004 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Collecting alarms from alexa2.0.Echo-Devices.xxx
              2019-08-23 18:30:00.016 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: 0: Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:35:00.005 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Collecting alarms from alexa2.0.Echo-Devices.xxx
              2019-08-23 18:35:00.017 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: 0: Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00)
              2019-08-23 18:35:00.017 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Removing alarm at Fri Aug 23 2019 18:30:00 GMT+0200 (GMT+02:00) because it doesn't exist anymore.
              2019-08-23 18:35:00.021 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Brightness: 51
              2019-08-23 18:35:00.022 - info: javascript.0 script.js.Heiko.11Test.HUE-Wecker: Temperature: 4100
              

              Stimmen die Uhrzeiten in Deinem System und auf den Echos ? ( in der Alxa App mal nachgesehen ? )

              1 Reply Last reply Reply Quote 0
              • dslraser
                dslraser Forum Testing Most Active @Mappy last edited by

                @Mappy
                Welche JS Adapter Version benutzt Du ?

                1 Reply Last reply Reply Quote 0
                • Mappy
                  Mappy last edited by Mappy

                  Iobroker läuft auf Docker auf meiner Synology das geht auch soweit gut.
                  Systemzeit Synology Passt. Systemzeit Iobroker passt auch und bei Alexa auch.. auch der Standort von Alexa passt.
                  Kann man im Script nicht was ändern -60min oder so. Dann würde ich das Problem ja einfach umgehen können.

                  Das meine Java Version:

                  d7c17f2f-5e49-4e70-b23c-aeb93535f07a-image.png

                  Lichter schalten etc funktioniert alles komplett korrekt im Iobroker zeitlich

                  1 Reply Last reply Reply Quote 0
                  • Mappy
                    Mappy last edited by

                    Das komische ist. Selbst wenn ich die Zeitzone von meinem Alexa verändere auf zb. Indischen Ozean. Das Ding ne völlig falsche Zeit hat und ich nen Timer setze für 16 Uhr wird er als 17 uhr ausgelesen. Die Zeit des Alexas macht also nicht den Fehler.

                    Current Time Iobroker wird aber auch als richtig angezeigt.
                    Ich habe keine Ahnung woran es liegt. Kann mir nur vorstellen, dass ich es hinbiegen kann, wenn mir jemand nen Tipp gibt wie ich das abändern kann, wenn er hat fälschlicher Weise 17 Uhr ausliest dass man das dann noch -60min durchs Script verändert

                    FredF dslraser 3 Replies Last reply Reply Quote 0
                    • FredF
                      FredF Most Active Forum Testing @Mappy last edited by

                      @Mappy Stimmt die Zeit auf deinem Grundsystem auf dem ioBroker läuft?

                      Mappy 1 Reply Last reply Reply Quote 0
                      • dslraser
                        dslraser Forum Testing Most Active @Mappy last edited by

                        @Mappy
                        Ich nutze auch Docker (für ioBroker) auf der Synology. Hast Du mal da geschaut ?

                        Systemzeit
                        Bildschirmfoto 2019-08-24 um 12.28.16.png

                        Einstellung
                        Bildschirmfoto 2019-08-24 um 12.28.53.png

                        1 Reply Last reply Reply Quote 0
                        • dslraser
                          dslraser Forum Testing Most Active @Mappy last edited by

                          @Mappy
                          und noch zwei Sachen die Du schauen kannst. Stimmen die Koordinaten und Ort Land usw ?
                          auf den Schlüssel klicken
                          Bildschirmfoto 2019-08-24 um 12.38.00.png

                          was ist hier im Javascript Adapter/Astro-Einstellungen eingestellt ?
                          Bildschirmfoto 2019-08-24 um 12.39.35.png

                          ansonsten habe ich noch das hier gefunden
                          https://forum.iobroker.net/topic/13978/gelöst-uhrzeit-falsch

                          Mappy 1 Reply Last reply Reply Quote 0
                          • Mappy
                            Mappy @FredF last edited by

                            @FredF
                            0d3b581b-448e-43e9-950d-258dbb4f0822-image.png

                            Ja die stimmt auch. Hatte ich auch schon im Verdacht.

                            1 Reply Last reply Reply Quote 0
                            • Mappy
                              Mappy @dslraser last edited by Mappy

                              @dslraser

                              Ja das hatte ich auch bereits im Verdacht und nachgesehen. Stimmt aber (leider) auch.
                              Gleiches gilt für den JavaScript Adapter.
                              Versteh es einfach nicht, dass da alle Zeiten stimmen, die korrekten Alarmzeiten unter den Alexa devices auch drin sind im Iobroker und dann beim Auslesen die Zeit + 1 Stunde genommen wird.

                              a2be5977-8806-4902-b21a-fce448271392-image.png

                              c51e5890-9ab6-47b2-95b0-1590543021c0-image.png

                              1 Reply Last reply Reply Quote 0
                              • Mappy
                                Mappy last edited by Mappy

                                Habe auch nochmal mit sudo dpkg-reconfigure tzdata meine Zeitzone ausgewählt. Aber im Iobroker log steht ja auch bei Current Time vom Script die richtige aktuelle Uhrzeit.

                                Auch das Testscript mit:

                                log(new Date());

                                Ergibt die richtige Uhrzeit.

                                1 Reply Last reply Reply Quote 0
                                • Mappy
                                  Mappy last edited by

                                  6f5962a9-e846-4219-af6c-5eb8f8aafda7-image.png

                                  Das stimmt auch.

                                  1 Reply Last reply Reply Quote 0
                                  • Mappy
                                    Mappy last edited by Mappy

                                    Was mich stutzig macht ist das Log wo er ausliest beim Alexa Wecker:

                                    Adding alarm at Sat Aug 24 2019 22:00:00 GMT+0200 (CEST)

                                    Aber in der Alexa Einstellung steht das hier und die Uhrzeit wird auf meinem Alexa auch korrekt angezeigt:

                                    88bf1f44-1913-464f-8f90-0a7927cff772-image.png

                                    dslraser 1 Reply Last reply Reply Quote 0
                                    • Mappy
                                      Mappy last edited by

                                      ioBroker.admin 3.6.2

                                      Sollte doch passen oder ?

                                      1 Reply Last reply Reply Quote 0
                                      • dslraser
                                        dslraser Forum Testing Most Active @Mappy last edited by dslraser

                                        @Mappy sagte in Hilfe zum Alexa Hue Wecker:

                                        Was mich stutzig macht ist das Log wo er ausliest beim Alexa Wecker:

                                        Adding alarm at Sat Aug 24 2019 22:00:00 GMT+0200 (CEST)

                                        Aber in der Alexa Einstellung steht das hier und die Uhrzeit wird auf meinem Alexa auch korrekt angezeigt:

                                        88bf1f44-1913-464f-8f90-0a7927cff772-image.png

                                        Ich habe gerade mal bei meinen ECHOS reingesehen. Die stehen auf Mitteleuropäsche Sommerzeit Paris
                                        Warum auch immer ??? (war damals, vor langer Zeit, keine andere Auswahl möglich.) Aber das sollte ja nicht der Grund sein, oder ?

                                        Mappy 1 Reply Last reply Reply Quote 0
                                        • Mappy
                                          Mappy @dslraser last edited by

                                          @dslraser

                                          Neee das bringt auch keine Veränderung

                                          1 Reply Last reply Reply Quote 0
                                          • Mappy
                                            Mappy last edited by Mappy

                                            Bringt es was vielleicht den Iobroker updazudaten ? Hat der vielleicht irgendwo nen Bug, oder muss man den nicht manuell updaten ? Bzw. falls ja wie macht man das unter Synology ohne die ganze Konfiguration zu verlieren ?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            802
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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