Jump to content
Zum Start hinzufügen

Weitere Informationen

3D-Modellbahn Studio

Eine Vollbild-App auf Ihrem Startbildschirm mit Push-Benachrichtigungen und mehr.

So installieren Sie diese App auf iOS und iPadOS
  1. Tippen Sie auf das Teilen-Symbol in Safari
  2. Scrollen Sie durch das Menü und tippen Sie auf Zum Startbildschirm hinzufügen.
  3. Tippen Sie oben rechts auf Hinzufügen.
So installieren Sie diese App auf Android
  1. Tippen Sie auf das 3-Punkte-Menü (⋮) in der oberen rechten Ecke des Browsers.
  2. Tippen Sie auf Zum Startbildschirm hinzufügen oder App installieren.
  3. Bestätigen Sie durch Tippen auf Installieren.

Empfohlene Beiträge

Geschrieben

Folgendes Python-File funktioniert hervorragend zum Status-Empfang vom MBS aller Signale....

import socket
import json

host = "127.0.0.1"  # IP-Adresse des Studios
port = 31386  # Port für Ereignisse

# Verbindung zu Port 31386 (Ereignisse) herstellen
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((host, port))  # Verbindung herstellen
    while True:
        # Ereignis empfangen
        response = s.recv(4096)  # Antwort vom Server empfangen
        if response:
            event = json.loads(response.decode())  # Antwort als JSON parsen
            if event.get("method") == "layout.eventTriggered":
                # Überprüfen, ob es sich um das richtige Ereignis handelt
                event_params = event.get("params")
                signal_name = event_params.get("params", {}).get("signal", {}).get("name")
                state = event_params.get("params", {}).get("state")
                print(f"Ereignis empfangen: Signal '{signal_name}' hat den Zustand {state}")
            else:
                print("Unbekanntes Ereignis erhalten:", event)

Leider versuche ich erfolglos über Port 31385 zum MBS zu senden, hat da jemand eine Idee?

Schönes Wochenende
VG Little

 

Geschrieben

Hallo Little,

wie sieht dein Sende-Code aus?

Viele Grüße,

Neo

Geschrieben
  • Autor

Hallo @Neo,

import socket
import json

host = "127.0.0.1"  # IP des Computers, auf dem das Modellbahn Studio läuft
port = 31385  # Port für Kommandos (nicht Ereignisse)

# Beispiel: Kommando, um ein Signal zu schalten
request = {
    "jsonrpc": "2.0",
    "method": "layout.setSignalState",  # Beispielmethode, die das Signal schaltet
    "params": {
        "signal": {
            "_class": "entity",  # Klasse der Entität (Signal)
            "name": "Signal1"  # Name des Signals
        },
        "state": 1.0  # Zustand des Signals (z.B. 1.0 für "ein")
    },
    "id": 1  # Eindeutige ID für das Kommando
}

# Verbindung zum Studio aufbauen
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((host, port))  # Verbindung zu Port 31385
    s.sendall((json.dumps(request) + "\n").encode())  # Kommando als JSON senden
    response = s.recv(4096)  # Antwort vom Server empfangen
    print("Antwort vom Server:", response.decode())  # Ausgabe der Antwort
Geschrieben

Little,
Es gibt keine funktion layout.setSignalState
Du kannst nur ein script snippet schicken mit 

{"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "print('Hallo Welt') return 42", "id": 1}

Ich rate dir Putty zu benutzen und die messages manuell zu testen.
Gruss
Gmd
 

 

Geschrieben

Woher hast du die Funktion "layout.setSignalState"? Korrekt wäre:

{"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "local signal = layout:getEntityByName('Signal1') signal.state = 1", "id": 1}

Abgesehen von den Funktionen im Wiki läuft die Steuerschnittstelle über die Ereignisverwaltung, also über Lua.

Viele Grüße,

Neo

Geschrieben
  • Autor

Hatte vergessen die Beispielmethode auszutauschen, Danke....

VG
Little

Geschrieben
  • Autor

Hallo @Neo,

{"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "local signal = layout:getEntityByName('Signal1') signal.state = 1", "id": 1}

funktioniert tadellos. Kannst Du mir nur zur Gedankenstütze den gleichen Code für z.B. Fahrstrasse1 zeigen? ich hab irgendwie einen Denkfehler....

Viele Grüße
Little

Geschrieben

Hallo Little,

für Fahrstraßen verwendest du layout:getRoutesByName, musst aber bedenken, dass hier eine Liste zurückgegeben wird, die entweder leer ist oder auch mehr als einen Eintrag enthalten kann.

Viele Grüße,

Neo

Geschrieben
  • Autor

Hallo @Neo,

ich steh gerade total auf dem Schlauch, wollte für meinen behinderten Freund, der Taster nur mit den Füßen bedienen kann, eine klein Python-Steuerung erstellen, Weiche und Signale funktionieren aber an der Aktivierung der Fahrstraße bin ich gescheitert. Nur wenn Du Zeit und Lust hast, kannst Du Dir die beigefügten Beispieldateien bitte mal anschauen und evtl. korrigieren.

Viele Grüße
Little

FS_Test.zip

Geschrieben

Hallo Little,

dein Lua-Code ist nicht korrekt:

local route = layout:getRoutesByName('{fs_name}')state = 1

getRoutesByName liefert eine Tabelle zurück, du musst per Index auf das erste Element zugreifen. Und wenn du eine Fahrstraße aktivieren willst, nutzt du die Eigenschaft "active":

local route = layout:getRoutesByName('{fs_name}')[1] route.active = true

Teste deine Skripte einfach im Studio mit der EV, wenn sie dort funktionieren, kannst du sie per Steuerschnittstelle übermitteln.

Viele Grüße,

Neo

Geschrieben
  • Autor

@Neo,

Danke für die schnelle Hilfe. Es funktioniert tadellos.

Viele Grüße 

Little

Bearbeitet von Little

Geschrieben
  • Autor

So im Anhang der funktionierende Test, nochmals vielen Dank auch im Namen meines Freundes, für die schnelle Hilfe....

FS-Test2.zip

Geschrieben
  • Autor

Hallo MBSler,

hab mal etwas Python-Coding betrieben, macht sehr viel Spass zusammen mit Json-Schnittstelle zum und vom Studio. Wen es interessiert, im Anhang eine Testanlage und ein py-File....

Nochmals vielen Dank an @Neo und @gmd , ihr habt einige Lücken in meinem Denkapparat gefüllt....

VG Little

FS-Test-neu.zip

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Push-Benachrichtigungen konfigurieren

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.