Neues FTUI Widget - Departure

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

Vorheriges Thema - Nächstes Thema

setstate

Departure ist ein für die Auskunft der VVO/DVB optimiertes Widgets zur Anzeige der Abfahrtszeiten von Bahn, Bus, Zug und Fähre. Das Aussehen ist dem des offiziellen VVO/DVB Widgets nachempfunden.

Beispiel für FTUI

<div data-type="departure"
     data-device="VVO"
     data-get="Postplatz"
     class="DVB">
</div>


Als Quelle dient im FHEM eine HTTPMOD Abfrage:

define VVO HTTPMOD none 0
attr VVO get02Name Postplatz
attr VVO get02URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Postplatz&vz=0&lim=10
attr VVO getRegex (\[\[.*\]\]).*
attr VVO timeout 30


Update der Daten erfolgt beim Öffnen der Seite und dann per default aller 2 Minuten. Mit data-interval="60" kann man auf 1 Minute erhöhen oder mit data-interval="0" das automatische Update abschalten. Dann kann man nur noch am Widget direkt per Refresh Button aktualisieren.

Das Beispiel aus dem Screenshot habe ich mit folgenden Codezeilen in FTUI bzw. in FHEM erzeugt.
FTUI

<li data-row="5" data-col="1" data-sizex="6" data-sizey="3">
  <header>DEPARTURE</header>
  <!-- place your widget here -->
  <div class="large top-space">&nbsp;</div>
  <div class="col-1-3">
      <div data-type="departure" data-device="VVO"
           data-get="Hauptstrasse"
           data-icon="fa-train"
           data-interval="0">
      </div>
      <div class="medium top-space-2x">Default</div>
  </div>
  <div class="col-1-3">
      <div data-type="departure" data-device="VVO"
           data-get="Postplatz"
           data-interval="0"
           class="DVB">
      </div>
      <div class="medium top-space-2x">class='DVB'</div>
  </div>
  <div class="col-1-3">
    <div data-type="departure" data-device="VVO"
         data-get="Bahnhof-Meissen"
         data-interval="0"
         class="VVO">
    </div>
    <div class="medium top-space-2x">class='VVO'</div>
  </div>
</li>


FHEM

define VVO HTTPMOD none 0
attr VVO get01Name Hauptstrasse
attr VVO get01URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Hauptstrasse&vz=0&lim=10
attr VVO get02Name Postplatz
attr VVO get02URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Postplatz&vz=0&lim=10
attr VVO get03Name Bahnhof-Meissen
attr VVO get03URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Meißen&hst=Bahnhof&vz=0&lim=10
attr VVO getRegex (\[\[.*\]\]).*
attr VVO room Fahrzeiten
attr VVO timeout 30


Eventuell geht das Widget auch für andere Verkehrsbetriebe zu nutzen, wenn deren Web-API auch das gleiche JSON-Array Format ausspuckt bzw. im HTTPMOD kann man mit get01Expr eine Konvertierung einfügen.

widgets.vvo-online.de Output:
Zitat[["6","Wölfnitz","1"],["65","Luga","3"],["65","Blasewitz","4"],["6","Niedersedlitz","4"],["2","Kleinzschachwitz","6"],["2","Gorbitz","8"],["6","Wölfnitz","11"],["65","Heidenau","13"],["6","Niedersedlitz","13"],["65","Blasewitz","14"]]

tomster

Sieht doch sehr gut aus!

Ich vermute, Du hast dich ein bissl mit der Technik dahinter beschäftigt... Ich mich erst seit 20 Minuten ;-)
Wie genau greifst Du auf die Daten zu? Läuft das über den JAVA "public-transport-enabler" oder was Proprietäres?

Astrofreak85


setstate

#3
Zitat von: tomster am 27 Januar 2016, 16:25:58
Wie genau greifst Du auf die Daten zu? Läuft das über den JAVA "public-transport-enabler" oder was Proprietäres?

?What?
Nö, unsere Verkehrsbetriebe Oberelbe bieten die Web-API, die einfache JSON-Arrays ausspuckt.
http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Postplatz&vz=0&lim=10
Den Seitenaufruf mache ich im FHEM per HTTPMOD, wie oben im ersten Post beschrieben.

setstate


tomster

Nun ja, ich hab ein bissl gegoogled wie z.B. der MVV in München dieses Abfrage realisiert hat. Dabei bin ich draufgestossen, dass es wohl eine entsprechende Java-Klasse gibt, die (zumindest um 2010/2012) der Online-Abfrage des MVV zu Grunde liegt. Selbige ist wohl oben genannte und wurde von einer Fa. Mentz entwickelt und nennt sich EFA.

Es scheint jedoch, als gäbe es 2 "Platzhirsche", auf deren APIs die jeweiligen Online-Abfragen basieren.
https://www.administrator.de/wissen/hafas-fahrplanauskunft-api-sammlung-177145.html

Irgendwie gibt es dann noch etwas Namens DELFI http://www.delfi.de/nutzer (Mal auf die Karte rechts klicken), was beide Systeme irgendwie verbindet. Auf deren Seite muss auch irgendwo eine Schnittstellenbeschreibung sein. Könnte vielleicht ein Ansatz sein, um das Widget "deutschlandweit" mit Daten füllen zu lassen...

Alles natürlich ausgesprochen fundiertes Halbwissen, dass ich mir in der letzten Stunde angelesen habe ;-)


Risiko

Zitat von: setstate am 27 Januar 2016, 15:51:08
Departure ist ein für die Auskunft der VVO/DVB optimiertes Widgets zur Anzeige der Abfahrtszeiten von Bahn, Bus, Zug und Fähre. Das Aussehen ist dem des offiziellen VVO/DVB Widgets
Sehr schön. Auf jeden Fall super Arbeit.

Es wäre evtl.besser gewesen, das widget für 98_DBPlan zu machen und die Abfrage nicht per HTTPMOD sondern per DBPlan.
Dann hätten evtl. mehr Leute was davon.
Vielleicht ist es aber auch mgl. das widget für DBPlan zu erweitern.

kvo1

Schaut gut aus, mal sehen wie das bei der BVG funktioniert ;)
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

uniqueck

Zitat von: Risiko am 27 Januar 2016, 19:19:07
Sehr schön. Auf jeden Fall super Arbeit.

Es wäre evtl.besser gewesen, das widget für 98_DBPlan zu machen und die Abfrage nicht per HTTPMOD sondern per DBPlan.
Dann hätten evtl. mehr Leute was davon.
Vielleicht ist es aber auch mgl. das widget für DBPlan zu erweitern.
Das wäre schön aber dazu müsste man erstmal schauen ob diese Art der Information aus DBPlan heraus zubekommen ist. Aktuell muss ja immer Start und Ziel bei DBPlan angegeben werden. Somit muss man sich immer für eine oder mehrer Verbindungen entscheiden und dafür auch ggf. mehrere devices anlegen.

Gruß Constantin

Gesendet von meinem GT-N7100 mit Tapatalk


setstate

Für BVG:


   <div data-type="departure" data-device="BVG"
        data-get="Wilhelmsruher-Damm"
        data-interval="0"
        data-icon="fa-train"
        data-width="380">
   </div>


HTTPMOD Definition:

define BVG HTTPMOD none 0
attr BVG get01Expr BvgExpr($val)
attr BVG get01Name Wilhelmsruher-Damm
attr BVG get01Regex Abfahrtsplan([</\w>\n\s="&#;;(:\.!\-+,)?%]*)<\/table>
attr BVG get01URL http://fahrinfo.bvg.de/Fahrinfo/bin/stboard.bin/dox?ld=0.1&input=9096307&boardType=dep&time=&productsFilter=1111111111111111&maxJourneys=10&date=&start=yes
attr BVG timeout 30


99_myUtils.pm Funktion für Expr:

sub
BvgExpr($)
{
  my ($all) = @_;
  my @time = ($all=~/<td><strong>(\d\d:\d\d)<\/strong><\/td>/g);
  my @line = ($all=~/<strong>([^:][\w\d\s]*)<\/strong>/g);
  my @dest = ($all=~/>\R([^:][+&#;\.\-,\w\d\s]*)\R<\//g);
  my $ret='[';
  for my $i (0 .. $#line)
  {
      $ret=$ret.'["'.$line[$i].'",'.'"'.$dest[$i].'",'.'"'.$time[$i].'"]';
      if ($i<$#line) {$ret=$ret.',';}
  }
  return $ret.']';
}

kvo1

Hi setstate

danke , aber da hab ich im FTUI keine Daten...

ein       get BVG Wilhelmsruher-Damm  liefert .....

[["Bus  124","Abf.","17:38"],["Bus  120","Richtung","17:38"],["Bus  122","Buchholz-West, Aubertstr.","17:41"],["Bus  122","S+U Hauptbahnhof","17:42"],["Bus  124","Waidmannslust, Titiseestr.","17:43"],["Bus  X33","U Kurt-Schumacher-Platz","17:46"],["Bus  122","S Heiligensee","17:51"],["Bus  122","S+U Rathaus Spandau","17:52"],["Bus  124","Waidmannslust, Titiseestr.","17:53"]]

da scheint hier

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

was nicht zu passen !
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

Sieht doch gut aus. Das genau das Format, was das Widget braucht.

kvo1

#12
Zitat von: setstate am 28 Januar 2016, 18:05:07
Sieht doch gut aus. Das genau das Format, was das Widget braucht.
Man bin ich dooof , man sollte halt das  widget - departure auch per update hollen  :-[

jetzt klappt es !  ;)

Klaus

/EDIT/
klappt noch nicht ganz mit der formatierung

Abf. und Richtung  sind da falsch und somit verschiebt es da einiges
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

kvo1

Hallo setstate

neben den beiden falschen Einträgen (Abf. und Richtung)  ist mir noch etwas aufgefallen.
Bei mir ist hier die Abfahrtzeit und nicht die Zeit bis zur Abfahrt zu sehen, wobei ggf. beides sinnvoll wäre.
Das scheint aber eher an der Bereitstellung der Daten zu liegen !

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

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.