Installation der notwendigen Python-Tools
- Python 3.8 oder neuer installieren (z.B. über
sudo apt install python3 python3-venv python3-pip).
- Virtuelle Umgebung anlegen (empfohlen):
python3 -m venv moba_cam
- Virtuelle Umgebung aktivieren:
source moba_cam/bin/activate
- Alle benötigten Python-Pakete installieren:
pip install opencv-python numpy pillow
- Für Raspberry Pi GPIO-Unterstützung zusätzlich:
pip install RPi.GPIO
(nur auf Raspberry Pi notwendig)
Stellen Sie sicher, dass Sie die virtuelle Umgebung vor dem Start der Anwendung immer aktivieren!
Hilfe: Moba Cam v0.1
Willkommen zur Hilfe für Moba Cam v1.0 mit Rocrail-Anbindung für Modelleisenbahnen.
🚂 Leichtgewichtig und schnell! Moba Cam v1.0 nutzt klassische Bildverarbeitung mit OpenCV - keine KI/YOLO/CUDA-Abhängigkeiten. Ideal für Modellbahn-Anwendungen, wo der Fahrzeugtyp keine Rolle spielt.
🍓 GPIO-Unterstützung für Raspberry Pi! Bis zu 8 Relais können direkt per GPIO gesteuert werden.
🔀 Weichensteuerung! Zwei grafische Weichen (W1/W2) mit klickbaren Symbolen, editierbaren Namen und Skript-Unterstützung.
🚉 Schattenbahnhof-Automatik! Automatische Steuerung eines Schattenbahnhofs mit 3 Gleisen basierend auf Motion-Detection-Zonen.
📷 Automatische Belegungserkennung: Erkennt beim Programmstart automatisch welche Gleise belegt sind durch Bildvergleich mit Referenzbild.
Übersicht der Benutzeroberfläche
Linker Bereich (Video & Motion-Steuerung)
- Videoanzeige: Zeigt das Live-Bild der Kamera. Erkannte Bewegungen werden mit gelb/cyan-farbenen Rechtecken markiert. Bewegungsrichtungspfeile (optional) zeigen die Richtung der Bewegung an.
- Motion EIN/AUS: Schaltet die Bewegungserkennung und die Auswertung der Trigger-Zonen ein oder aus.
- Schwelle: Empfindlichkeit der Bewegungserkennung (Standard: 25). Niedrigere Werte erkennen subtilere Bewegungen.
- Min.Größe: Minimale Größe in Pixel² für erkannte Bewegungen (Standard: 500). Kleinere Werte erkennen kleinere Objekte.
- Blur: Gaussian Blur Kernel-Größe (Standard: 21, muss ungerade sein). Kleinere Werte für mehr Details.
- Dilate: Anzahl der Dilate-Iterationen (Standard: 2). Höhere Werte verbinden nahe Bewegungen.
- Pfeile: Checkbox zum Ein-/Ausschalten der Bewegungsrichtungspfeile im Videobild.
- Aufl.: Zeigt die aktuelle Auflösung des Kamerabildes.
- Quelle: Zeigt die verwendete Videoquelle (Kamera-ID oder URL).
- FPS: Zeigt die aktuelle Bildwiederholrate.
- Maus: Zeigt die X/Y-Koordinaten der Maus im Videobild (nützlich zum Definieren von Zonen).
- Skripte laden: Lädt die verfügbaren Skripte aus der
script.txt neu.
- Konfig. speichern: Speichert die aktuellen Einstellungen in die
config.txt.
- Konfig. laden: Lädt die Einstellungen aus der
config.txt neu.
- Kamera-Auflösung: Dropdown zur Auswahl der Kameraauflösung (640x480 bis 1920x1080).
- Bereich wählen: Aktiviert den ROI-Auswahlmodus (Region of Interest).
- Zonen bearbeiten: Aktiviert den Zonen-Bearbeitungsmodus.
- DEBUG Modus: Aktiviert zusätzliche Debug-Ausgaben im Log.
- Debug in debug.log: Schreibt Debug-Informationen zusätzlich in eine separate Datei.
- Hilfe anzeigen: Öffnet diese Hilfedatei.
- Beenden: Schließt die Anwendung.
Mittlerer Bereich (Rocrail & Log)
- Server Nachrichten & Log: Zeigt Log-Meldungen, gesendete und empfangene Rocrail-Nachrichten sowie Fehler an.
- Log löschen: Leert das Log-Fenster (nicht die Log-Dateien).
- Rocrail Verbindung:
- Host: IP-Adresse oder Hostname des Rocrail-Servers (Standard:
localhost).
- Port: Port des Rocrail-Servers (Standard:
8051).
- Verbinden/Trennen: Stellt die Verbindung zum Rocrail-Server her oder trennt sie.
- GPIO Relais-Steuerung (Raspberry Pi):
- Status: Zeigt an, ob GPIO verfügbar ist (nur auf Raspberry Pi).
- R1-R8: Buttons zum Umschalten der 8 Relais.
- Pin-Eingabe: BCM-GPIO-Nummer für jeden Relais-Kanal (konfigurierbar).
- LED-Anzeige: Grün = Relais EIN, Grau = Relais AUS.
- Alle AUS: Schaltet alle Relais aus.
- Weichensteuerung (W1/W2):
- Name: Editierbarer Weichenname (wird auch in Skripten verwendet).
- Symbol: Klickbares grafisches Weichensymbol - obere Hälfte = Rund, untere Hälfte = Gerade.
- Leuchteffekt: Die aktive Stellung wird grün leuchtend dargestellt.
- Rund Pin/ms: GPIO-Pin und Impulszeit für Stellung "Rund".
- Gerade Pin/ms: GPIO-Pin und Impulszeit für Stellung "Gerade".
- Skript-Hinweis: Zeigt das Skript-Format für Weichenbefehle.
Rechter Bereich (Aktionsauswahl)
- Moduswahl:
Motion löst Skript aus: Die konfigurierten Motion-Trigger werden aktiv und können Skripte auslösen.
Manuelles Skript: Ermöglicht die manuelle Auswahl und Ausführung eines Skripts.
- Motion-Trigger 1-9 (Einfach):
- LED-Anzeige: Grün wenn Skript läuft, grau wenn inaktiv.
- Aktiv: Aktiviert/deaktiviert diesen Trigger.
- Zone: Wählt eine Trigger-Zone aus. Bewegung in dieser Zone löst den Trigger aus.
- Skript: Das Rocrail-Skript, das ausgeführt wird.
- Motion-Trigger 10 (Kombiniert):
- Zone 1 / Zone 2: Zwei Zonen müssen gleichzeitig Bewegung erkennen.
- Skript: Wird nur ausgeführt wenn BEIDE Zonen Bewegung melden.
- Manuelle Skriptausführung:
- Skript wählen: Auswahl eines Skripts aus der
script.txt.
- Sofort Ausführen: Startet das ausgewählte Skript manuell.
- Rocrail-Befehl: Direktes Senden einzelner Befehle mit History-Funktion.
Bewegungsrichtungspfeile
🏹 NEU: Bewegungsrichtungserkennung!
Die Anwendung kann die Bewegungsrichtung erkannter Objekte anzeigen:
- Aktivierung: Checkbox "Pfeile" in der Motion-Parameter-Zeile.
- Anzeige: Magentafarbene Pfeile zeigen vom Mittelpunkt der Bewegung in Bewegungsrichtung.
- Geschwindigkeit: Die Pfeillänge entspricht der Bewegungsgeschwindigkeit (20-50 Pixel).
- Mindestbewegung: Pfeile werden nur bei Bewegungen > 5 Pixel angezeigt.
- Tracking: Die Anwendung verfolgt Bewegungen über mehrere Frames (max. 100 Pixel Abstand).
Dies ist nützlich um zu erkennen, in welche Richtung sich Züge auf der Modellbahn bewegen.
Bewegungserkennungs-Parameter
Die folgenden Parameter können live angepasst werden und werden in der config.txt gespeichert:
| Parameter |
Standard |
Beschreibung |
Tipps |
| Schwelle |
25 |
Helligkeitsunterschied ab dem eine Bewegung erkannt wird (0-255). |
10-15 für dunkle/kontrastarme Objekte. 30-50 für hellere Umgebungen. |
| Min.Größe |
500 |
Mindestfläche in px² für erkannte Bewegungen. |
100-200 für kleine Objekte (N-Spur). 500-1000 für größere Objekte (H0). |
| Blur |
21 |
Gaussian Blur Kernel-Größe (muss ungerade sein). |
5-11 für mehr Details. 21-31 für weniger Rauschen. |
| Dilate |
2 |
Anzahl der Dilate-Iterationen zur Konturerweiterung. |
3-5 verbindet nahe Bewegungen. 0-1 für präzisere Erkennung. |
Tipp für dunkle Objekte: Schwelle=10-15, Blur=9-11, Dilate=3-4
ROI-Auswahl (Region of Interest)
Die ROI-Funktion ermöglicht es, nur einen bestimmten Bildbereich für die Bewegungserkennung zu verwenden.
ROI-Bereich festlegen:
- Klicken Sie auf "Bereich wählen".
- Ziehen Sie mit gedrückter linker Maustaste ein Rechteck über den gewünschten Bereich.
- Ein grünes Rechteck zeigt die aktuelle Auswahl.
- Klicken Sie auf "Zurück zum Hauptprogramm".
Trigger-Zonen bearbeiten
Mit dem Zonen-Editor können Sie Trigger-Zonen interaktiv anpassen.
Zonen-Bearbeitungsmodus:
- Klicken Sie auf "Zonen bearbeiten".
- Klicken Sie auf eine Zone um sie auszuwählen (wird grün).
- Ziehen Sie die Zone zum Verschieben.
- Ziehen Sie an den Ecken (grüne Kreise) zum Größe ändern.
- Klicken Sie auf "Zonen speichern" um die Änderungen zu speichern.
Konfigurationsdateien
config.txt - Programmeinstellungen
[Camera]
video_source = 0
width = 800
height = 600
[ROI]
enabled = false
x = 0
y = 0
width = 800
height = 600
[Connection]
host = localhost
port = 8051
[Motion]
motion_threshold = 25
motion_min_area = 500
motion_blur_size = 21
motion_dilate_iter = 2
debug_mode = false
debug_log_file = false
[TriggerZonen]
; Format: zonen_name = x_mitte, y_mitte, halbe_breite, halbe_hoehe
zone_1_links = 200,300,50,50
zone_2_mitte = 400,300,50,50
zone_3_rechts = 600,300,50,50
; ... weitere Zonen ...
[Scripting]
ausloesemodus = ki_trigger
; Trigger 1-9
trigger_1_active = true
trigger_1_target_script = mein_skript_script
trigger_1_target_zone = zone_1_links
; ... für Trigger 2-9 analog ...
; Kombinierter Trigger 10
trigger_10_active = false
trigger_10_target_zone1 = zone_10_A
trigger_10_target_zone2 = zone_10_B
trigger_10_target_script = kombi_skript_script
[CommandHistory]
count = 2
cmd0 = lc id="Lok1" cmd="velocity" v="30"
cmd1 = switch id="sw1" cmd="straight"
[GPIO]
gpio_1_pin = 17
gpio_2_pin = 27
gpio_3_pin = 22
gpio_4_pin = 23
gpio_5_pin = 24
gpio_6_pin = 25
gpio_7_pin = 5
gpio_8_pin = 6
[Weichen]
; Weiche W1
w1_name = W1
w1_rund_pin = 17
w1_rund_time = 500
w1_gerade_pin = 27
w1_gerade_time = 500
; Weiche W2
w2_name = W2
w2_rund_pin = 22
w2_rund_time = 500
w2_gerade_pin = 23
w2_gerade_time = 500
[Gleise]
; Gleisanzeige
gleis1_name = Gleis1
gleis1_pin = 24
gleis2_name = Gleis2
gleis2_pin = 25
gleis3_name = Gleis3
gleis3_pin = 12
script.txt - Rocrail-Aktionsskripte
[einfahrt_script]
; Weichenstraße für Einfahrt Gleis 1
cmd1 = <switch id="sw1" cmd="straight"/>
cmd2 = <switch id="sw2" cmd="turn"/>
cmd3 = <pause=0.5>
cmd4 = <signal id="einfahrt_signal" state="green"/>
[lok_start_script]
; Lok langsam anfahren
cmd1 = <lc id="BR218" cmd="velocity" v="30"/>
cmd2 = <pause=3>
cmd3 = <lc id="BR218" cmd="velocity" v="50"/>
[rangierfahrt_script]
; Rangierfahrt mit Rückmelder-Warten
cmd1 = Log: Starte Rangierfahrt
cmd2 = <lc id="Lok1" cmd="velocity" v="20"/>
cmd3 = <waitfb:fb_gleis2:timeout=30>
cmd4 = <lc id="Lok1" cmd="velocity" v="0"/>
cmd5 = Log: Ziel erreicht
# Deaktivierter Befehl (wird nicht ausgeführt):
# cmd6 = <lc id="Lok1" cmd="velocity" v="100"/>
Verfügbare Befehle:
- Rocrail XML:
<lc id="..." .../>, <switch .../>, <signal .../> etc.
- Pause:
<pause=SEKUNDEN> (z.B. <pause=2.5>)
- Warten auf Rückmelder:
<waitfb:ID:timeout=SEKUNDEN>
- Zone aktivieren:
<zone:NUMMER:enable>
- Zone deaktivieren:
<zone:NUMMER:disable>
- GPIO Relais EIN:
<gpio:PIN:on> (z.B. <gpio:17:on>)
- GPIO Relais AUS:
<gpio:PIN:off> (z.B. <gpio:17:off>)
- Weiche schalten (GUI):
<weiche:NAME:rund> oder <weiche:NAME:gerade> (z.B. <weiche:W1:rund>)
- Weiche schalten (direkt):
<weiche:NAME:PIN:MS> (z.B. <weiche:W1:17:500>)
- Gleis EIN:
<gleis:NAME:on> (z.B. <gleis:Gleis1:on> oder <gleis:1:on>)
- Gleis AUS:
<gleis:NAME:off> (z.B. <gleis:Gleis2:off> oder <gleis:2:off>)
- SBF aktivieren:
<sbf:enable> - Schattenbahnhof-Automatik aktivieren
- SBF deaktivieren:
<sbf:disable> - Schattenbahnhof-Automatik deaktivieren
- SBF zurücksetzen:
<sbf:reset> - Alle Gleisbelegungen zurücksetzen
- SBF Ausfahrt:
<sbf:ausfahrt> - Manuell Ausfahrt auslösen
- SBF Status:
<sbf:status> - Aktuellen SBF-Status anzeigen
- Kommentar: Zeilen mit
# am Anfang werden ignoriert.
- Log-Nachricht: Zeilen ohne
< werden nur geloggt.
Schattenbahnhof-Automatik (V5.0) mit Belegungserkennung (V6.0)
Die Schattenbahnhof-Automatik ermöglicht eine vollautomatische Steuerung eines Schattenbahnhofs mit 3 Gleisen basierend auf Motion-Detection-Zonen.
NEU in V6.0: Automatische Belegungserkennung beim Start
📷 Bildvergleich mit Referenzbild! Das System erkennt automatisch beim Programmstart, welche Gleise belegt sind.
Funktionsweise der Belegungserkennung:
- Referenzbild erstellen: Wenn der Schattenbahnhof LEER ist, klicken Sie auf "📷 Ref.Bild erstellen". Das Bild wird als
sbf_ref.png gespeichert.
- Automatische Erkennung: Beim Programmstart wird das aktuelle Kamerabild mit dem Referenzbild verglichen.
- Differenzerkennung: Für jede Gleis-Zone wird berechnet, wie stark sich das Bild vom Referenzbild unterscheidet.
- Schwellwert: Der konfigurierbare Schwellwert (Standard: 2.0%) bestimmt, ab wann ein Gleis als belegt gilt.
Erkennungsmethoden (Multi-Kriterien):
Die Erkennung verwendet 4 Methoden - mindestens 2 müssen erfüllt sein:
| Methode | Schwellwert | Beschreibung |
| Mittlerer Unterschied | > 8 | Durchschnittlicher Helligkeitsunterschied |
| Maximaler Unterschied | > 60 | Maximaler Helligkeitsunterschied in der Zone |
| Standardabweichung | > 12 | Streuung der Unterschiede (lokale Varianz) |
| Prozent über Schwelle | > Konfig. | Prozent der Pixel mit Unterschied > 5 |
Weichenstellung nach Erkennung:
- Freies Gleis vorhanden: Die Weichen werden automatisch auf das erste freie Gleis gestellt (Priorität: 1, 2, 3).
- Alle Gleise belegt: Dialog fragt ob Zug aus Gleis 1 ausfahren soll. Bei Bestätigung werden Weichen auf Gleis 1 gestellt.
GUI-Elemente für Belegungserkennung:
- Status-Anzeige: Zeigt ob Referenzbild vorhanden ist.
- 📷 Ref.Bild erstellen: Erstellt neues Referenzbild vom aktuellen Kamerabild.
- 🔍 Prüfen: Manuelle Belegungsprüfung mit detailliertem Ergebnis-Dialog.
- Schwellwert: In config.txt unter
[Schattenbahnhof] → belegung_schwellwert.
Gleisanzeige mit Signal-LEDs (V6.0):
- Signal-LEDs: Rote/grüne LEDs neben jedem Gleis zeigen den Belegungsstatus (Rot = Belegt, Grün = Frei)
Funktionsweise der Motion-Erkennung
- Gleisbelegung: Züge werden per Motion-Detection auf den Gleisen erkannt und die Belegung gespeichert (FIFO-Queue).
- Ausfahrt: Wird Bewegung in der Ausfahrt-Zone erkannt, kann ein Zug ausfahren.
Weichenlogik
| Ziel-Gleis | Weiche W1 | Weiche W2 |
| Gleis 1 | gerade | - |
| Gleis 2 | rund | rund |
| Gleis 3 | rund | gerade |
Konfiguration
- Gleis 1/2/3-Zone: Motion-Zonen für die Belegungserkennung der einzelnen Gleise
- Ausfahrt-Zone: Motion-Zone für die Ausfahrt-Erkennung
- Belegung-Schwellwert: Prozentsatz ab dem ein Gleis als belegt gilt (Standard: 2.0%)
Konfiguration in config.txt
[Schattenbahnhof]
auto_enabled = true
ausfahrt_zone = zone_ausfahrt
gleis1_zone = zone_1_gleis_1
gleis2_zone = zone_1_gleis_2
gleis3_zone = zone_1_gleis_3
belegung_schwellwert = 2.0
GUI-Elemente
- SBF-Automatik Checkbox: Aktiviert/Deaktiviert die Automatik
- Zone-Dropdowns: Auswahl der Motion-Zonen für Einfahrt, Gleise und Ausfahrt
- Status-LED: 🔴 = inaktiv, 🟢 = aktiv
- Reset-Button: Setzt alle Gleisbelegungen zurück
- Belegungserkennung: Status des Referenzbildes und Buttons für Erstellung/Prüfung
- Gleisanzeige: Gleis-Buttons mit Signal-LEDs (Rot=belegt, Grün=frei)
Skriptbeispiel
[sbf_einfahrt]
; Schattenbahnhof-Automatik starten
cmd1 = Log: Schattenbahnhof-Betrieb aktiviert
cmd2 = <sbf:enable>
cmd3 = <sbf:status>
[sbf_reset]
; Alle Gleise freigeben
cmd1 = Log: Schattenbahnhof wird zurückgesetzt
cmd2 = <sbf:reset>
cmd3 = <gleis:1:on>
cmd4 = <gleis:2:on>
cmd5 = <gleis:3:on>
[sbf_belegung_pruefen]
; Belegung per Bildvergleich prüfen
cmd1 = Log: Prüfe Gleisbelegung...
cmd2 = <sbf:check>
cmd3 = <sbf:status>
Wichtig für Belegungserkennung:
- Das Referenzbild muss bei leerem Schattenbahnhof erstellt werden!
- Die Gleis-Zonen müssen in der GUI den korrekten Trigger-Zonen zugewiesen sein.
- Bei ROI-Nutzung werden die Zonenkoordinaten automatisch angepasst.
- Das Referenzbild wird als PNG (verlustfrei) gespeichert für exakte Vergleiche.
GPIO-Steuerung (Raspberry Pi)
🍓 NEU in V2.0! Direkte Relais-Steuerung über GPIO-Pins auf dem Raspberry Pi.
Voraussetzungen:
- Raspberry Pi (beliebiges Modell mit GPIO-Header)
- RPi.GPIO Python-Bibliothek installiert (
pip install RPi.GPIO)
- Geeignete Relais-Module (z.B. 8-Kanal Relais-Board)
- Korrekte Verkabelung der GPIO-Pins mit den Relais
Standard-GPIO-Pins (BCM-Nummerierung):
| Relais | GPIO-Pin | Physischer Pin |
| R1 | 17 | Pin 11 |
| R2 | 27 | Pin 13 |
| R3 | 22 | Pin 15 |
| R4 | 23 | Pin 16 |
| R5 | 24 | Pin 18 |
| R6 | 25 | Pin 22 |
| R7 | 5 | Pin 29 |
| R8 | 6 | Pin 31 |
GPIO in Skripten verwenden:
[weichenheizung_script]
; Weichenheizung für 5 Sekunden einschalten
cmd1 = <gpio:17:on>
cmd2 = <pause=5>
cmd3 = <gpio:17:off>
[beleuchtung_script]
; Mehrere Relais schalten
cmd1 = <gpio:17:on>
cmd2 = <gpio:27:on>
cmd3 = <gpio:22:on>
cmd4 = <pause=10>
cmd5 = <gpio:17:off>
cmd6 = <gpio:27:off>
cmd7 = <gpio:22:off>
Hinweis: Auf nicht-Raspberry-Pi-Systemen (Windows, Linux PC) wird eine Warnung angezeigt, und GPIO-Befehle werden ignoriert. Das Programm funktioniert aber weiterhin für alle anderen Funktionen.
Weichensteuerung (W1/W2)
🔀 NEU in V4.0! Grafische Weichensteuerung mit klickbaren Symbolen.
Funktionsweise:
- Grafisches Symbol: Jede Weiche hat ein interaktives Symbol das die aktuelle Stellung zeigt.
- Klick-Steuerung: Klick auf obere Hälfte = Rund, Klick auf untere Hälfte = Gerade.
- Leuchteffekt: Die aktive Stellung wird grün leuchtend dargestellt, die inaktive grau.
- GPIO-Impuls: Beim Schalten wird ein kurzer GPIO-Impuls gesendet (Active LOW für Waveshare Relay Board).
- Editierbarer Name: Der Weichenname kann geändert werden und wird in Skripten erkannt.
Standard-Pins:
| Weiche | Rund Pin | Gerade Pin | Impulszeit |
| W1 | 17 | 27 | 500ms |
| W2 | 22 | 23 | 500ms |
Weichen in Skripten verwenden:
[weichenstrasse_script]
; Weichenstraße für Einfahrt mit GUI-Weichen
cmd1 = <weiche:W1:gerade>
cmd2 = <weiche:W2:rund>
cmd3 = <pause=0.5>
cmd4 = Log: Weichenstraße gestellt
[weiche_direkt_script]
; Weiche mit direkten Parametern (PIN:ZEIT_MS)
cmd1 = <weiche:W1:17:500>
cmd2 = <pause=1>
cmd3 = <weiche:W1:27:500>
[gleise_script]
; Gleise ein- und ausschalten
cmd1 = <gleis:Gleis1:on>
cmd2 = <gleis:2:on>
cmd3 = <pause=5>
cmd4 = <gleis:1:off>
cmd5 = <gleis:Gleis2:off>
Hinweis: Wenn der Skript-Befehl den gleichen Namen wie eine GUI-Weiche verwendet, wird das Symbol automatisch aktualisiert. Auch bei direkter Pin-Angabe wird das Symbol aktualisiert, wenn der Pin einer konfigurierten Weiche entspricht.
Gleisanzeige
🚃 NEU in V4.0! Drei Gleisanzeige-Buttons mit farbiger Statusanzeige.
Funktionsweise:
- Buttons: Drei Buttons (Gleis1, Gleis2, Gleis3) zum Ein-/Ausschalten.
- Farbcodierung: Grün = EIN (aktiv), Rot = AUS (inaktiv).
- GPIO-Steuerung: Jeder Button ist mit einem konfigurierbaren GPIO-Pin verbunden.
- Skript-Integration: Gleise können per Skript gesteuert werden.
Standard-Pins:
| Gleis | GPIO-Pin |
| Gleis1 | 24 |
| Gleis2 | 25 |
| Gleis3 | 12 |
Gleise in Skripten verwenden:
[beleuchtung_script]
; Gleisspannung einschalten
cmd1 = <gleis:Gleis1:on>
cmd2 = <gleis:2:on>
cmd3 = Log: Gleise 1 und 2 aktiv
[abschalten_script]
; Alle Gleise ausschalten
cmd1 = <gleis:1:off>
cmd2 = <gleis:2:off>
cmd3 = <gleis:3:off>
LED-Anzeigen für Trigger-Status
Jeder Motion-Trigger (1-10) hat eine LED-Anzeige:
- Graue LED: Skript läuft nicht.
- Grüne LED: Skript wird gerade ausgeführt.
Fehlerbehebung
- Keine Bewegung erkannt:
- Ist "Motion EIN" aktiviert?
- Schwelle reduzieren (z.B. auf 15).
- Min.Größe reduzieren (z.B. auf 200).
- Beleuchtung verbessern.
- Zu viele Fehlerkennungen:
- Schwelle erhöhen (z.B. auf 35).
- Min.Größe erhöhen (z.B. auf 1000).
- Blur erhöhen (z.B. auf 31).
- Skripte werden nicht ausgeführt:
- Rocrail-Verbindung prüfen!
- Modus "Motion löst Skript aus" aktiv?
- Trigger auf "Aktiv" gesetzt?
- Gültiges Skript ausgewählt?
- Bewegung in der richtigen Zone?
- Kamera nicht gefunden:
- Kamera angeschlossen?
- video_source in config.txt prüfen (0, 1, 2... oder URL).
Performance-Tipps
- Niedrigere Auflösung: 640x480 oder 800x600 für bessere FPS.
- MJPEG-Codec: Die Anwendung versucht automatisch MJPEG zu aktivieren.
- ROI nutzen: Nur relevante Bildbereiche analysieren.
- Pfeile deaktivieren: Wenn Bewegungsrichtung nicht benötigt wird.
Version: v0.1 - Moba Cam mit automatischer Belegungserkennung
Reine Motion-Detection basierte Bewegungserkennung für Modellbahnen:
- ✅ Keine KI/YOLO/CUDA-Abhängigkeiten
- ✅ Leichtgewichtig und schnell
- ✅ Klassische Bildverarbeitung mit OpenCV
- ✅ 10 konfigurierbare Trigger-Zonen
- ✅ Bewegungsrichtungspfeile
- ✅ ROI-Auswahl und Zonen-Editor
- ✅ Rocrail-Integration
- ✅ Rückmelder-Warte-Funktion
- ✅ Befehlshistorie
- ✅ GPIO-Relais-Steuerung (8 Kanäle)
- ✅ Grafische Weichensteuerung (W1/W2)
- ✅ Klickbare Weichensymbole mit Leuchteffekt
- ✅ Schattenbahnhof-Automatik mit 3 Gleisen
- ✅ NEU: Automatische Belegungserkennung beim Start
- ✅ NEU: Referenzbild-Vergleich (PNG, verlustfrei)
- ✅ NEU: Multi-Kriterien-Erkennung (4 Methoden)
- ✅ NEU: Automatische Weichenstellung nach Erkennung
- ✅ NEU: Signal-LEDs an den Gleisen (Rot/Grün)
- ✅ NEU: Gleisanzeige mit Signal-LEDs (Rot=belegt, Grün=frei)
- ✅ Skripte ohne Rocrail-Verbindung ausführbar