TCP Kommunikation Python | Abfrage Zugdaten
-
- Beiträge: 1
- Registriert: 10.02.2023 10:41:25
TCP Kommunikation Python | Abfrage Zugdaten
Liebe Community,
ich durchforste seit ein paar Tagen fleißig dieses Forum, aber bin leider noch nicht fündig geworden. Bewundere aber Euer Engagement und Kompetenz zu diesem Thema.
Mein Ziel: Ich würde gerne mit Hilfe von Python Zugdaten (Geschwindigkeit, Position) über TCP aus Zusi auslesen.
Ich kenne mich grob mit TCP aus. Grundsätzlich schaffe ich es auch rein in Python eine Server-Client Kommunikation mit Hilfe der Socket Bibliothek aufzubauen.
So wie ich das verstanden habe, sende ich "Befehle" an den Zusi-Server und dieser Antwortet mit den entsprechenden Informationen.
Nun würde ich gerne wissen, wie denn das Format der Datenpakete aussieht. Zum Beispiel, wie so ein Befehl konkret aussieht und in dem TCP-Datenpaket umgesetzt wird.
Ich habe von Zusi eine Dokumentation mit Befehls-IDs bekommen, aber leider ist es darin nicht sehr ausführlich beschrieben, wie die Umsetzung aussieht.
In dem Forum wird immer von einer Server-Dokumentation gesprochen. Habe diese aber leider nicht gefunden. Könnte dies jemand bitte verlinken.
Prima wäre es, wenn Ihr ein Beispiel in Python vorstellen könntet:
- Also Eröffnung der Kommunikation/Anmeldung beim Server
- Abfrage der Zuggeschwindigkeit
Verwendet wird ZUSI3
Einfach ein kurzes Skript, wie das aussieht wäre super.
Ich hoffe ich konnte mein Problem verständlich schildern. Und bin gespannt auf Eure Beiträge!
ich durchforste seit ein paar Tagen fleißig dieses Forum, aber bin leider noch nicht fündig geworden. Bewundere aber Euer Engagement und Kompetenz zu diesem Thema.
Mein Ziel: Ich würde gerne mit Hilfe von Python Zugdaten (Geschwindigkeit, Position) über TCP aus Zusi auslesen.
Ich kenne mich grob mit TCP aus. Grundsätzlich schaffe ich es auch rein in Python eine Server-Client Kommunikation mit Hilfe der Socket Bibliothek aufzubauen.
So wie ich das verstanden habe, sende ich "Befehle" an den Zusi-Server und dieser Antwortet mit den entsprechenden Informationen.
Nun würde ich gerne wissen, wie denn das Format der Datenpakete aussieht. Zum Beispiel, wie so ein Befehl konkret aussieht und in dem TCP-Datenpaket umgesetzt wird.
Ich habe von Zusi eine Dokumentation mit Befehls-IDs bekommen, aber leider ist es darin nicht sehr ausführlich beschrieben, wie die Umsetzung aussieht.
In dem Forum wird immer von einer Server-Dokumentation gesprochen. Habe diese aber leider nicht gefunden. Könnte dies jemand bitte verlinken.
Prima wäre es, wenn Ihr ein Beispiel in Python vorstellen könntet:
- Also Eröffnung der Kommunikation/Anmeldung beim Server
- Abfrage der Zuggeschwindigkeit
Verwendet wird ZUSI3
Einfach ein kurzes Skript, wie das aussieht wäre super.
Ich hoffe ich konnte mein Problem verständlich schildern. Und bin gespannt auf Eure Beiträge!
- Carsten Hölscher
- Administrator
- Beiträge: 33442
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Geht es wirklich um Zusi 2?
Carsten
Carsten
-
- Beiträge: 155
- Registriert: 21.08.2019 07:12:42
- Aktuelle Projekte: Bildfahrplan
- Wohnort: Trier
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Hallo Maximilian,
Du bist hier im falschen Forumsteil für ZUSI2-Technik.
Du schreibst aber, daß Du ZUSI3 verwendest.
Ich verwende die TCP-Schnittstelle in meine Python-Programm Bildfahrplangenerator.
Die SW findest Du hier:
https://github.com/haroldlinke/ZUSI_TimeTableGraph
Das TCP-Protokoll ist in der ZUSI_TCP_Class verpackt.
https://github.com/haroldlinke/ZUSI_Tim ... P_class.py
Vielleicht hilft Dir das weiter.
Viele Grüße
Harold
Du bist hier im falschen Forumsteil für ZUSI2-Technik.
Du schreibst aber, daß Du ZUSI3 verwendest.
Ich verwende die TCP-Schnittstelle in meine Python-Programm Bildfahrplangenerator.
Die SW findest Du hier:
https://github.com/haroldlinke/ZUSI_TimeTableGraph
Das TCP-Protokoll ist in der ZUSI_TCP_Class verpackt.
https://github.com/haroldlinke/ZUSI_Tim ... P_class.py
Vielleicht hilft Dir das weiter.
Viele Grüße
Harold
- Carsten Hölscher
- Administrator
- Beiträge: 33442
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Die beiden mitgelieferten Demo-Programme mit Quellcode helfen ggf. auch.
Carsten
Carsten
-
- Beiträge: 287
- Registriert: 01.06.2015 14:11:25
- Aktuelle Projekte: http://www.zusidatenbank.de/
- Wohnort: BW Schöneweide
Re: TCP Kommunikation Python | Abfrage Zugdaten
Es gibt doch in Doku(in meiner Version 11.3.4) ein komplettes Beispiel-Session mit die volle Inhalt von jede Byte der geschickt und empfängt werden muss, um eine Verbindung aufzubauen. Ist das irgendwo verloren gegangen?Ich habe von Zusi eine Dokumentation mit Befehls-IDs bekommen, aber leider ist es darin nicht sehr ausführlich beschrieben, wie die Umsetzung aussieht.
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Hallo Maximilian,
es gibt noch eine Python-Bibliothek unter https://github.com/jokey2k/pyzusi3 und meine Implementation: https://github.com/machinae-vectoriae-d ... tischumbau.
Jetzt habe ich auch mal das Programm von Harold gesehen. Auch interessant.
Viele Grüße Wolfgang
es gibt noch eine Python-Bibliothek unter https://github.com/jokey2k/pyzusi3 und meine Implementation: https://github.com/machinae-vectoriae-d ... tischumbau.
Jetzt habe ich auch mal das Programm von Harold gesehen. Auch interessant.
Viele Grüße Wolfgang
Zuletzt geändert von Wolfgang E. am 12.02.2023 05:40:47, insgesamt 1-mal geändert.
Re: TCP Kommunikation Python | Abfrage Zugdaten
Gerne auch Fragen dazu hier stellen
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Hallo Markus,
ich habe jetzt mal eine erste Fahrpultsoftware mit pyzusi3 Version 2.0.0 erstellt. Das geht sehr gut und erspart mir eine Menge Arbeit.
Ich hätte mir etwas Dokumentation dazu gewünscht, um die Funktionalität nicht aus den Beispielprogrammen und der Bibliothek herauslesen zu müssen. Aber ich kenne das selber: Ingenieure und Programmierer schreiben nicht gerne. Ging aber auch so.
Wenn man Status Zugverband anfordert (8E) erhält man die Meldung:
NotImplementedError: Parameter ParameterId(id1=2, id2=10, id3=142, id4=1, id5=53, id6=None) is not unique for <class 'pyzusi3.messages.STATUS_ZUGVERBAND_FAHRZEUG'>, programming error!
Das liegt nach meiner Vermutung daran, dass in Zeile 1534 der Datei messages.py
LLP(PID(2, 0x0a, 0x8e, 0x01, 0x35), 'bremskraft_handbremse', ContentType.SINGLE),
statt
LLP(PID(2, 0x0a, 0x8e, 0x01, 0x36), 'bremskraft_handbremse', ContentType.SINGLE),
steht. Korrekt?
Nach der Änderung bekomme ich leider
NotImplementedError: Unknown content type <class 'pyzusi3.nodes.BasicNode'> given
ERROR:ZusiLZB:Unknown content type <class 'pyzusi3.nodes.BasicNode'> given
was ich selber nicht mehr deuten kann.
In Zeile 713, 716, 719 steht EINGELETITET statt EINGELEITET.
Zudem gibst Du viele Werte nicht numerisch aus, sondern mit enum als Text. Das mag für eine Anwendung wie pyzusidisplay vorteilhaft sein, für die Ausgabe an Hardware finde ich es eher umständlich. Ich wandele es jetzt so in den Zahl zurück:
if type(state.lm_notbremsung) is zusi3msg.LMZUSTAND_MIT_INVERS:
for lm in zusi3msg.LMZUSTAND_MIT_INVERS:
if lm == state.lm_notbremsung:
Anzeigedaten["LMNBrems"] = lm.value
Das scheint mir aber nur mäßig elegant. Hättest Du vielleicht einen besseren Vorschlag?
Viele Grüße
Wolfgang
ich habe jetzt mal eine erste Fahrpultsoftware mit pyzusi3 Version 2.0.0 erstellt. Das geht sehr gut und erspart mir eine Menge Arbeit.
Ich hätte mir etwas Dokumentation dazu gewünscht, um die Funktionalität nicht aus den Beispielprogrammen und der Bibliothek herauslesen zu müssen. Aber ich kenne das selber: Ingenieure und Programmierer schreiben nicht gerne. Ging aber auch so.
Wenn man Status Zugverband anfordert (8E) erhält man die Meldung:
NotImplementedError: Parameter ParameterId(id1=2, id2=10, id3=142, id4=1, id5=53, id6=None) is not unique for <class 'pyzusi3.messages.STATUS_ZUGVERBAND_FAHRZEUG'>, programming error!
Das liegt nach meiner Vermutung daran, dass in Zeile 1534 der Datei messages.py
LLP(PID(2, 0x0a, 0x8e, 0x01, 0x35), 'bremskraft_handbremse', ContentType.SINGLE),
statt
LLP(PID(2, 0x0a, 0x8e, 0x01, 0x36), 'bremskraft_handbremse', ContentType.SINGLE),
steht. Korrekt?
Nach der Änderung bekomme ich leider
NotImplementedError: Unknown content type <class 'pyzusi3.nodes.BasicNode'> given
ERROR:ZusiLZB:Unknown content type <class 'pyzusi3.nodes.BasicNode'> given
was ich selber nicht mehr deuten kann.
In Zeile 713, 716, 719 steht EINGELETITET statt EINGELEITET.
Zudem gibst Du viele Werte nicht numerisch aus, sondern mit enum als Text. Das mag für eine Anwendung wie pyzusidisplay vorteilhaft sein, für die Ausgabe an Hardware finde ich es eher umständlich. Ich wandele es jetzt so in den Zahl zurück:
if type(state.lm_notbremsung) is zusi3msg.LMZUSTAND_MIT_INVERS:
for lm in zusi3msg.LMZUSTAND_MIT_INVERS:
if lm == state.lm_notbremsung:
Anzeigedaten["LMNBrems"] = lm.value
Das scheint mir aber nur mäßig elegant. Hättest Du vielleicht einen besseren Vorschlag?
Viele Grüße
Wolfgang
- Carsten Hölscher
- Administrator
- Beiträge: 33442
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Wer ist hier Markus?
Carsten
Carsten
- Johannes
- Beiträge: 3203
- Registriert: 14.03.2009 22:36:06
- Aktuelle Projekte: Zusitools (http://git.io/zusitools)
Re: TCP Kommunikation Python | Abfrage Zugdaten
Du kannst einfach "state.lm_notbremsung.value" schreiben.machina-vectoria hat geschrieben: ↑11.08.2023 19:11:51 if type(state.lm_notbremsung) is zusi3msg.LMZUSTAND_MIT_INVERS:
for lm in zusi3msg.LMZUSTAND_MIT_INVERS:
if lm == state.lm_notbremsung:
Anzeigedaten["LMNBrems"] = lm.value
Das scheint mir aber nur mäßig elegant. Hättest Du vielleicht einen besseren Vorschlag?
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Laut dem Eintrag im github-Projekt pyzusi3 jokey2k.
Ich frage mich mittlerweile selber, warum ich einen Alias gewählt habe und nicht meinen Klarnamen. Spätestens, wenn man die Dokumentation zu meinem Führertischumbau liest, weiß man, wie ich heiße und wo ich arbeite. Wenigstens auf den Vor- und Nachname trifft das auf jokey2k auch zu.
Viele Grüße Wolfgang
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
-
- Beiträge: 6293
- Registriert: 09.11.2002 02:00:47
Re: TCP Kommunikation Python | Abfrage Zugdaten
@machina-vectoria
Carsten ändert auch Forennamen ...
Gruß
Ralf
Carsten ändert auch Forennamen ...
Gruß
Ralf
- Leonard K.
- Beiträge: 1062
- Registriert: 12.06.2020 19:03:07
- Aktuelle Projekte: NMH
Re: TCP Kommunikation Python | Abfrage Zugdaten
Unter "Profil" -> "Registrierungs-Details ändern" kann man den Benutzernamen auch selbst ändern.
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Danke für den Anstoß. Ich habe es jetzt auf Wolfgang E. geändert.
Viele Grüße Wolfgang
Viele Grüße Wolfgang
- Leif K.
- Beiträge: 358
- Registriert: 30.04.2023 10:33:53
- Aktuelle Projekte: Fahrplaneditor lernen und verstehen
- Wohnort: KKUZ (kennt das noch jemand?), am Wochenende EDG
Re: TCP Kommunikation Python | Abfrage Zugdaten
Guten Morgen Wolfgang,
kurzes Off-Topic: die Umstellung auf Klarnamen erleichtert zwar die Kommunikation im Forum, aber Deinem Alias werde ich trotzdem nachtrauern. Ich fand ihn zumindest unter den „neueren“ Forenmitgliedern den mit weitem Abstand originellsten und interessantesten.
… sagt Dir ein altsprachlich ausgebildeter Ingenieurskollege (dürfte auch eher selten sein )
Schönes Wochenende & Viele Grüße,
Leif
kurzes Off-Topic: die Umstellung auf Klarnamen erleichtert zwar die Kommunikation im Forum, aber Deinem Alias werde ich trotzdem nachtrauern. Ich fand ihn zumindest unter den „neueren“ Forenmitgliedern den mit weitem Abstand originellsten und interessantesten.
… sagt Dir ein altsprachlich ausgebildeter Ingenieurskollege (dürfte auch eher selten sein )
Schönes Wochenende & Viele Grüße,
Leif
„Die Neugier steht immer an erster Stelle des Problems, das gelöst werden soll.“ (Galileo Galilei). Oder schlichter gesagt: Bei ehrlicher Neugier gibt es keine dummen Fragen.
Danke & Beste Grüße, Leif
Danke & Beste Grüße, Leif
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Hallo Leif,
vielen Dank für das Kompliment. Ich muss gestehen, dass ich es extra nachgeschaut hatte. Ich habe zwar Latinum, aber davon ist praktisch nichts übrig geblieben. Bei github verbleibt der erweiterte Name ja.
Viele Grüße Wolfgang
vielen Dank für das Kompliment. Ich muss gestehen, dass ich es extra nachgeschaut hatte. Ich habe zwar Latinum, aber davon ist praktisch nichts übrig geblieben. Bei github verbleibt der erweiterte Name ja.
Viele Grüße Wolfgang
- Leif K.
- Beiträge: 358
- Registriert: 30.04.2023 10:33:53
- Aktuelle Projekte: Fahrplaneditor lernen und verstehen
- Wohnort: KKUZ (kennt das noch jemand?), am Wochenende EDG
Re: TCP Kommunikation Python | Abfrage Zugdaten
Hallo Wolfgang,
Gern geschehen … Keine Sorge, von meinem Latinum und Graecum habe ich auch das meiste vergessen. Es hilft mir noch manchmal, in den Sprachen der Mittelmeerländern ein paar Brocken lesen zu können. Aber das ist ja oft auch schon was, z.B. für italienische, rumänische oder katalanische Eisenbahnliteratur. Leider gibt es in beiden letzteren Sprachen kein so großes Angebot
Viele Grüße, Leif
Gern geschehen … Keine Sorge, von meinem Latinum und Graecum habe ich auch das meiste vergessen. Es hilft mir noch manchmal, in den Sprachen der Mittelmeerländern ein paar Brocken lesen zu können. Aber das ist ja oft auch schon was, z.B. für italienische, rumänische oder katalanische Eisenbahnliteratur. Leider gibt es in beiden letzteren Sprachen kein so großes Angebot
Viele Grüße, Leif
„Die Neugier steht immer an erster Stelle des Problems, das gelöst werden soll.“ (Galileo Galilei). Oder schlichter gesagt: Bei ehrlicher Neugier gibt es keine dummen Fragen.
Danke & Beste Grüße, Leif
Danke & Beste Grüße, Leif
-
- Beiträge: 588
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Ich bin jetzt ein wenig weiter und vermute, dass bei pyzusi nur erprobt wurde, was auch für die beiliegenden Demo-Programme gebraucht wurde. Das ist okay, man hätte aber vielleicht darauf hinweisen können. Also werde ich wohl versuchen das zu debuggen, bis alles funktioniert, was ich selber benötige. Dabei bin ich auf folgendes Problem gestoßen:
In 02 0A 65 05 12 01 (Herkunft des ETCS-Vorschaupunktes) sind laut Doku die Werte 1, 3, 9, 14 und 17 definiert. Gesendet wird häufig aber auch eine 15. Fehlt dieser Wert nur in der Beschreibung oder ist das ein Fehler in Zusi3?
Viele Grüße Wolfgang
In 02 0A 65 05 12 01 (Herkunft des ETCS-Vorschaupunktes) sind laut Doku die Werte 1, 3, 9, 14 und 17 definiert. Gesendet wird häufig aber auch eine 15. Fehlt dieser Wert nur in der Beschreibung oder ist das ein Fehler in Zusi3?
Viele Grüße Wolfgang
- Jens Haupert
- Beiträge: 4920
- Registriert: 23.03.2004 14:44:34
- Aktuelle Projekte: http://www.zusidisplay.de
- Wohnort: Berlin
- Kontaktdaten:
Re: TCP Kommunikation Python | Abfrage Zugdaten
Hallo Wolfgang,
wie man an den IDs dieser Liste entnehmen kann, gibt es Lücken, die nicht in der Doku beschrieben sind. Grund ist, dass es sich um eine Zusi-interne Datenstruktur handelt, für alle möglichen "Signale", die hier Ausgangspunkt eines Eintrags sein könnten. Es werden in der Doku aber nur die Typen gelistet, die laut Carsten für die Vorschau von Bedeutung sind. ZD beispielsweise ignoriert einfach alle Informationen, die unbekannt sind. Z.B. auch im Attribut 00 05.
Grüße
Jens
wie man an den IDs dieser Liste entnehmen kann, gibt es Lücken, die nicht in der Doku beschrieben sind. Grund ist, dass es sich um eine Zusi-interne Datenstruktur handelt, für alle möglichen "Signale", die hier Ausgangspunkt eines Eintrags sein könnten. Es werden in der Doku aber nur die Typen gelistet, die laut Carsten für die Vorschau von Bedeutung sind. ZD beispielsweise ignoriert einfach alle Informationen, die unbekannt sind. Z.B. auch im Attribut 00 05.
Grüße
Jens