Neues FTUI Widget - Departure

Begonnen von setstate, 27 Januar 2016, 15:51:08

Vorheriges Thema - Nächstes Thema

kvo1

Zitat von: setstate am 29 Januar 2016, 08:09:59
Da muss man noch etwas optimieren an den RegEx'n, um nicht falsche Zeile zu erwischen. Gib mir mal deine Haltestellen ID, dann analysiere ich den Text nochmal.

Haltestellen ID 9049206

RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

setstate

damit sollte es gehen:


get01Regex  tbody([</\w>\n\s="&#;(:\.!\-+,)?%]*)<\/table>


Aber zur Warnung: Webseiten mit RegEx parsen ist eine unschöne Frickelei, die heute funktionieren kann und morgen schon nicht mehr. Ein eindeutiges API dafür wäre optimaler ...

kvo1

Zitat von: setstate am 29 Januar 2016, 09:52:59
damit sollte es gehen:


get01Regex  tbody([</\w>\n\s="&#;(:\.!\-+,)?%]*)<\/table>


Aber zur Warnung: Webseiten mit RegEx parsen ist eine unschöne Frickelei, die heute funktionieren kann und morgen schon nicht mehr. Ein eindeutiges API dafür wäre optimaler ...

Ja geht, Danke !
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

pernodjaegermeister

Hallo setstate,

coole Sache !!
Ich hätte es gern etwas größer, aber bei big wird nur die Schrift innerhalb des widget groß.
Die Überschrift und das icon bleiben klein und der Tabellenkopf wird überdeckt.

<div data-type="departure"
    data-device="VVO"
      data-get="Possendorf"
data-width="400"
data-height="500"
      class="DVB big"
</div>


setstate

habs etwas für 'big' optimiert
die neue ftui_departure.css ist hochgeladen

pernodjaegermeister

Zitat von: setstate am 30 Januar 2016, 01:33:22
habs etwas für 'big' optimiert
die neue ftui_departure.css ist hochgeladen
Bestens, Danke

sinus61

Übrigens gibt es das von der Bahn auch inklusive der meisten Nahverkehrsunternehmen, sogar inklusive Verspätungen wenn das von dem Unternehmen schon angeboten wird.
http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn

Leider hat die Bahn wohl noch kein API dafür, aber bevor jeder anfängt die Webseiten der lokalen Unternehmen auszuwerten wäre das eine universellere Lösung.

setstate

Zitat von: sinus61 am 12 Februar 2016, 17:37:45
Übrigens gibt es das von der Bahn auch inklusive der meisten Nahverkehrsunternehmen, sogar inklusive Verspätungen wenn das von dem Unternehmen schon angeboten wird.
http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn

Leider hat die Bahn wohl noch kein API dafür, aber bevor jeder anfängt die Webseiten der lokalen Unternehmen auszuwerten wäre das eine universellere Lösung.

wird diese Seite auch von 98_DBPlan ausgewertet? Ist 98_DBPlan schon offiziell per Fhem update verfügbar?

Risiko


sinus61

Ist das erste "ja" tatsächlich so? IMHO nutzt das 98_DBPlan eine andere Abfrage bei der man auch eine Ziel-Adresse abgeben muss, während der Link oben alle Abfahrten an einer beliebigen Haltestelle anzeigt.

Clyde

Zitat von: sinus61 am 12 Februar 2016, 17:37:45
Übrigens gibt es das von der Bahn auch inklusive der meisten Nahverkehrsunternehmen, sogar inklusive Verspätungen wenn das von dem Unternehmen schon angeboten wird.
http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn

Habe es unter dem Livestream einer Bahnhofscam als iframe eingefügt. Das ist klasse.

<li class="halbTransparent" data-row="1" data-col="1" data-sizex="8" data-sizey="6" >
<div align="center"><iframe src="http://pgoedecke.selfhost.eu:60000/index.htm" width="1110" height="525" scrolling="yes" align="top"></iframe></div>
<div align="center"><iframe src="http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=15055&rt=1&input=Rotenburg(W%FCmme)%238000321&boardType=dep&time=actual&productsFilter=11111&start=yes" width="1110" height="250" scrolling="yes" align="top"></iframe></div>
</li>


2x Cubietruck, CUL868, HM-USB-CFG2
FS20, FHT, KS300, HM, MAX, Tradfri

sbiermann

Hallo zusammen,
in dem Thread tauchte ja schon mal der Begriff "public-transport-enabler" auf. Dies ist eine sehr interessantes Projekt welches eine einheitliche Schnittstelle zu diversen Anbietern von ÖPNV anbietet unter anderem zum Beispiel die DB, BVG, SBB, MVV und viele weitere. Einige von euch kennen sicherlich die Android App "Öffi Fahrplanauskunft" (https://play.google.com/store/apps/details?id=de.schildbach.oeffi&hl=de) diese nutzt den "public-transport-enabler" (ist auch der gleiche Entwickler) um die Kommunikation zwischen App und ÖPNV Providern zu regeln. Mein Kollege hat diese "public-transport-enabler" Anwendung in einen Spring Boot REST-ähnlichen Wrapper gekapselt für ein Projekt mit dem ESP8266. Ich habe das Ganze erweitert um eine Schnittstelle für FHEM, genauer gesagt eine Schnittstelle direkt für dieses Departure Widget. Zusätzlich haben wir beide noch eingebaut das sämtliche im "public-transport-enabler" enthaltenen Provider genutzt werden können.
Dadurch das die Anwendung Spring Boot nutzt kann diese auf jeden Rechner mit Java 8 zum laufen gebracht werden. Alternativ kann man auch die Anwendung in einer Cloud hosten und somit für viele Leute bereit stellen. Ich hab die Anwendung bei Openshift gehostet, der Vorteil es ist dort kostenlos und vollkommen ausreichend, Nachteile sind, das Rechenzentrum liegt irgendwo an der Ostküste der USA (langer Weg für die Daten) und es kann sein das die Anwendung hin und wieder schläft, dann dauern die Requests ein paar Sekunden länger.

So lange Rede kurzer Sinn, wie kann man das Ganze nun mit diesem Departure Widget nutzen? Nachfolgend ein How-To am Beispiel der VAG Freiburg:

1. Ermitteln welche Provider gibt es und welcher ist für mich zuständig.

http://transportrest-sbiermann.rhcloud.com/provider

dieses liefert als Antwort im JSON Format:

[{"name":"Vmv","aClass":"VmvProvider"},{"name":"Vbb","aClass":"VbbProvider"},{"name":"Sf","aClass":"SfProvider"},{"name":"Gvh","aClass":"GvhProvider"},{"name":"Mvg","aClass":"MvgProvider"},{"name":"Oebb","aClass":"OebbProvider"},{"name":"Mersey","aClass":"MerseyProvider"},{"name":"Bvg","aClass":"BvgProvider"},{"name":"Vao","aClass":"VaoProvider"},{"name":"Vagfr","aClass":"VagfrProvider"},{"name":"Paris","aClass":"ParisProvider"},{"name":"Nasa","aClass":"NasaProvider"},{"name":"Linz","aClass":"LinzProvider"},{"name":"Lu","aClass":"LuProvider"},{"name":"Septa","aClass":"SeptaProvider"},{"name":"Vvs","aClass":"VvsProvider"},{"name":"Vvo","aClass":"VvoProvider"},{"name":"Met","aClass":"MetProvider"},{"name":"Nvv","aClass":"NvvProvider"},{"name":"Tfi","aClass":"TfiProvider"},{"name":"Sydney","aClass":"SydneyProvider"},{"name":"Zvv","aClass":"ZvvProvider"},{"name":"Vrr","aClass":"VrrProvider"},{"name":"Ding","aClass":"DingProvider"},{"name":"Nri","aClass":"NriProvider"},{"name":"Nvbw","aClass":"NvbwProvider"},{"name":"Vms","aClass":"VmsProvider"},{"name":"Stockholm","aClass":"StockholmProvider"},{"name":"Rt","aClass":"RtProvider"},{"name":"Se","aClass":"SeProvider"},{"name":"Jet","aClass":"JetProvider"},{"name":"Bsvag","aClass":"BsvagProvider"},{"name":"Bayern","aClass":"BayernProvider"},{"name":"Vbl","aClass":"VblProvider"},{"name":"Tlem","aClass":"TlemProvider"},{"name":"Vor","aClass":"VorProvider"},{"name":"Vgn","aClass":"VgnProvider"},{"name":"Bvb","aClass":"BvbProvider"},{"name":"Svv","aClass":"SvvProvider"},{"name":"Invg","aClass":"InvgProvider"},{"name":"Avv","aClass":"AvvProvider"},{"name":"Vvm","aClass":"VvmProvider"},{"name":"Pl","aClass":"PlProvider"},{"name":"Vvv","aClass":"VvvProvider"},{"name":"Sncb","aClass":"SncbProvider"},{"name":"Sbb","aClass":"SbbProvider"},{"name":"Dub","aClass":"DubProvider"},{"name":"Bahn","aClass":"BahnProvider"},{"name":"Vbn","aClass":"VbnProvider"},{"name":"Vrn","aClass":"VrnProvider"},{"name":"Vrs","aClass":"VrsProvider"},{"name":"Vgs","aClass":"VgsProvider"},{"name":"Wien","aClass":"WienProvider"},{"name":"Italy","aClass":"ItalyProvider"},{"name":"Ns","aClass":"NsProvider"},{"name":"Dsb","aClass":"DsbProvider"},{"name":"Mvv","aClass":"MvvProvider"},{"name":"Sh","aClass":"ShProvider"},{"name":"Kvv","aClass":"KvvProvider"},{"name":"Vvt","aClass":"VvtProvider"},{"name":"Atc","aClass":"AtcProvider"},{"name":"Paca","aClass":"PacaProvider"},{"name":"Eireann","aClass":"EireannProvider"},{"name":"FrenchSouthWest","aClass":"FrenchSouthWestProvider"},{"name":"Stv","aClass":"StvProvider"},{"name":"Ivb","aClass":"IvbProvider"}]

Das was bei Name steht wird verwendet, der Wert aClass ist intern und braucht hier nicht weiter verwendet werden. Im Beispiel hat die VAG Freiburg den Namen "Vagfr".

2. Ermitteln der StationId für die Haltestelle deren Abfahrtszeiten ich gerne haben möchte. In diesem Beispiel die Haltstelle "Maria-Hilf-Kirche".

http://transportrest-sbiermann.rhcloud.com/station/suggest?q=Maria-Hilf-Kirche&provider=Vagfr

dieses liefert als Antwort im JSON Format:

{"header":{"network":"VAGFR","serverProduct":"efa","serverVersion":null,"serverTime":0,"context":null},"status":"OK","locations":[{"type":"STATION","id":"6930306","lat":47988467,"lon":7863890,"place":"Freiburg im Breisgau","name":"Maria-Hilf-Kirche","products":null,"latAsDouble":47.988467,"lonAsDouble":7.86389,"identified":true},{"type":"POI","id":"poiID:4513:8311000:-1:Maria-Hilf-Kirche:Freiburg im Breisgau:Maria-Hilf-Kirche:ANY:POI:3415261:842766:NBWT:B_W","lat":47987611,"lon":7863721,"place":"Freiburg im Breisgau","name":"Maria-Hilf-Kirche","products":null,"latAsDouble":47.987611,"lonAsDouble":7.863721,"identified":true}]}

Wie man sehen kann gibt es mehrere Treffer für Maria-Hilf-Kirche. Es wird aber nur der Typ "STATION" benötigt und somit lautet die StationId "6930306".

3. Abfrage der Departure Zeiten für die Haltestelle "Maria-Hilf-Kirche" im passenden Format für dieses Widget.

http://transportrest-sbiermann.rhcloud.com/departureFHEM?from=6930306&provider=Vagfr

dieses liefert als Antwort im passenden Format:

[["1","Littenweiler","3"],["1","Landwasser","3"],["1","Littenweiler","9"],["1","Landwasser","9"],["1","Littenweiler","15"],["1","Landwasser","15"],["1","Littenweiler","21"],["1","Landwasser","21"],["1","Landwasser","27"],["1","Littenweiler","27"],["1","Littenweiler","33"],["1","Landwasser","33"]]

An der Haltestelle fährt nur eine Line daher ist immer die Linie 1 hier abgebildet in dem Beispiel. Die Zeiten sind immer inklusive Verspätung angegeben, sofern der Provider (die VAG Freiburg tut dies) diese Daten mit sendet.

4. Einbindung in FHEM, siehe erstes Posting und als URL dann die verwenden die in 3. benutzt wird. In meinen Beispiel würde dies dann so aussehen:

define VAG HTTPMOD none 0
attr VAG get02Name Maria-Hilf-Kirche
attr VAG get02URL http://transportrest-sbiermann.rhcloud.com/departureFHEM?from=6930306&provider=Vagfr
attr VAG getRegex (\[\[.*\]\]).*
attr VAG timeout 30


Wer den Code selber zum laufen bringen will, findet auf https://github.com/fewi/vagfr-rest-wrapper den Wrapper mit einer Anleitung wie er das Lokal auf seinen Rechner zum laufen kriegt, bzw. auf einen Server. Ebenso befindet sich dort auch eine Beschreibung des kompletten REST Service und wie man das Teil auf Openshift hostet.

Viele Grüße
Stefan

Photon68

Hallo Stefan,

funktioniert wunderbar!
Anleitung gut nachvollziehbar. Dadurch geht jetzt das Widget auch im VRR-Gebiet.

Gruß Dirk

setstate

Von mir auch vielen Dank Stefan für den Service und die Unterstützung des vorhandenen Widget Interfaces.
Coole Sache!!!

ulli

hat schon jemand eine Möglichkeit für den MVV in München gefunden?