Licht mit Harmony schalten

Begonnen von dascrip, 16 August 2015, 14:23:22

Vorheriges Thema - Nächstes Thema

dascrip

Hallo Zusammen,

ich habe folgenden Code, mit dem ich das Licht immer dann einschalten möchte, wenn die Aktion FERNSEHEN oder BLUERAY WIEDERGEBEN an der Harmony gewählt wird:

define hub harmony 192.168.2.29
attr hub event-on-change-reading currentActivity
attr hub room Audio
define lightOnCinemaWhenTV notify hub:.* {\
#my $Logitech_hub = ReadingsVal("hub", "currentActivity", "unknown");;\
Log 1, "hub: $Logitech_hub";;\
my $twilightLichtCinema=ReadingsVal("juechen_twilight","light","6");;\
      Log 1, "Twilight-Licht: $twilightLichtCinema";;\
if($twilightLichtCinema<5){\
if ($Logitech_hub eq "FERNSEHEN" or "BLUERAY WIEDERGEBEN"){\
fhem("set Funksteckdose_Wohnzimmer 45");;\
fhem("set Wohnzimmertisch 25");;\
fhem("set Deckenleuchte_Wohnzimmer 25");;\
fhem("set Wohnzimmerschrank on");;\\
}\
#}\
}


Dieses funktioniert soweit ganz gut. Leider schaltet sich das Licht auch immer dann ein, wenn ich eine andere Aktion durchführe (z.B. RADIO, POWER OFF).

Ich glaube, dass der Fehler nicht ganz zu schwer zu finden ist. Kann mir jemand helfen, denn ich weiß leider nicht weiter.

Danke!

Dominik

justme1968

gegenfrage: soll das licht vielleicht immer dann an dein wenn der fernseher an ist (fernsehen oder blueray) ?

dann ist es einfacher den fernseher als device anzulegen und das notify dann dort an den powerState zu hängen.


wenn du bei den notify auf die currentActivity bleiben willst: deine version geht nicht weil deine bedingung einen vergleich und eine konstante verknüpft und die konstante immer wahr ist. du musst zwei mal vergleichen und das verknüpfen. also so: if( $a eq 'x' || $a eq 'y' ) {...}

ansonsten: nimm $EVTPART statt das reading noch mal per ReadingsVal abzufragen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dascrip

Hallo Andre,

ja, im Moment hast Du recht, es soll das Licht angehen, wenn der Fernseher an. Aber ich möchte das gerne an die Harmony koppeln und nicht an den Fernseher, da ich mit dem Hub noch mehr vorhabe ;->

Leider verstehe ich nicht ganz, was Du meinst mit
Zitatdeine version geht nicht weil deine bedingung einen vergleich und eine konstante verknüpft und die konstante immer wahr ist
meinst.

Ich meine zu programmiert haben, dass der Variablen: my $Logitech_hub = ReadingsVal("hub", "currentActivity", "unknown");;\ doch die aktuelle CurrentActivity zugewiesen wird. Wenn ich dann in der IF-Schleife diese dann mit den Konstanten 'FERNSEHEN' und 'BLUERAY WIEDERGEBEN' vergleiche, sollte doch die Bedingung nur dann eindeutig erfüllt werden.

Wo ist mein Denkfehler?

Gruß
Dominik

justme1968

der fernseher bzw. das device fernseher geht auch über den hub.

if ist keine schleife.

deine bedingung ist falsch. du hast etwas das so aussieht: if( $a eq 'x' || 'y' ) {...}

und es muss so aussehen: if( $a eq 'x' || $a eq 'y' ) {...}

deine version ist immer wahr weil das hinter dem oder eine konstante ist und die ist niemals falsch.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dascrip

Wunderbar. Habe ich verstanden. Danke!