Mein erster eigener Alexa-Skill: Abfahrten Kafkastraße

„Alexa, starte Abfahrten Kafkastraße“. Mit diesem Befehl sagt mir Alexa nun die Minuten an, bis meine nächste Stadtbahn abfährt. Damals habe ich mit der WebApp TrainTimeTracker das Problem schon fürs Handy gelöst.

Nun wollte ich die Information auf einem Display in der Wohnung sehen. Ich dachte schon daran mir einen Magic Mirror zu kaufen oder selber zu bauen und dafür zu programmieren. Doch dann kam Amazon…

Echo Show: Alexa mit Bildschirm

Seit dem der Echo Show mit Display stark reduziert wurde, steht er bei uns in der Küche. Und nach der zweiten Benutzung stand fest: Darauf möchte ich die Abfahrten meiner nächsten Stadtbahn-Haltestelle auf Zuruf sehen.

Nachdem der Deutsche Bahn Skill meine Station nicht erkannt hat, war klar: da muss ich selber ran. Das Ziel war einfach: Mit einem kurzen Befehl „starte Abfahrten Kafkastraße“ die nie nächste und übernächste Fahrt stadteinwärts auf dem Display des Echo Shows sehen.

Woher kommen die Daten?

Da wird es kompliziert. Man könnte meinen, ich bin bei HaCon nun an der Quelle dieser Daten. Die gehören aber nicht uns sondern den Kunden. Deswegen hatte ich beim letzten Mal m.bahn.de per Scraping eingelesen.

Gut, dass ich von Sebastian Sooth auf dem ersten Mobility Hackathon gelernt habe, dass es eine API zu den Abfahrtstafeln mit Echtzeitdaten gibt:

https://reiseauskunft.bahn.de//bin/stboard.exe/dn?rt=1&time=actual&start=yes&boardType=dep&L=vs_java3&input=

Die Variable „Input“ erwartet den Haltestellennamen wie man ihn auch auf bahn.de eingeben würde. Man sollte die API nur maximal alle 5 Minuten anfragen weil die IP sonst geblockt wird. Deswegen musste ich einen entsprechenden Cache einbauen.

Weil ich sonst nix kann: PHP

Mein Script wertet keine Eingaben durch den Nutzer aus.  Beim Start wird nur der Satz, den Alexa sagen soll in Form von JSON zurück zum Amazon-Server geschickt. Mehr ist es wirklich nicht:

{
    "version": "1.0",
    "response": {
        "outputSpeech": {
            "type": "PlainText",
            "text": "In 9 Minuten fährt die Stadtbahn 7 ab  Kafkastrasse in Richtung Wettbergen. In 39 Minuten kommt die nächste Stadtbahn 7",
            "ssml": null
        },
        "shouldEndSession": true
    }
}

Kompliziert waren nur die Authentifizierung und komischerweise die grafische Aufbereitung für den Echo Show. Auch die finale Freischaltung im Amazon Echo Store hat zwei Anläufe benötigt, weil der „Invocation name“ Amazon nicht gepasst hat.

Wieso nur die Kafkastraße in Hannover?

Ich wollte in diesem Fall ein ganz bestimmtes Problem lösen. Eine „single purpose software“ die einfach einfach ist. Jedoch unterstützt mein Script  theoretisch alle Abfahrtsorte, die bahn.de kennt

Auf Anfrage veröffentliche ich nach dem selben Prinzip auch andere Haltestellen . Oder ihr forkt mein Script auf GitHub und macht es selbst. Und besser.

Komm, gib her

Eine Antwort auf „Mein erster eigener Alexa-Skill: Abfahrten Kafkastraße“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website zeigt Benutzerbilder über gravatar.com an.

Wie bekomme ich einen verifizierten Account? - Login