Pünktlich zum Schulbeginn (zumindest für diejenigen bei denen heute noch Feiertag war

) habe ich noch schnell ein Modul geschnitzt, dass den Vertretungsplan der DSBMobile-App - die an der Schule meines Sohnes verwendet wird (und wohl auch an einigen anderen Schulen zumindest in BaWü) -auszulesen.
Das Modul verwendet einige Module, die möglicherweise nicht auf eurem System vorhanden sind, die müssen ggf. über cpan installiert werden:
use IO::Compress::Gzip;
use IO::Uncompress::Gunzip;
use MIME::Base64;
use HTML::TableExtract;
Definedefine dsb DSBMobile
dann unbedingt die Attribute pflegen:
dsb_user und
dsb_password sind die Logindaten der DSBMobile App
In
dsb_class können die Klassen eingeschränkt werden, für die die Vertretungen abgerufen werden sollen. Ich würde das stark empfehlen, sonst werden es schnell ziemlich viele Readings. Hier kann eine Regex mitgegeben werden, zum einen um mehrere Klassen anzugeben (also sowas wie 5a|7b) aber auch, weil z.B. bei meiner Schule gerne Vertretungen (in Sport oder so) für die Klassen 5abc eingetragen werden. Das Modul würde das nicht finden, wenn als Klasse 5b gepflegt ist. Eine passende Regex könnte 5.*b lauten.
Der einzige Get-Befehl holt dann den Vertretungsplan ab. Dies ist bewusst nicht timer gesteuert, sondern sollte über ein at gemacht werden. Bei uns kommen die Updates meistens morgens um ca. 07:40 und dann nochmal nachmittags. Ich hole also einmal um 07:45 und einmal abends aktuelle Daten ab.Über dsb_interval kann eingestellt werden, wie häufig neue Daten abgerufen werden sollen.
Das Teil legt eine Menge readings an, die nicht wirklich gut lesbar sind, daher gibt es noch eine (im ersten Schritt wirklich sehr einfach gehaltene) Funktion um einen Weblink anzulegen
define dsb_web weblink htmlCode {DSBMobile_simpleHTML("dsb")}
Ergebnis sieht dann irgendwie so aus:
2019-12-20
08c, 5 - 6. Stunde(n) --- (---) statt WELZ (D) Entfall ---
2020-01-07
08c, 1. Stunde(n) ROLK (D) statt WELZ (D) --- ---
08c, 2. Stunde(n) HUMM (D) statt WELZ (D) --- ---
Kann man natürlich schöner machen ;-) Ich könnte mir auch vorstellen ein Mapping mit einzubauen, dass die Lehrerkürzel auf echte Namen und/oder Fächerkürzel auf Fächer mappt etc... Die App enthält auch noch andere Infos (wie z.B. News, oder auch "Info des Tages" im Vertretungsplan), die derzeit noch nicht ausgelesen werden.
Lasst mich wissen, falls ihr Interesse habt, dass das Dings aufgebohrt wird.
Update 25.01.: Mittlerweile werden auch die "Infos des Tages" abgerufen (diese können im Weblink mit einem optionalem zweitem Parameter eingeblendet werden, siehe Commandref). Ausserdem werden auch die "Aushänge" abgerufen und können mittels eines zweiten Weblinks (DSBMobile_infoHTML($name)) angezeigt werden.
Update 11.02.: In Bayern ticken die Vertretungspläne anders (und möglicherweise nicht nur da). Die Readings werden nun dynamisch aufgrund der im Vertretungsplan vorhandenen Spalten abgefragt. Das macht die Ausgabe etwas schwieriger, weil das Modul ja jetzt nicht weiß, welche Readings kommen. Daher gibt es jetzt ein Attribut "dsb_outputFormat", indem die Readings als Platzhalter eingebaut werden können. In meinem Fall sieht das so aus:
%Klasse_n_% %Stunde%. Stunde %Vertreter% (%Fach%, %Raum%) statt %_Lehrer_% (%_Fach_%, %_Raum_%) %Vertr._von% %_Le.__nach% %Vertretungs-Text%
Zusätzlich gibt es auch noch das Attribut "dsb_classReading". Dieses muss gesetzt werden, falls die Spalte mit der Klassenangabe nicht "Klasse(n)" heißt (das ist aber auch in Bayern so).
Ausserdem habe ich noch ein paar kleinere Verbesserungen und Optimierungen vorgenommen:
* die "Info des Tages" jetzt auch angezeigt, wenn für den fraglichen Tag keine Vertretungen vorhanden sind
* wenn über den Get-Befehl die Daten abgeholt werden, wird nichtmehr geprüft ob neue Daten vorhanden sind, sondern es wird auf jeden Fall neu geladen, ebenso werden die Daten auf jeden Fall neu geladen (beim nächsten Timer oder manuellem Get) wenn das "dsb_class" oder "dsb_classReading" geändert wurden.
* ein/zwei Bugs ausgebaut ;-)
Update 12.02.: Kleinen Bug gefixt (Perl-Warnung im Log, wenn keine Vertretungs-Daten gefunden werden)
Update 14.02.: Noch eine Perl-Warnung gefixt, Commandref auf deutsch ergänzt und das Ganze ins SVN eingecheckt, d.h. DSBMobile steht ab morgen mit dem regulären FHEM-Update zur Verfügung.