Protocol

The Lanbahn protocol is actually very simple (maybe too simple …).

Everyone (smartphone, tablet, decoder, …) is communicating via UDP Multicasts to everyone in the network (just like the tradional model railroad “Bus” systems). ASCII transmission is choosen because ease of debugging (and because your model railroad only needs a very small bandwidth compared to your 3 kids viewing 4K videostreams…).

The standard “channel” concept is also retained, so each accessory decoder and each locomotive are having a unique “address” (from 1 to 10000(?)).

The commands (Rev. 2.1):
SET <addr> <data>  and  READ <addr>
    set address 911 to state 1 by sending the message: “S 911 1″. 
    Trigger reading of channel 911 with “R 911″ – and the decoder
    with address 911 will respond with it’s current state 
    “S 911 1″.

FB <addr> <data> (FEEDBACK) 
    messages from the accessory decoders were introduced after the 
    experience of a noisy environment at the Warley Show (where 1 
    out of 500 commands did not reach the accessory) – “FB 911 1″ 
    meaning: command understood and having set decoder 911 to 1.
    
LOCO <addr> <speed> <direction> <f0> ... <fn>
    set speed, direction and functions of a locomotive. Locos have
    a separate command to allow an address space overlap between
    accessory decoders and locomotives to allow use of loco-numbers 
    (like "7411") as addresses.

RLOCO <addr>
    read current loco state from the central station (like SPROG) or
    from the locomotive decoder directly (if 2-way communication), i.e.
    a "FL .." response is triggered
    
FL <addr> <speed> <functions> (= FEEBACK from Loco)
    tbd.

LOCK <addr>
    is the same a set (“L 911 1″ = set channel 911 to 1 and lock 
    the decoder), except that it locks the decoder state afterwards
    (i.e. decoder will not respond to a new "SET” until it is 
    unlocked again or a new "Start of Day" message is received).

UNLOCK <addr>
    is unlocking a decoder (“U 987″ = unlock channel 987)
    
SOD = START OF DAY
    "SOD" means: all decoders back to start position (i.e. red
    for signals, closed for turnouts)
    
A = Announce
    regularly decoder capabilities can be announce, exact format
    still unclear, maybe something like
    "A arduino1 710T:711T:712T:740S:741S" 
    (= an arduino with hostname "arduino1" can control 3 turnouts
    (T) at addresses 710, 711, 712 and two signals with address 
    740 and 741)

RT <n> (= Routing)
    commands starting with “R” are used in routing, to announce 
    that a route was set or cleared.

A note on security:

There is no extra security built into the system, it is assumed that you are owning and securing the access to the WLAN (or even better have your own “model railroad WLAN” in your layout room with a nice little 20€ accesspoint). But use a password and WPA2 – anyone who has access to your WLAN can send UDP commands to your loco!