Skip to content

A model railway signalling system written in Python for the Raspberry Pi. Can be used with the Pi-SPROG command station for full DCC control of points and signals. Also supports train detection via the GPIO ports.

License

Notifications You must be signed in to change notification settings

johnrm174/model-railway-signalling

Repository files navigation

model-railway-signalling

A DCC model railway signalling application written in Python, enabling automated and interlocked layout signalling schemes to be designed and configured via the UI without the need to write any code. The application is primarily intended for the Raspberry Pi, but will also run on other platforms (albeit without some of the Raspberry-Pi specific interfacing functions).

  • Enables layout schematics to be created with signals, points, track sections and block instruments.
  • Supports most types of UK colour light signals, semaphore signals, and ground signals.
  • Interfaces with the Pi-SPROG DCC command station to drive the signals and points out on the layout.
  • Uses the Raspberry Pi GPIO inputs to provide train detection in support of signalling automation.
  • Incorporates MQTT networking to allow multiple signalling applications to be linked for larger layouts.
  • Provides a Public API to support custom layout control interfaces.

Example Screenshot

Configured / pre-installed systems are now available to purchase from: https://www.model-railway-signalling.co.uk/ The website also included a number of user guides that can be downloaded (in PDF format).

My youTube channel also has a number of videos demonstrating the use of the application: https://www.youtube.com/@DCCModelRailwaySignalling

What's new for Release 4.9.0:

  • New feature to drag and drop train designators between track sections (for cassette fiddle yards)
  • New option to offset the position of signal buttons (useful for busy schematics to deconflict)
  • New option to hide point buttons in Run Mode (if controlling only via setup/cleardown of routes)
  • New option to hide signal buttons in Run Mode (if controlling only via setup/cleardown of routes)
  • New menubar 'styles' feature to set (and apply) default styles for Route buttons, DCC Switches, signal buttons, point buttons, Track Sections, Route Lines (including points) and Text boxes
  • Width of track sections is now specified independently to the default label (4 to 30 characters)
  • Improved appearance of buttons and track sections when displayed on different colour backgrounds
  • Dynamic positioning of tooltips to ensure they always remain within the displayed area of the screen
  • Signal buttons will now only show "overridden" or "approach control set" if they are "OFF"
  • Bugfix to prevent schematic items being selected in Run Mode after scrolling the displayed area
  • Bugfix to route line highlighting (colour of the end-stops are now updated to show the route)

Example Screenshot2

Bug reports and feedback is welcome and appreciated:

  • What aspects are intuitive? What aspects aren't?
  • What aspects do you particularly like?
  • What aspects particularly irritate you?
  • What new features would you like to see?

email: [email protected] (if reporting bugs then please attach the sig file, application logs and any relevant screenshots)

Installing the application

For a first time installation use:

$ pip install model-railway-signals             <== This should work for most python installations
or
$ python -m pip install model-railway-signals   <== If the command line version of pip is not installed/enabled
or
$ python3 -m pip install model-railway-signals  <== If you have multiple major versions of python installed

When installing the application on later versions of python you may get the following error:

error: externally-managed-environment

To overcome this, add the '--break-system-packages' argument to the command - e.g.

$ pip install --break-system-packages model-railway-signals 

To upgrade to the latest version use:

$ pip install --upgrade model-railway-signals            <== This should work for most python installations
or
$ python -m pip install --upgrade model-railway-signals  <== If the command line version of pip is not installed/enabled
or
$ python3 -m pip install --upgrade model-railway-signals <== If you have multiple major versions of python installed

To remove the application:

$ pip uninstall model-railway-signals                    <== This should work for most python installations
or
$ python -m pip uninstall model-railway-signals          <== If the command line version of pip is not installed/enabled
or
$ python3 -m pip uninstall model-railway-signals         <== If you have multiple major versions of python installed

To install a specific version of the application the application:

$ pip install model-railway-signals==4.5.0               <== This should work for most python installations
or
$ python -m pip install model-railway-signals==4.5.0     <== If the command line version of pip is not installed/enabled
or
$ python3 -m pip install model-railway-signals==4.5.0    <== If you have multiple major versions of python installed

The application has minimum external dependencies (over and above the 'standard' python installation), 'pyserial' and 'paho-mqtt', both of which should automatically get installed with the application. If for some reason this doesn't happen (I've been made aware of one instance on a Windows platform) then these packages can be installed seperately (prior to installing the model-railway-signals package):

$ pip install paho-mqtt
$ pip install pyserial

If you want to use Block Instruments with full sound enabled (bell rings and telegraph key sounds) then you will also need to install the 'simpleaudio' package. If 'simpleaudio' is not installed then the application will still function correctly (just without sound).

$ pip install simpleaudio

If you are running on a later version of Python you may need to install libasound2 before the simpleaudio pip install will work.

$ sudo apt-get install libasound2-dev

Note that for Windows, the 'simpleaudio' it has a dependency on Microsoft Visual C++ 14.0 or greater (so you will need to ensure Visual Studio 2015 is installed first).

Running the application

The python package should be run as a module (note underscores):

$ python -m model_railway_signals  <== This should work for most python installations
or
$ python3 -m model_railway_signals <== If you have multiple major versions of python installed

If required, a layout schematic can be loaded at startup:

$ python -m model_railway_signals -f layout_file.sig

If required, the logging level can be specified at startup (ERROR, WARNING, INFO or DEBUG)

$ python -m model_railway_signals -f layout_file.sig -l DEBUG

Application documentation, can be found in the 'user_guide' folder: https://github.com/johnrm174/model-railway-signalling/tree/main/user_guide

Some example layout configuration files can be found in the 'configuration_examples' folder: https://github.com/johnrm174/model-railway-signalling/tree/main/configuration_examples

My youTube channel also has a number of videos demonstrating the use of the application: https://www.youtube.com/@DCCModelRailwaySignalling

And finally, a top tip for running the application on the latest Debian Bookworm release which uses Wayland as the GUI backend rather than X11 (which was the backend for previous Debian releases). I found that with Wayland, the Tkinter GUI performance was terrible for some reason (not just my application - python/Tkinter performance in general) - and that was running on a Raspberry Pi 5 which I would have expected to improve overall performance. Anyway, I found that the fix is to switch the GUI backend of the Raspberry Pi back to X11 - performance of the user interface is now lightning quick!

To change the backend - Run "sudo raspi-config", select 'Advanced Options' then 'Wayland' and select X11.

An additional benifit was that some of the other applications I use (such as the kazam video capture software) will now work as normal on the Raspberry Pi 5.