4.8 KiB
4.8 KiB
XpressNet vs LocoNet vs Roco Z21 over WebSocket/TCP
Date: 23 février 2026
This note compares XpressNet, LocoNet, and Roco Z21 for use in this project where protocol messages are exchanged through a TCP connection via WebSocket.
Scope
- Compare all options on:
- Functionality
- Simplicity of implementation
- Assume transport is not native bus wiring, but encapsulated over WebSocket/TCP.
Quick Summary
- XpressNet is generally simpler to implement as a request/response protocol with clearer master/slave behavior.
- LocoNet is generally richer and more event-driven, but that usually means more parser/state complexity.
- Roco Z21 is typically the easiest for IP-native integration because it is already network-oriented.
- For a minimal and reliable WebSocket bridge:
- easiest IP-native path: Roco Z21
- easiest classic bus-style path: XpressNet
Functional Comparison
| Area | XpressNet | LocoNet | Roco Z21 |
|---|---|---|---|
| Architecture style | Master/slave polling/request-response | Multi-master event bus with asynchronous traffic | IP/LAN command protocol |
| Locomotive control | Strong support (speed, direction, functions) | Strong support (speed, direction, functions) | Strong support (speed steps, direction, functions) |
| Accessory control | Supported | Supported | Supported |
| Feedback/sensors | Supported, often through explicit queries | Strong asynchronous event reporting | Supported (depends on connected modules and setup) |
| Bus arbitration concerns | Lower in logical model | Higher (collision/arbitration model in native bus semantics) | Low at application layer (network transport handles link-level arbitration) |
| Typical message flow | More deterministic sequences | More spontaneous/event-driven traffic | Command/response plus asynchronous status updates |
| Ecosystem breadth | Strong in Lenz/XpressNet-oriented environments | Very broad in Digitrax/LocoNet ecosystems | Strong in Roco/Fleischmann Z21 ecosystems |
Simplicity Comparison (for WebSocket/TCP)
XpressNet
Pros:
- Easier command/response mapping to WebSocket request IDs.
- More deterministic transactions reduce server-side state machine complexity.
- Simpler for first implementation of throttle + function control.
Cons:
- Can require periodic polling for some status data.
- Less naturally event-driven than LocoNet.
LocoNet
Pros:
- Naturally event-oriented; good for pushing updates to all connected WebSocket clients.
- Very capable for layouts with rich feedback traffic.
Cons:
- More complex parser/state handling due to asynchronous mixed traffic.
- Harder to keep deterministic behavior for beginners.
- Requires careful handling of event ordering and duplication in TCP/WebSocket bridge logic.
Roco Z21
Pros:
- IP-native model maps naturally to TCP/WebSocket gateway designs.
- Good fit when your command station already exposes Z21 LAN interfaces.
- Usually less protocol-bridging effort for app/web control.
Cons:
- More tied to Z21 ecosystem assumptions and command set.
- Feature depth can vary with hardware/firmware capabilities.
- Integration with non-Z21-specific buses may still need mapping layers.
WebSocket/TCP Considerations (all options)
- Add an application frame format (JSON or binary) with:
type(protocol/command)seqor transaction IDtimestamp- payload bytes or structured fields
- Handle reconnect cleanly:
- session restore (selected loco, speed, function states)
- idempotent command handling where possible
- Separate command channel and telemetry/events logically (even if same WebSocket).
- Add rate limiting/coalescing for high-frequency updates (speed sliders, feedback bursts).
- Define timeout + retry policy at bridge layer, not only protocol layer.
Practical Recommendation
If the priority is simplicity and quick delivery for a WebSocket-based controller:
- If a Z21 command station is available, start with Roco Z21 for MVP.
- Otherwise start with XpressNet.
- Use LocoNet when rich asynchronous bus events are a primary requirement.
- Implement core features first:
- loco select
- speed/direction
- function groups (F0+)
- accessory switch basic commands
- Add event streaming abstractions in your WebSocket API so a future backend swap (XpressNet/LocoNet/Z21) can fit without breaking clients.
If the priority is richer asynchronous layout events from day one and complexity is acceptable:
- Choose LocoNet and invest early in robust event/state synchronization.
Suggested API-neutral internal model
To support all three options long-term, keep an internal domain model independent of bus specifics:
ThrottleCommandFunctionCommandAccessoryCommandFeedbackEventPowerStateEvent
Then map protocol-specific frames to/from this model.