DOIF Rexex Maskierung von eckigen Klammern

Begonnen von ToM_ToM, 16 April 2017, 12:40:01

Vorheriges Thema - Nächstes Thema

ToM_ToM

Hallo Zusammen,

ich versuche gerade reguläre Ausdrücke mit DOIF zu verwenden, bekomme jedoch eine Fehlermeldung:

Reading-Wert von Sonos:MasterPlayer:
['Sonos_Badezimmer']

DOIF-Ausschnitt:
([vccu_Btn5:?ON|OFF] and [?vccu_Btn5:virtActTrigType] eq "short_Release" and [?Sonos_Badezimmer:transportState] ne "PLAYING") (set [Sonos:MasterPlayer:\['(.*)'\]:$1] Play)

Fehler:
Wandtaster3_Btn1 DOIF: unknown expression format: \['(.*)'\]:$1

Mein Ziel war es, dass ich mir immer den Masterplayer aus dem Sonos Device auslese und den dann mit dem Schalter steuern kann.
Muss ich in DOIF anders maskieren?

Vielen Dank für eure Hiilfe und frohe Ostern! :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

automatisierer

Das hier ist schon mal alte Syntax für die Eventauswertung:
[vccu_Btn5:?ON|OFF]
das sollte so heute nicht mehr verwendet werden.

Willst du nur einen Teil des Readings-Wert von Sonos:MasterPlayer: verwenden oder das komplette Reading?

Wenn du das Reading komplett brauchst, dann einfach:
(set [Sonos:MasterPlayer] Play)



ToM_ToM

Hallo automatisierer,

vielen Dank für die schnelle Antwort, aber ich möchte nur einen Teil verwenden. Deshalb ja die Frage mit dem REGEX.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Damian

Zitat[Sonos:MasterPlayer:\['(.*)'\]:$1]

Du musst die regex-Angabe in Anführungszeichen setzen, also eher:

[Sonos:MasterPlayer:"\['(.*)'\]"]

$1 kannst du in dem Fall auch weglassen.

siehe:

https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToM_ToM

Hi Damian,

das mit den Anführungszeichen hatte ich auch probiert. Aber ich hatte hier die Perl-Maskierung nicht bedacht.

So geht's jetzt:

set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Play

Vielen Dank! :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Ich habe das jetzt soweit ersetzt, aber ein Problem habe ich noch:

Wie kann ich den "transportState" des Master-Players auslesen?

So klappt es leider nicht.
([vccu_Btn5:"ON|OFF"] and [vccu_Btn5:virtActTrigType:"(short_Release)"] and [[Sonos:MasterPlayer:"\[\'(.*)\'\]"]:transportState] ne "PLAYING")
   (set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Play)
DOELSEIF ([vccu_Btn5:"ON|OFF"] and [vccu_Btn5:virtActTrigType:"(short_Release)"] and [[Sonos:MasterPlayer:"\[\'(.*)\'\]"]:transportState:"(PLAYING)"])
   (set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Pause)


Da kommt der Fehler:
Wandtaster3_Btn1 DOIF: wrong time format: :transportState


Hier mal eingerückt der bisher angepassete Original-Code der funktioniert.
([vccu_Btn5:"ON|OFF"] and [vccu_Btn5:virtActTrigType:"(short_Release)"] and [Sonos_Badezimmer:transportState] ne "PLAYING")
   (set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Play)
DOELSEIF ([vccu_Btn5:"ON|OFF"] and [vccu_Btn5:virtActTrigType:"(short_Release)"] and [Sonos_Badezimmer:transportState:"(PLAYING)"])
   (set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Pause)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Damian

[[Sonos:MasterPlayer:"\[\'(.*)\'\]"]:transportState]

ineinander schachteln geht nicht, doppelte eckige Klammern gibt's nur bei indirekten Timern
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToM_ToM

Hm... und wenn ich das richtig sehe, kann ich nur im Ausführungsteil Perlcode verwenden um mir das Reading mit ReadingsVAL(...) einzulesen.
Da ich es aber schon im Ereignisteil bräuchte, habe ich wohl ein Problem.
Dann muss ich mir wohl was mit nem Dummy basteln.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Falls es jemanden interessiert...
hier meine funktionierende Lösung:

([vccu_Btn5:"ON|OFF"] and [vccu_Btn5:virtActTrigType:"(short_Release)"]) ({my $masterPlayer = ReadingsVal("Sonos", "MasterPlayer", ""); $masterPlayer =~ s/\[\'(.*)\'\]/$1/g; {if (ReadingsVal($masterPlayer, "transportState", "") ne "PLAYING") {fhem("set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Play")} else {fhem("set [Sonos:MasterPlayer:"\[\'(.*)\'\]"] Pause")}}})

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8