NEWS
Hilfe zum Alexa Hue Wecker
-
Hi !
Vielleicht kann mir ja einer helfen mit dem Script. Finde den Fehler nicht.
Wenn ich einen Wecker bei meiner Alexa programmiere auf 20:00 Uhr dann wird dieser zu 21 Uhr abgerufen und dem HUE Light so mitgeteilt. Praktisch also ist das Problem, dass alles um eine Stunde verschoben ist, also zu spät das Wake-Up Light angeht, was echt schade ist, da ich super gerne mein altes manuelles Wake Up light von Philips einmotten würde.https://forum.iobroker.net/topic/18984/hue-lichtwecker-mit-alexa/10
Hier nochmal das Log bei Wecker-Stellung um 17:30.
Versteh nicht, warum wenn es in IO broker korrekt angezeigt wird er auf die ausgelesene Uhrzeit für das Wakeup Licht eine Stunde rauf haut.
Im IObroker zeigt er das alles korrekt an.17:11:00.022 info javascript.0 script.js.common.Bewegungsmeldung.Wakeuplight-Marc: Collecting alarms from alexa2.0.Echo-Devices.G0911B0592750S33 17:11:00.023 info javascript.0 script.js.common.Bewegungsmeldung.Wakeuplight-Marc: Adding alarm at Sun Aug 18 2019 18:30:00 GMT+0200 (CEST) 17:11:00.023 info javascript.0 script.js.common.Bewegungsmeldung.Wakeuplight-Marc: 0: Sun Aug 18 2019 18:30:00 GMT+0200 (CEST) 17:11:00.023 info javascript.0 script.js.common.Bewegungsmeldung.Wakeuplight-Marc: Alarm will be triggered at Sun Aug 18 2019 18:30:00 GMT+0200 (CEST) 17:11:00.023 info javascript.0 script.js.common.Bewegungsmeldung.Wakeuplight-Marc: Sunrise starts at Sun Aug 18 2019 18:27:00 GMT+0200 (CEST) 17:11:00.023 info javascript.0 script.js.common.Bewegungsmeldung.Wakeuplight-Marc: Current time is Sun Aug 18 2019 17:11:00 GMT+0200 (CEST)
-
@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. -
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); }
-
@Mappy sagte in Hilfe zum Alexa Hue Wecker:
Ja aber leider keine Antwort bekommen
das ist doch erst Minuten her
-
@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
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. -
@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 ? )
-
@Mappy
Welche JS Adapter Version benutzt Du ? -
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:
Lichter schalten etc funktioniert alles komplett korrekt im Iobroker zeitlich
-
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 -
@Mappy Stimmt die Zeit auf deinem Grundsystem auf dem ioBroker läuft?
-
@Mappy
Ich nutze auch Docker (für ioBroker) auf der Synology. Hast Du mal da geschaut ?Systemzeit
Einstellung
-
@Mappy
und noch zwei Sachen die Du schauen kannst. Stimmen die Koordinaten und Ort Land usw ?
auf den Schlüssel klicken
was ist hier im Javascript Adapter/Astro-Einstellungen eingestellt ?
ansonsten habe ich noch das hier gefunden
https://forum.iobroker.net/topic/13978/gelöst-uhrzeit-falsch -
Ja die stimmt auch. Hatte ich auch schon im Verdacht.
-
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. -
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.
-
Das stimmt auch.
-
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:
-
ioBroker.admin 3.6.2
Sollte doch passen oder ?
-
@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:
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 ? -
Neee das bringt auch keine Veränderung