TCP Kommunikation Python | Abfrage Zugdaten

Das Unterforum für Diskussionen rund um die Technik, Bedienung, Konfiguration usw. Das ist auch die erste Anlaufstelle für Bastler mit Fragen zu den Editoren.
Nachricht
Autor
Maximilian
Beiträge: 1
Registriert: 10.02.2023 10:41:25

TCP Kommunikation Python | Abfrage Zugdaten

#1 Beitrag von Maximilian »

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! :)

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP Kommunikation Python | Abfrage Zugdaten

#2 Beitrag von Carsten Hölscher »

Geht es wirklich um Zusi 2?

Carsten

hlinke
Beiträge: 153
Registriert: 21.08.2019 07:12:42
Aktuelle Projekte: Bildfahrplan
Wohnort: Trier
Kontaktdaten:

Re: TCP Kommunikation Python | Abfrage Zugdaten

#3 Beitrag von hlinke »

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

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP Kommunikation Python | Abfrage Zugdaten

#4 Beitrag von Carsten Hölscher »

Die beiden mitgelieferten Demo-Programme mit Quellcode helfen ggf. auch.

Carsten

jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

Re: TCP Kommunikation Python | Abfrage Zugdaten

#5 Beitrag von jonathanp »

Ich habe von Zusi eine Dokumentation mit Befehls-IDs bekommen, aber leider ist es darin nicht sehr ausführlich beschrieben, wie die Umsetzung aussieht.
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?
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Wolfgang E.
Beiträge: 569
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

#6 Beitrag von Wolfgang E. »

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
Zuletzt geändert von Wolfgang E. am 12.02.2023 05:40:47, insgesamt 1-mal geändert.

jokey2k
Beiträge: 24
Registriert: 03.04.2022 12:25:19

Re: TCP Kommunikation Python | Abfrage Zugdaten

#7 Beitrag von jokey2k »

Gerne auch Fragen dazu hier stellen :D

Wolfgang E.
Beiträge: 569
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

#8 Beitrag von Wolfgang E. »

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

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP Kommunikation Python | Abfrage Zugdaten

#9 Beitrag von Carsten Hölscher »

Wer ist hier Markus?

Carsten

Benutzeravatar
Johannes
Beiträge: 3197
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: TCP Kommunikation Python | Abfrage Zugdaten

#10 Beitrag von Johannes »

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?
Du kannst einfach "state.lm_notbremsung.value" schreiben.

Wolfgang E.
Beiträge: 569
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

#11 Beitrag von Wolfgang E. »

Carsten Hölscher hat geschrieben: 11.08.2023 19:44:58 Wer ist hier Markus?

Carsten
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

Wolfgang E.
Beiträge: 569
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

#12 Beitrag von Wolfgang E. »

Johannes hat geschrieben: 11.08.2023 20:29:21 Du kannst einfach "state.lm_notbremsung.value" schreiben.
Danke Johannes. Manchmal kommt man sich nach der Antwort ganz schön dumm wegen der gestellten Frage vor.

Viele Grüße Wolfgang

F(R)S-Bauer
Beiträge: 6281
Registriert: 09.11.2002 02:00:47

Re: TCP Kommunikation Python | Abfrage Zugdaten

#13 Beitrag von F(R)S-Bauer »

@machina-vectoria

Carsten ändert auch Forennamen ...

Gruß

Ralf

Benutzeravatar
Leonard K.
Beiträge: 1051
Registriert: 12.06.2020 19:03:07
Aktuelle Projekte: NMH

Re: TCP Kommunikation Python | Abfrage Zugdaten

#14 Beitrag von Leonard K. »

Unter "Profil" -> "Registrierungs-Details ändern" kann man den Benutzernamen auch selbst ändern.

Wolfgang E.
Beiträge: 569
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

#15 Beitrag von Wolfgang E. »

Danke für den Anstoß. Ich habe es jetzt auf Wolfgang E. geändert.

Viele Grüße Wolfgang

Benutzeravatar
Leif K.
Beiträge: 348
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

#16 Beitrag von Leif K. »

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
„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

Wolfgang E.
Beiträge: 569
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

#17 Beitrag von Wolfgang E. »

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

Benutzeravatar
Leif K.
Beiträge: 348
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

#18 Beitrag von Leif K. »

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
„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

Wolfgang E.
Beiträge: 569
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

#19 Beitrag von Wolfgang E. »

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

Benutzeravatar
Jens Haupert
Beiträge: 4911
Registriert: 23.03.2004 14:44:34
Aktuelle Projekte: http://www.zusidisplay.de
Wohnort: Berlin
Kontaktdaten:

Re: TCP Kommunikation Python | Abfrage Zugdaten

#20 Beitrag von Jens Haupert »

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

Antworten