Nach dem Abruf der Google Maps Informationen hatte ich mich erinnert, dass VRN ebenso einen Abfahrtsmonitor anbietet. Diesen wollte ich natürlich auch auf jeden Fall in FHEM anbinden.
Zunächst muss die Haltestelle herausgefunden werden. Am besten geht man dazu auf den Abfahrtsmonitor und sucht sich die Wunschhaltestelle. In meinem Falle nehme ich die “Lindenhof (MA), Windeckstraße”: Nun kann man noch die Richtung auswählen:
Schlussendlich bekommt man eine URL wie diese:
http://efa9-5.vrn.de/dm_rbl/XSLT_DM_REQUEST?language=de&itdLPxx_dmlayout=dm&itdLPxx_realtime=1&useRealtime=1&itdLPxx_dmRefresh=1&timeOffset=3&limit=12&includeCompleteStopSeq=1&depType=stopEvents&typeInfo_dm=stopID&nameInfo_dm=6002500&mode=direct&line=VRN:08003:s:H&itdLPxx_ie6layout=;
Für die Anzeige in FHEM muss man nun in der URL relativ zu Beginn die Zeichenfolge “dm_rbl
” gegen “lite
” tauschen, wodurch bei Aufruf im Browser (am besten Chrome nehmen) eine JSON-Anzeige gestartet wird. Diese URL muss im define
statt der unten stehenden verwendet werden. Ich habe hier 1800 als Abrufintervall eingetragen, was man natürlich ändern kann. Die definition des Devices folgt wie immer meiner Namenskonvention :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
define INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE HTTPMOD http: // efa9 - 5 . vrn . de /lite/ XSLT_DM_REQUEST ? language = de & itdLPxx_dmlayout = gadget & itdLPxx_realtime = 1 & useRealtime = 1 & itdLPxx_dmRefresh = 1 & timeOffset = 3 & limit = 12 & includeCompleteStopSeq = 1 & depType = stopEvents & typeInfo_dm = stopID & nameInfo_dm = 6002500 & mode = direct & line = VRN:08003:s:H & itdLPxx_ie6layout = ; 1800 #Bitte URL tauschen!
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading11Name departures_01_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading11JSON departures_01_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading12Name departures_01_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading12JSON departures_01_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading13Name departures_01_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading13JSON departures_01_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading14Name departures_01_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading14JSON departures_01_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading15Name departures_01_mode_destination_s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading15JSON departures_01_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading15Format % . 1s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading16Name departures_01_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading16JSON departures_01_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading17Name departures_01_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading17JSON departures_01_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading21Name departures_02_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading21JSON departures_02_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading22Name departures_02_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading22JSON departures_02_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading23Name departures_02_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading23JSON departures_02_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading24Name departures_02_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading24JSON departures_02_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading25Name departures_02_mode_destination_s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading25JSON departures_02_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading25Format % . 1s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading26Name departures_02_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading26JSON departures_02_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading27Name departures_02_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading27JSON departures_02_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading31Name departures_03_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading31JSON departures_03_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading32Name departures_03_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading32JSON departures_03_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading33Name departures_03_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading33JSON departures_03_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading34Name departures_03_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading34JSON departures_03_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading35Name departures_03_mode_destination_s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading35JSON departures_03_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading35Format % . 1s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading36Name departures_03_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading36JSON departures_03_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading37Name departures_03_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading37JSON departures_03_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading41Name departures_04_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading41JSON departures_04_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading42Name departures_04_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading42JSON departures_04_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading43Name departures_04_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading43JSON departures_04_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading44Name departures_04_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading44JSON departures_04_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading45Name departures_04_mode_destination_s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading45JSON departures_04_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading45Format % . 1s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading46Name departures_04_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading46JSON departures_04_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading47Name departures_04_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading47JSON departures_04_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading51Name departures_05_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading51JSON departures_05_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading52Name departures_05_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading52JSON departures_05_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading53Name departures_05_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading53JSON departures_05_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading54Name departures_05_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading54JSON departures_05_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading55Name departures_05_mode_destination_s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading55JSON departures_05_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading55Format % . 1s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading56Name departures_05_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading56JSON departures_05_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading57Name departures_05_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading57JSON departures_05_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading61Name departures_06_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading61JSON departures_06_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading62Name departures_06_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading62JSON departures_06_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading63Name departures_06_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading63JSON departures_06_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading64Name departures_06_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading64JSON departures_06_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading65Name departures_06_mode_destination_s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading65JSON departures_06_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading65Format % . 1s
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading66Name departures_06_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading66JSON departures_06_dateTime_time
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading67Name departures_06_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading67JSON departures_06_realtime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE stateFormat departures_01_dateTime_rtTime + departures_01_mode_delay ( departures_01_mode_destination / departures_01_dateTime_rtDate )
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingMaxAge 300
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingMaxAgeReplacement -
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingMaxAgeReplacementMode text
Im STATE des Geräts wird die nächste Abfahrt mit einer eventuellen Verspätung angezeigt. Schlussendlich hat man die nächsten sechs Abfahrten und kann diese dann weiterverarbeiten, beispielsweise in einer readingsGroup . Hier sieht man nun schön den Vorteil einer ordentlichen Namenskonvention , da sich das DEVICE nur um den Typ unterscheidet:
1
2
3
4
define INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingsGroup ,,, INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_01_mode_destination , departures_01_dateTime_rtTime , departures_01_mode_delay , departures_01_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_02_mode_destination , departures_02_dateTime_rtTime , departures_02_mode_delay , departures_02_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_03_mode_destination , departures_03_dateTime_rtTime , departures_03_mode_delay , departures_03_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_04_mode_destination , departures_04_dateTime_rtTime , departures_04_mode_delay , departures_04_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_05_mode_destination , departures_05_dateTime_rtTime , departures_05_mode_delay , departures_05_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_06_mode_destination , departures_06_dateTime_rtTime , departures_06_mode_delay , departures_06_dateTime_rtDate
attr INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE alias Abfahrtmonitor STR3 Ab Windeckstrasse
attr INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE nonames 1
attr INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE valueStyle {( substr ( $READING , - 5 ) eq "delay" )?( $VALUE ne "0" )? 'style="color:red;;font-weight:bold"' : 'style="color:green;;font-weight:bold"' : '' }
Was dann so aussieht:
Ganz praktisch ;)
Versions Historie:
2016-01-10 - Update mit MaxAge, da ab und an keine Daten für bestimmte Zeiten gezogen werden. 2016-05-02 - Update mit Destination als ein Buchstabe für die schnelle Anzeige in FTUI 2016-05-09 - Aufnahme der regulären Abfahrtszeit