Hi, ich habe immer mal wieder Probleme, wenn ich in meinen Skripten mehrere Befehle an Alexa oder Hue schicke und würde gerne mal wissen, was ich da besser machen kann.
Beispiel 1:
Ich habe mehrere Echos und möchte beispielsweise auf allen im 1. Stock ein Announcement machen. In meinem Skript habe ich dann:
setState("alexa2.0.Echo-Devices.xxxxxxxx.Commands.announcement", "irgendein Text");
setState("alexa2.0.Echo-Devices.yyyyyyyy.Commands.announcement", "irgendein Text");
setState("alexa2.0.Echo-Devices.zzzzzzzz.Commands.announcement", "irgendein Text");
Manchmal kommt es dann vor, dass nur ein oder zwei der Befehle ausgeführt werden und nicht alle drei Echos das Announcement sprechen. (klar, ich könnte hier die drei Echos zu einer Gruppe zusammenfassen, aber mir geht es ums Prinzip.)
Beispiel 2:
Ich habe in drei verschiedenen Zimmern Hue-Strips und sie sollen bei einem bestimmten Ereignis 5 Sekunden lang in einer bestimmten Farbe blinken. Wenn sie vorher eingeschaltet werden, will ich mir das jeweilige Setting merken und nach dem Blinken wiederherstellen. Ich habe dazu eine Funktion geschrieben, die ich für die drei Zimmer aufrufe:
function blinkHueStrip(room) {
if (room == "wzVorne") {
var stripID = "hue.0.Fernsehlicht";
} else if (room == "wzHinten") {
var stripID = "hue.0.Wandlicht";
} else if (room == "büro") {
var stripID = "hue.0.Schreibtisch";
}
var stripOn = getState(stripID+".on").val;
var stripColormode = getState(stripID+".colormode").val;
var stripLevel = getState(stripID+".level").val;
if (stripColormode == "ct") {
var stripCT = getState(stripID+".ct").val;
} else {
var stripR = getState(stripID+".r").val;
var stripB = getState(stripID+".b").val;
var stripG = getState(stripID+".g").val;
}
setState(stripID+".command", '{"transitiontime": 0, "ct": 3200, "level":90}');
setStateDelayed(stripID+".alert", "lselect", 700, false);
setStateDelayed(stripID+".alert", "none", 5700, false);
if (stripOn == false) {
setStateDelayed(stripID+".command", '{"transitiontime": 5, "on":false}', 5750, false);
} else {
if (stripColormode == "ct") {
setStateDelayed(stripID+".command", '{"transitiontime": 25, "level":' + stripLevel + ', "ct":' + stripCT + '}', 5750, false);
} else {
setStateDelayed(stripID+".command", '{"transitiontime": 25, "level":' + stripLevel + ', "r":' + stripR +', "b":' + stripB +', "g":' + stripG + '}', 5750, false);
}
}
}
In den meisten Fällen funktioniert das, aber immer wieder scheint es so, als werden manche Befehle verschluckt und nicht ausgeführt.
Ich habe auch schon mit setStateDelayed
gearbeitet und die Funktion etwas zeitversetzt für die drei verschiedenen Zimmer aufgerufen, aber das hat nicht wirklich etwas gebracht.
Wie kann ich das denn besser machen? Wie geht ihr damit um, wenn ihr mehrere Befehle an Alexa oder Hue senden wollt? Hab schon von den asynchronen Befehlen gelesen - kann das vielleicht helfen?