Artikelformat

Carrera Digital 132: Rundensoftware mit Web-GUI

Das Carrerabahn-Fieber hatte mich spätestens nach dem ersten Rennen auf Matzes Bahn gepackt und ließ auch nach etlichen Abenden nicht nach. Also schnell den Wunschzettel für Weihnachten geschrieben und dann hieß es warten 😉 Vor vier Tagen war es dann endlich soweit: Ab sofort nenne ich eine Carrera Digital 132 mein Eigen, zwei Autos, 9m Streckenlänge und eine Control Unit.

Control Unit? Hmmm, da war doch was? An unseren Carrera-Abenden haben wir die Control Unit per USB/Seriell-Adapter mit einem Laptop verbunden und diesen als Rundenzähler genutzt. Wir nutzten die üblichen Verdächtigen wie z.B. BRUCE oder die original Carrera-Software. Da mir alle Varianten optisch und von der Bedienung her nicht gefielen und es ohnehin nur eine Rundensoftware für Mac OS X gibt, muss etwas Eigenes her. Kurzes Brainstorming mit Matze und wir hatten die Lösung: Eine webbasierte Rundensoftware, schlank aber funktional und plattformunabhängig sollte sie sein.

Die Python-Apache-PHP-Lösung

Da ich ohnehin schon mit Mac OS X arbeite und dies bekanntlich ein unixoides System ist, lag es nahe ein Script für die Kommandozeile zu schreiben, das die Verbindung zur Bahn aufbaut und mit ihr kommuniziert. Ich habe mich für Python entschieden, da es bei Mac OS X mitgeliefert wird und auch für Linux und Windows verfügbar ist. Der Plan sieht also wie folgt aus:

  • Python-Script für die Datenverbindung zur Control Unit über einen USB/Seriell-Adapter und Erstellung mehrerer Logfiles für die Rundenzeiten
  • Apache oder nginx Webserver mit PHP
  • SQLite oder MySQL zum Speichern der Rennergebnisse, Fahrer etc.

Die erste Hürde bestand darin, überhaupt das Protokoll der Control Unit zu verstehen. Fündig wurde ich schließlich auf der Seite von Slotbaer, der das Rundenzähler- und Datenprotokoll  beschreibt. An dieser Stelle ein Dank an ihn für die wirklich ausführliche Beschreibung.

Ich habe mich also erst einmal an das Python-Script gemacht, übrigens meine ersten Zeilen Python – es ist aber ähnlich simpel wie PHP. Das Script öffnet den seriellen Port des USB-Adapters und spricht die Control Unit an, diese antwortet mit mehreren Befehlssätzen, die vom Script verarbeitet und in einem Rundenzählerlog für jedes Fahrzeug abgelegt werden. Soweit so gut, die Daten haben wir schon mal!

Die Web-GUI

Im nächsten Schritt habe ich mich an die Web-GUI gemacht. Den Apache-Server hatte ich sowieso lokal installiert, also war dies der Webserver meiner Wahl. Die Web-GUI besteht momentan im Prinzip nur aus zwei PHP-Dateien und ein bisschen HTML5 und CSS samt Bootstrap und jQuery/AJAX.

Das Ganze funktioniert erstaunlich gut, hatte ich am Anfang doch noch Bedenken was AJAX betrifft. Ich habe eine Weile experimentiert und bin zu dem Ergebnis gekommen, dass ein Response alle 500ms ausreichend ist und auch den Browser nicht in Lastbereiche jenseits der 80% bewegt. Das Python-Script, das im Hintergrund fleißig Daten sammelt, arbeitet mit einem Sleep von 20ms und loggt momentan auch nur die Datensätze für die Rundenzeiten. Das heißt, fährt ein Fahrzeug über die Zielline, wird sofort der Wert ins Log geschrieben und auch AJAX verarbeitet den Wert binnen einer halben Sekunde. Die Anzeige ist also wirklich ausreichend schnell! Aber seht selbst:

Auf dem Video sieht man ab und an, dass eine Runde nicht gezählt wird. Das liegt daran, dass das Fahrzeug den Sensor nach der Kurve nicht getroffen hat. Mein Testaufbau war vielleicht doch etwas klein 😉 Beim Start des Videos ist die erste Rundenzeit über 20 Sekunden lang, weil die Fahrzeuge vor dem Video ca. 15 Sekunden standen.

Was fehlt noch?

Bis jetzt erfasst der Python-Datenlogger nur die Zieldurchfahrten bzw. loggt diese. Im nächsten Schritt sollen die Responses für Tankinhalte, der Ampelstatus beim Start und Frühstarts erkannt werden. Die Web-GUI soll dann die Tankstände grafisch darstellen und eine Startampel zeigen. Später möchte ich noch eine Schadens- und Regensimulation einfließen lassen. Das Speichern der Rennen soll entweder über MySQL oder SQLite erfolgen. Ein Export per PDF ist ebenfalls geplant.

Raspberry Pi als Rundenzähler

Da die Lösung alleine mit Python und einem Webserver lauffähig ist, soll in Zukunft ein Raspberry Pi mit Raspian OS (Debian Linux) die Aufgaben des Datenloggens und Bereitstellen der Web-GUI übernehmen. Auf die Web-GUI kann dann von einem beliebigen Gerät für die Darstellung der Rennergebnisse zugegriffen werden.

Fazit und Ausblick

Die Kombination von Python und dem Apache Webserver gepaart mit PHP kann sich nach den ersten Test durchaus sehen lassen. Besonders der Zugriff auf die Web-GUI über verschiedene Geräte macht diese Lösung attraktiv. Im Prinzip könnte man so in einem großen Raum mehrere Geräte als Displays für die Rennergebnisse aufstellen. Die Steuerung der Oberfläche könnte man auf nur einen Rechner beschränken, die anderen Geräte erhalten nur Zugriff auf die Rundenanzeige, aber das ist Zukunftsmusik.

Im nächsten Schritt soll die Startsequenz inkl. Ampelanzeige sowie das Speichern der Datensätze implementiert werden. Für diese Version werde ich nach einem ausführlichen Test die Python und PHP-Skripte zur Verfügung stellen und natürlich auch eine Anleitung veröffentlichen. Ob ich die Anleitung gleich für den Raspberry Pi als Rundenzähler oder universell für unixoide Systeme erstelle, weiß ich noch nicht.

1 Kommentar

  1. Pingback: webRMS – webbasierte Zeitmessung für Carrera Digital 124/132 Bahnen | Tim Dau

Schreib einen Kommentar

Pflichtfelder sind mit * markiert.



Durch das Fortsetzen der Benutzung dieser Seite, stimmst du der Benutzung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen", um Ihnen das beste Surferlebnis möglich zu geben. Wenn Sie diese Website ohne Änderung Ihrer Cookie-Einstellungen zu verwenden fortzufahren, oder klicken Sie auf "Akzeptieren" unten, dann erklären Sie sich mit diesen.

Schließen