Little Geschrieben 14. März Geschrieben 14. März 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
Neo Geschrieben 14. März Geschrieben 14. März Hallo Little, wie sieht dein Sende-Code aus? Viele Grüße, Neo
Little Geschrieben 14. März Autor Geschrieben 14. März 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
gmd Geschrieben 14. März Geschrieben 14. März 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
Neo Geschrieben 14. März Geschrieben 14. März 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
Little Geschrieben 14. März Autor Geschrieben 14. März Hatte vergessen die Beispielmethode auszutauschen, Danke.... VG Little
Little Geschrieben 16. März Autor Geschrieben 16. März 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
Neo Geschrieben 17. März Geschrieben 17. März 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
Little Geschrieben 17. März Autor Geschrieben 17. März 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
Neo Geschrieben 17. März Geschrieben 17. März 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
Little Geschrieben 17. März Autor Geschrieben 17. März (bearbeitet) @Neo, Danke für die schnelle Hilfe. Es funktioniert tadellos. Viele Grüße Little Bearbeitet 17. März von Little
Little Geschrieben 17. März Autor Geschrieben 17. März So im Anhang der funktionierende Test, nochmals vielen Dank auch im Namen meines Freundes, für die schnelle Hilfe.... FS-Test2.zip
Little Geschrieben 18. März Autor Geschrieben 18. März 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden