Departure: Unterschied zwischen den Versionen
Andies (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Ulm32b (Diskussion | Beiträge) (Bugfix) |
||
Zeile 31: | Zeile 31: | ||
<b>3. Abfrage der Departure Zeiten für die Haltestelle "SSB-Zentrum". Diese liefert die Daten im passenden Format für das zugehörige departure Widget für FTUI</b> | <b>3. Abfrage der Departure Zeiten für die Haltestelle "SSB-Zentrum". Diese liefert die Daten im passenden Format für das zugehörige departure Widget für FTUI</b> | ||
<pre> | <pre> | ||
https://transport.stefan-biermann.de/publictransportapi/rest/ | https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=5000350&provider=Vvs | ||
</pre> | </pre> | ||
dieses liefert als Antwort im passenden Format: | dieses liefert als Antwort im passenden Format: | ||
Zeile 44: | Zeile 44: | ||
define myDeparture HTTPMOD none 0 | define myDeparture HTTPMOD none 0 | ||
attr myDeparture get01Name SSB-Zentrum | attr myDeparture get01Name SSB-Zentrum | ||
attr myDeparture get01URL https://transport.stefan-biermann.de/publictransportapi/rest/ | attr myDeparture get01URL https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=5000350&provider=Vvs | ||
attr myDeparture get01Regex (\[\[.*\]\]).* | attr myDeparture get01Regex (\[\[.*\]\]).* | ||
attr VAG timeout 30 | attr VAG timeout 30 |
Version vom 23. Oktober 2017, 21:03 Uhr
Departure ist ein Modul zur Anzeige der Abfahrtszeiten von Bahn, Bus, Zug und Fähre des öffentlichen Personennahverkehrs (ÖPNV). Diese Seite basiert auf dem Beitrag im Forum https://forum.fhem.de/index.php?topic=48255.0 (von sbierman). Mittlerweile gibt es hierzu ein noch inoffizielles Modul https://forum.fhem.de/index.php?topic=60046.0 (von uniqueck). Zusätzlich gibt es ein Widget für die FHEM Tablet UI (FTUI) https://forum.fhem.de/index.php?topic=48255.0 (von setstate). Diese Seite sollte angepasst/überarbeitet werden, wenn das Modul 98_departure offiziell eingecheckt ist.
Einige der Links unten sind leider tot (Stand 21. Oktober 2017).
Vorbereitung
Um die Abfahrtzeiten zu ermitteln wird der REST-Wrapper von sbiermann genutzt, der auf dem Dienst für die Android App "Öffi" basiert. Für die Spätere Abfrage wird der Provider und die ID der Haltestelle benötigt. Beides kann wie folgt ermittelt werden.
1. Ermitteln welche Provider gibt es und welcher ist für mich zuständig.
https://transport.stefan-biermann.de/publictransportapi/rest/provider
Dieses liefert als Antwort im JSON Format:
[{"name":"Sncb","aClass":"SncbProvider"},{"name":"Vbn","aClass":"VbnProvider"},{"name":"Wien","aClass":"WienProvider"},{"name":"Linz","aClass":"LinzProvider"},{"name":"Vrr","aClass":"VrrProvider"},{"name":"Oebb","aClass":"OebbProvider"},{"name":"Gvh","aClass":"GvhProvider"},{"name":"Ns","aClass":"NsProvider"},{"name":"Vao","aClass":"VaoProvider"},{"name":"Tfi","aClass":"TfiProvider"},{"name":"Vgn","aClass":"VgnProvider"},{"name":"Mvg","aClass":"MvgProvider"},{"name":"Pl","aClass":"PlProvider"},{"name":"Vgs","aClass":"VgsProvider"},{"name":"Nasa","aClass":"NasaProvider"},{"name":"Vbb","aClass":"VbbProvider"},{"name":"Ivb","aClass":"IvbProvider"},{"name":"Nvv","aClass":"NvvProvider"},{"name":"Mvv","aClass":"MvvProvider"},{"name":"Vagfr","aClass":"VagfrProvider"},{"name":"Vvv","aClass":"VvvProvider"},{"name":"Sf","aClass":"SfProvider"},{"name":"Vms","aClass":"VmsProvider"},{"name":"Sbb","aClass":"SbbProvider"},{"name":"Bsvag","aClass":"BsvagProvider"},{"name":"Jet","aClass":"JetProvider"},{"name":"Septa","aClass":"SeptaProvider"},{"name":"Bvb","aClass":"BvbProvider"},{"name":"Mersey","aClass":"MerseyProvider"},{"name":"Vvs","aClass":"VvsProvider"},{"name":"Nvbw","aClass":"NvbwProvider"},{"name":"Se","aClass":"SeProvider"},{"name":"Svv","aClass":"SvvProvider"},{"name":"Bahn","aClass":"BahnProvider"},{"name":"Vrs","aClass":"VrsProvider"},{"name":"Stockholm","aClass":"StockholmProvider"},{"name":"Vmv","aClass":"VmvProvider"},{"name":"Stv","aClass":"StvProvider"},{"name":"Sydney","aClass":"SydneyProvider"},{"name":"Paris","aClass":"ParisProvider"},{"name":"Dsb","aClass":"DsbProvider"},{"name":"Rt","aClass":"RtProvider"},{"name":"Dub","aClass":"DubProvider"},{"name":"Bvg","aClass":"BvgProvider"},{"name":"Paca","aClass":"PacaProvider"},{"name":"Vor","aClass":"VorProvider"},{"name":"FrenchSouthWest","aClass":"FrenchSouthWestProvider"},{"name":"Avv","aClass":"AvvProvider"},{"name":"Zvv","aClass":"ZvvProvider"},{"name":"Nri","aClass":"NriProvider"},{"name":"Invg","aClass":"InvgProvider"},{"name":"Eireann","aClass":"EireannProvider"},{"name":"Vbl","aClass":"VblProvider"},{"name":"Vvo","aClass":"VvoProvider"},{"name":"Sh","aClass":"ShProvider"},{"name":"Kvv","aClass":"KvvProvider"},{"name":"Bayern","aClass":"BayernProvider"},{"name":"Atc","aClass":"AtcProvider"},{"name":"Lu","aClass":"LuProvider"},{"name":"Italy","aClass":"ItalyProvider"},{"name":"Vvm","aClass":"VvmProvider"},{"name":"Met","aClass":"MetProvider"},{"name":"Ding","aClass":"DingProvider"},{"name":"Tlem","aClass":"TlemProvider"},{"name":"Vvt","aClass":"VvtProvider"},{"name":"Vrn","aClass":"VrnProvider"}]
Das was bei Name steht wird verwendet, der Wert aClass ist intern und braucht hier nicht weiter verwendet werden. Im Beispiel haben die Verkehrsbetriebe Stuttgart (VVS) den Namen "Vvs".
2. Ermitteln der StationId für die Haltestelle deren Abfahrtszeiten ich gerne haben möchte. In diesem Beispiel die Haltstelle "SSB-Zentrum"
https://transport.stefan-biermann.de/publictransportapi/rest/station/suggest?q=SSB-Zentrum&provider=Vvs
Dieses liefert als Antwort im JSON Format:
[{"type":"STATION","id":"5000350","lat":48726856,"lon":9129721,"place":"Stuttgart","name":"SSB-Zentrum","products":null,"lonAsDouble":9.129721,"latAsDouble":48.726856,"identified":true},{"type":"STATION","id":"5002601","lat":48722757,"lon":9129058,"place":"Stuttgart","name":"Industriestraße (SSB-Zentrum)","products":null,"lonAsDouble":9.129058,"latAsDouble":48.722757,"identified":true}]
Wie man sehen kann gibt es mehrere Treffer für SSB-Zentrum. Es wird aber nur der Typ "STATION" benötigt und somit lautet die StationId "5000350".
3. Abfrage der Departure Zeiten für die Haltestelle "SSB-Zentrum". Diese liefert die Daten im passenden Format für das zugehörige departure Widget für FTUI
https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=5000350&provider=Vvs
dieses liefert als Antwort im passenden Format:
[["U8","Vaihingen","3"],["U12","Dürrlewang","6"],["U8","Ostfildern","5"],["U3","Vaihingen","6"],["U12","Hallschlag","7"],["U3","Plieningen","9"],["U8","Vaihingen","12"],["U12","Dürrlewang","17"],["U8","Waldau","15"],["U3","Vaihingen","16"]]
Die Zeiten sind immer inklusive Verspätung angegeben, sofern der Provider diese Daten mit sendet.
Einbindung in FHEM
Wie in der Einleitung erwähnt gibt es aktuell zwei Wege, die Abfahrtszeiten einzubinden: über HTTPMOD oder über das noch inofizielle Modul 98_departure
define myDeparture HTTPMOD none 0 attr myDeparture get01Name SSB-Zentrum attr myDeparture get01URL https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=5000350&provider=Vvs attr myDeparture get01Regex (\[\[.*\]\]).* attr VAG timeout 30
Es können mehrere Haltestellen in einem Device hinterlegt werden, hierzu einfach die drei Attribute get01Name, get01URL und get01Regex duplizieren und durchnummerieren. Dabei müssen natürlich Name und URL angepasst werden. Bei dieser Konfiguration erfolgt die Aktualisierung über das FTUI Widget!