NEWS
Cloud - alexa fehler / alle funktionen laufen nacheinander durch [Problem gefunden]
-
ich hab den fehler gefunden, weshalb cloud nicht mit milight und eventuell anderen lichtsteuerungen via alexa sauber funktioniert
hier ein beispiel des codes, den ich um ettliche debug meldungen, zum tracing erweitert hab:
case 'TurnOffRequest':
// kommentare mit sample
adapter.log.debug('ALEXA OFF: ' + request.payload.appliance.applianceId);
for (i = 0; i < ids.length; i++) {
****<u>adapter.log.debug('off - forschleife - ids.length ' + ids.length);
adapter.log.debug('off - forschleife - ids ' + ids);____</u>**** **__controlOnOff(ids, false, ids.length === 1, function (err) {
if (!–count) {
request.header.name = 'TurnOffConfirmation';
callback({
header: request.header,
payload: {}
});
request = null;
}
});
hier rodelt eine for schleife ids durch, was aber in wirklichkeit ein array mit dessen funktionen wie state, brightness,etc ist, was dann bei "Lampe ausschalten" in den logs zu folgender Ausgabe führt:____ __ ` > ____cloud.0 2017-02-05 17:40:53.341 debug off - forschleife - ids __milight.0.zone3.brightness
cloud.0 2017-02-05 17:40:53.340 debug off - forschleife - ids.length 2 (<<< integer 0 und 1)
cloud.0 2017-02-05 17:40:53.333 debug off - forschleife - ids __milight.0.zone3.state
cloud.0 2017-02-05 17:40:53.332 debug off - forschleife - ids.length 2 (<<< kommt daher da ich state + brightness habe)
cloud.0 2017-02-05 17:40:53.331 debug ALEXA OFF: Gang________ ________das führt dazu, dass wenn ich 3 funktionen auf einem objekt habe, er alle 3 funktionen ansteuert, was 1. nicht nötig und zweitens gar nicht gewollt war.
das erklärt auch, weshalb ein ON vor dem Dimmen geschickt wird (im log zu sehen)
ich hab das im milight adapter gefixt, indem ich brightness 0 ignoriere und ggf wenn jemand 0% sagt erneut ausschalten in milight direkt sende.
ids wird zuvor oben bei socket.on('alexa.. usw, nachdem man es mit var erstellt hat, in der ersten if schleife als array befüllt, welches alle funktionen erbt.
Funktionen wie eben state, brightness, mode usw.
um das zu demonstrieren habe ich mir einen adapter mit 4 funktionen gebaut, ohne state:
Ich verwende allOn allOff um alle lampen ein / aus zuschalten (zonenübergreifend - nicht state - allon macht ALLE lampen)
rgb zum test und hue um den farbton via % zu wählen______
cloud.0 2017-02-05 18:01:08.320 debug on - forschleife - ids.length milight.0.zone1.rgb cloud.0 2017-02-05 18:01:08.319 debug on - forschleife - ids.length 4 cloud.0 2017-02-05 18:01:08.318 debug on - forschleife - ids.length milight.0.zone1.hue cloud.0 2017-02-05 18:01:08.317 debug on - forschleife - ids.length 4 cloud.0 2017-02-05 18:01:08.316 debug on - forschleife - ids.length milight.0.zone1.allOff cloud.0 2017-02-05 18:01:08.315 debug on - forschleife - ids.length 4 cloud.0 2017-02-05 18:01:08.314 debug on - forschleife - ids.length milight.0.zone1.allOn cloud.0 2017-02-05 18:01:08.313 debug on - forschleife - ids.length 4
schaltet die funktionen nacheinander, wie erwartet durch
ich hab das in meinem source geändert und die for-schleife auskommentiert und i auf 0 gesetzt. (=state bzw. erste funktion des gerätes)
jetzt macht cloud nur noch das was es soll, bei ein und ausschalten auf den adaptern die state + brightness haben, denn da ist state immer als 1. funktion und somit ids = 0 korrekt
das problem ist, ich habe mir aber am testadapter AllOn, AllOff und Hue gesetzt.
Dort wäre i = 0 AllOn, i = 1 AllOff, i = 2 Hue
Ich glaube du verstehst mein Dilemma?
Kommentiere ich nun alle for schleifen entsprechend aus / um, dann funktioniert dort das dimmen in dem fall nicht mehr, sondern alle lampen werden eingeschaltet (0=allOn).
Man müsste also statt einem integer / forschleife eher die korrekte array-tabelle für den jeweiligen befehl dort setzen.
mein code ist jedenfalls vermurkst, werde jetzt wieder auf den unveränderten code zurück gehen und dann die for schleifen bei ein und ausschalten wegkommentieren.
Edit
ok jetzt bekomm ich auch wieder ein OK statt "Das Gerät antwortet nicht":
alle if (!–count) { auskommentiert, da count = ids.length und somit ungleich ist.
jetzt verstehe ich auch das i++ bei der for schleife__ ` ____**
-
Man kann mit Alexa nicht nur MiLight steuern.
Und du hast den Code ein bisschen falsch verstanden.
> das führt dazu, dass wenn ich 3 funktionen auf einem objekt habe, er alle 3 funktionen ansteuert, was 1\. nicht nötig und zweitens gar nicht gewollt war.
Man sollte die Quelle editieren und zwar in der Cloud-Einstellungen die unnötige Geräte einfach aus der Gruppe nehmen.Das war es.
-
State + brightness
Das brauch ich
Editier ich den source nicht und sage licht aus, bekomme ich
Light off
Dim to 0 -> minimal gedimmt
Mache ich
State + hue (weil ich zb via dim farbe setze)
Light off
Dim to 0 -> farbe
Das triggered cloud an, nicht milight
Somit betrifft das jede andere lampe auch
Ich hab bei mir
Couch - state, brightness
Partycouch - mode, hue
Verwendest du alexa mit einem anderen steuerungsmodul?
Passiert das da nicht?
-
State + brightness
Das brauch ich
Editier ich den source nicht und sage licht aus, bekomme ich
Light off
Dim to 0 -> minimal gedimmt
Mache ich
State + hue (weil ich zb via dim farbe setze)
Light off
Dim to 0 -> farbe
Das triggered cloud an, nicht milight
Somit betrifft das jede andere lampe auch
Ich hab bei mir
Couch - state, brightness
Partycouch - mode, hue
Verwendest du alexa mit einem anderen steuerungsmodul?
Passiert das da nicht? `
Farbe kannst du sowieso nicht steuern. D.h. interessant ist nur "State + brightness".Im Milight Adapter sollte dann so implementiert werden, dass wenn Brightness 0 kommt, wird auch State auf false gesteuert.
Und umgekehrt, wenn Brightness <> 0, dann sollte auch State auf true gesetzt werden.
Ich habe die Logik, die foxthefox (nicht ich) eingebaut hat, aber nicht ganz verstanden wozu, weil ich die Lampen nicht habe.
Jetzt verstehe ich die Logik und vielleicht kann @foxthefox das wieder einbauen (auch für v6).
Dann kannst du nur Brightness in der Gruppe lassen.
-
Mit dem partycouch trick funktionierts
Hue ist in % zu setzen
Sag ich party%element% oder partymodus auf 80% wird eine farbe die umgerechnet wird gesetzt.
Sage ich party%element% oder partymodus einschalten wird statt state eben der wechslerbutton gedrückt
Ich hab mir die Gruppe Licht mit AllOn AllOff definiert, was eben ALLE lichter ein oder ausschaltet
Bei der derzeitigen for schleife hat das den effekt, dass das Licht ein und gleich wieder aus geht
Da es kein state ist geht nach meinem fix nur noch AllOn, da es ja index 0 ist und index 1 brightness wäre.
Spätestens wenn später amazon mehr funktionen und steuerungen zulässt, wird genau dass zum problem werden (for schleife)
Wie gesagt, ich für mich und im milight adapter habs gefixt.
Wenn du darin kein issue siehst oder sonst jemand ein problem hat, störts mich auch nicht weiter.
-
Wenn du darin kein issue siehst oder sonst jemand ein problem hat, störts mich auch nicht weiter. `
Spätestens, nach dritten Update wird es. :?