Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Modeltreinenbeurzen door neudalhausenstadbahn
Vandaag om 00:10:03
Project seaside Germany door Ronald Halma
20 October 2025, 23:26:48
Het bouwen van een Philotrain 2400 kit door Huup
20 October 2025, 23:22:53
Mijn eerste H0-modeltreinbaan in aanbouw door Robert vh Prutsert
20 October 2025, 23:13:34
Märklin 2025 door Edwin2121992
20 October 2025, 23:11:41
Schroefkoppeling voor H0. door Edwin2121992
20 October 2025, 23:09:16
Modelspoor Vereniging Nijkerk MVN Nijkerk door Train Charter Services
20 October 2025, 23:03:33
MODELSPOOR by MTD - 2025 - 18 & 19 oktober 2025 in Edegem (B) door Ronald Halma
20 October 2025, 22:52:31
Bouwbeschrijving mat' 36 ElD-4 van MK-Modelbouwstudio's door Pauldg
20 October 2025, 22:24:31
Materieel verzameling van Michiel(NDS) door T.Spat
20 October 2025, 22:19:35
Verwisselen koppelingen Hamo 1205 door Ferdinand Bogman
20 October 2025, 22:14:42
West-Brabantse modelspoordagen door HenkN
20 October 2025, 21:25:38
Werking Piko goldcap i.c.m. met niet-Piko decoder door De eerste Ivo
20 October 2025, 21:21:20
Am Ende der Strecke, modulebaan op 1 M2 door Frank 123
20 October 2025, 21:16:39
NL cameo layout (0,26m2) door Joran
20 October 2025, 20:38:07
Cherteau, fictieve Waals industriedorp door NS264
20 October 2025, 20:36:29
Nederland jaren 50 op basis van mijn roots door defender
20 October 2025, 20:23:16
Diorama Oelde Mittelweg Hp door neudalhausenstadbahn
20 October 2025, 20:23:03
Mijn eerste baan, Hexental in ho. 380x 120cm door wob
20 October 2025, 19:43:39
BMB-Module: “Corfe Castle Station” door Hans van de Burgt
20 October 2025, 19:22:16
Aachenau West door wob
20 October 2025, 19:17:34
Rheinburg, TP V/VI door gdh
20 October 2025, 19:07:07
Zaterdag, 1 november 2025 | 7e Ruilbeurs MSV Post B door Kees-Jan
20 October 2025, 18:46:48
Pendel module Viessmann 5214 door Te 2/2
20 October 2025, 17:57:31
PB Models, ICR-rijtuigen door Huup
20 October 2025, 17:55:12
Het einde van de RhB- Chiavenna Stazione Merci door AP3737
20 October 2025, 17:51:57
Ermehuizen, dienstregelingsjaar 1973/1974 door gtw6016
20 October 2025, 17:25:44
Bruggen-IG - brug over de Poldervaart Schiedam/Kethel door Forever Rocofan
20 October 2025, 17:22:45
Ombouw/Pimpen Bolle neuzen door bollen neus
20 October 2025, 16:41:37
MSC HetSpoor-ClubTentoonstelling~Niklaas-Niklaas~6+7dec.'25 door hervé
20 October 2025, 15:55:00
  

Auteur Topic: Python en Z21-centrale  (gelezen 1057 keer)

Medtskie

  • Offline Offline
  • Berichten: 17
Python en Z21-centrale
« Gepost op: 01 June 2025, 22:05:24 »
Hallo,

Ik zou graag via Python code kunnen connecteren op de witte Z21-centrale (bijvoorbeeld om zelf acties te genereren op basis van de bezetmelder, zoals seinen te kunnen aansturen door gebruik te maken van Python en Arduino) maar het lukt mij niet. Heb zowel chatgpt als copilot geïnterpelleerd maar we slagen er niet in om bijvoorbeeld iets simpel als het serienummer op te vragen.

Ter info : ik heb de unlock code geïnstalleerd.

We hebben zowel de firewall van mijn Avast antivirus alsook de Windows firewall uitgeschakeld om zeker te zijn dat er ergens de nodige poorten niet open staan.

Hieronder de Python code die ik uitgetest heb, zonder resultaat positief resultaat :

Output Python programma :

[Poging 1] Geen antwoord (timeout)
[Poging 2] Geen antwoord (timeout)
[Poging 3] Geen antwoord (timeout)
Serienummer niet ontvangen.

Python code :

import socket
import struct
import time

Z21_IP = '192.168.1.25'
Z21_PORT = 21105

# ✅ Socket openen op poort 21105 (zoals Z21 verwacht)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 21105))  # Belangrijk!
sock.settimeout(1)

# 🔐 Stap 1 – Aanmelden bij Z21
broadcast_cmd = bytes([0x40, 0x01, 0x00, 0x00, 0x00, 0x00])
sock.sendto(broadcast_cmd, (Z21_IP, Z21_PORT))
time.sleep(0.1)

# 📦 Stap 2 – Vraag serienummer op
get_serial_cmd = bytes([0x40, 0x00, 0x00, 0x00, 0x00, 0x00])

success = False
for poging in range(3):
    try:
        sock.sendto(get_serial_cmd, (Z21_IP, Z21_PORT))
        time.sleep(0.1)
        data, addr = sock.recvfrom(1024)
        print(f"[Poging {poging+1}] Ontvangen {len(data)} bytes van {addr}: {data.hex()}")

        if data[0] == 0x40 and len(data) >= 8:
            serial_bytes = data[4:8]
            serial_number = struct.unpack('<I', serial_bytes)[0]
            print(f"Serienummer van Z21: {serial_number}")
            success = True
            break
        else:
            print("Onverwacht antwoord ontvangen")

    except socket.timeout:
        print(f"[Poging {poging+1}] Geen antwoord (timeout)")

sock.close()

if not success:
    print("Serienummer niet ontvangen.")

input("Druk op Enter om af te sluiten...")

Dank voor  jullie antwoord.

Hans.
« Laatst bewerkt op: 02 June 2025, 13:58:40 door Reinout van Rees. Reden: code binnen code tags »

AP3737

  • Offline Offline
  • Berichten: 391
Re: Python en Z21-centrale
« Reactie #1 Gepost op: 01 June 2025, 22:29:32 »
Beste Hans

Bij dit soort problemen pak ik vaak wireshark. Daarmee kan ik het netwerk verkeer monitoren en bepalen of er iets verzonden is, en iets teruggestuurd.

Groet, Aiko

reinderlf

  • Traintastic!
  • Offline Offline
  • Berichten: 111
    • traintastic.org
Re: Python en Z21-centrale
« Reactie #2 Gepost op: 01 June 2025, 23:33:33 »
Hi Hans,

Zoals Aiko aangeeft zou ik zeker even WireShark installeren, dat helpt echt enorm om bij de start te zien of er wat gebeurt. WireShark heeft ook heel veel decoders voor verschillende protocollen, Z21 LAN is daar ook 1 van zo te zien: https://www.wireshark.org/docs/dfref/z/z21.html

Je LAN_GET_SERIAL_NUMBER commando klopt niet, dat moet zijn:
get_serial_cmd = bytes([0x04, 0x00, 0x10, 0x00])
Heb je de Z21 LAN protocol specification gelezen? Je kunt hem vinden op: https://www.z21.eu/media/Kwc_Basic_DownloadTag_Component/root-en-main_47-1652-959-downloadTag-download/default/d559b9cf/1646977702/z21-lan-protokoll-en.pdf
Hier staat precies in per command wat je moet sturen en wat je terug kunt verwachten :) Deze heb ik ook gebruikt om de Z21 toe te voegen aan Traintasic] (C++).

Ben wel benieuwd wat je precies wil gaan doen met de seinen en Arduino. Wil je je seinen aansluiten op een Arduino?

Groeten,
Reinder



« Laatst bewerkt op: 01 June 2025, 23:44:39 door reinderlf »

Medtskie

  • Offline Offline
  • Berichten: 17
Re: Python en Z21-centrale
« Reactie #3 Gepost op: 02 June 2025, 11:37:47 »
Dag Reinder,

Inderdaad, lijkt me gewoon leuk om dat zelf te proberen  ;D

En ik speel ook met het idee om een overweg dmv een servo op een Arduino aan te sluiten waarbij ofwel een response van de Z21 geldt als trigger om de slagbomen naar beneden te doen. Ofwel gebruik ik een IR-bewegingssensor waarbij het opmerken van een voorbij komende trein als trigger te gebruiken voor de slagbomen.
« Laatst bewerkt op: 02 June 2025, 12:04:08 door Medtskie »

Reinout van Rees

  • Team forummoderators
  • Offline Offline
  • Berichten: 7759
  • Forummoderator
    • Persoonlijke website + weblog
Re: Python en Z21-centrale
« Reactie #4 Gepost op: 02 June 2025, 14:05:02 »
Je gebruikt het z21-protocol omdat je daar met de wifi makkelijk bij kan? Leuk idee.
Ik heb de indruk dat meestal het eigenlijke dcc signaal wordt uitgelezen/aangestuurd. Maakt de z21 alle dcc signalen ook via z'n eigen protocol beschikbaar? Op zich moet de app enzo erbij kunnen via het protocol, dus misschien wel.

Reinout
Bouw v/d EifelBurgenBahn (h0, zijlijn in de Eifel)
Eifelgeschiedenis (verhalen en video's over de Eifelburgenbahn)

Ronaldk

  • Offline Offline
  • Berichten: 8821
    • Bouw Endstation der Linie: Bahnhof Poggendam
Re: Python en Z21-centrale
« Reactie #5 Gepost op: 02 June 2025, 17:21:19 »
JIk heb de indruk dat meestal het eigenlijke dcc signaal wordt uitgelezen/aangestuurd. Maakt de z21 alle dcc signalen ook via z'n eigen protocol beschikbaar? Op zich moet de app enzo erbij kunnen via het protocol, dus misschien wel.

Dat is het eigen Z21/Wlanmaus protocol of het xpressnet over lan-protocol. De DCC-commando's staan in principe alleen op de baan. De DCC-Commando's en bezetmeldingen worden vaak dan via LocoNet en/of XpressNet verspreid naar andere apparaten binnen het "netwerk". In de kabels zitten vaak wel twee pinnen voor het dcc-signaal.  Alleen de centrale moet het een en ander wel ondersteunen. De Z21 deed nooit de bezetmeldingen op de fysieke XpressNet-bus zetten. Dus daar heb je helaas niets aan als je daar aan wil lurken voor bezetmeldingen.
« Laatst bewerkt op: 02 June 2025, 17:27:04 door Ronaldk »
Zijn we aan het bouwen? Ja! We zijn aan het bouwen: Ronald’s nieuwe project: Endstation der Linie: Bahnhof Poggendam!

bask185

  • Offline Offline
  • Berichten: 5086
Re: Python en Z21-centrale
« Reactie #6 Gepost op: 02 June 2025, 20:56:08 »
Ik dacht dat de z21s tegenwoordig wel de bezetmeldinfo op de Xnet bus zetten. Over ethernet/wlan moeten ze dat sws doen. Anders weten de computer programma's niet waar de treinen zijn.

De Loconet aansluiting van de Z21 voert geen DCC signaal. Men dient immers ook Z21 CAN bus boosters te gebruiken  bij een Z21 ;) . In Xnet wordt nooit DCC gevoerd.

@hans.
Ik zelf zie geen voordeel van aparte R-bus bezetmelders gebruiken voor een DCC aangestuurde overgang. Je moet daarvoor zelf je python scriptje bezetmeldinfo laten vertalen naar accessoire instructies. Dat krijg je wel werkend, maar het is ook een beetje moeilijk doen voor weinig gains.

Als je met een Arduino speelt kan je net zo goed daar een paar stroomdetecties aanhangen en een zelf bediende overgang van maken. Ik heb daar een kant en klaar programma voor die tevens ook zo'n geekcreit mp3 module aanstuurt voor een beetje audio  ;D mocht je interesse hebben.

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)