Release Notes for JMRI 5.4 release
Date: June 30, 2023
From: Bob Jacobsen
Subject: Production Release 5.4 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 5.3 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.4" 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 5.0, 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, use those from now on, and go on to step 3.
- Is your current version older than JMRI 4.24?
Then update to JMRI 4.24 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.
- Is your current version older than JMRI 5.0?
Then update to JMRI 5.0 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
New warnings for this production release:
See the
JMRI 5.2 release note for more warnings predating the 5.3 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 5.0
before installing this release.
- 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.
- This release, and all previous ones, have an incompatibility between
MacOS 13.6 or later and the SPROG support. The fix for this will be
in
JMRI 5.7.1.
when it's available.
Note that this issue only impacts the
combination of SPROG and certain MacOS versions. If you're not using a Mac or
not using an SPROG, this will not effect you.
- Since JMRI 5.3.2
Some images in the resources/icons folder have been renamed.
Spaces have been changed to underscore. It's images in the
resources/icons/ItalianSignals/ACEI,
resources/icons/ItalianSignals/Prototypical,
resources/icons/smallschematics/aspects/NW-1981,
resources/icons/smallschematics/aspects/NYC-1956,
xml/signals/FS-1987, xml/signals/NW-1981,
xml/signals/NYC-1956 and resources/icons/SNCF/Small
folders that have been renamed. If you are using these images directly, you will need to update the reference.
- Since JMRI 5.1.7
The way defaults for some LocoNet connections are handled has changed.
Existing LocoNet connections might give a "The Defaults preferences are invalid"
warning when saving preferences. In that case, click "yes" and then go set
all the default radio buttons on the "Defaults" pane to the LocoNet connection. (You can also
click "no", but you'll get the message next time you store too)
- Since JMRI 5.3.3
The code for Loconet programming operations was significantly changed.
If you encounter any (new) troubles programming via Loconet, please get in touch on the
JMRIusers list.
- Since JMRI 5.3.7
The definition of "Last Seen" for Id Tags has been
clarified to mean "Location where the tag was last seen to be present".
Previously, a report that a tag was absent could be remembered as the
last seen report. The relevant code changes are specific to LocoNet
Reporters. This might affect your scripts and LogixNG if you were assuming
the prior behavior.
- Since JMRI 5.3.7
Some Reporters, particularly LocoNet, would improperly clear an "enter" report
when an "exits" report for the same tag was seen elsewhere. This was an
error that has been fixed, but if you have scripts or LogixNG that depend on
this behavior you might have to update them.
Download links:
These files are located in the
JMRI 5.4 GitHub release.
This production version is made from test releases 5.3.1 through 5.3.8 The
full list of changes
in those is
available from our code repository.
Hardware Support
CBUS
- The
CBUS Hub Control can be used to share the CBUS connection locally and onto a LAN.
- Changed SPROG DCC module IDs to match similar MERG modules,
to work around an issue with the FCU tool.
- Improved Node Manager configuratiuon of MERG CANSERVO8C / CANMIO-SVO / CANACC4
- The default behavior for CBus Reporters has been changed to
not clear the report after a timeout. A new
CbusReporterTimeoutControl.py script is provided to
restore the previous behavior: After a timeout, the
report is cleared. The script also demonstrates how to
get a more granular control over this behavior.
- Improved Throttle support for 14 and 28 Speed Steps.
C/MRI
- Improve handling of poll options for network connections.
- Remove extraneous ERROR message when network connections.
DCC++ and DCC-EX
- New script in DCC-EX folder, RosterExportToDCC-EX.py, which outputs all JMRI roster entries in
format suitable for copying into myAutomation.h.
- Set Turnout userName from Description when defined in myAutomation.h
- Support fastclock synchronization to DCC-EX
ESU
- Updated how initialization is done to fix a problem where Sensors
where not being properly located and operated.
Lenz XPressNet
- Clarify some internal implementation terminology.
- Add support for up to Fn68 when the Lenz hardware is version 4.0 or later.
LocoNet
- New LocoNetSlotsReadCSV.py script which scans all LocoNet slots and
creates report about slot status and slots used for the consists
including the details of the consist. It also flags all non-zero slots.
- Add Consist number column.
- Support for expanded slots and associated protocol.
To enable this the advanced LocoNet preferences must be set XPSlots Auto Detect.
If using DCS240(+) limited to less than 120 slots use DCS210 or DCS210+ to avoid needless reading of slots.
When using a DCS240(+) be aware that when first opening a Slot Monitor window 430 odd slots are read, so avoid doing it during layout start.
If using throttles that cannot access XP Slots along side those that can you may see the same loco number twice in the slotmon, which slot actually has control may vary.
- Changed handling of LACK messages during programming to
avoid a recently-uncovered conflict with attached DT602D
throttles.
- Added a new jython/loconet directory to contain new LocoNet-specific scripts.
- Added a jython/loconet/LoconetOpsModeSim.py that works with LocoNet simulator
to simulate ops-mode writes and reads.
- Added support for the programming protocol used by
Digitrax Series 7 boards (DS74, SE74, etc)
- Simplified the display of LocoNet sensor messages in the monitor
- Fixed a problem introduced in JMRI 5.3.3 that caused
certain ops-mode programming operations to fail.
- LocoNet connections now support decoder functions up to F68
- Improved handling of BXP88 messages
- The handling for LocoNet Reporters (i.e. transponding)
has changed. See the description
below.
- Improved the timeout handling in the Strict packetizer.
- Fixed a problem where sometimes buttons in the Slot Monitor
would disappear.
Marklin CS2
- New connection subtype for the CdB system via USB.
MQTT
- A Reporter implementation is now available for MQTT connections.
- Fix typo in Sensor default name; should not have visible effect.
- Added support for variable Lights.
- Programmer support added. Enables using DecoderPro on the
TCS CS-105 and LT-50 command stations. Service Mode
(Programming Track, with Direct Mode) and Ops Mode (Programming
on Main) are both supported. RailCom-aware decoders can read
CVs on the main (in Ops Mode), which is a lot faster than
reading on the Programming Track.
- Updated library to pick up fix to line-ends in hub.
- Hub Control - UI Update, line termination characters optional for incoming feeds.
- When downloading firmware to multiple boards, it can be a pain to have to select the file over and over.
This was changed to make the selected file (hence directory, etc) persistent from one download frame
to the next.
- Show more information in the node selector when doing firmware downloads.
- Updated the default filename when doing backups to contain more identification info.
- The OpenLCB library was updated to the current contents as of PR #214
- There's a new
"Event Table"
tool that shows all the events on the network and which nodes produce and consume them.
- There's a new
"Memory Tool"
that lets you get the contents of node memory spaces into a local binary file, and
put the contents of a file back into a node memory space.
- Now shows more about JMRI nodes in the Configure Nodes window.
- Updated the openlcb.jar library to version
0.7.32
including multiple GUI, functional and error handling improvements.
- Add event user name to Monitor display
- Add memory space window display to Memory Tool
- Better ordering for overlapping events in Event Table
- Event table loads all saved event names when opened
- Ensure JMRI source nodes are identified in the Monitor display
- Complete the information in the memory space window
- Performance improvements in the Event Table
- Fix an error preventing multiple configuration windows from working properly
- Fix a timeout error in the hub when running on Windows
- Improved help pages for several tools
- Update OpenLCB_Java library through
PR #228 which includes
- Add a factory reset option to the configuration More... menu,
- Limited retry of CDI reads in case of errors.
- Fix an NPE from incorrect input when making a Sensor or Turnout.
- Allow an alternate user name format for accessing DCC turnouts connected
through a bridge: MTT123 (note 2nd T) will generate the appropriate
events to throw and close DCC turnout 123.
- Fixed a bug that was sometimes preventing the consumer node name info
from displaying in the Event Table.
- Fix some minor bugs in DecoderPro's exporting of roster entries
to the CS-105 command station and to backup files.
- Improved instructions for DecoderPro's import from and
export to TCS CS-105 command stations.
- Fix a problem that could cause an upload via the Memory Tool to fail.
Roco z21/Z21
- Add a delay to read/write programming operations on the main.
This is intended to help when doing reads of indexed CVs.
TCS
- Fixed problems in the sound CV definitions for
Bachmann FT, Bachmann GP35, Bachmann RS3 and
WOW Diesel V5-121 decoders.
TMCC
New / Updated decoder definitions
Digitrax
- Added SE74 usage information to the Digitrax/LocoNet hardware help page,
including specific guidance for configuring JMRI's signaling, and typo fixes.
- Added DecoderPro definitions for the DS74 and SE74 OpSwitches.
- Added a
loconet/LnEditEvolutionRoutesAndOpSw.py
script that lets you configure the routes in a Digitrax Series 7 board
e.g. DS74 and DS74.
- Added a decoder definition for the PM74 board.
- Added decoder definitions for the SFX Sound Decoders - Series 7
Kuehn
- Improve the ZTC217 decoder definition.
Piko
- Piko Smart Decoder 4.1 and XP5.1
- Add CVs 100, 101 for Function Mapping Shift on Piko Smart Decoder 4.1
- Add Decoder file for Piko SUSI Decoder (Light decoder)
- SmartDecoder XP5.1 - updated lowVersionID, changed CV7-8 to use include file
- Added Decoder Reset and CV for Decoder Test for Piko SUSI Decoder (Light decoder)
Soundtraxx
- Michael Mosher added Blunami decoders
Tam Valley Depot
- QuadLN_S - support for new Semaphore Aspect and Servo Refresh in version 3.2 firmware
Uhlenbrock
- Bug fixes and extension of extended function mapping of the IntelliDrive 2 decoder
- Added Tillig BR 89 steam loco on several panes
- Extension with additional CVs for the Extended Function Mapping
Viessmann
- Decoder definition Tillig double slip turnout: Address label added and typos corrected
ZIMO
- Include CV's 190-191 for Decoder FW V.37+
- Added MS950 and MS990 model info
- Updated CV64 in MS models to have a maximum of 15, was 9
- Small correction to the files for FW v39 and v40
- Added MN Non-Sound Decoders
- Added new CV's for MS- and MN-Decoders
- Added some more german translation for MX-, MS- and MN-Decoders
- Some small corrections
DecoderPro
- Some internal state constants have been changed from integer values
to an enum. This should not have any external effect.
- Improve how filename extensions are handled when exporting the complete roster.
- Updated list of NMRA-registered manufacturer IDs
- Improved how split enum-style variables are handled.
- The decoder index is being written in a more compact form to improve the
time spent reading it at startup.
- Two new decoder-index attributes
suppressFunctionLabels and suppressRosterMedia
can be used to suppress those panes in the DecoderPro GUI.
- Two new import and two new export options have been added to DecoderPro.
-
You can directly export a DecoderPro roster entry to a TCS CS-105
command station roster entry.
-
You can directly import a TCS CS-105 command station roster entry
to a DecoderPro roster entry.
-
You can export a roster entry
to a CDI backup file for restoring into a train entry in the
TCS CS-105 command station.
-
You can import a CDI backup
file to a roster entry.
For more information see
the TCS CS-105 page.
- Improved the labelling of service mode vs ops mode programming
- Fixed the display of multiple programming tracks
- Added tooltips to the CV Pane that will show a brief summary of where the CV is
being used.
- Significant roster table UI speed improvements.
- Added progress dialog for roster index recreation.
- Added progress dialog for decoder index recreation.
- Add an "Export Variables to CSV" menu item in the
File menu on individual roster entries.
- Now shows a progress bar while exporting all roster entries,
so that you don't try to use the resulting file too soon.
Dispatcher
- Fix allocating over occupied blocks in IntermediateSections
Layout Editor
- Fixes a bug in the actions Icon/Label on panel and
Turnout on LayoutPanel which caused that the actions
wasn't loaded correctly.
- Add support for LogixNG Global Variable icons. These work like memory icons.
- Tooltips have been enabled for turnouts and slips on Layout Editor panels. The tooltip
displays the name of the assigned turnout. The format is system or
user (system). For slips, both turnout names are displayed. If a turnout
has not been assigned to a turnout or slip, the internal TOnn or SLnn id will be displayed.
The tooltips are shown based on the Options ⇒ Show Icon tooltips
settings used by the regular icon tooltips. Custom tooltips are not available.
- Add a scale item to popup menu.
- Fix the Tools ⇒ Check bezier options. Remove a bogus error message.
- Fixed a problem that was causing Memory and Block contents to be slow to update.
Logix
- Recognize Logix user name changes for Conditional Logix Actions. This is an action
that can be used to enable or disable a different Logix.
LogixNG
- The action Turnout on LayoutPanel has been added.
It lets LogixNG enable/disable a turnout on a layout panel.
- The action RunOnce has been added. It runs an action
only one time. It's useful when something needs to be initialized
once.
- Fixes a bug when importing a Logix with Copy memory to
LogixNG. The source memory and the destination memory was reversed.
- Fixes a bug when importing a Logix to LogixNG, where the Conditional
uses Mixed. The Not is ignored for the conditional
variables when using Mixed.
- Fixes a bug with the action Entry/Exit and the expression Entry/Exit.
The action and expression stored the user name instead of the system name
if the Entry/Exit. The user name of an Entry/Exit changes when the NX sensor
or related signal mast is changed.
- Fixes a bug with the action Timer. If the same sensor is used for both
start and stop of the timer, the timer didn't restarted after a stop.
- The action Timer can now use the expression Start to both start
and stop the timer. This is useful if you want to start and stop the timer
from a single sensor.
- Adds panel file XSLT formatting for display of Digital Actions,
Expressions, and Boolean Actions in web browser.
- Pressing the F8 key when the spash screen is visible disables all the LogixNGs.
- Pressing the F9 key when the spash screen is visible prevents LogixNG being activated.
- A bug that prevented the Shut down task action to work correctly has been fixed.
- The expression Linux Line Power has been added.
- Cleanup LogixNG controlled Dispatcher train when the train has been terminated by an external action.
- Add a Section Expression which is used to get the state of a section.
The state can be Free, Forward or Reverse.
- Add a Transit Expression which is used to get the state of a transit.
The state can be Idle or Assigned.
- Apply the Clock Expression settings when creating a new expression.
- Enable the Light Action data input fields when Set Intensity
or Set Transition Time is selected.
- Add the Web request action that sends a HTTP or HTTPS request to a web server.
- Add "Entry/Exit" to the "For each" action bean list.
- For the action For each, Variable is renamed to
Local variable to make it consistent with the naming of
the rest of LogixNG.
Operations
- Fixed a problem when a location has multiple spurs and the spur's schedule forwards the car to another spur
at the same location with a schedule. The car's load can incorrectly change to the default "E" or "L" load.
- Improved passenger car blocking when using kernels, caboose, or car with FRED
- Fix Java exception when using the Set Car window and a final destination.
- New staging feature, the ability to have multiple trains on one physical staging track.
- Improved OperationsPro help, paper size, additional links from TOC
- Many improvements to the train build report, car divisions, spurs and schedules, track type, etc.
- A car's wait count is now set to zero if the car's load name is changed
- Track tools now function as soon as track is added
- Made "ignore all" the default setting for the car set window
PanelPro
- Add clickable table of contents to Panel File display/print capability (when you open a panel xml file via the JMRI web server)
Panel Editor
- Add support for LogixNG Global Variable icons. These work like memory icons.
- The show hidden items selection was not being stored properly. The fix may cause
unexpected changes the first time a PE panel is loaded.
Control Panel Editor
- Add support for LogixNG Global Variable icons. These work like memory icons.
- The show hidden items selection was not being stored properly. The fix may cause
unexpected changes the first time a CPE panel is loaded.
- Restored the linking input field when adding labels. This had been
inadvertently removed some time in the past.
Preferences
- Added a File Chooser Dialog file view option to the Display
preference. This provides the ability to choose a List or
Detail view for file dialogs.
Scripting
- Kevin Appleby provided a script for doing serial transfer from the Light Table.
- Cliff Anderson contributed a new TurnoutsMasterSlave.py script.
- Fixed the SetAllTurnoutsClosed.py and SetUnknownTurnoutsClosed.py scripts so they would properly
delay on polled systems such as C/MRI
- Added a new SetAllTurnoutsThrown.py script and tests
- Added a new Shutdown.py script to shut down JMRI.
- Added a new Restart.py script to restart JMRI.
- Added a new jython/loconet directory to contain new LocoNet-specific scripts.
- Added a jython/loconet/LoconetOpsModeSim.py that works with LocoNet simulator
to simulate ops-mode writes and reads.
- Add a PanelControlsContents.py script which lets you
set a panel to controlling the layout or not.
- New AnyRail/AnyRailExportAdditions.py. For use with AnyRail export. Creates hardware occupancy Sensors and Turnouts,
cleans up the generated Blocks, and does some visual tweaks of the panel.
- New CreateSectionsFromBlocks.py. For each defined occupancy block, attempts to create a one-block Section
- New AddOccupancyIconsToPanel.py. Create and place SensorIcons and BlockContents for each occupancy Block on a panel
- Add binding "beans" for NamedBeanHandleManager
- Add a Set turntable position statement to YAAT.
- New InitAllTurnoutsSensors.py. Sets all physical turnouts to the CLOSED state and all known physical sensors to the INACTIVE state.
- Implement YAAT 3. The updated help page at
YAAT Help has the details of the changes.
Signals
Signal Systems
- The BNSF-1996 and CCOR-1967 signal systems have had some corrections
made to their speed settings to make them more consistent with
the underlying indications.
- The XML Schema for signal systems has been updated to require
there be one and only one speed and speed2 setting.
- Pino Di Biasi provided an Italian signal system
- Spaces are no longer allowed in image file names for signal systems.
Use underscore instead of space. For example ACEI_Acc_1_vela_giallo.gif
instead of ACEI Acc 1 vela giallo.gif
- Pino Di Biasi updated the Italian signal system
- Robert Raggi provided the new Reading 1954 signal system.
- Updated AAR-1946 aspect mappings.
- Updated the appearances in the Reading-1954 system.
- Updated several definitions to replace invalid speed and
speed2 values with proper speed indications.
The invalid values had been previously interpreted as zero.
- Updated the xml/schema/aspecttable.xsd schema to ensure that
only valid speed and speed2 values will occur in
signal system definitions.
- The BR-2003 system now has medium-size semaphore icons.
Signal Masts
- CheckForNull annotation added to the getAspect method.
Switchboard Editor
- Change the way user names are displayed in the cell contents. This
allows word breaks onto additional lines in the display.
Throttle
- Added a feature to allow custom markers on speed sliders, see documention on Roster Media Pane page (Custom attributes section)
- Small bugs fixes : previous and next running throttle buttons were reversed, large horizontal speed slider thumb was resized, large speed slider track computation was buggy
- Throttle related Jynstruments code was refactored to use non deprecated Function methods
- Some minor internal cleanup.
- If you select a roster entry, the throttle displays functions up to the
least of the number of functions available
from the layout connection, or the maximum function in the decoder
definition.
For most decoders, this will be 28,
but there are a few definitions that are larger or smaller.
- Some minor internal cleanup.
- Added a consist selector in the address panel
- Added a "Consist Tool" button in the address panel
- Behavior with consists enhanced
Consist Tool
- The "Consist Control" entry in the "Tools" menu was renamed "Consist Tool"
- Consist tool now leverages locomotives icons when available
- A consist selection combo box was introduced
Timetable
- Add action buttons to duplicate the Timetable data items.
- Add the logic to calculate the train route durations.
Turnouts, Lights, Sensors and other elements
- Preferred format for IdTag xml whenLastSeen field updated to ISO 8601.
- Memory Variable Table - If a Memory Variable value is not empty, the Java Class of the value is displayed as a tooltip.
- ID Tag Tables - Speed improvements when working with large numbers of Tags.
- Fixed a bug in the Reporter Table that was causing the
Last Report column to actually display the Current Report.
Note that this is just a display bug; the underlying value and
property change notifications are correct, so this change won't
affect scripts, LogixNG, etc.
- The definition of "Last Seen" for Id Tags has been
clarified to mean "Location where the tag was last seen to be present".
Previously, a report that a tag was absent could be marked as the
last seen report. Not all hardware Reporters provide entry/exit reports, as
some just indicate that something has been observed in place; their "Last Seen" behavior
has not changed.
- Some Reporters, particularly LocoNet, would improperly clear an "enter" report
when an "exits" report for the same tag was seen elsewhere. This was an
error that has been fixed, but if you have scripts or LogixNG that depend on
this behavior you might have to update them.
Virtual Sound Decoder
- The VSD windows now remember their size and position from one run to another.
Web Server
- Update minimatch.js library from 3.0..4 to 3.0.8
WiThrottle Server
- Added an option to request steal from client when an address is already in use
Miscellaneous
- Update commons-net library from 3.6 to 3.9.0
- Added page breaks when printing panel XML files via browser (using XSLT)
- Improve how fractional clock rates are displayed on the analog clock.
- The shutdown process is now run in a separate thread and not on the GUI/Layout thread.
- Updated the plantuml library to version 1.2023.1. This is used to
create program documentation.
- When downloading firmware to multiple boards, it can be a pain to have to select the file over and over.
This was changed to make the selected file (hence directory, etc) persistent from one download frame
to the next.
- The NamedIcon class will now search Locations.ALL for files. This means
- Files and filepaths will be found in the user area first for all
subclasses of
NamedIcon.
- This change might result in different graphics in some cases,
where it hadn't been
searching before and a file was not being found (even though it
really should have been). Please check your graphics carefully to
see if there are any issues.
- Add clickable table of contents to Panel File display/print capability
(when you open a panel xml file via the JMRI web server)
- New
AnyRailBuildBlockSensorList.py
script and associated
README.md
file.
- Add the CreateJmriApps.sh script to the Linux install. The script
creates the JMRI application definitions used by the Linux application launchers.
It also has an option (--desktop or -d) to create desktop icons.
- Improved how window preferences are stored to reduce error messages
when JMRI is under high load.
- Update the JMRI install process for Raspberry Pi computers running the Raspberry Pi OS.
- Updated the roster and locomotive schema and the locomotive DTD to accept current contents.
JMRI has been writing extra content in its roster, and the schema and DTD files had not
kept up. This resolves that.
- The JOAL library has been updated to run natively on Apple Silicon machines.
- The JInput library has been updated to run natively on Apple Silicon machines.
- Added a new jmri.util.swing.CountingBusyDialog utility class.
- Fixed the XML Schema for IdTags