JMRI Code: Network Access
This page describes various forms of network access available in JMRI. More capabilities are added all the time, so please check with the user group for up-to-date information.
Methods of Network Access
JMRI interacts with networks in two basic forms: downstream connections and upstream connections.A downstream connection allows JMRI to connect to a layout via a network for operations and control. This uses a network connection to do the same kinds of things that are often done via serial RS232 and USB links. In the client-server architecture, JMRI is usually one of potentially many clients connecting to a server in this case.
An upstream connection allows other devices to command JMRI over a network connection. In this case, the network connection allows other devices and/or programs to do things that are normally done via scripts and the graphical user interface. In the client-server architecture, JMRI is usually a server with one or more clients connecting to it in this case.
Note that the JMRI JSON and Web servers can be used by other layout-connected devices such that both the JMRI application and the other device can be simultaneously "downstream" and "upstream" of each other for specific aspects of layout control. In this case, although JMRI is functionally the server (in a client-server architectural sense), it is receiving layout updates from the client device.
In the rest of this page, we provide links to the various examples of those two general areas.
Downstream (networked layout hardware) connections
- LocoNet systems
-
LocoNet
RMI client server connection
This uses Java RMI to provide client-server access to the LocoNet message stream on another JMRI instance.
-
LocoNet over TCP
This uses LocoNet over TCP to provide client-server access to the LocoNet message stream from various servers.
-
LocoNet
RMI client server connection
- C/MRI
- This exchanges the C/MRI poll/response protocol via a terminal server
- CAN via MERG Network Interface
- The network interface can be used for the CANEther, CANGC1e, CANPi and CBUS® Server.
- CBUS Server is a Node.js program to allow multiple network connections to a MERG CANUSB4. CBUS Server
- EasyDCC
- This exchanges the EasyDCC ASCII command station protocol via a terminal server
- JMRIClient
- NCE
- This exchanges the NCE command station protocol via a terminal server
- SRCP
- ECOS
- XPressNet
Upstream (networked JMRI operations) connections
- Built-in web server
(code)
This is advertised on Bonjour/Zeroconf as a "_http._tcp.local." service. In particular, this contains the JMRI JSON protocol, which allows web browsers to monitor and control a layout by accessing a JMRI JSON Servlet. It also includes facilities for displaying and clicking on any open JMRI window.
- Via Python/jython scripting
- For
remote throttles such as the iPhone or Android.
(code)
(WiThrottle product web
site) (Android
Engine Driver page)
This is advertised on Bonjour/Zeroconf as a "_withrottle._tcp.local." service.
- Via running JMRI as an Enterprise Java Bean
- Via providing a LocoNet RMI
server.
This is advertised on Bonjour/Zeroconf as a "_jmri-locormi._tcp.local." service.
- Via providing a LocoNet over TCP
implementation.
This is advertised on Bonjour/Zeroconf as a "_loconetovertcpserver._tcp.local." service. (Name pending approval from the original protocol developers)
- Via providing an SRCP server
implementation.
This is advertised on Bonjour/Zeroconf as a "_srcp._tcp.local." service.
- Via providing a JMRI Simple Server implementation.
See also the DNS-SD page for more information on Zeroconf/Bonjour/"DNS Service Discovery" networking.
Search "man dns-sd" for more information on the dns-sd debugging command-line tool.
CBUS® is a registered trade mark of Dr Michael Bolton