FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: d0m2011 am 13 Januar 2019, 13:21:59

Titel: RegEx: Nur Abfahrtzeiten aus "Departure"
Beitrag von: d0m2011 am 13 Januar 2019, 13:21:59
Hallo zusammen,

ich nutze gerade das PlugIn Departure um meine Abfahrtzeiten auf meinem Tablet Ui anzuzeigen.
Mich stört, dass beide Richtungen der Haltestelle angezeigt werden und, dass die Optik nicht ganz zu meinem Layout passt.
Daher würde ich gerne nur die Abfahrtzeiten (verbleibende Minuten), wirklich nur die Zahl, einzeln mit RegEx extrahieren.

Nur leider bekomme ich es nicht ganz hin.
Folgender Input steht zu Verfügung:
[["6","Hans-Löffler-Straße","14"],["6","Barbarossaplatz","16"],["6","Hans-Löffler-Straße","34"],["6","Barbarossaplatz","36"],["6","Hans-Löffler-Straße","54"],["6","Barbarossaplatz","56"],["6","Hans-Löffler-Straße","74"],["6","Barbarossaplatz","76"],["6","Hans-Löffler-Straße","94"],["6","Barbarossaplatz","96"]]

Die Daten hole ich von hier:
https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=220211&provider=Bahn (https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=220211&provider=Bahn)

Nun möchte ich nur die Abfahrtzeit bzw. verbleibenden Minuten Richtung Barbarossaplatz.
-> Kann ich nicht nach Barbarossaplatz suchen die Zahl danach ausgeben?
["6","Barbarossaplatz","16"]

Hoffe ihr könnt mir helfen denn mit RegEx komme ich nicht klar.

Grüße und Danke euch.
Titel: Antw:RegEx: Nur Abfahrtzeiten aus "Departure"
Beitrag von: KernSani am 13 Januar 2019, 14:28:30
Ich würde mal sowas probieren:


Barbarossaplatz".*?"(.*?)"


und dann auf https://regex101.com/ gehen und üben ;-)
Titel: Antw:RegEx: Nur Abfahrtzeiten aus "Departure"
Beitrag von: crusader am 13 Januar 2019, 15:38:10
Zitat von: d0m2011 am 13 Januar 2019, 13:21:59

Folgender Input steht zu Verfügung:
[["6","Hans-Löffler-Straße","14"],["6","Barbarossaplatz","16"],["6","Hans-Löffler-Straße","34"],["6","Barbarossaplatz","36"],["6","Hans-Löffler-Straße","54"],["6","Barbarossaplatz","56"],["6","Hans-Löffler-Straße","74"],["6","Barbarossaplatz","76"],["6","Hans-Löffler-Straße","94"],["6","Barbarossaplatz","96"]]

-> Kann ich nicht nach Barbarossaplatz suchen die Zahl danach ausgeben?
["6","Barbarossaplatz","16"]


Klar:
my ($waittime) = ($input =~ /\["6","Barbarossaplatz","(\d+)"\]/)

Titel: Antw:RegEx: Nur Abfahrtzeiten aus "Departure"
Beitrag von: d0m2011 am 13 Januar 2019, 17:38:10
Ah sehr gut, vielen Dank.
Eigentlich genügt ja nur eine Abfahrtzeit, also die nächste.

Ich finde das Tool Departure ja eigentlich gar nicht schlecht.
Nur leider aktualisiert es sich nicht am Tablet. Wenn dann muss immer die komplette Seite neu geladen werden.
Titel: Antw:RegEx: Nur Abfahrtzeiten aus "Departure"
Beitrag von: fhemtobi am 06 Februar 2019, 18:23:33
Hi zusammen,

da mir das Forum immer sehr geholfen hat, möchte ich auch mal was zurückgeben.

Ich stand auch vor dem Problem "nur eine Linie" & "nur eine Richtung".

Ich habe es statt mit einem RegEx mit JS direkt im DIV gelöst. Dann nutzt man zwar ein neues, eigenes Widget und nicht das Departure - für mich aber völlig ausreichen und man kann es ja noch stylen. Ich brauche es, damit ganz prominent oben im Tablet-UI die nächsten 2-3 Abfahrtzeiten stehen damit ich weiß, dann ich losgehen muss.

Anforderung:
- Anzeige der nächsten Abfahreszeiten in Minuten
- Nur eine Linie ("4")
- Nur eine Richtung. Allerdings können die Endhaltestellen unterschiedlich sein
- Was immer gleich ist, ist die Endhaltestelle der Gegenrichtung ("Schlebusch")

Lösung:
- Ich habe das JSON zuerst nur nach Linie 4 gefiltert
- Dann habe ich noch nach nicht-gleich "Schlebusch" gefiltert, damit ich alle Abfahren der Gegenrichtung bekomme
- Das ganze funktioniert ganz gut, jetzt brauche ich nur noch einen auto-refresh der Daten einbauen und dann ist's schick :-)

Ich hoffe ich kann mit dem Code dem einen oder anderen helfen.


<table>
<tr>
<td>
<div class="big">Linie 4 kommt in:
</div>
</td>
<td>
<div class="big" data-type="label" data-device="kvb" data-get="Leuchterstr" data-substitution="
parseJson().filter(entry => entry[0] == 4 && entry[1] != 'Schlebusch' ).map(function(item,index) {
return item[2] }) + ' min'" class="">
</div>
</td>
</tr>
</table>


Grüße