Release Notes for JMRI 5.0 release
Date: June 21, 2022
From: Bob Jacobsen
Subject: Production Release 5.0 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 4.99 series of JMRI test releases has resulted in a
version that's good enough to be recommended for general use, including by new users.
We're therefore making that version, "Production Release 5.0" available for download today.
Notes:
JMRI is now only available under the
GNU General Public License. For more information, please
see our
copyright and licensing page.
This release requires Java 11 to work.
(See our page on downloading and installing Java 11)
Update From Older JMRI Versions
If you are currently using a version older than JMRI 4.20, please follow these instructions carefully:
- Is your current version older than JMRI 4.12?
If so, then update to JMRI 4.12 first, and ensure everything works correctly: check
start-up, check things you need to be working, and check the JMRI log as well) before doing anything else.
Store your configuration and panel files under a new name and use those from now on.
Then continue with step 2.
If you are currently using JMRI 4.7.3 or earlier on Linux or macOS (Windows doesn't need this),
then it's very important
that you update to JMRI 4.12 and
carrying out the migration process described in the JMRI 4.12 release note
before updating to any later release.
- Is your current version older than JMRI 4.20?
Then update to JMRI 4.20 first, and ensure that works correctly (check
start-up, check things you need to be working, and check the JMRI log as well) before doing anything else.
Save your preferences again.
Store your configuration and panel files under a new name and use those from now on.
- You can then install this release.
Following this multi-step order of updating via stable major releases safeguards you against possible migration issues
that can arise from skipping these versions.
New problems with this release
- Since JMRI 4.99.9
There's a problem adding NCE AIU sensors using the NS50:1 format.
As a workaround, you can add them with the full numeric address: NS123.
The fix will be available in JMRI 5.1.3
- Since JMRI 4.99.1
There's a problem locating and operating ECoS sensors. The fix will
be available in JMRI 5.3.7
New warnings for this production release:
See the
JMRI 4.20 release note for more warnings predating the 4.99 development series,
including pointers to various migration issues.
These may be relevant to you if you're updating from an earlier version;
we strongly recommend you update to
JMRI 4.20
before installing this release.
- Since JMRI 4.99.2
Example scripts related to MQTT moved from jython directory to jython\MQTT directory. This will require
an update to any start-up actions that reference their location.
- Since JMRI 4.99.1
This release, and all subsequent ones, require the use of
Java 11 or later. Java 8 is explicitly not supported.
There's more information on this migration on the
JMRI Tech Road Map and
JVM Capabilities pages.
- Since JMRI 4.99.1
A number of classes and methods that have been deprecated for a long time
are removed in this release. These include:
- apps.JmriPlugin
- apps/startup/StartupActionFactory
- Routes/Turnouts/Sensors: One form of getNextAddress
- Handling of preferences from before JMRI 4.0; upgrade through JMRI 4.20 instead
- ShutDownTask, AbstractShutDownTask - use call & run methods now
- Removed JythonAutomaton, JythonAutomatonAction, JythonSiglet, JythonSigletAction
unused classes. These have been made obsolete by JMRI's native scripting,
and haven't been used since JMRI 1.2
- SSL (BlockBossLogic) - change to start/stop calls
- Various TrafficManagers.instance methods - use InstanceManager
- Throttle.getListeners() - use getPropertyChangeListeners
- Removed obsolete RosterRecorder class;
function now available via scripting
- Removed deprecated methods from Throttle panels
- Manager.getSystemNameList - rework with getNamedBeanSet
- Manager.getNamedBeanList - rework with getNamedBeanSet
- Manager.setPropertyChangesMuted - use setPropertyChangesSilenced
- Manager.getBeanBySystemName - use getBySystemName
- Manager.getBeanByUserName - use getByUserName
- FileChooserUtil
- get/setFontFamily in SystemConsolePreferencesManager
- throttle.FunctionPanel#changeState(..) has been replaced by #setSelected(..)
- Since JMRI 4.99.1
The PowerManager now only fires events with the id "power". Before this
release, it also fired events with the id "Power". Check that
your scripting code is looking for the right form.
- Since JMRI 4.99.1
This version no longer reads ZeroConf IPv4 and IPv6 preferences
written with JMRI 4.16 and before. Please make sure to upgrade
to JMRI 4.20 (or later) and save your preferences before
updating to this version if you have configured the WiThrottle preference pane.
- Since JMRI 4.21.1
The jmri.jmrix.SystemConnectionMemo class has become a jmri.SystemConnectionMemo
interface and a jmri.jmrix.DefaultSystemConnectionMemo class. This may
require changes to scripts. If you have a script that references
jmri.jmrix.SystemConnectionMemo, please change it to either
jmri.SystemConnectionMemo or jmri.jmrix.DefaultSystemConnectionMemo
(it's easier to have you just try the two than to explain which
one will work in which case)
- Since JMRI 4.21.1
The way preferences are loaded at startup has been slightly
modified. There is no impact to JMRI applications, but Non-JMRI
applications that are not derived from apps.Apps or apps.AppsBase
but are using jmri.implementation.JmriConfigurationManager to load
preferences will no longer see preferences if an error occurs. To
restore the old behavior, use apps.AppsConfigurationManager instead.
- Since JMRI 4.11.4
There are issues with the Pi-SPROG One command station operation. A number of workarounds should be applied:
- Do not turn on the track power until the power supply to the Pi-SPROG ONE is turned on
- Do not enable extra debugging through default.lcf, nor open the system console window
- Do not open the SPROG console window
- Disable power conversion (CV 29) in all locos
- If connecting via VNC (or similar), setup the screen layout before turning on the track power
Pi-SPROG One with version 2.4 or earlier firmware will cause a timeout after a track short circuit. A dialog box will
open to inform the user of this. The track power will be turned off and must be turned on again using the power control.
Download links:
This production version is made from test releases 4.99.1 through 4.99.10 The
list of changes
in those is
available from our code repository.
Hardware Support
C/MRI
- Added CmriExample.py,
a sample script for directly sending a C/MRI frame.
CBUS
- Lawicell devices - added RTR CAN Frame support.
- The consist tool is now available for the Pi-SPROG 3v2 in command station mode, the SPROG 3 Plus and the MERG CANCMD.
- Console - Added Throttle speed / direction translations.
DCC4pc
-
DCC4pc now has multi-system capability
DCC++ and DCC-EX
- handle new locoState reply to sync speed, dir and Fkeys
- Add throttle commands and replies to simulator
- Updated to take advantage of Version 4 changes
KPF-Zeller
LocoNet
- Updated some new IPL report messages
- Add configuration support for UR93, LNWIs. Allow updates for individual parameters.
- Added Digitrax DCS210Plus command station
- A storm of LocoNet messages could result if certain command station models
have track power turned off whem JMRI starts. The status enquiry messages would
fail, and JMRI would repeat them in an effort to get complete information from the layout.
This release no longer retries messages in that case. If you are not getting
initial status from some devices on your layout, you should power up
your LocoNet system, including track power, before starting JMRI.
- Configuration - Permit disabling of interrogate messages.
- Slotmonitor - better guess the column widths
- The DCS240 command station type was defaulting to the standalone programmer mode.
If a user was not paying attention, they would have issues trying to use all of the
command station capability.
- Some message interpretation features provided by "LocoNet Monitor" have been
'refactored' and slightly improved.
MERG
- The consist tool is now available for CBUS.
MQTT
- Native MQTT SignalMasts are available.
- Splash screen shows connection address
- LogixNG has now support for MQTT. If a MQTT connection is
defined, the category MQTT is visible with the LogixNG actions
Publish and Subscribe.
- Handled a case in MQTT signal masts that would cause a
spurious error message.
- Added a script to echo SignalHeads to MQTT
- Lawicell devices - added RTR CAN Frame support.
- Throttle support. JMRI Throttles can now operate
OpenLCB locomotives on OpenLCB / LCC Command Stations via the
Traction Protocol draft.
- Monitor Log updates. Decodes and prints the Traction
Protocol messages in the Monitor Log window.
- Accessibility changes. The network browser / tree is
now navigable using keyboard shortcuts. On the Configuration
Editor panel the keys F6 and Shift+F6 can be used to navigate
between subsequent sections of the configuration and the bar of
buttons at the bottom.
- Test Event button. In the Configuration Editor the
Event panels have a new button More... which opens a
dropdown. In the dropdown there is a Trigger button which sends
the given event. This is useful for testing. In the same
dropdown there is a Create Sensor button which for JMRI will
create a single-event sensor.
- Bug fixes. Fixes memory leak when opening many
different nodes' Configuration Editor windows. The CAN
Interface engine now correctly supports sending a message to a
Destination Node ID for which there is no currently registered
Alias in the Alias Map. The outgoing message will be enqueued
and an alias lookup interaction is triggered.
SPROG
- The consist tool is now available for the Pi-SPROG 3v2 in command station mode and for the SPROG 3 Plus.
TMCC
- Enabled functions 23-27 in the throttle.
Uhlenbrock Intellibox
- Improved handling of the decoder functions.
New / Updated decoder definitions
- Added multiple SUSI accessory decoder definitions.
Digitrax
- Added Kato EM13 in Digitrax family: newer versions of this decoder have a Digitrax manufacturer code and a full fledged Digitrax SW.
Doehler & Haas
ESU
- Fixed a problem introduced in JMRI 4.99.3 that
prevents the function settings from being properly stored.
Massoth
- New decoder definition for "Pulsed Smoker for round boilers" (product nr 8415001
MD Electronics
- Added a definition for the MDE HDD turntable decoder.
SoundTraxx
- TSU2 Genesis Diesel - add SD70ACU and Dash 9-44CW
- TSU Genesis Steam - N Challenger add CV and change some default value per user request
Tam Valley Depot
- QuadLN_S - added support for new firmware version 3.1 features
ZIMO
- added new decoder definitions for Firmware v40.x
- Updated some MX640-series definitions, adding menu items for on-track operations.
- Fixed the coding for CV155 Half Speed Settings
- Added MX605N: Zimo non-sound decoder for Kato N ICE4 - same form factor as Kato EM13. Note that MX605 (already in DecoderPro) is the sound-version of MX605N.
DecoderPro
- Added accessible names to the (simple)
variables displayed on programming panes.
- Decoder definitions can now add items to the main programmer-pane window menu.
- You can now write out just edited CV values to a CSV file.
- The programmer pane "display" element now supports a "viewOnly" attribute.
For more information see the
Create a Custom Programmer
page.
- Improved handling of improper input in variables.
- Improved accessibility of programming mode selections.
- Improved accessibility of some buttons.
Dispatcher
- Fix XCrossings allocation.
- Improve AutoEngineer. Permit unlimited number of Auto Trains.
- Fixed bouncing speed slider in manual mode.
- Size AutoTrainsWindow correctly when going between auto and manual with use scroll bars off.
- Enabled disaplay scale speed for running with speed profiles.
Internationalization
- Spanish translation added to decoder and programmer panes
- Rodrigo Rodriguez translated much of the GUI into Spanish.
Layout Editor
- Use the actual turnout state for the turnout circle when that option is used. This
corrects the color for turnouts using the continuing route option when set to thrown.
- Tooltip support for panel icons has been changed.
See
Tooltips for details.
- Update the layout block occupancy sensor when the occupancy sensor for the related
block has been added, removed or changed to a different sensor.
- Improved XSLT display of all elements.
- Fixed an error when an anchor point only had one track segment assigned.
- Improved display of certain images when rotated for display.
Logix
- A single Logix can now be exported to LogixNG.
Open Tools -> Tables -> Logix and select Export
to LogixNG for the Logix you want to export.
- Change the system name input for the Copy command to use a combo box. This makes it
easier to select an existing Logix as the copy destination.
LogixNG
- A single Logix can be imported to LogixNG. See
the section Logix for more information.
- The action Throttle has been updated.
It now also has the child sockets Function
and FunctionOnOff. These are optional.
If both are connected, the Throttle action sets
or resets this function. The child Function
tells the function number and the child
FunctionOnOff tells if the function should
be On (True) or Off (False).
- The action Local Variable now supports
Block and Reporter. For Memory,
Block and Reporter, there is a new
option Listen that selects whenether the
action should listen on changes for the Memory,
Block or Reporter.
- The actions Memory and Local variable
and the expressions Memory and Local variable
have improved support for LogixNG Tables.
- Copy now works in the LogixNG table. With Copy,
you can copy the entire LogixNG to a new LogixNG with all its ConditionalNGs.
- Improved XSLT display of all elements.
- Several severe errors have been fixed when doing a copy of a LogixNG action or expression.
- If a female socket of the action Sequence is removed, the socket after it is also removed.
- The action Clock Rate has been added. It sets the
rate of the fast clock.
- Global Variables has been added. A Global Variable
is similar to a Local Variable, except that it is shared among
the ConditionalNGs.
- Global variables and Local variables can now be initialized
with a script expression or a script file.
- The action Listen on beans now protects against
removal of the beans it's listening to.
- The Edit local variables dialog can now be resized
so that the table grows and shrinks when it's resized.
- Update the Sequence action to reset itself when done if the continuous option is not
selected.
- Support for MQTT has been added. If a MQTT connection is
defined, the category MQTT is visible with the actions Publish
and Subscribe.
- Fixed a bug where a LogixNG action SignalHead and the LogixNG expression SignalHead
failed to
load the name of the signal head when loading a panel stored by a previous JMRI version.
- The action Script and the expression Script
now supports both Jython and ECMA Script (JavaScript).
As a result, the option Jython command is now
renamed to Single line command.
Operations
- Improved the build report
Panel Editor
- Tooltips can now be edited in Panel Editor.
- Tooltip support for panel icons has been changed.
See
Tooltips for details.
- Improved XSLT display of all elements.
- Improved display of certain images when rotated for display.
Control Panel Editor
- Tooltip support for panel icons has been changed.
See
Tooltips for details.
- Improved display of certain images when rotated for display.
Preferences
- Improved handling of the dirty bit, which controls whether you're prompted to save preferences.
Resources
- Inobu One provided new single-crossover icons and additional double-crossover USS icons.
RFID
- Updated: Tags are recorded in a table.
If there is a Car (from OperationsPro) associated with this tag,
the Road name and Car number are shown. The location and Track are
shown in ComboBoxes which the user can set
and then click on a button to set to the new Location and Track.
Another button shows the Car in the Edit Car window.
If there is no associated car, a button opens a window with a list of Road names.
The user can select a road name and the second list shows all car numbers for that road.
Once a car number has been selected a button sets the tag in that Car.
By default the only visible road names and numbers are for cars that do not have a tag.
A checkbox shows all cars, including those with tags.
The window is opened from the "RFID" menu choice (there is one for each RFID connection).
The first choice opens the standard Serial Monitor Pane.
This new Pane is opened from the second choice.
The help screen can be viewed from the monitor pane,
or via a link in the Hardware RFID connection frame.
Routes
- Provide the ability to copy the content from an existing route when creating a new route.
Scripting
- Example scripts related to MQTT moved from jython directory to jython\MQTT directory.
- Initial, very experimental,
Python 3 support
is available for macOS and Linux.
- Added simpler accessors to InstanceManager for use in Py3 scripts. See
jython/test/InstanceManagerTest.py
- Added waitSignalMastState, waitSignalHeadState to AbstractAutomat support.
- Added shortcuts for transits and sections.
Signals
Signal Systems
- Allow user-modified signal systems to provide
their own copy of an existing aspects.xml file.
- New SNCF-2015 French signal system
Signal Masts
- Native MQTT masts are available
- Improved XSLT display of all elements.
Simple Signal Logic
- Improved XSLT web display to include sensors
Switchboard Editor
- The menu options to label a switch were enhanced to allow hiding the system name in case a user
name is configured. This was suggested by Phil-Klein.
Timetable
- Add a Copy Stops button. This is used to copy the stops for an
existing train to the new train.
Throttle
- Restored tab and shift+tab shortcuts to browse through throttles inner windows
- Address Panel is now focused as a default when opening a new throttle
- Add capability to display/print throttle files in easy-to-read browser format (using XSL transform)
- If there are at least two connections that have support for throttles, a
new menu
appears that lets you open a throttle for a particular connection.
- Fixed a problem causing a spurious error dialog when opening a roster entry in a throttle
Turnouts, Lights, Sensors and other elements
- Improved XSLT display of all elements.
- The order of presenting these elements in combo boxes
has been changed to make it more consistent. They now
list all user names first, followed by ones with just system
names. This also fixes a problem where some items are
not listed in the combo box.
- The process for adding multiple Lights/Sensors/Turnouts/Reporters has been
improved. Existing items are no longer skipped, so you get the
sequential items you asked for. Some error messages have been clarified.
Virtual Sound Decoder
- Added a new version of "advanced location following". This is now based
on a LayoutEditor panel and hence much easier to setup. See the
documentation for details.
Warrants
- Additional bug fixing and enhancements to Shared Warrants. SWs are
useful to animate the simultaneous operation of multiple trains.
Be aware that SWs may mutually block movement that can only be resolved
by aborting at least one of them. Regular warrants avoid such deadlocks
due to the priority of their launch times.
- SWs will not allocate any blocks beyond or at a "hazard" (occupation
by foreign train, passage beyond a stop signal, conflict with another
warrant)
- If a ramp down to stop at a "hazard" stops before entering the next block,
the restart is done automatically when the condition clears.
- If a ramp down to stop at a "hazard" overruns into the next block, the
SW will allocate the next block if that is permissible. Whether or not, i.e.
the position of the train is marked yellow or blue, use the normal Control
commands to restart. "Resume" if the "hazard" was occupation or a warrant,
or wait for the signal change to an allowable speed.
- The messages to the status field of the warrant Table and other information
can be displayed to the console by clicking the "Trace Warrants" button in
Warrant Preferences.
- Additional bug fixing and enhancements to Shared Warrants. SWs are
useful to animate the simultaneous operation of multiple trains.
Be aware that SWs may mutually block movement that can only be resolved
by aborting at least one of them. Regular warrants avoid such deadlocks
due to the priority of their launch times.
- SWs will not allocate any blocks beyond or at a "hazard" (occupation
by foreign train, passage beyond a stop signal, conflict with another
warrant)
- If a ramp down to stop at a "hazard" stops before entering the next block,
the restart is done automatically when the condition clears.
- If a ramp down to stop at a "hazard" overruns into the next block, the
SW will allocate the next block if that is permissible. Whether or not, i.e.
the position of the train is marked yellow or blue, use the normal Control
commands to restart. "Resume" if the "hazard" was occupation or a warrant,
or wait for the signal change to an allowable speed.
- The messages to the status field of the warrant Table and other information
can be displayed to the console by clicking the "Trace Warrants" button in
Warrant Preferences.
- Any warrant, regular or shared, will not allocate blocks beyond a restricted block.
A block is restricted if it is:
- Allocated to another warrant.
- Occupied by an unknown train.
- Signal protects it from entry.
-
When entering a block, the warrant will allocate as many blocks as it can up to the
next restricted block or its limit.
- Shared warrants only allocate up to a maximum of 2 blocks. (limit is 2)
- Regular warrants will allocate the full route if no restricted block is found. (unlimited)
-
Crossovers typically use one turnout to control both switches. Often, each switch is
track in different blocks. For such shared turnouts, throwing the switch in one block
may change the path in another block and could cause a derailment.
- Warrants now detect shared turnouts. Should the paths in the respective
blocks have different settings for the turnout, the warrant will allocate the block
sharing the turnout but not set its path.
- The warrant will stop the train before
entering the block. The train will continue when the conflict is resolved.
-
Block status of OUT_OF_SERVICE is informational. Warrants can allocate OUT_OF_SERVICE blocks.
-
The "Set" column of the Warrant List Table is removed. The "Allocate" column indicates the route.
The path is set if the block is not in a restricted state.
-
When a warrant is running under a speed change restriction, The timing between throttle commands
has be improved.
WiThrottle Server
- Added a "TelnetTrain.py" example to run a train from the Python command line.
Web Access
- Multiple updates to JavaScript libraries shipped with JMRI.
Web Server
- Support for display and interaction with (Control) Panel slipTurnoutIcons has been added
to JMRI Web Server Panels.
This includes double and single slips, three-way turnouts and scissors with 2 or 4 turnouts.
Miscellaneous
- This is the first production release that requires Java 11.
As part of that, there were extensive changes to
the underlying infrastructure. See PR
#10278
and following PRs with the
Java 11 label.
- Personal and development builds will now
be called e.g. 4.99.1plus instead of the prior convention of
calling them 4.99.2ish when developing between releases. This should only affect JMRI
developers.
- SpotBugs has been updated to 4.5.0
- Improved accessibility of throttle keyboard shortcut help.
- Developers: The
Typescript and Javascript support
has been updated.
- The included 'ajv' and 'fast-deep-equal' web packages have been updated.
- Improved XSLT display of many elements in panel XML files.
- Remove the Store Only table content (No Panels)... option from the File menu
used by the PanelPro tables.
- When running the JmriFaceless application, the panels (PE/CPE/LE/SE)
in the xml data file (aka Panel file) are not loaded.
- Add a search feature to the JmriHelp local web page.
- The method JUnitUtil.releaseThread(this) and JUnitUtil.releaseThread(this, delay)
has been removed. Use JUnitUtil.waitFor(int time) instead. Replace the call
JUnitUtil.releaseThread(this) with JUnitUtil.waitFor(JUnitUtil.DEFAULT_RELEASETHREAD_DELAY);
- Improve Block tracking in the case of a broken train being rejoined.
- Multiple updates to the Bachrus/KPF-Zeller speedometer support:
- Improved GUI
- Now handles programming on main without needing to go to service track first
- Improved speed matching algorithm
- Updated docs
- Fixed an issue where ZSH-using developers might not be able to use ./runtest.csh
- Update commons-io library to version 2.11.0 from 2.6. JMRI uses this for file selectors.
- Updated jsoup library to 1.14.3 from 1.13.1. JMRI uses this when rebuilding help metadata.
- Update for multiple hardware clocks.
- Resolved multiple Spotbugs code warnings.
- The xercesImpl library was updated to 2.12.2, which may change
the content of some error messages.
- The macOS and Linux startup scripts now will use a JVM
found within a "jre" directory within the JMRI program directory.
This lets you install a JVM (JRE or JDK) locally just for
JMRI's use.
- The Transit and Section classes have been refactored into an
interface with DefaultTransit and DefaultSection implementations
respectively. Similar transforms have been done to
TransitManager and SectionManager. None of the production code
nor distributed scripts needed changes, as you still create
and access Transits and Sections via their managers obtained
from the InstanceManager. The SectionType constants in Section
has also been converted to an enum.
- Many logging changes to resolve Spotbug SLF4J_FORMAT_SHOULD_BE_CONST
- Added a new tool for maintaining translated properties files.