Gelöst! IF Befehl klappt nicht

Begonnen von Marc1993, 08 Mai 2014, 09:36:52

Vorheriges Thema - Nächstes Thema

Marc1993

Hallo,

ich bin dabei nun mein Yamaha Verstärker in FHEM zu integrieren. Klappt soweit ganz gut. Jetzt möchte ich in FHEM Anzeigen lassen was der Yamaha grade Abspielt. Siehe Anhang. Das obere "Now Playing" soll nur angezeigt werden wenn ich Radio höre. Das untere wenn ich etwas über AirPlay wiedergebe.

Hier ist mal der Auszug auf der conf Datei.

define AV_Receiver YAMAHA_AVR 192.168.178.20 mainzone 10
attr AV_Receiver alias Verstärker
attr AV_Receiver devStateIcon on:general_an off:general_aus
attr AV_Receiver event-on-change-reading input
attr AV_Receiver group AV-Receiver
attr AV_Receiver icon it_radio
attr AV_Receiver model HTR-4065
attr AV_Receiver room Wohnung
attr AV_Receiver sortby 1
attr AV_Receiver volume-smooth-change 1
attr AV_Receiver webCmd volumeStraight:input

define AV_Receiver_AirPlay readingsGroup AV_Receiver:currentTitle  AV_Receiver:currentArtist  AV_Receiver:currentAlbum
attr AV_Receiver_AirPlay alias Now Playing:
attr AV_Receiver_AirPlay group AV-Receiver
attr AV_Receiver_AirPlay mapping {'currentTitle' => 'Titel', 'currentAlbum' => 'Album', 'currentArtist' => 'Artist'}
attr AV_Receiver_AirPlay notime 1
attr AV_Receiver_AirPlay room Wohnung
attr AV_Receiver_AirPlay sortby 2

define AV_Receiver_Radio readingsGroup AV_Receiver:currentTitle AV_Receiver:currentStation
attr AV_Receiver_Radio alias Now Playing:
attr AV_Receiver_Radio group AV-Receiver
attr AV_Receiver_Radio mapping {'currentTitle' => 'Titel', 'currentStation' => 'Sender'}
attr AV_Receiver_Radio notime 1
attr AV_Receiver_Radio room Wohnung
attr AV_Receiver_Radio sortby 2

define AV_Receiver_stat1 notify (AV_Receiver:input) { IF ([AV_Receiver:input] eq "airplay") (attr AV_Receiver_AirPlay room Wohnung) ELSE (attr AV_Receiver_AirPlay room hidden)}


Dort ist jetzt nur die IF Anweisung für AirPlay drinnen. Aber sie funktioniert nicht. Versuch das jetzt schon 2 Tage :/
Jemand ne Idee?

LG

michaelfhem

Ein großes "IF" ist ein FHEM-Befehl, ein kleines "if" ist ein perl-Befehl. Code innerhalb {} Klammern ist aber Perlcode. Beides zusammen geht meines Wissens nicht. Also entweder {} Klammern weg oder if/else klein.

Grüße Michi
raspberry Pi 3 + jessie + fhem
Devices: Fritz Dect 200, Homematic (HMLan-Gateway), FS20 (CUL-Stick), Hue-Gateay, Sonos

Marc1993

Danke. Hab es geändert, aber es geht immer noch nicht  :-\

Bennemannc

Hallo,

kann man das IF den überhaupt nutzen um Attribute zu setzen ? Ich hab das bisher nur für "set" gebraucht.
Kannst Du keinen DUMMY machen, der über die IF mit set on / set off bedient wird und dann die Farbe ändert ?

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Marc1993

Laut dem Manual kann man dort alle FHEM Befehle einfügen.
Habe das jetzt mal mit einem Timer Probiert. Alle 10 Sekunden prüft er ob AirPlay verwendet wird. Das klappt. Also liegt es am Notify das es nicht geht. Oder?

Bennemannc

Hallo,

wieso sind da Klammern bei dem notify
Zitatdefine AV_Receiver_stat1 notify (AV_Receiver:input)
?
Das steht in der Commandref ohne Klammern.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Marc1993

Danke, du hast recht.

define AV_Receiver_stat1 notify AV_Receiver:input { if ([AV_Receiver:input] eq "airplay") (attr AV_Receiver_AirPlay room Wohnung) else (attr AV_Receiver_AirPlay room hidden)}

Geht leider immer noch nicht :-/

hckoe

Ich denke so sollte es funktionieren:


define AV_Receiver_stat1 notify AV_Receiver:input IF ([AV_Receiver:input] eq "airplay") (attr AV_Receiver_AirPlay room Wohnung) ELSE (attr AV_Receiver_AirPlay room hidden)


Im normalen Perlcode gibt es keine Variablen, die man in der Form "[AV_Receiver:input]" schreibt, also muß man das IF von FHEM nehmen oder mit readings-Funktionen arbeiten.
Gruß Helmut
# CT mit Debian Buster / FHEM aktuell / EnOcean TCM310 / Eltako FSA12, FUD12NPN, FSB12, FRW, FSRP-230V
# Permundo PCS234, Nodon NO-SIN-2-2-00, GTAGS

michaelfhem

Um einen Wert im Perl abzufragen kannst Du die Funktion Value verwenden. Die Schreibweise mit [] kenn ich nicht (muss aber nix bedeuten, bei FHEM gibt es immer viele Wege zum Ziel, was mir auch so einige Probleme bereitet).

define AV_Receiver_stat1 notify AV_Receiver:input { if (Value("AV_Receiver:input") eq "airplay") (attr AV_Receiver_AirPlay room Wohnung) else (attr AV_Receiver_AirPlay room hidden)}

Grüße Michi
raspberry Pi 3 + jessie + fhem
Devices: Fritz Dect 200, Homematic (HMLan-Gateway), FS20 (CUL-Stick), Hue-Gateay, Sonos

Marc1993

Zitat von: michaelfhem am 08 Mai 2014, 12:21:21
Um einen Wert im Perl abzufragen kannst Du die Funktion Value verwenden. Die Schreibweise mit [] kenn ich nicht (muss aber nix bedeuten, bei FHEM gibt es immer viele Wege zum Ziel, was mir auch so einige Probleme bereitet).

define AV_Receiver_stat1 notify AV_Receiver:input { if (Value("AV_Receiver:input") eq "airplay") (attr AV_Receiver_AirPlay room Wohnung) else (attr AV_Receiver_AirPlay room hidden)}

Grüße Michi

Deine Lösung geht leider auch nicht :-/ Es muss doch eine Möglichkeit geben das ans laufen zu bekommen :/

michaelfhem

Schau Dir mal das Einsteiger pdf an. Da ist die Syntax gut beschrieben. z.B.

define Schalter1Notify notify Schalter1 { if ( Value("Schalter1") eq "off") {fhem("set wz_Media off")} }

Also bei Dir müsste das dann vermutlich so aussehen:

define AV_Receiver_stat1 notify AV_Receiver:input { if (Value("AV_Receiver:input") eq "airplay") { fhem("attr AV_Receiver_AirPlay room Wohnung")} else { fhem("attr AV_Receiver_AirPlay room)}}

übersichtlicher:

define AV_Receiver_stat1 notify AV_Receiver:input { \
   if (Value("AV_Receiver:input") eq "airplay") {\
      fhem("attr AV_Receiver_AirPlay room Wohnung");;\
   } else {\
      fhem("attr AV_Receiver_AirPlay room);;\
   }\
}
raspberry Pi 3 + jessie + fhem
Devices: Fritz Dect 200, Homematic (HMLan-Gateway), FS20 (CUL-Stick), Hue-Gateay, Sonos

Marc1993

Hey, diese Variante hatte ich auch schon probiert. Also laut dem PDF. Es geht damit leider auch nicht. Auch wenn ich deinen Eintrag kopiere.
Keine Reaktion.

Marc1993

Hier sind mal alle Statusmeldungen vom AV-Receiver:

nternals
ACTIVE_ZONE
mainzone
CHANGED
DEF
192.168.178.20 mainzone 5
FIRMWARE
1.14/1.04
MODEL
HTR-4065
NAME
AV_Receiver
NR
33
STATE
on
SYSTEM_ID
00606A53
TYPE
YAMAHA_AVR
ZONES_AVAILABLE
mainzone
Readings
currentAlbum
German Top 100 7.4.14
2014-05-07 16:10:23
currentArtist
Shakira feat. Rihanna
2014-05-07 16:10:23
currentStation
SWR3
2014-05-06 23:15:59
currentTitle
Cant Remember To Forget You
2014-05-07 16:10:23
input
airplay
2014-05-08 13:03:27
inputName
AirPlay
2014-05-08 13:03:27
mute
off
2014-05-08 13:03:27
playStatus
stop
2014-05-08 13:03:27
power
on
2014-05-08 13:03:27
presence
present
2014-05-08 13:03:22
state
on
2014-05-08 13:03:27
volume
32
2014-05-08 13:03:27
volumeStraight
-49
2014-05-08 13:03:27

michaelfhem

Hast Du gesehen das beim Copy/Paste ganz offensichtlich das "hidden" verschwunden ist? War nich beabsichtigt!

define AV_Receiver_stat1 notify AV_Receiver:input { \
   if (Value("AV_Receiver:input") eq "airplay") {\
      fhem("attr AV_Receiver_AirPlay room Wohnung");;\
   } else {\
      fhem("attr AV_Receiver_AirPlay room hidden);;\
   }\
}
raspberry Pi 3 + jessie + fhem
Devices: Fritz Dect 200, Homematic (HMLan-Gateway), FS20 (CUL-Stick), Hue-Gateay, Sonos

Marc1993

Das hatte ich bemerkt und nachgetragen. Aber keine Reaktion.