Hauptmenü

[gelöst]Hilfe bei Regex

Begonnen von Klauswirn, 11 Juni 2018, 16:22:18

Vorheriges Thema - Nächstes Thema

Klauswirn

Hallo Zusammen,

ich benötige mal etwas Hilfe bei meinen Regex Ausdrücken.

Um meine Musikcover von verschiedenen Quellen anzeigen zu lassen habe ich folgendes, was aktuell funktioniert:

<div data-size="120px" data-type="image" data-device="htpc" data-get="thumbnail" data-hide="currentTrack" data-hide-on="[1-9]?[1-9]" data-substitution='["image://","","%3a",":","%2f","/","%20"," ",".png/",".png"]'></div>
<div data-size="120px" data-type="image" data-device="htpc" data-get="thumbnail" data-hide="currentAlbum" data-hide-on="" data-substitution='["image://","http://192.178.200.200/image/image%3a%2F%2F","@","%40","b%3a","b%253a","%2f","%252f","mp3/","mp3%2F"]'></div>



Die erste Zeile funktioniert bei mir prima, wenn ich Online Radio via Stream über meinen Raspi mit KODI höre.
Die zweite Zeile funktioniert wenn ich über KODI meine lokale Musik (Mp3s) abspiele.

Mit "data-hide" lasse ich immer nur ein IMAGE anzeigen.

Kann ich diese beiden Zeilen eventuell zusammenfassen? Also eine Zeile mit einem REGEx der für beide Url funktioniert?
Bin leider kein Profi was Regex angeht. Sieht man wohl auch an meiner Bastelllösung ;-)

Würde mich über Hinweise und Tips freuen.

Versucht hatte ich schon beide Ausdrücke in den eckigen Klammern durch "?" oder "|" zu trennen, leider ohen Erfolg.

VG Klaus

mumpitzstuff

Wie soll das gehen?

Du suchst in beiden Fällen nach image:// und ersetzt es im 1. Fall zu nichts und im zweiten zu einer Url. Ohne Zusatzinformation wird es kaum Möglich sein den einen vom anderen Fall zu unterscheiden.

Klauswirn

Könnte ich denn die Regex Ausdrücke in eine Variablen schreiben, je nachdem welcher Fall eintritt und diese dann nutzen?

Mein Problem ist das, wenn ich die Images nicht ausblende steht dort ein leerer Rahmen mit img drin.

Im Endeffekt möchte ich drei Images haben, wovon immer nur eins alleine sichtbar sein soll.
Zweimal kommen die Cover vom Kodi, einmal vom Denon Heos System.
Daher fehlt mir die Idee wie ich das Abfrage.
Alle Images stehen an der selben stelle, Ort, und symbolisieren auch gleichzeitig die aktuelle Quelle.

Das die strings so komisch aussehen liegt daran, dass diese einmal eine URL aus dem Web und einmal eine URL einer lokalen NAS hat. Daher muss ich das so komisch abfragen.

VG Klaus

mumpitzstuff

Vielleicht verstehe ich ja deine Ausführungen einfach nicht aber grundsätzlich müssen Dinge sich unterscheiden, um verschiedene Dinge machen zu können. Und der string image:// ist beide Male Tupfengleich. Da kann man so nichts draus ableiten.
Das ist genauso wenn ich die Zwillinge vorstelle die genau gleich aussehen und sage der eine heisst Max und der andere Moritz und du sollst mir sagen wer wer ist.

Klauswirn

Das ist anscheinend mein Hauptproblem.

Ich habe folgende Situation:

Ich habe zwei Quellen für meine Musik.

Einmal meinen Raspi wo Kodi läuft.
Hier höre ich OnlineRadio und meine lokale MP3 Sammlung.

Der String für die Thumbnails unterscheidet sich bei diesen beiden Varianten schon voneinander.

Daher benötige ich zwei verschiedene data-substitution um die Musikcover richtig anzuzeigen.
<div data-size="120px" data-type="image" data-device="htpc" data-get="thumbnail" data-hide="currentTrack" data-hide-on="[1-9]?[1-9]" data-substitution='["image://","","%3a",":","%2f","/","%20"," ",".png/",".png"]'></div>
<div data-size="120px" data-type="image" data-device="htpc" data-get="thumbnail" data-hide="currentAlbum" data-hide-on="" data-substitution='["image://","http://192.178.200.200/image/image%3a%2F%2F","@","%40","b%3a","b%253a","%2f","%252f","mp3/","mp3%2F"]'></div>



Nun habe ich noch eine weitere MusikQuelle. Meinen AVR Receiver von Denon.
Da höre ich auch OnlineRadio über HEOS.

<div data-size="120px" data-type="image" data-device="HEOSPlayer" data-get="currentImageUrl" data-hide="playStatus" data-hide-on="stop"></div>

Alle drei "Images" sollen an der selben Stelle erscheinen und immer nur einer davon soll sichtbar sein.
Leider habe ich keinen gemeinsamen Punkt für eine Abfrage, wo ich alle drei Fälle eindeutig unterscheiden kann.

Könnte ich die beiden oberen data-substitution zu einem zusammenfassen, dann wäre es ein leichtes über die Quelle die images ausblenden zu lassen.

Hier mal die unterschiedlichen Strings, für Mp3 und für Onlineradio, welche die Cover anzeigen.
MP3:
image://music@smb%3a%2f%2fRoutername%2fPfadeins%2fPfadzwei%2fiTunes%2fMediatheke%2fMusic%2fCompilations%2fAlbumname%20Albumnamezusatz%2f01%20Liedtitel.mp3/
Das sollte rauskommen:
image://music@smb://Routername/Pfadeins/Pfadzwei/iTunes/Mediatheke/Music/Compilations/Albumname Albumnamezusatz/01 Liedtitel.mp3/

OnlineMusik:
image://http%3a%2f%2fstatic.rad.io%2fimages%2fbroadcasts%2f4e%2f0d%2f1382%2f1%2ft175.png/
Das sollte rauskommen:
http://static.rad.io/images/broadcasts/4e/0d/1382/1/t175.png
Vielleicht hat ja jemand eine gute Idee.

Prof. Dr. Peter Henning

ZitatKönnte ich denn die Regex Ausdrücke in eine Variablen schreiben, je nachdem welcher Fall eintritt und diese dann nutzen?

Klar geht das. https://www.regular-expressions.info/named.html

LG

pah

amenomade

Warum packst Du das nicht in einem Dummy oder einem Reading / userReading (den Du mit DOIF oder notify oder was auch immer ausfüllst), und machst Du nicht dann ein einziges div image?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Klauswirn

Zitat von: amenomade am 12 Juni 2018, 19:37:06
Warum packst Du das nicht in einem Dummy oder einem Reading / userReading (den Du mit DOIF oder notify oder was auch immer ausfüllst), und machst Du nicht dann ein einziges div image?
Weil mir dazu gerade ein Ansatz fehlt.
Stehe wohl etwas auf dem Schlauch.


Klauswirn

Was wäre denn die richtige/elegantere Lösung?

Dummy oder Notify?

Mein Ansatz wäre folgender:

Ich baue mir einen Dummy, welcher mehere Zustände in einem Reading abspeichert.
state= 1
state= 2
state= 3

Diese werden wie folgt gewählt:

if DenonReceiver:input=OnlineMusic  =>  dann setze auf "State = 1"
else if DenonReceiver:input=KODI  => 
                 if Kodi:songid="leer"  =>  dann "State = 2"
               else if  => dann "State = 3"

In meinem TabletUI kann ich dann auf das Dummy Device mit den passenden States die Dinge ein-/ausblenden wie ich es benötige.

Jetzt muss ich noch rausfinden wie ich das umsetze.

Passt das oder liege ich irgendwo falsch?#

VG Klaus


Klauswirn

Ich habe es nun mit folgemdem versucht:

Dummy angelegt:
define test1dummy dummy

und notify angelegt mit:
define VERSTECKEN_1 notify IF ([DenonX3400H:input] eq "OnlineMusic" (set test1dummy 1) ELSEIF ([DenonX3400H:input] eq "Mediaplayer" and [htpc:songid] eq "" (set test1dummy 2)) ELSE (set testdummy 3)

Es wird aber der State vom test1dummy nicht geändert :-(

Kann jemand helfen?

Otto123

#10
Ja :)
define VERSTECKEN_1 notify IF  ....

Falscher Syntax - kein pattern! Bzw. würde das notify triggern ein Event auf dem Gerät  IF kommt  ::)
War sicher nicht so gedacht.

Zitat commandref
Zitatdefine <name> notify <pattern> <command>

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Klauswirn

#11
Argh,

ich weiss nicht genau was ich ändern muss.

in meinem notify innerhalb vom DEF steht jetzt
IF ([DenonX3400H:input] eq "OnlineMusic" (set test1dummy 1) ELSEIF ([DenonX3400H:input] eq "Mediaplayer" and [htpc:songid] eq "" (set test1dummy 2)) ELSE (set testdummy 3)

wo muss das Pattern noch dazu?

Edith:
So etwa?

define VERSTECKEN_1 notify (1|2|3) IF ([DenonX3400H:input] eq "OnlineMusic" (set test1dummy 1) ELSEIF ([DenonX3400H:input] eq "Mediaplayer" and [htpc:songid] eq "" (set test1dummy 2)) ELSE (set testdummy 3)

Otto123

Da nimmst Du am Besten den Event Monitor suchst Dir das Ereignis welches Dein notify triggern soll und lässt Dir die Grundlage direkt im Event Monitor erzeugen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Zitat von: Klauswirn am 13 Juni 2018, 12:08:26
Edith:
So etwa?

define VERSTECKEN_1 notify (1|2|3) IF ([DenonX3400H:input] eq "OnlineMusic" (set test1dummy 1) ELSEIF ([DenonX3400H:input] eq "Mediaplayer" and [htpc:songid] eq "" (set test1dummy 2)) ELSE (set testdummy 3)
Du hast mit notify noch gar nichts gemacht?  :o siehe #12
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Klauswirn

Zitat von: Otto123 am 13 Juni 2018, 12:13:37
Du hast mit notify noch gar nichts gemacht?  :o siehe #12

Ja ich muss mich da wohl mal einlesen ;-)
Sonst nehme ich auch gerne ne schnelle Lösung  ;)