FHEM Connector: Keine Farben per Alexa: Alexa -> FHEM -> deconz -> tradfri

Begonnen von peppich01, 12 Februar 2020, 14:31:31

Vorheriges Thema - Nächstes Thema

alec_osborne

#15
Hi,

folgende Kommandos funktionieren nicht:
SAT
SATDOWN
SATUP
HUE

Diese Befehle funktionieren.

PCT
RGB
BRI

Gruß

Alec

WeinPan

Hi,

habe selbes Problem mit meinen tint Birnen.
Die Farbauswahl funktioniert wenn die Birnen ausgeschalten sind und ich eine Farbe setze (Alexa, stelle Lampe auf grün).
Sobald die Birnen an sind wird nur noch der ct-Wert geändert.

Im FHEM wird für eine gewisse Zeit auch die gewünschte Farbe angezeigt und wechselt dann auf die tatsächliche Farbe der Lampe zurück.

Farben richtig umgesetzt werden dann nur noch die Weiß-Töne.

Farbänderungen über die Oberfläche (Colorpicker) werden richtig umgesetzt.

Gruß
Peter

ReviloEgros

Hi,

ich muss das hier nochmal ausgraben. Habe mit den IKEA Lampen genau das selbe Problem. Stelle ich die Farbe in FHEM mittels RGB ein, wechselt der colormode nach xy und die Lampe ändert die Farbe. Sage ich Alexa, sie soll die Farbe ändern, wechselt der colormode auf hs und an der Lampe passiert keine Farbänderung. Gibt es da schon eine Lösung, oder soll ich mir per Dummy einen workaround basteln?

dora71

Auch ich hänge mich hier mal mit dran. Obwohl mein Setup ein wenig anders ist.

Mein Gateway ist die HUEBridge, die zu steuernde Lampe ist von LIDL ein Stimmungslicht:
manufacturername: _TZ3000_9cpuaca6
modelid: TS0505A

Ich beobachte ein ähnliches, aber leicht unterschiedliches Verhalten wie ReviloEgros:
Der Colormode wechselt bei mir nicht, der steht auf xy.
Die HUE-Befehle funktionieren aus FHEM heraus nicht (wie set lampe hue 7890), damit kann die Steuerung über Alexa auch nicht richtig funktionieren.

Die Version vom Modul lautet: 31_HUEDevice.pm:0.239120/2021-03-08

Ist aber wahrscheinlich jetzt eher kein Thema für Alexa sondern für HUE/Zigbee  ::)

Gruß Rainer

Rainerlan_2

#19
Mein Innr RB 250 C lampen am Conbee II (deconz) unterstützen NUR den colormode "xy"
Daher funktioniert Set <Huedevice> rgb <Wert> problemlos,  Set <Huedevice> hue <Wert> entsprechend nicht.

Bei der Steuerung über alexa versucht alexa-fhem immer den hue-Wert zu setzen; Beispiel:
executing: http://127.0.0.1:8083/fhem?cmd=set%20HUEDevice7%20hue%2010953&XHR=1

Ist es möglich den Befehl, den alexa-fhem an fhem (das Huedevice) sendet zu ändern, dass stattdessen der hue-colormode "xy" verwendet wird?
Beispiel für blau:
executing: http://127.0.0.1:8083/fhem?cmd=set%20HUEDevice7%20xy%0.150,0.060&XHR=1

Eine Konfiguration des Huedevice (den colormode xy statt hue zu verwenden) wäre für mich die einfachste Lösung;)

Fällt jemand noch eine andere Lösung ein?

Kann man in fhem den set-Befehl an das Huedevice "abfangen" und auf ein rgb- oder "set xy" ändern?

Ein "Dummy-Huedevice" wäre ggfs möglich - Es ist mir aber unklar, welche Werte dann zwischen "Innr-Huedevice" und "Dummy-Huedevice" ausgetauscht werden müssten, damit Alexa den korrekten "Rückgabewert" erhält - und die Farbe auch korrekt in der Alexa-app anzeigt - bzw. Alexa mit "OK" antwortet.

justme1968

alexa selber kann nur hsv. alexa-fhem von sich aus auch.

man kann aber von hand ein momebridgeMapping für RGB anlegen. dann wird von alexa-fhem ein rgb kommando an das hue device gesendet. dieses rechnet dann automatisch auf einen annähernden xy wert um wenn die lampe im xy mode steht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rainerlan_2

Homebridgemapping RGB funktioniert leider nicht, da dann die Gerätesuche von Alexa keine "Farb-Capability" mehr findet (Sondern dann nur noch On/Off, Colortemp & Brightness).

Was letztlich funktioniert hat, war folgendes:
attr <innrDeviceName> homebridgeMapping clear On=state,cmdOn=on,cmdOff=off Hue=hue,cmd=huergb Brightness=bri,cmd=bri ColorTemperature=ct,cmd=ct
und dann mittels cmdAlias ein eigenes "set huergb <hue>"-Kommando gebastelt:
defmod huergb cmdalias set [\w\.]+ huergb \d+ AS {my $hue=$EVTPART2;;;;my $sat=ReadingsVal($EVTPART0,'sat','100');;;;my $bri=ReadingsVal($EVTPART0,'bri','100');;;;my ($r,$g,$b)=Color::hsv2rgb($hue,$sat/256,$bri/256);;;;fhem "set $EVTPART0 rgb ".Color::rgb2hex($r*255,$g*255,$b*255)}

Das sollte auch bei allen anderen Birnen gehen, die kein HUE via Rest-Api von DeConz unterstützen.

Übrigends: Die deConz REST-Api hatte ein Put zum setzen des hue-Wertes NICHT unterstützt. D.h.
PUT <IP_DECONZ2>:8080/api/D0B415E178/lights/7/state { "hue": 0 }
Zeigt zwar: "Success" an - funktioniert trotzdem nicht.

Wird allerdings deConz-gui gestartet und das Kommando:
MOVE TO HUE <Wert>
an die Lampe gesendet, funktioniert das hue-Setting problemlos. D.h. Die Farbe ändert sich.

Rainerlan_2

Noch ein zweites Problem stellt sich - hat jemand eine Idee wie ich den hue-Wert wieder an Alexa zurückgeben kann?
Denn: Leider meldet die REST API nicht den hue-Wert der Lampe zurück - Der bleibt immer bei 0.

Daher kann das homebridgemapping
clear On=state,cmdOn=on,cmdOff=off Hue=hue,cmd=huergb Brightness=bri,cmd=bri ColorTemperature=ct,cmd=ct
auch nie den korrekten hue-Wert zurückliefern (denn der bleibt, wie erwähnt 0)
Darum meldet alexa-fhem eine 0 (hue) an Alexa zurück - und Alexa erkennt die korrekte Farbe nicht (Haken in der App verschwindet wieder neben der gewählten Farbe).

Hat jemand eine Idee?

Folgendes habe ich probiert - geht aber nicht:
1. Userreading angelegt, das den von Alexa empfangenen hue-Wert aufnimmt (Leider geht das nur über ein Dummy device, wies aussieht, da im HUEdevice keine "readingList" und "setList" erlaubt ist.)
2. homebridgemapping geändert - leider scheint alexa-fhem nicht den "myhue"-Wert zurück an Alexa zu schicken:
clear On=state,cmdOn=on,cmdOff=off Hue=[b]myhue[/b],cmd=huergb Brightness=bri,cmd=bri ColorTemperature=ct,cmd=ct


Rainerlan_2

Weiß irgendjemand warum sich hue, was von Alexa empfangen wird, vom hue-Wert wie er im HUEDevice (set) gesetzt wird unterscheidet?:

[9.12.2021, 01:05:02] [FHEM] HUEDevice8: executing set cmd for Hue with value 120
[9.12.2021, 01:05:02] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20HUEDevice8%20huergb%20120&XHR=1

--> Hue = 120

aber:

2021-12-09 01:05:03 caching: HUEDevice8-hue: 42313
[9.12.2021, 01:05:03] [FHEM]     caching: Hue: 42313 (as string; from '42313')

--> Hue = 42313

Und wo wird hier der Wert an Alexa zurückgemeldet?
[9.12.2021, 01:05:09] <<<< [ssh] {"context":{"properties":[{"namespace":"Alexa.PowerController","name":"powerState","value":"ON","timeOfSample":"2021-12-09T00:05:09.280Z","uncertaintyInMilliseconds":500},{"namespace":"Alexa.BrightnessController","name":"brightness","value":100,"timeOfSample":"2021-12-09T00:05:09.280Z","uncertaintyInMilliseconds":500},{"namespace":"Alexa.ColorTemperatureController","name":"colorTemperatureInKelvin","value":6535,"timeOfSample":"2021-12-09T00:05:09.280Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"StateReport","payloadVersion":"3","messageId":"09df6c54-abcd-4c51-9e63-03a3fca57978","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"678B25D6-3723259F1FDC37E8"},"endpointId":"d0:cf:5e:ff:fe:ec:74:43-01"},"payload":{}}}

justme1968

bitte probier mal die angehängte server.js. nach kopieren den alexa-fhem neustart und eine neue geräte suche nicht vergessen.

im gegensatz zu homebridge-fhem haben bei alexa-fhem noch einige dinge gefehlt. in dieser version müsste jetzt die erkennung als farbe lampe und die rückmeldung funktionieren sobald es das RGB mapping gibt. wichtig: es darf nur das RGB mapping geben. sobald es Hue, Sat und Bri gibt hat dies vorrang. das drehe ich für die endgültige version vielleicht noch um.

EDIT 2021-12-10: neue version weiter unten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rainerlan_2

#25
Habs ausprobiert - funktioniert leider (noch) nicht:

server.js kennt "FHEM_rgb2hsv()" nicht:
[9.12.2021, 22:16:26] [FHEM]     caching: On: dim31% (as string; from 'dim31%')
[9.12.2021, 22:16:26] [FHEM]     caching: RGB: 247c72 (as string; from '247c72')
[9.12.2021, 22:16:26] ReferenceError: FHEM_rgb2hsv is not defined
    at propertiesFromDevice (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:2771:15)
    at Server.handleReportState (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:2983:33)
    at Server.handleAlexa (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:2654:46)
    at Server.handler (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:2311:42)
    at Server.verifyToken (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:1441:23)
    at Server.processBody (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:151:31)
    at Server.<anonymous> (/usr/local/lib/node_modules/alexa-fhem/lib/server.js:162:33)
    at IncomingMessage.emit (events.js:315:20)
    at endReadableNT (_stream_readable.js:1201:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)


Das RGB-Mapping wird aber nun von Alexa erkannt: Die Alexa-App zeigt die Farben an (Eigentlich ein unnötiger Kommentar - wie man im log sieht wird der rgb-Wert korrekt empfangen).

Die vorherige Lösung via Hue/Sat/Bri-Mapping und cmdAlias von huergb ist allerdings bedienerfreundlicher, da dann die Befehle "Alexa mache \<Lampe\> Warmweiß" funktioniert.
RGB kenn leider nur weiß und die Farben.

Daher wäre es super, wenn alexa-fhem auch bei Verwendung des "Hue"-Mappings das property "namespace":"Alexa.ColorController" an Alexa liefert ;)

Eine Frage dazu noch: Wie rechnet man den 16bit hue wert (set \<device\> \<16bithuevalue\>) in den grad-wert (0...359) um? Ist das nur ein Modulo/360?

justme1968

da war noch ein copy&paste fehler drin. bitte versuch es mit der neuen version hier noch mal.

eigentlich ist ct nur für lampen gedacht die das in hardware können. nicht zum mischen über rgb weil der Fehler dabei recht groß ist. können deine lampen das?

wenn nein: ich würde vorschlagen nur das RGB mapping in alexa-fhem zu machen und das von dir gewünschte ct mapping weiter mit cmdAlias. der grund ist: RGB über cmdAlias hat das problem das du mit drei werden (h, s, v) rechnen musst die aber im api unabhängig behandelt werden. wenn man das ganze aber in drei schritten statt einem macht kommt es zu fehlern durch 0 werte in hue. das lässt sich nicht wirklich lösen. bei ct ist das aber kein problem da es nur um einen wert geht.

hue ist im hue api mit 0..65535 und sat und bri mit 0..254 spezifiziert. d.h. nur linear skaliert. das kann man aber eigentlich über passende max werte im mapping abdecken.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rainerlan_2

Keine Ahnung wie man von node.JS auf fhem-Funktionen zugreift...
Fehlt noch ein require oder sowas?

Fehlermeldung jetzt:
[9.12.2021, 22:14:24] TypeError: FHEM.FHEM_hsv2rgb is not a function

ColorTemperature und RGB (oder Hue) scheint parallel zu funktionieren.

Und ich bin frph wenn das gehen sollte - Denn es ist genau so wie Du schreibst:
Hue, Sat & Bri auf RGB im FHEM HueDevice umzusetzen ist nicht ganz ohne. Aber ich denke mit ein paar Tricks könnte es gehen:
Nacheinander mittels verschiedener cmdAliase mehrmals rgb anpassen - zunächst mit sat & bri =100% --- Ergibt die Grundfarben. Dann sat & bri anpassen.
Leider sind im HueDevice module userReadings nicht erlaubt um alles zwischenzuspeichern und RGB auf einmal zu setzen
D.h. Hue & Sat muss ggfs in einem DummyDevice zwischengespeichert werden.

justme1968

also... das require war da. aber aus irgend einem grund der zugehörige export im fhem.js nicht. was sehr seltsam ist weil es eigentlich schon ein paar anwender gibt die es nutzen. deshalb war der erste teil des ganzen ja auch schon implementiert. sehr komisch...

wie auch immer: oben gibt es jetzt auch noch ein neues fhem.js. wenn du da auch noch installierst sollte die farbe jetzt eigentlich per RGB mapping und in beide gehen.


das problem an der cmdAlias variante und dem schrittweise lösen ist das die werte nicht unabhängig sind und du dir die jeweils vorherigen merken musst. und selbst dann gibt es kombinationen die dann nicht machen was du willst. wenn z.b. in einem zwischenschritt weiß heraus kommt und du dir den hue wert nicht gemerkt hat ist die farbe futsch bzw. wird es plötzlich rot. diese probleme sollte es mit dem direkt eingebauten RGB mapping eben nicht geben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rainerlan_2

#29
Super. Vielen Dank für Deinen support! Probier ich später gerne aus! (Und bin gespannt ob das auch mit ct+RGB parallel funktioniert)

Das mit dem "merken" habe ich mittlerweile einfach über 3 setreadings gelöst:
Ich merke mir zunächst hue, dann sat...und wenn bri kommt, berechne ich rgb und schreib es direkt.
An alexa-fhem gebe ich via homebridgemapping nur die gemerketen hue, sat, bri -Werte zurück. Damit entfällt die Umrechnung.
Das alles funktioniert ziemlich gut - wenn Du nicht irgendwann mal die Reihenfolge der "set-Kommands" in alexa-fhem änderst;)

Das homebridgemapping:
clear On=state,cmdOn=on,cmdOff=off Hue=myhue,cmd=huergb Saturation=mysat,cmd=setsat Brightness=mybri,cmd=setbri ColorTemperature=ct,cmd=ct

Und meine 3 cmdAliase:
1. Für huergb (sollte jetzt eher "sethue" lauten)
set [\w\.]+ huergb \d+ AS {my $hue=$EVTPART2;;fhem("setreading $EVTPART0 myhue $hue");;fhem("setreading $EVTPART0 setrgb 1")}
2. Für setsat:
set [\w\.]+ setsat \d+ AS {my $sat=$EVTPART2;;fhem("setreading $EVTPART0 mysat $sat")}
3. Für setbri - was dann auch den rgb-Wert setzt:
set [\w\.]+ setbri \d+ AS {my $updCol=ReadingsVal($EVTPART0,'setrgb','1');;my $bri=$EVTPART2;;my $hue=ReadingsVal($EVTPART0,'myhue','100');;my $sat=ReadingsVal($EVTPART0,'mysat','100');;fhem("setreading $EVTPART0 mybri $bri");;my ($r,$g,$b)=Color::hsv2rgb($hue/356,$sat/100,$bri/100);;my $hexrgb=Color::rgb2hex($r*255,$g*255,$b*255);;if($updCol){fhem "set $EVTPART0 rgb ".$hexrgb}else{fhem("set $EVTPART0 bri $bri")};;fhem("setreading $EVTPART0 setrgb 0")}

Damit scheint alles soweit zu funktionieren; D.h.
a. Colortemp, Farbe, Brightness & An/Aus über Alexa steuern
b. Rückgabe aller Werte