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

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

Vorheriges Thema - Nächstes Thema

thoschumann

Zitat von: Rainerlan_2 am 11 Dezember 2021, 01:34:41
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
Hallo und vielen Dank für diese Hinweise,
ich hab das jetzt bei mir auch einmal so eingebaut, habe einen LED Milight Miboxer RGB CW WW über deCONZ Phoscon angebunden.
Mit deinen CMD Alias und dem Homebrigdemapping funktioniert alles soweit sehr gut,
lediglich das Dimmen passt nicht ganz.

Wenn ich über Alexa 50 dimmen lasse, dimmt das Device nur 18%, bei 100% dimmt er auf 37%.

Am Device selbst, oder ohne die Cmdalias & Hombrigemapping klappt das dimmen über Alexa richtig.

Hast Du das bei dir auch so beobachtet???

Rainerlan_2

Da hatte ich zu Beginn noch einen Denkfehler beim berechnen der Brightness, die eben erst von % nach 8bit integer (0...255) umgerechnet werden muss;)
Mit siesem"setbri" command sollte es klappen:
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{$bri=$bri/100*255;; fhem("set $EVTPART0 bri $bri")};;fhem("setreading $EVTPART0 setrgb 0");;Log 1, "rgb:".$hexrgb." bri:".$bri}
Wie Du sehen kannst, ist hier die Skalierung hinzugekommen:
$bri=$bri/100*255

thoschumann

Zitat von: Rainerlan_2 am 18 Januar 2022, 09:53:24
Da hatte ich zu Beginn noch einen Denkfehler beim berechnen der Brightness, die eben erst von % nach 8bit integer (0...255) umgerechnet werden muss;)
Mit siesem"setbri" command sollte es klappen:
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{$bri=$bri/100*255;; fhem("set $EVTPART0 bri $bri")};;fhem("setreading $EVTPART0 setrgb 0");;Log 1, "rgb:".$hexrgb." bri:".$bri}
Wie Du sehen kannst, ist hier die Skalierung hinzugekommen:
$bri=$bri/100*255

Perfekt, vielen Dank da hatte ich dann an falscher Stelle probiert.
Jetzt funktioniert alles so wie es soll.