Wie geht das?

Die Einsatzmeldungen des Landkreises Aschaffenburg werden vom Kreisfeuerwehrverband auf ihrer Seite veröffentlicht. Diese Informationen sind für alle zugänglich und werden eine halbe Stunde nach Eingang einer Meldung aktualisiert. Die aktuellsten Meldungen werden dort jede Stunde abgerufen, auf Neuigkeiten überprüft und dann aufs Handy geschickt.

FAQ

Hier sind einige der am häufigsten gestellten Fragen und die Antworten dazu.

Angeblich ist kein WhatsApp installiert?

Das Problem tritt scheinbar bei Firefox auf Android Handys (Samsung & Co.) auf. Einfach nochmal mit einem anderen Browser proberen

Ich finde es bei WhatsApp nicht?

Die Channel sind bei WhatsApp etwas versteckt. Man kann sie unter "Aktuelles" --> "Kanäle" finden

Was kostet das ganze?

Natürlich kostet so ein Service ein paar Euro. Diese werden aber im Moment komplett privat getragen, sodass dem Nutzer keinerlei Kosten entstehen

Wie zeitnah kommen die Meldungen?

Die Meldungen werden alle 30 Minuten veröffentlicht und jede Stunde abgefragt bzw. verschickt. Daher kann es im schlechtesten Fall bis zu einer Stunde dauern, bis die Meldung gesendet wird

Gibts das auch in meiner Stadt?

Bisher gibt es das nur für den Landkreis Aschaffenburg. Solltet ihr woanders herkommen und auch Interesse haben schreibt mir einfach eine E-Mail

Wo ist der Rest der FAQ?

Viel mehr gibt es bisher nicht. Sollte doch etwas unklar sein fragt einfach nach (Kontakt@Einsatzmelder-Aburg.de)

Wie funktioniert das ganze?

steht weiter unten ↓

Wie funktionierts technisch?

Die ganze Magie besteht aus einem kleinen Python Script welches regelmäßig aufgerufen wird.

Daten bekommen

Die Daten werden auf der Website des Kreisfeuerwehrverband Aschaffenburg als HTML-Tabelle veröffentlicht und können von da aus abgerufen werden. Da die Struktur einer HTML-Tabelle relativ einfach ist, ist auch das Parsen nicht schwer.
Eine einfache HTML-Tabelle besteht aus dem < table>-Tag, das den Beginn der Tabelle markiert, und dem < /table>-Tag, das das Ende der Tabelle markiert. Innerhalb der Tabelle befinden sich Zeilen, die mit dem < tr>-Tag beginnen und mit dem < /tr>-Tag enden. Jede Zeile enthält Zellen, die mit dem < td>-Tag für normale Zellen oder dem < th>-Tag für Header-Zellen gekennzeichnet sind. Hier ist ein einfaches Beispiel:

    < !-- Bei den Tags wurde nach dem "<" immer ein leerzeichen eingefügt,
    um zu verhindern, dass es beim Anzeigen gerendert wird -->
    < table>
        < tr>
            < th>Header 1< /th>
            < th>Header 2< /th>
        < /tr>
        < tr>
            < td>Data 1< /td>
            < td>Data 2< /td>
        < /tr>
        < tr>
            < td>Data 3< /td>
            < td>Data 4< /td>
        < /tr>
    < /table>
                    
Dies würde eine Tabelle mit zwei Spalten und drei Zeilen erstellen. Durch diese klare Struktur lässt sich die Website relativ leicht zerlegen:

        # data = Die ganze HTML Seite
        # Hiermit wird die Tabelle nach Zeilen getrennt
        split = data.split("") 
    
        # gehe alle Zeilen durch 
        # (die ersten beiden und das letzte ist der Rest der Seite 
        # bzw. die Überschriften)
        for x in range(2, len(split)-1 ): 
            #Trenne jede Zeile am Ende der Spalte
            elem = split[x].split("")
            for x in range(0, len(elem)-1): #gehe Alle spalten durch
                #Füge alles nach einem End-Tag zu einem eintrag zusammen 
                elem[x]=elem[x][elem[x].find(">")+1:len(elem[x])] 
            elem[len(elem)-1] = hash(str(elem[0:len(elem)-2]))
            print()
            for x in elem:
                print(x)
            

Telegram

Automatische Nachrichten lassen sich in Telegram mit einem Bot vergleichsweise einfach versenden. Hierfür sucht man zunächst nach dem Benutzer @botfather und startet eine Unterhaltung mit ihm. Über den Botfather (natürlich selbst ein Bot) lässt sich alles was mit automatisierten Nachrichten und Bots zu tun hat abwickeln. Über die Nachricht /newbot lässt sich ein neuer Bot erstellen. Der Botfather führt einen dann weiter durch die Erstellung und fragt Namen etc. ab. Ganz zum Schluss gibt es die Zugriffs-Schlüssel.

Whatsapp

Whatsapp selbst bietet auch eine Schnittstelle (API) an, mit deren Hilfe Nachrichten verschickt werden können. Diese ist jedoch nicht nur kostenpflichtig, sondern so kompliziert zu bedienen, dass es sehr viele kommerzielle Anbieter gibt, die gegen eine Gebühr eine einfachere Schnittstelle zur Verfügung stellen. So muss (nach meinem Verständnis) neben einem Whatsapp Business Account auch ein Meta Entwicklerkonto angelegt sein. Die Abrechnung erfolgt nicht nur auf Basis der Anzahl der Nachrichten, sondern auch auf der Art (Support, Werbung, etc.) und die Dokumentation ist gemischt in Deutsch und Englisch (teilweise deutsche Überschriften mit englischem Text. Oder Menüs teils auf Deutsch, teils auf Englisch). Deshalb wurde für den Einsatzmelder auch auf einen solchen Anbieter zurückgegriffen

Automatisierung

Das ganze Script läuft auf einem Linux Server, der Tag und Nacht betrieben wird. Um das Script nicht jede Stunde per Hand ausführen zu müssen, hat sich "Cron" in der Linuxwelt als Standard etabliert. Hier werden in einer Liste Aufträge angelegt und beschrieben, nach welchen zeitlichen Regeln sie ausgeführt werden sollen. Im Falle des Einsatzmelders sieht der Eintrag etwa folgendermaßen aus:

    0     *     *     *     *       python einsatzmelder.py
    │     │     │     │     │       |
    │     │     │     │     │       └─ Das einsatzmelderscript zum ausführen
    │     │     │     │     └───────── Jeden Wochentag
    │     │     │     └─────────────── Jeden Monat
    │     │     └───────────────────── Jeden Tag des Monats
    │     └─────────────────────────── Jede Stunde 
    └───────────────────────────────── Zur 0. Minute