Hallo Leute!
Da der WifiLight Thread ja echt schon elendslange ist, fange ich hier mit meiner Frage einen neuen an, ich hoffe das ist OK!
Die Aufgabenstellung ist eigentlich ganz einfach:
Ich habe ein LED-Lichtband und mehrere Hue Lampen, das Band ist über da Modul WifiLight.pm eingebunden die Hue über deren Modul.
Besteht hier die Möglichkeit, EINE Hue Lampe Bsp: HueDevice1 im Status automatisch mit einem dem LedStrip zu synchronisieren.
Also Hue mit Farbe "hier einsetzen" an und Strip geht mit einer Farbe die (theoretisch) dieser entspricht auch ein.
WifiLight wird ja leider im Gegensatz zu den Hue, wo die Farbe mit XY und was weiß ich noch definiert ist, mit HSV bzw. RGB angesteuert.
Kann man xy irgendwie in HSV oder so konvertieren?
Vielen Dank
Steeeve
je nach hue device kannst du diese auch direkt mit rgb und hsv steuern. versuch einfach mal ein set <hue device> rgb RRGGBB
undset <hue device> hsv HHSSVV
RRGGBB und HHSSVV jeweils 6 Byte hex.
wenn du es umgekehrt möchtest kannst du auf jedes hue device ein get <hue device> rgb
oder get <hue device> RGB
machen und dann z.b. mitmy( $h, $s, $v ) = Color::rgb2hsv($r,$g,$b);
in hsv werte umrechnen. letzteres ist eventuell nicht besonders genau weil der farbraum der hue bulbs nicht berücksichtig wird.
ich könnte für das hue modul noch ein get <hue device> hsv
einbauen.
gruss
andre
Hi André.
Ich würde gerne von den hue ausgehen als Quelle. von daher wäre get ... hsv sicher optimal.
ich probier es inzwischen mit get rgb
Danke.
steeeve
Auf die schnelle hab ich mir jetzt mal das gebastelt:
sub syncHueToWifiLight {
my $huedevice = $_[0];
my $wifilightdevice = $_[1];
my $ret = "";
my $color = fhem "get $huedevice RGB";
fhem "set $wifilightdevice RGB $color";
$ret = $color;
}
und in der 99_MyUtils.pm ergänzt und so ausgeführt (funktioniert, farbe in der näheren Entfernung):
{syncHueToWifiLight('HUEDevice8', 'LightStrip') }
jetzt stellt sich mir die frage, wann ich das ausführe (at)...
lg
Steeeve
per notify auf das huedevice. am besten auf state.
gruss
andre
und dann dort die Funktion aufrufen und in der Funktion auf einAus usw. der Hue manuell eingehen?
gruss
Steeeve
ja. genau. in der art.
aus bekommst du am sichersten über das onoff reading.
bis alles geht solltest du noch drauf achten das du wirklich nur state erwischst und nicht auf alle anderen readings triggerst.
gruss
andre
so, da wirds jetzt schwierig, das funktioniert leider nicht:
define lightstripToHue notify HUEDevice8:state.*{syncHueToWifiLight('HUEDevice8', 'LightStrip') }
Hi,
ZitatDa der WifiLight Thread ja echt schon elendslange ist, fange ich hier mit meiner Frage einen neuen an, ich hoffe das ist OK!
absolut :)
so wie Andre das schreibt sollte es gehen
hue:
get <hue device> RGB
wifilight
set <wifilight> RGB ...
wenn die hue ein RGB event erzeugt (weiß ich nicht) könntest Du das per notify direkt an wifilight durchreichen.
vg
jörg
es gibt ein RGB event.
gruß
andre
add:
"wir" könnten mit sowas auch in den neuen "Beleuchtung" umziehen. Hat Boris ja extra so nett eingerichtet (danke). Vielleicht mag's jemand verschieben ...
vg
Jörg
Da wollte ich es eh posten, aber da war es so leer, da habe ich mich nicht getraut ;D
Sorry, ich bin grad beim Suchen, habe aber echt gerade keinen Tau, wie ich an so ein Event komme...
gruss
Stephan
notify <device>:RGB.*
Zitat von: justme1968 am 04 Oktober 2014, 19:57:46
es gibt ein RGB event.
gruß
andre
dann sollte:
define syncLights notify hue:RGB.* set wifilight RGB $EVTPART1
passen
vg
jörg
NAchtrag: teamwork :)
Vielen Dank Euch!
Soweit funktioniert das jetzt schon ganz gut - helligkeit usw. wird noch nicht übernommen und wenn man über die hue-app die farbe ändert, dauet es natürlich ein wenig, aber soweit schon mal ganz nett!
Jetzt muss ich leider noch wegen den readings lästig sein, dass ich prinzipiell auf das onoff reading der hue eingehen kann bin ich jetzt auf die readingsGroups gestoßen (und gleich für die FHT umgesetzt - nice) aber somit auch draufgekommen, dass es nicht das ist, was ich suche...
Ich hätte da gerne in meiner funktion eine if-bedingung, die auf das onoff 0/1 eingeht, dass ich dann walt bei 0 den ledstrip ausschalte und bei 1 den farbwert setze...
merci
steeeve
eigentlich bräuchtest Du das (mMn) nicht weil Wifilight einen RGB 000000 auf "off" setzt.
Also solange die hue, wenn sie ausgeht, nochmal ein RGB 000000 schickt geht das wifilight device mit aus.
vg
jörg
schönes Teamwork, das wünsch ich mir fürs neue beleuchtungswidget...
sowohl die Funkion, als auch das Team *gg*
Das macht die Hue aber nicht, wenn ich die lampe aus schalten (onoff 0, state off) dann bekomme ich immer noch einen RGB wert im get
lg
steeeve
verstehe, schau Dir mal das DOIF modul an, das stellt solche Verknüpfung bereit.
vg
Jörg
Zitat von: herrmannj am 04 Oktober 2014, 20:03:04
NAchtrag: teamwork :)
aber ich war fauler :)
die hues setzen bei aus die farben je nach device nicht zurück. man kann z.b. ein ein senden und die lampen gehen mit der alten farbe und helligkeit wieder an. d.h. leider auch das das notify auf RGB alleine nicht reicht um auch aus zu schalten.
wenn du es dir einfach machen willst leg ein zweites notify auf hue:onoff.* an und schalte bei $EVTPART1 == 0 aus.
oder du machst alles in einem notify (hue:(RGB|onoff).* und kannst dann mit
{if( $EVTPART0 eq "onoff" ) {
if($EVTPART1 == 0){
...
}
} else {
...
}
}
ausschalten oder die farbe übernehmen.
gruss
andre
oioioioioi... Ich versuche gerade das so zu machen, wie Andre geschrieben hat (unvollständig, da grad bei Fehlersuche):
sub syncHueToWifiLight {
my $huedevice = $_[0];
my $wifilightdevice = $_[1];
my $EVTPART0 = $_[2];
my $EVTPART1 = $_[3];
my $ret = "";
if ($EVTPART0 eq "onoff") {
if ($EVTPART1 == 0) {
fhem "set $wifilightdevice off";
}
}
my $color = fhem "get $huedevice RGB";
fhem "set $wifilightdevice RGB $color";
$ret = $color;
}
und bekomme den Fehler:
ZitatGlobal symbol "$color" requires explicit package name at ./FHEM/99_MyUtils.pm line 21. syntax error at ./FHEM/99_MyUtils.pm line 24, near "my $color = fhem "get " Global symbol "$color" requires explicit package name at ./FHEM/99_MyUtils.pm line 25. Global symbol "$priority" requires explicit package name at ./FHEM/99_MyUtils.pm line 39. Global symbol "$event" requires explicit package name at ./FHEM/99_MyUtils.pm line 40. Global symbol "$subject" requires explicit package name at ./FHEM/99_MyUtils.pm line 40. Global symbol "$priority" requires explicit package name at ./FHEM/99_MyUtils.pm line 40. Global symbol "$priority" requires explicit package name at ./FHEM/99_MyUtils.pm line 42. Global symbol "$event" requires explicit package name at ./FHEM/99_MyUtils.pm line 43. Global symbol "$subject" requires explicit package name at ./FHEM/99_MyUtils.pm line 43. Global symbol "$priority" requires explicit package name at ./FHEM/99_MyUtils.pm line 43. Missing right curly or square bracket at ./FHEM/99_MyUtils.pm line 78, at end of line ./FHEM/99_MyUtils.pm has too many errors.
Line 21 ist genau folgende Zeile:
fhem "set $wifilightdevice off";
ohne diese klappt es!
Schlussendlich sollte es so ausschauen (zwecks Klammernzählung so formatiert ;)):
sub syncHueToWifiLight {
my $huedevice = $_[0];
my $wifilightdevice = $_[1];
my $EVTPART0 = $_[2];
my $EVTPART1 = $_[3];
my $ret = "";
my $color = "";
{
if ($EVTPART0 eq "onoff")
{
{ if ($EVTPART1 == 0)
{
fhem "set $wifilightdevice off";
}
}
} else
{
$color = fhem "get $huedevice RGB";
fhem "set $wifilightdevice RGB $color";
$ret = $color;
}
}
}
Sehen eure geschulten Augen zufällig den Fehler?
Dongge!
vg
Seeeve
aus dem stegreif sehe ich es nicht aber in EVTPART1 steht sowieso was du willst. du brauchst kein extra get.
gruß
andre
ps: du würdest auch ein get rgb wollen. RGB ist auf maximale helligkeit normiert damit die icons besser aussehen.
Guten Morgen!
Also keine Ahnung warum das gestern nicht funktionierte - heute klappt es und hier der code, mit noch einem kleinen Problemchen:
Ein/aus, Farbwechsel funktioniert, nur da ich ja immer noch auf das onoff und das RGB event eingehen muss, fehlt mir bei RGB event die Information ob die Hue ein oder aus sind - jetzt schaltet es sich zwar brav aus, nur beim nächsten Reading von RGB schaltet sich das Lichtband wieder ein - damn
sub syncHueToWifiLight {
my $huedevice = $_[0];
my $wifilightdevice = $_[1];
my $EVTPART0 = $_[2];
my $EVTPART1 = $_[3];
my $ret = "";
if ($EVTPART0 eq "onoff:") {
if ($EVTPART1 == 0) {
fhem "set $wifilightdevice off";
}
} else {
my $color = fhem "get $huedevice RGB";
fhem "set $wifilightdevice RGB $color";
$ret = $color;
}
}
Das kann doch nicht so schwer sein - ich glaub ich steh auf der Leitung...
Danke
Steeeve
du kannst beim RGB event it ReadingsVal(<hue>,"onoff",0); nachschauen ob die hue an oder aus ist und nur bei an schalten.
gruss
andre
Danke Andre!
So klappt es jetzt:
sub syncHueToWifiLight {
my $huedevice = $_[0];
my $wifilightdevice = $_[1];
my $EVTPART0 = $_[2];
my $EVTPART1 = $_[3];
my $ret = "";
if ($EVTPART0 eq "onoff:") {
if ($EVTPART1 == 0) {
fhem "set $wifilightdevice off";
}
} else {
if (ReadingsVal("HUEDevice7","onoff",0) == 1) {
my $color = fhem "get $huedevice RGB";
fhem "set $wifilightdevice RGB $color";
$ret = $color;
}
}
}
Und dazu das notwendige notify:
define lightstripToHue notify HUEDevice7:(RGB|onoff).* {syncHueToWifiLight('HUEDevice7', 'LightStrip',$EVTPART0,$EVTPART1) }
Sobald es dann das HSV Reading von den Hue gibt, werde ich es dahingehend anpassen, dann sollte die Helligkeit ja soweit auch halbwegs stimmen, oder?
Was mir noch aufgefallen ist, dass es (noch) nicht funktioniert, wenn man die Hue mit einen Alarm triggert:
define klingelNotify notify wg_KlingelA:on {prowl("Es Klingelt","Klingel @ %","1")}{fhem("set HUEDevice7 alert lselect")}
(ja, ich habs hier irgendwie hardcore - klingel triggert den FS20 signalgeber (direkt), die Lampe blinkt (super wenn die Kinder schlafen) und es wird eine Push an die Handys gesendet (sehr unsympathisch,wenn man weiß, dass die Post klingelt, aber keiner zuhause ist).
lg
Steeeve
Und noch eine optimierte Version, welche weichere Übergänge hat und statt off auf RGB 000000 ausfadet.
Wenn man die Hue nun mit "on" einschaltet, klappts auch!
Oh, und huedevice 7 natürlich auf den Parameter ausgebessert!
Edit: Angepasst auf rgb statt RGB
sub syncHueToWifiLight {
my $huedevice = $_[0];
my $wifilightdevice = $_[1];
my $EVTPART0 = $_[2];
my $EVTPART1 = $_[3];
my $ret = "";
if ($EVTPART0 eq "onoff:") {
if ($EVTPART1 == 0) {
fhem "set $wifilightdevice RGB 000000 2 s";
return $ret;
}
}
if (ReadingsVal("$huedevice","onoff",0) == 1) {
my $color = fhem "get $huedevice rgb";
fhem "set $wifilightdevice RGB $color 2 s";
$ret = $color;
}
}
wenn du get rgb statt get RGB verwendest (oder direkt $EVTPART1) sollte auch jetzt schon die helligkeit stimmen.
gruss
andre
oh wie geil, danke!
lg
Steeeve