Hallo,
ich möchte das Thema noch einmal aufgreifen und auch hier mal meine Frage stellen.
Ich möchte bei mir eine Steuerung programmieren, die 30 Minuten vor dem ersten eingestellten Wecker die Heizung im Badezimmer anmachen soll.
Dafür itteriere ich Nachts um 4 Uhr über alle Alarm-Ordner (später kann man den dies auch machen lassen, wenn z.B. in der Alexa Summery das Stichwort Wecker hällt). Suche die raus die "true" sind, packen sie dann in eine Liste welche ich dann sortiere.
Dann siehe ich von der kleinsten Uhrzeit 30 Minuten ab und habe die Lösung 
JUHU - dachte ich ...
Leider musste ich feststellen, dass wenn ein neuer Wecker angelegt wird, das Script diesen nicht findet. Erst wenn ich den javascript Adapter neu starte, erst dann findet er den neuen Wecker.
Hier erstmal mein Code:
var lst_Alarme, lst_Weckzeiten, int_Anzahl, acID, i, str_Weckzeit, str_kleinsteWeckzeitMinus30Min, VorWecker1;
function listsGetSortCompare(type, direction) {
var compareFuncs = {
"NUMERIC": function(a, b) {
return Number(a) - Number(b); },
"TEXT": function(a, b) {
return a.toString() > b.toString() ? 1 : -1; },
"IGNORE_CASE": function(a, b) {
return a.toString().toLowerCase() > b.toString().toLowerCase() ? 1 : -1; },
};
var compare = compareFuncs[type];
return function(a, b) { return compare(a, b) * direction; }
}
// Alle Alarme von Schlafzimmer Echo Dot
lst_Alarme = Array.prototype.slice.apply($("channel[state.id=alexa2.0.Echo-Devices.alexa2.0.Echo-Devices.G09XXXXXXXXXX.Alarm.*.enabled]"));
lst_Weckzeiten = [];
int_Anzahl = 0;
if (!lst_Alarme.length) {
console.log('Keine Alarme gefunden');
} else {
for (var acID_index in lst_Alarme) {
acID = lst_Alarme[acID_index];
int_Anzahl = (typeof int_Anzahl == 'number' ? int_Anzahl : 0) + 1;
console.log(([int_Anzahl,' - ',acID,' - ',getState(acID).val].join('')));
if (getState(acID).val) {
console.log(([acID,' - ',getState(acID).val].join('')));
str_Weckzeit = getState((String(acID.slice(0, acID.length - 7)) + 'time')).val;
lst_Weckzeiten.push(getDateObject(str_Weckzeit).getTime());
}
}
if (!lst_Weckzeiten.length) {
console.log('Keine AKTIVIERTEN Alarme gefunden');
} else {
console.log('fertige Liste durchsuchen');
for (var i_index in lst_Weckzeiten) {
i = lst_Weckzeiten[i_index];
console.log(('' + formatDate(getDateObject(getDateObject(i).getTime()), "hh:mm:ss")));
}
console.log('sortierte Liste');
var i_list = lst_Weckzeiten.slice().sort(listsGetSortCompare("NUMERIC", 1));
for (var i_index2 in i_list) {
i = i_list[i_index2];
console.log(('' + formatDate(getDateObject(getDateObject(i).getTime()), "hh:mm:ss")));
}
console.log('kleinste Element');
console.log(('' + formatDate(getDateObject((lst_Weckzeiten.slice().sort(listsGetSortCompare("NUMERIC", 1))[0])), "hh:mm:ss")));
console.log('kleinste Element - 30 Minuten');
str_kleinsteWeckzeitMinus30Min = ('' + formatDate(getDateObject((parseFloat(getDateObject((lst_Weckzeiten.slice().sort(listsGetSortCompare("NUMERIC", 1))[0])).getTime()) - 30 * 1000 * 60)), "hh:mm:ss"));
console.log(str_kleinsteWeckzeitMinus30Min);
console.log('kleinste Element - 30 Minuten');
(function () {if (VorWecker1) {clearSchedule(VorWecker1); VorWecker1 = null;}})();
VorWecker1 = schedule((getDateObject(str_kleinsteWeckzeitMinus30Min).getMinutes()).toString().trim() + ' ' + getDateObject(str_kleinsteWeckzeitMinus30Min).getHours().toString().trim() + ' ' + '*'.toString().trim() + ' ' + '*'.toString().trim() + ' ' + '*'.toString().trim(), async function () {
});
}
}
Und hier noch mal in zusammengesetztes Bild vom Blockly:

Vielleicht hat ja einer von euch eine Idee, wie man in JS neue Datenpunkte einlesen kann, die Instanz neu starten kann .. etc..
Vielen Dank und ich bin gespannt