Fibaro Skil: RGBW Devices

Ich habe es bis jetzt noch nicht geschafft einem RGBW Device eine Farbe anzuschalten.

Speziell die Zipato Led Bulb wird gar nicht als Lampe erkannt.

Gruß Olaf

Vermutlich ist die Zipato-Lampe nicht vom Typ “colorController”?

Hiernach wird gefiltert:
type=com.fibaro.colorController&interface=light

Kannst du hier die Device-Informationen posten?
http://<ip>/api/devices/<zipato-id>

{“id”:470,“name”:“Bettlicht”,“roomID”:10,“type”:“com.fibaro.colorController”,“baseType”:“com.fibaro.multilevelSwitch”,“enabled”:true,“visible”:true,“isPlugin”:false,“parentId”:469,“remoteGatewayId”:0,“interfaces”:[“deviceGrouping”,“fibaroFirmwareUpdate”,“levelChange”,“light”,“zwave”],“properties”:{“parameters”:[{“id”:1,“lastReportedValue”:50,“lastSetValue”:50,“size”:1,“value”:50},{“id”:2,“lastReportedValue”:16,“lastSetValue”:16,“size”:1,“value”:16}],“pollingTimeSec”:0,“zwaveCompany”:“Zipato”,“zwaveInfo”:“3,3,92”,“zwaveVersion”:“1.7”,“color”:“125,0,0,0”,“configured”:“true”,“currentProgram”:“0”,“dead”:“false”,“deviceControlType”:“23”,“deviceGroup”:"[]",“deviceGroupMaster”:“0”,“deviceIcon”:“15”,“emailNotificationID”:“0”,“emailNotificationType”:“0”,“endPointId”:“0”,“firmwareUpdate”:"{“info”:"",“progress”:0,“status”:“UpToDate”,“updateVersion”:“1.7”}",“isLight”:“true”,“liliOffCommand”:"",“liliOnCommand”:"",“log”:"",“logTemp”:"",“manufacturer”:"",“markAsDead”:“true”,“model”:"",“nodeId”:“99”,“parametersTemplate”:“368”,“productInfo”:“1,49,0,2,0,2,1,7”,“pushNotificationID”:“0”,“pushNotificationType”:“0”,“remoteGatewayId”:“0”,“saveLogs”:“true”,“serialNumber”:"",“smsNotificationID”:“0”,“smsNotificationType”:“0”,“updateVersion”:"",“useTemplate”:“true”,“userDescription”:"",“value”:“49”},“actions”:{“abortUpdate”:1,“reconfigure”:0,“retryUpdate”:1,“setColor”:1,“setValue”:1,“startLevelDecrease”:0,“startLevelIncrease”:0,“startUpdate”:1,“stopLevelChange”:0,“turnOff”:0,“turnOn”:0,“updateFirmware”:1},“created”:1487864288,“modified”:1487864288,“sortOrder”:266}

Ok, das Device sollte doch gefunden werden.
Was steht denn im Log zu der Anfrage (“https://eu-west-1.console.aws.amazon.com/cloudwatch/home?region=eu-west-1#logs:”)?

Konnte das Problem reproduzieren. Alexa hat ein paar Probleme mit dem Erkennen der Spracheingabe und dem dazu passendem Intent

Hey,
ich glaube nicht das es was mit dem Erkennen der Spracheingabe zu tun hat.
Habe verschiedene “Lampen” (Fibaro RGBW Controller, Domitech Bulb) verschiedenen Räumen zugeordnet immer
“Alexa - sag fibaro licht im <raum> an” gesagt. Funktioniert so weit, nur nicht mit der “Zipato Led Bulb”.
Muss also an irgendwas anderem liegen.

Noch ein Phänomen:
Ich habe zwei Zwei RGBW Controller im Wintergarten

“Licht im Wintergarten an” -> beide gehen an
“Licht im Wintergarten aus” -> beide gehen aus
“Beleuchtung im Wintergarten an” -> beide gehen an
“Beleuchtung im Wintergarten aus” -> funzt nicht macht nur doing

Es ist auch nicht möglich einen der beiden Controller mit seinem Namen anzusprechen.
Generell gibt es wohl Probleme mit dem RGBIntent: Bei mir funktioniert da gar nichts
z.B. “setze rot von Hauptlicht auf 50 prozent” -> bei der antwort des angeforderten skills ist ein problem aufgetreten

Hauptlicht ist einer der beiden RGBW Controller im Wintergarten
Habe mal im index.js in der function getJsonDataFromFibaro(…) ein zusätzliches log eingefügt um den Filter ausgegeben:

2017-03-04T11:07:54.938Z d0de68db-00ca-11e7-aaec-898e16eae92f Trying to parse
2017-03-04T11:07:54.939Z d0de68db-00ca-11e7-aaec-898e16eae92f Called getJsonDataFromFibaro
2017-03-04T11:07:54.939Z d0de68db-00ca-11e7-aaec-898e16eae92f Filter: type=com.fibaro.colorController&interface=light&enabled=true&visible=true
2017-03-04T11:07:55.095Z d0de68db-00ca-11e7-aaec-898e16eae92f Result: []

also irgendwas läuft da falsch.

Gruß Olaf

Siehst du die Devices, wenn du diese URL aufrufst:
http://<IP>/api/devices?type=com.fibaro.colorController&interface=light&enabled=true&visible=true

Hab noch eine Besonderheit der RGBW Controller von Fibaro gefunden
[{“id”:114,“name”:“Ambientlicht”,“roomID”:8,“type”:“com.fibaro.FGRGBW441M”,“baseType”:“com.fibaro.colorController”

wo hingegen die Zitato RGBW Led Bulb folgendes hat

[{“id”:470,“name”:“Bettlicht”,“roomID”:10,“type”:“com.fibaro.colorController”,“baseType”:“com.fibaro.multilevelSwitch”

Mann müsste also beim RGB Intent sowohl type=com.fibaro.colorController also auch baseType=com.fibaro.colorController abfragen

Gibt es bei der API eine Möglichkeit der “oder-Verknüpfung” ?

hab mal “/api/devices?type=com.fibaro.colorController | baseType=com.fibaro.colorController” probiert, funktioniert aber nicht

Gruß Olaf

Leider nicht, zumindest nicht das ich wüsste.
Man muss dann zwei Abfragen machen oder die Abfrage so vereinfachen, dass beide Geräte abgedeckt werden. Das führt aber bei größeren Installationen dazu, dass jede Anfrage viel zu lange dauert.

Ich weiß nicht, warum Fibaro andauernd type und baseType durcheinander bringen :(((

Der RGBW Controller scheint recht neu zu sein? FGRGBW441M kenne ich noch nicht.

Viele Grüße
Alex

Hey,
ich hab die index.js mal angepasset. Ich habe die Zeile 1556 durch folgenden Code ersetzt.

                var jsonContent=JSON.parse(events);
                var ids = jsonContent.getIdOfDeviceWithName({"name":lightName});
                if (ids===undefined||ids.length===0||ids.length>1)
                {
	  	            getJsonDataFromFibaro(response,'baseType=com.fibaro.colorController&interface=light&enabled=true&visible=true',function (events) 
                	{	
                		rgbWork(response,events,lightName,getColor,getProgram,cmdValue,textValue);
                	});
                }
                else
                {
            		rgbWork(response,events,lightName,getColor,getProgram,cmdValue,textValue);
                }

jetzt funktionieren die RGBW-Controller.

Was mir noch aufgefallen ist, die Abfrage in Zeile 1536 auf “roomName”. In den Utterances für den RGBIntent gibt es gar kein roomName.
Scheint also toter Code zu sein.

Gruß Olaf

Durch die erste Änderung funktionieren leider nur noch deine RGB-Controller.
Bei mir ist der baseType was anderes.
Aber gut, das muss nur leider jeder für sich ändern, blöd wird es nur, wenn man beide Arten hat.

Das mit dem roomtype stimmt. Der Raum fehlt in den Utterances. Habe ihn nun hinzugefügt.
Danke!

Hey Alex,

es werden Devices mit type=com.fibaro.colorController als auch baseType=com.fibaro.colorController gefunden.
Die Suche ist ja geschachtelt und nur wenn “type=com.fibaro.colorController” kein Ergebnis liefert wird nach dem baseType gesucht.
Sollte also dann für alle Controller funktionieren, oder gibt es noch andere Möglichkeiten.

        if (roomName!==undefined)
        {
            getRoomIDForName(response,roomName,function (roomID)
            {
                if (roomID<0)
                {
                    logAndSay(response,STATE_RESPONSES.RoomNotFound.replace('$Room',roomName));
                    return;
                }
                
                getJsonDataFromFibaro(response,'type=com.fibaro.colorController&interface=light&enabled=true&visible=true',function (events) 
                {
                var jsonContent=JSON.parse(events);
                var ids = jsonContent.getIdOfDeviceWithName({"name":lightName});
                if (ids===undefined||ids.length===0||ids.length>1)
                {
	  	            getJsonDataFromFibaro(response,'baseType=com.fibaro.colorController&interface=light&enabled=true&visible=true',function (events) 
                	{	
                		rgbWork(response,events,lightName,getColor,getProgram,cmdValue,textValue);
                	});
                }
                else
                {
            		rgbWork(response,events,lightName,getColor,getProgram,cmdValue,textValue);
                }
                });
            });
        }
        else
        {
            getJsonDataFromFibaro(response,'type=com.fibaro.colorController&interface=light&enabled=true&visible=true',function (events) 
            {
                var jsonContent=JSON.parse(events);
                var ids = jsonContent.getIdOfDeviceWithName({"name":lightName});
                if (ids===undefined||ids.length===0||ids.length>1)
                {
	  	            getJsonDataFromFibaro(response,'baseType=com.fibaro.colorController&interface=light&enabled=true&visible=true',function (events) 
                	{	
                		rgbWork(response,events,lightName,getColor,getProgram,cmdValue,textValue);
                	});
                }
                else
                {
            		rgbWork(response,events,lightName,getColor,getProgram,cmdValue,textValue);
                }
            });                
        }
    },

Gruß Olaf

Ja das geht. Die Änderung hatte ich so nicht gesehen gehabt.
Ich dachte, du hättest es nur ausgetauscht.

Ich checke es dann auch so ein, nur bin ich noch nicht so glücklich mit der Lösung,d a zwei Anfragen abgeschickt werden müssen.

Man müsste messen, ob es schneller ist, zwei gefilterte Anfragen zu stellen oder eine Liste mit viel mehr Devices zu erhalten.
Hängt vermutlich aber auch stark von der lokal verfügbaren Bandbreite ab.

ja das stimmt natürlich, aber gefühlt gibt es keinen Unterschied in der Antwortgeschwindigkeit.
Und für mich ist es wichtig das es überhaut funktioniert.

Schöner wäre natürlich eine “oder-Verknüpfung” auf API Ebene.

Auf jeden Fall großes Lob für den Skill und Danke für deine Unterstützung.
Dein Skill war das Kriterium mich überhaupt mit dem Echo zu beschäftigen.

Danke!
Bin immer froh für Verbesserungen bzw Vorschläge.

(Jetzt muss noch die Spracherkennung von Alexa besser werden, habe neulich 10 Versuche gebraucht, bis Alexa “Esszimmer” korrekt erkannt hat).

Habe die Änderungen nun eingecheckt (und noch ein paar andere Kleinigkeiten).

Mir ist noch was aufgefallen.

Die Werte für rot grün blau und weiss liegen im Bereich von 0 bis 255.
Wenn man jetzt 100 Prozent sagt wird der Wert 100 eingestellt, aber das ist eben nicht der Maximalwert.
Man muss also die Werte noch auf 255 anpassen, also berechnen z.B. redValue = 255 * intent.slots.Red.value / 100

Es gibt immer was zu tun und mir macht es Spaß an so einer Sache zu partizipieren.

Ahh, hab gerade gesehen dass du den Bereich ja von 0 bis 255 prüfst, das würde bedeuten man könnte das Prozent weglassen.
Mit Prozent ist aber bestimmt intuitiver. Also erst umrechnen und dann den Bereich von 0 bis 100 prüfen.

Ja, da war ich nicht ganz einheitlich.
Ich ändere es so, wie du es vorgeschlagen hast.

Ich kann dir auch gerne Zugang zum GitHub Projekt geben.

Ach so noch was, die Helligkeit hat bei den Controllern den Bereich von 0 bis 100.
Da würde es dann passen und man müsste nicht umrechnen.

hey, das mit GitHub wäre super, aber ich würde Änderungen schon mit dir abstimmen wollen.

Ich hab zwar weitergehende programmier Kenntnisse, bin mir aber hier gar nicht sicher was das für ne Sprache ist.
Ist das LUA oder Phyton oder ???. Habe die Änderungen eigentlich nur aus dem Kontext heraus vorgenommen.

Gibt es irgendwo eine Syntax Beschreibung?

Mein GitHub User ist : okatzer66

Die Sprache ist NodeJS.
Ich konnte diese selber kaum. Dafür sprachen aber zahlreichen Erklärungen zu Alexa und man hat am schnellsten Fortschritte gemacht.
Wenn ich noch einmal anfangen sollte, würde ich sie vermutlich erneut auswählen.