Hallo Gemeinde,
ich glaube meine Idee ist nicht ganz neu, ich möchte mir frühmorgens gern die Bahnen auf dem Display anzeigen lassen, die in den kommenden Minuten bei mir zu Hause abfahren. Unter der URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=%22+Albertplatz+%22&vz=1&lim=8 (http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=%22+Albertplatz+%22&vz=1&lim=8) kann man direkt unter Angabe der Vorlaufzeit, Haltestelle und Anzahl der Ergebnisse aufrufen und bekommt einen String in folgender Art zurück:
[["8","Hellerau","0"],["8","Hellerau","1"],["3","Coschütz","1"],["3","Wilder Mann","2"],["8","Südvorstadt","5"],["7","Pennrich","5"],["8","Südvorstadt","6"],["7","Weixdorf","6"]]
Das wird also die Nummer der Bahn, die Richtung und die Abfahrtzeit in Minuten. Das kann man ja jetzt relätiv ähnlich wie beim Benzinpreismonitor einlesen, jedoch verzweifle ich an den regulären Ausdrücken. Könnte mir da jemand unter die Arme greifen ? Mit der Variante könnte man dann den gesamten VVO abfragen, also fast alles was so durch Sachsen tingelt.
Danke :)
Folgendes RegExp
\[\["(\d+)","([^"]*)","(\d+)"\],
kopiert 8 nach $1, Hellerau nach $2, und 0 nach $3.
Man kann das Regexp verlaengern, um die anderen Werte nach $4 usw zu kopieren.
Wie man mit dieser Methode eine Variable Anzahl von Elementen erwischt, ist mir nicht bekannt.
Eleganter, aber vmtl. nicht HTTPMOD kompatibel ist das e (execute) modifier, z.Bsp:
my $input = '[["8","Hellerau","0"],["8","Hellerau","1"]...';
my @fld;
$input =~ s/\["(\d+)","([^"]*)","(\d+)"\]/push(@fld,"$1,$2,$3")/ge;
print join("\n", @fld),"\n";
my $text = '[["8","Hellerau","0"],["8","Hellerau","1"],["3","Coschütz","1"],["3","Wilder Mann","2"],["8","Südvorstadt","5"],["7","Pennrich","5"],["8","Südvorstadt","6"],["7","Weixdorf","6"]]';
$text =~ s/\],\[/\n/g;
$text =~ s/[\[\]"]//g;
use Data::Dumper;
$Data::Dumper::Useqq=1;
print Data::Dumper->Dump([[split /^/, $text]], ["*text"]);
liefert:
@text = (
"8,Hellerau,0\n",
"8,Hellerau,1\n",
"3,Cosch\374tz,1\n",
"3,Wilder Mann,2\n",
"8,S\374dvorstadt,5\n",
"7,Pennrich,5\n",
"8,S\374dvorstadt,6\n",
"7,Weixdorf,6"
);
und dann mach ich mit foreach weiter :)
Soooo... ist zwar mit Sicherheit nicht die eleganteste Lösung... aber es läuft ;-) In der Stunde die ich jetzt in der Woche frühmorgens auf bin, zeigt er mir die Abfahrtzeiten an... Ich bin begeistert ;D
Hallo,
ähnliches wurde bereits genannt
http://forum.fhem.de/index.php/topic,10862.0.html (http://forum.fhem.de/index.php/topic,10862.0.html)
allerdings konnte ich das bisher nur sehr rudimentär umsetzen.
An Deiner Lösung wäre ich daher interessiert ;-)
Gruß, Stefan
Hallo
Ich wäre auch an deiner Lösung interessiert. Wäre nett wenn du sie hier zur Verfügung stellst.
Was ist wenn der Zug Verspätung hat, wird dann die korrekte Ankunftszeit angegeben ?
Gruß Achim
Hi !
Naja, die Lösung steht ja eigentlich schon da... ;) Ich habe über HTTPMOD den unten stehenden Link eingelesen und die Attribute wie im Bild gesetzt. Danach kann man die Variablen wie im RSS-Workshop beschrieben einfach einlesen und formatiert anzeigen lassen. Den Link lasse ich minütlich aktualisieren, das vom RSS erzeugte Bild auch, somit wird die Bahn immer aktuell angezeigt. Im Endeffekt ist man natürlich darauf angewiesen was die DVB an Daten bereit stellt - und das ist leider nicht immer so aktuell das die Verspätung mit drin steht.
Ich hoffe das hat erst einmal geholfen ?
Hallo,
die Umsetzung scheint doch recht "komplex", habe ich hier zunächst verschoben.
Zur Info: Bahnhofs-Abfahrtstafeln nebst Verspätungen lassen sich zumindest für meinen Bahnhof (DB & NordWestBahn) erzeugen unter diesem Link:
http://www.oepnv-info.de/?seitenID=36#bfabfrage_auswahl (http://www.oepnv-info.de/?seitenID=36#bfabfrage_auswahl)
für Mobilgeräte:
http://www.mobilitaetsportal.info/mobil.php?page=5 (http://www.mobilitaetsportal.info/mobil.php?page=5)
Gruß, Stefan