Hauptmenü

Notify Regexp Hilfe

Begonnen von LeoSum, 21 Januar 2017, 10:31:57

Vorheriges Thema - Nächstes Thema

LeoSum

Hallo zusammen,

ich habe aktuell folgendes DOIF, welches ein Play/Pause Signal an MPD schickt, wenn aktuell keiner meiner Snapcast Streaming Clients auf den Stream zugreift:

define ControlRadioStream notify (
( [Snapcast:clients_10683f4bbc45_stream] eq 'Radio' and [Snapcast:clients_10683f4bbc45_muted] eq 'false') or
( [Snapcast:clients_b827eba67a7b_stream] eq 'Radio' and [Snapcast:clients_b827eba67a7b_muted] eq 'false') or
( [Snapcast:clients_b827ebf7cfac_stream] eq 'Radio' and [Snapcast:clients_b827ebf7cfac_muted] eq 'false') or
( [Snapcast:clients_a00bbac5d04c_stream] eq 'Radio' and [Snapcast:clients_a00bbac5d04c_muted] eq 'false')
)
(set raspiMPD playlist radio) DOELSE (set raspiMPD stop)


Wie ihr seht, muss ich jeden einzelnen Client explizit hinzufügen.

Kann man das generischer mit einer RegExp hinbekommen?

Wuppi68

Zitat von: LeoSum am 21 Januar 2017, 10:31:57
Hallo zusammen,

ich habe aktuell folgendes DOIF, welches ein Play/Pause Signal an MPD schickt, wenn aktuell keiner meiner Snapcast Streaming Clients auf den Stream zugreift:

define ControlRadioStream notify (
( [Snapcast:clients_10683f4bbc45_stream] eq 'Radio' and [Snapcast:clients_10683f4bbc45_muted] eq 'false') or
( [Snapcast:clients_b827eba67a7b_stream] eq 'Radio' and [Snapcast:clients_b827eba67a7b_muted] eq 'false') or
( [Snapcast:clients_b827ebf7cfac_stream] eq 'Radio' and [Snapcast:clients_b827ebf7cfac_muted] eq 'false') or
( [Snapcast:clients_a00bbac5d04c_stream] eq 'Radio' and [Snapcast:clients_a00bbac5d04c_muted] eq 'false')
)
(set raspiMPD playlist radio) DOELSE (set raspiMPD stop)


Wie ihr seht, muss ich jeden einzelnen Client explizit hinzufügen.

Kann man das generischer mit einer RegExp hinbekommen?

in einem Notify kann mann das ein wenig anders definieren ...
in einem DOIF müssen die Bedingungen bei der Definition weitestgehend bekannt sein ...

Dein Problem ist, dass Du die Player auf Radio UND not muted abfragen musst

aber da Du in Deinem Code Tag ein Notify mit meinem DOIF mischst - ist die Hilfe schwer ...

ansonsten mein Vorschlag zum Redesign:

ich würde auf Mute = false triggern --> geht mit "Snapcast:clients_.*_muted"
und wenn ein Player muted ist, dann nur noch abfragen ob es auch Radio ist
FHEM unter Proxmox als VM

LeoSum

Hallo Wuppi68,
danke dass du dir mein Problem anschaust!

Du hast natürlich Recht, die erste Zeile lautet "define ControlRadioStream notify ( ", das hatte ich falsch abgetippt weil nur der untere Teil aus dem DEF Feld kopiert wurde. Sorry!

Zu deinem Vorschlag:

Meinst du soetwas:

define ControlRadioStream notify Snapcast:clients_.*_muted:false IF ([Snapcast:clients_.*_stream] eq 'Radio') (set raspiMPD playlist radio)

Das würde doch aber nach meinem Verständnis auch die Wiedergabe starten, wenn 10683f4bbc45_muted 'false' wird und irgendein anderer auf Radio steht, aber auf muted 'true' steht, oder?

Wuppi68

Zitat von: LeoSum am 24 Januar 2017, 08:50:12
Hallo Wuppi68,
danke dass du dir mein Problem anschaust!

Du hast natürlich Recht, die erste Zeile lautet "define ControlRadioStream notify ( ", das hatte ich falsch abgetippt weil nur der untere Teil aus dem DEF Feld kopiert wurde. Sorry!

Zu deinem Vorschlag:

Meinst du soetwas:

define ControlRadioStream notify Snapcast:clients_.*_muted:false IF ([Snapcast:clients_.*_stream] eq 'Radio') (set raspiMPD playlist radio)

Das würde doch aber nach meinem Verständnis auch die Wiedergabe starten, wenn 10683f4bbc45_muted 'false' wird und irgendein anderer auf Radio steht, aber auf muted 'true' steht, oder?

Jetzt triggerst Du auf muted = false

im Ausführungsteil musst Du jetzt "nur" noch den getriggerten Device Namen ermitteln und dann den aktuellen Status auswerten. So aus dem Kopf müsste dieser $DEVICE heißen - also ohne Perl wird es vermutlich nicht gehen
FHEM unter Proxmox als VM