DOIF, XBMC und PIONEER -> leeres reading ignorieren

Begonnen von LarsMie, 01 Januar 2016, 23:23:01

Vorheriges Thema - Nächstes Thema

LarsMie

Hi,

ich habe meinen Pioneer-AVR mit einem DOIF so Automatisiert, dass bei bestimmten Kanälen und/oder wenn Musk abgespielt wird, Radio läuft oder ein Film abgespielt wird, der "listeningMode" (Stereo, Direct, Surround usw.) automatisch umgeschaltet wird. Mir ist beim hören von Live-Alben aufgefallen, dass mein AVR zwischen den liedern kurz zwischen "direct" und "standard" umschaltet, was in einer kurzen Unterbrechung der Musik resultiert. Das ganze hängt damit zusammen, dass das Reading "type" vom XBMC-Modul beim wechseln zum nächten Lied leer ist und somit für das DOIF ein zustandswechsel eingetreten ist.

Ich habe jetzt mit ein paar IF-Zuständen experimetiert, habe aber nicht das gewünschte Ergebnis bekommen. Ich möchte verhindern, dass der AVR in einem solchen Fall nicht den listeningMode ändert. Das möchte ich entweder dadurch erreichen, dass das leere Reading ignoriert wird, sei es durch ein UserReading welches das filtert oder in den DOIFs direkt. (ein versuch mit [...:...] ne "" hat nicht funktioniert)

Hier mal mein aktueller DOIF code:


([Media_Center:type] eq "song" and [VSX924:input] eq ("kodiXbmc" or "bd")) (set VSX924 listeningMode direct) \
DOELSEIF ([VSX924:input] eq "tuner" or ([Media_Center:currentMedia] eq "plugin://plugin.audio.radio_de/station/1382" and [VSX924:input] eq ("kodiXbmc" or "bd")) or [Media_Center:type] eq "unknown") (set VSX924 listeningMode action) \
DOELSE (set VSX924 listeningMode standard)



Vielleicht hat ja einer nen Tipp für mich

Damian

Zitat von: LarsMie am 01 Januar 2016, 23:23:01
Hi,

ich habe meinen Pioneer-AVR mit einem DOIF so Automatisiert, dass bei bestimmten Kanälen und/oder wenn Musk abgespielt wird, Radio läuft oder ein Film abgespielt wird, der "listeningMode" (Stereo, Direct, Surround usw.) automatisch umgeschaltet wird. Mir ist beim hören von Live-Alben aufgefallen, dass mein AVR zwischen den liedern kurz zwischen "direct" und "standard" umschaltet, was in einer kurzen Unterbrechung der Musik resultiert. Das ganze hängt damit zusammen, dass das Reading "type" vom XBMC-Modul beim wechseln zum nächten Lied leer ist und somit für das DOIF ein zustandswechsel eingetreten ist.

Ich habe jetzt mit ein paar IF-Zuständen experimetiert, habe aber nicht das gewünschte Ergebnis bekommen. Ich möchte verhindern, dass der AVR in einem solchen Fall nicht den listeningMode ändert. Das möchte ich entweder dadurch erreichen, dass das leere Reading ignoriert wird, sei es durch ein UserReading welches das filtert oder in den DOIFs direkt. (ein versuch mit [...:...] ne "" hat nicht funktioniert)

Hier mal mein aktueller DOIF code:


([Media_Center:type] eq "song" and [VSX924:input] eq ("kodiXbmc" or "bd")) (set VSX924 listeningMode direct) \
DOELSEIF ([VSX924:input] eq "tuner" or ([Media_Center:currentMedia] eq "plugin://plugin.audio.radio_de/station/1382" and [VSX924:input] eq ("kodiXbmc" or "bd")) or [Media_Center:type] eq "unknown") (set VSX924 listeningMode action) \
DOELSE (set VSX924 listeningMode standard)



Vielleicht hat ja einer nen Tipp für mich

Mit dieser Version hier http://forum.fhem.de/index.php/topic,46327.0.html

kannst du das Attribut notexist setzen und damit das Problem in den Griff bekommen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

LarsMie

#2
Danke, genau das hat geholfen!

Schön sauber ohne einen mucks von gap.

Ne Frage, wenn ich nun das nächste update mache, wird dann die DOIF mit der aktuelleren version überschireben?


Edit: sieht jetzt so aus für jemanden der in zukunft suchen sollte:


([Media_Center:type] eq "song" and [VSX924:input] eq ("kodiXbmc" or "bd")) (set VSX924 listeningMode direct)\
DOELSEIF (([VSX924:input] eq "tuner") or ([Media_Center:currentMedia] eq "plugin://plugin.audio.radio_de/station/1382" and [VSX924:input] eq ("kodiXbmc" or "bd")) or ([VSX924:input] eq ("kodiXbmc" or "bd") and [Media_Center:type] eq "unknown")) (set VSX924 listeningMode action) \

DOELSEIF ([Media_Center:type] eq novalue) \

DOELSE (set VSX924 listeningMode standard)


mit Anführungszeichen gehts nicht.

DOELSEIF ([Media_Center:type] eq novalue)

und zusätzlich noch einen screenshot

Damian

#3
Zitat von: LarsMie am 02 Januar 2016, 20:23:51
Danke, genau das hat geholfen!

Schön sauber ohne einen mucks von gap.

Ne Frage, wenn ich nun das nächste update mache, wird dann die DOIF mit der aktuelleren version überschireben?


Edit: sieht jetzt so aus für jemanden der in zukunft suchen sollte:


([Media_Center:type] eq "song" and [VSX924:input] eq ("kodiXbmc" or "bd")) (set VSX924 listeningMode direct)\
DOELSEIF (([VSX924:input] eq "tuner") or ([Media_Center:currentMedia] eq "plugin://plugin.audio.radio_de/station/1382" and [VSX924:input] eq ("kodiXbmc" or "bd")) or ([VSX924:input] eq ("kodiXbmc" or "bd") and [Media_Center:type] eq "unknown")) (set VSX924 listeningMode action) \

DOELSEIF ([Media_Center:type] eq novalue) \

DOELSE (set VSX924 listeningMode standard)


mit Anführungszeichen gehts nicht.

DOELSEIF ([Media_Center:type] eq novalue)

und zusätzlich noch einen screenshot

Dann stimmt da was nicht. Ein Vergleich per eq muss mit Anführungszeichen sein (das ist Perl), sonst gibt es eine Fehlermeldung (siehe error-Reading) und das Kommando wird nicht ausgeführt.

Den Reading musst du nicht zusätzlich im DOELSEIF abfragen, wenn er nicht da ist, dann wird er mit "novalue" im ersten DO-Fall bereits belegt.

Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

LarsMie

Du hast recht, im DOIF war ein error zu sehen.

Habe jetzt das DOELSEIF entfernt welches mit novalue-abfrage war. Jetzt ist das Problem wieder da.

Habe noch nicht so recht verstanden, wie ich das jetzt anwenden soll.

Wenn ich jetzt das atteribut notexist mit novalue initialisiere, wird dann das leere reading mit "novalue" ersetzt oder was passiert da genau?

Damian

Zitat von: LarsMie am 03 Januar 2016, 02:56:05
Du hast recht, im DOIF war ein error zu sehen.

Habe jetzt das DOELSEIF entfernt welches mit novalue-abfrage war. Jetzt ist das Problem wieder da.

Habe noch nicht so recht verstanden, wie ich das jetzt anwenden soll.

Wenn ich jetzt das atteribut notexist mit novalue initialisiere, wird dann das leere reading mit "novalue" ersetzt oder was passiert da genau?

Bei notexist wird bei  Nicht-Vorhandensein eines Readings keine Fehlermeldung wie bisher geliefert, sondern das Reading wird mit dem angegebenen Wert vorbelegt.

Bei dir scheint aber das Reading immer da zu sein. In dem Fall bräuchtest du es, wenn es leer wird, nur mit eq "" abzufragen, das funktioniert auch mit der aktuellen Version.

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

LarsMie

puh,

nach ein paar versuchen habe ich das jetzt so gelöst:


([Media_Center:type] eq "")\
DOELSEIF ([Media_Center:type] eq "song" and [VSX924:input] eq ("kodiXbmc" or "bd") and [VSX924:listeningMode] ne "direct") (set VSX924 listeningMode direct)\
DOELSEIF (([VSX924:input] eq "tuner") or ([Media_Center:currentMedia] eq "plugin://plugin.audio.radio_de/station/1382" and [VSX924:input] eq ("kodiXbmc" or "bd")) or ([VSX924:input] eq ("kodiXbmc" or "bd") and [Media_Center:type] eq "unknown")) (set VSX924 listeningMode action) \
DOELSEIF ([Media_Center:type] ne ("song" or "unknown" or "") or [VSX924:input] ne "kodiXbmc") (set VSX924 listeningMode standard)

Damian

Zitat von: LarsMie am 03 Januar 2016, 11:34:53
puh,

nach ein paar versuchen habe ich das jetzt so gelöst:


([Media_Center:type] eq "")\
DOELSEIF ([Media_Center:type] eq "song" and [VSX924:input] eq ("kodiXbmc" or "bd") and [VSX924:listeningMode] ne "direct") (set VSX924 listeningMode direct)\
DOELSEIF (([VSX924:input] eq "tuner") or ([Media_Center:currentMedia] eq "plugin://plugin.audio.radio_de/station/1382" and [VSX924:input] eq ("kodiXbmc" or "bd")) or ([VSX924:input] eq ("kodiXbmc" or "bd") and [Media_Center:type] eq "unknown")) (set VSX924 listeningMode action) \
DOELSEIF ([Media_Center:type] ne ("song" or "unknown" or "") or [VSX924:input] ne "kodiXbmc") (set VSX924 listeningMode standard)



([Media_Center:type] ne ("song" or "unknown" or "")
diese Syntax gibt es nicht, wenn schon dann so:

([Media_Center:type] ne "song" or  [Media_Center:type] ne "unknown" or [Media_Center:type] ne "")

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

LarsMie

Zitat von: Damian am 03 Januar 2016, 12:04:10

([Media_Center:type] ne ("song" or "unknown" or "")
diese Syntax gibt es nicht, wenn schon dann so:

([Media_Center:type] ne "song" or  [Media_Center:type] ne "unknown" or [Media_Center:type] ne "")

Hmm, bei mir klappt das aber, der AVR wechelt bei typ movie oder bei einem anderen input auf standard

Damian

Zitat von: LarsMie am 03 Januar 2016, 12:07:19
Hmm, bei mir klappt das aber, der AVR wechelt bei typ movie oder bei einem anderen input auf standard

dann ist es Zufall.

denn bei

([Media_Center:type] ne ("song" or "unknown" or "")

wird Media_Center:type mit dem Ergebnis einer Wahrheitsaussage ("song" or "unknown" or "") verglichen, die immer wahr ist.

Dann kannst du auch gleich schreiben ([Media_Center:type] ne "1")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF