NEWS
Alexa Wecker schaltet Beleuchtung an
-
@dslraser 4.1.12
-
Muss man hier noch was einstellen? -
@ostseereiter
installiere mal eine höhere Version, der Baustein kam glaube ich erst nach 4.1.12 dazu -
@dslraser ok alles klar
-
-
@paul53
habe jetzt aus latest 4.3.0 installiert höher gibt es bei mir nicht. Funktioniert aber auch danke. -
Hallo,
ich habe in der AlexaApp 2 Wecker konfiguriert die an Arbeitstagen also Mo-Fr. auslösen würden.
Nachts soll per cronTrigger ein/kein Wecker je nach Bedingungen(Wetter/iCal(Urlaub)/Feiertag/manuelle Fahrzeugwahl) gestellt werden.
die Gefahr besteht das man über die App beim Konfigurieren ggf. den/die Wecker löscht.
Für den Fall will ich über den DP ..Alarm.AddNew einen neuen Wecker anlegen.- Gibt es im Blockly wowas wie IfExist(ObjektID) um zu prüfen ob der DP existiert?
- Wie ermittel ich am besten nach dem neuen Wecker anlegen die ID .Alarm.xxxxxxxxxxxxxxxxx und baue sie dann so in das Script ein das zur AlarmNr dann der passende Wecker gestellt wird?
- Gibts im Bockly auch die Möglichkeit einen Objektbaum .Alarm.xxxxxxxxxxxxxxxxx zu löschen?
-
@xbow42 sagte in Alexa Wecker schaltet Beleuchtung an:
Gibt es im Blockly wowas wie IfExist(ObjektID) um zu prüfen ob der DP existiert?
kannst ja mal damit "rum spielen"
-
@dslraser danke, sieht schon mal sehr schlüssig aus!
-
@dslraser
Besser so:if(existsObject(id)) return existsState(id); return false;
sonst wird bei nicht existierendem Objekt undefined zurück gegeben.
-
@xbow42
würdest du mir dein blockly für den Wecker zur Verfügung stellen!?!
Würde auch gerne auf ICal/Feiertage reagieren damit er den Wecker dann ausschaltet.Danke
Grüße -
@bishop
ich bin mir nicht sicher, ob du damit was anfangen kannst.
so 1zu1 wird das nicht laufen da ich weitere Adapter nutze und manuell angelegte DP unter userdata.0 angelegt habe. Mein ICal-Adapter filtert auf "Urlaub".Die Funktion "chk_IsWorkingDay" , hilft dir vieleicht dein Script anzupassen.
Edit optimierte chk_Funktion:
iobroker_AlexaWecker.txtExport DP_Wecker
0_userdata.0.Geräte.Wecker.json -
@xbow42
werde mal schauen was ich verwenden kann!vielen dank
-
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
-
@paddex sagte in Alexa Wecker schaltet Beleuchtung an:
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 gespanntVielleicht hilft Dir das hier
-
-
Hallo und Danke,
werde es jetzt die Tage versuch produktiev zu setzen. Erste Test waren schon mal erfolgreich.
Wenn das Script um 4 Uhr laufen soll, dann lasse ich den Adapter jetzt einfach um 3:59 neu starten. Funktioniert super über den Expertenmodus in der Instanzenansicht.
Noch mal Danke an alle.Gruß
-
Nimmt Amazon das übel wenn man wie @Paddex das macht und jede Nacht den Adapter neu startet?
-
@haselchen Sollte denen egal sein
-
Wieso sollte Amazon einem das übel nehmen? ich starte den JavaScript Adapter neu, nicht den Alexa. Durch den Neustart kennt er die neuen Datenpunkte die Alexa bei jedem neuem Wecker anlegt.