Skip to content

njesse/slotcar-timing

Repository files navigation

Slotcar-Zeitmessung (V1)

Einfache Zeitmessung fuer eine Slotcar-/Carrera-Bahn mit MQTT-Sensoren (ESP32), FastAPI-Backend und kleiner Weboberflaeche.

Voraussetzungen

  • Python 3.10 oder neuer
  • Lokaler MQTT-Broker im Heimnetz, z. B. Mosquitto

Installation

python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt

Konfiguration

Standardwerte fuer das Backend, die ueber Umgebungsvariablen ueberschrieben werden koennen:

  • MQTT_HOST (Standard: 192.168.2.186)
  • MQTT_PORT (Standard: 1883)
  • MQTT_TOPIC (Standard: slotcar/sensor)

Optional kannst du eine .env im Projektverzeichnis anlegen. Eine Vorlage liegt als .env.example bereit.

Start

uvicorn app.main:app --reload

Danach ist die Weboberflaeche typischerweise unter http://localhost:8080/ erreichbar.

Docker

Raspberry Pi (64-bit)

Dieses Projekt ist fuer Raspberry Pi OS 64-bit (linux/arm64) vorbereitet.

Image direkt auf dem Raspberry Pi bauen:

docker build -t slotcar-timing .

Container auf dem Raspberry Pi starten:

docker run --rm -p 8080:8080 ^
  -e MQTT_HOST=192.168.1.10 ^
  -e MQTT_PORT=1883 ^
  -e MQTT_TOPIC=slotcar/sensor ^
  -e PORT=8080 ^
  slotcar-timing

Danach ist die Weboberflaeche unter http://<raspberrypi-ip>:8080/ erreichbar.

Wichtig: MQTT_HOST muss auf die IP-Adresse oder den Hostnamen deines MQTT-Brokers im Heimnetz gesetzt werden, zum Beispiel 192.168.1.50 oder mosquitto.local.

Alternativ mit Docker Compose auf dem Raspberry Pi:

docker compose up -d --build

Vor dem Start in compose.yaml den Wert von MQTT_HOST auf deinen Broker anpassen.

Cross-Build von einem anderen Rechner

Wenn du das Image nicht auf dem Raspberry Pi selbst bauen willst, kannst du mit Docker Buildx ein ARM64-Image erstellen:

docker buildx build --platform linux/arm64 -t slotcar-timing:pi .

Falls du das Image direkt in eine Registry pushen willst:

docker buildx build --platform linux/arm64 -t <registry>/slotcar-timing:pi --push .

Oder lokal als Archiv exportieren:

docker buildx build --platform linux/arm64 -t slotcar-timing:pi --output type=docker .

Der Container selbst wird weiterhin mit uvicorn app.main:app --host 0.0.0.0 --port 8080 gestartet und ist damit im Netzwerk des Raspberry Pi erreichbar.

MQTT-Eventformat

Die Sensor-Events sollen als JSON gesendet werden, zum Beispiel:

{
  "device": "esp32_slotcar_01",
  "bahn": 1,
  "sensor": 2,
  "delta_ms": 842
}

Diese Events werden vom Backend empfangen und fuer die Zeitmessung verwendet.

ESP32 / Arduino-Sketch

Der ESP32-Sketch liegt unter esp32/slotcar-sensor/ESP32_SlotCar.ino.

Vor dem Flashen:

  1. esp32/slotcar-sensor/config.example.h nach esp32/slotcar-sensor/config.h kopieren
  2. WLAN, MQTT-Broker, DEVICE_ID und BAHN in config.h anpassen

config.h ist in .gitignore eingetragen, damit keine lokalen Zugangsdaten in GitHub landen.

About

Webbasierte Slotcar-Zeitmessung mit MQTT-Anbindung, Live-Rundenzeiten, Unterbrechungserkennung und einfacher Rennsession-Verwaltung. Hardware: ESP32 mit TCRT5000

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors