Release Notes for JMRI 5.2 release
Date: December 17, 2022
From: Bob Jacobsen
Subject: Production Release 5.2 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 5.1 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.2" 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 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
- 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 5.0 release note for more warnings predating the 5.1 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.
- 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)
Download links:
This production version is made from test releases 5.1.1 through 5.1.8 The
list of changes
in those is
available from our code repository.
Hardware Support
CBUS
- Updated [Pi-]SPROG (3v2|Plus) NV edit GUI
- Added Pi-SPROG 3 (not v2) NV edit GUI
- Improved Node Manager and Event Table support for multiple CBUS Connections.
EasyDCC
- Now able to use turnout numbers up to and including 2044.
- Now allows adding multiple new turnouts at the same time.
LocoNet
- Add support for DCS240+
- The DCS240+ doesn't accept service-mode read
requests for about 350-400msec after the completion of the prior one.
A short delay has been added to handle this.
- Slot Monitor Table can be saved to CSV File via new File Menu.
- You can now select separate defaults (in the Preferences -> Defaults pane)
for additional types of LocoNet connections.
Note: 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)
MQTT
- Rewrite and expansion of documentation.
- The default value of the channel is now "", the null string.
The channel name is prefixed to all of JMRI's publish and subscribe
operations. The previous default was "/trains/"
NCE
- Fixed a problem adding sensors with names like NS50:1
- Internationalization of the NCE tools was completed. New items are available for
translation.
Piko
- A new definition file was added for the Uhlenbrock LocoNet IR Receiver #63830, that can
connect the Piko Digi-fern Remote Control to LocoNet.
Raspberry Pi
- A simulator is now added that simulates a Raspberry Pi.
The simulator is very simple and is mostly intended to be
able to load panels for a Raspberry Pi on a non Pi computer
like Windows.
SPROG
- Updated [Pi-]SPROG (3v2|Plus) NV edit GUI
- Added Pi-SPROG 3 (not v2) NV edit GUI
- Added F29+ support to SPROG Command Station mode.
- Added option for offset between CBUS events and DCC accessory addresses
for [Pi-]SPROG 3 Plus firmware 3.e Beta 2.
- Improved display of programmer availability in PanelPro Tools menu.
- Fixed timeout warnings during programming.
Uhlenbrock Intellibox
- Fixed bugs in Daisy II (model 65200) definition
- New definition for Daisy II model 65210. Uses LNCV programming just as 65200
- Daisy II family renamed to "Command Station" (was "Handheld Throttle")
New / Updated decoder definitions
- An include file enum-WeekdaysSun.xml that can be used to create a drop down of Weekdays was added to
xml/decoders/parts/
Dapol
- Two Dapol Imperium DCC Decoders have been added.
860015: Next 18 6 Function decoders (NEM 662).
860019: 21 PIN 6 Function decoders (21MTC/NEM 660/MTX interface Standard).
Digikeijs (Digirails)
- New decoder definition for DR5088RC with LNCV programming capabilities.
Thanks to Dennis Cherry for testing on actual hardware.
Awaiting response from Digikeijs to complete the settings stored in LNCV4.
- The Stationary family of decoders was renamed to Feedback (Inputs).
Massoth
- New decoder definition for "Pulsed Smoker for round boilers" (product nr 8415001
Piko
- Fixed Piko_SmartDecoder_4.1_Sound decoder definition
SoundTraxx
- Updates to ECO & TSU2, add Genesis Caboose
Tam Valley Depot
- QuadLN_S - support for new Semaphore Aspect and Servo Refresh in version 3.2 firmware
Technologistic (train-O-matic)
- Added support for Lokommander II decoders. Including automatic identification of the right decoder type based on productID.
Viessmann
- New decoder definition for Viessmann 4567 TT Motorized point machine
- New decoder definition for Tillig 08335 TT Motor-driven double crossing point
Uhlenbrock
- Updated the Lissy Reporter support, including
improved display of the messages. Note that this
has changed the format of the reports, so users
who have written scripts to use this might need to
check and update them.
- Added a decoder definition to configure the 63810 Mobile Station Adapter.
Use the LNCV tool to program.
- Added decoder definitions for Occupancy Feedback modules #63320/40 (2-rail) and #63330/50
(3-rail).
Use the LNCV Tool for programming.
- Added Funk-Master LN+DCC 66410 definition. Renamed model 66400 FunkMaster to Funk-Master LN.
- Added a decoder definition to configure the 63450 LocoNet Display module, also with LNCV
- New definition to program the IRIS LocoNet IR-Receiver #63830.
- Fixed a bug in the Switch Module #63410 definition that could mix up combined CV values of type
XXXXC.
- Added setting Route 1 in the Track Control Signal indicator #69230
- Added a decoder definition to configure the 63400 LocoNet Switch Control module
- Added a new definition for Lissy Receiver #68600, 68610 and #68620. Use LNCV programming.
- Added definitions for the UB 73310 and UB 73416 decoders.
ZIMO
DecoderPro
- Fixed a problem preventing import of CSV files exported from JMRI.
- To simplify writing a decoder definition, variable declarations for decimal and hex values without a
"mask" with max > 255 now will get an appropriately sized mask assigned so that they store any
valid entry.
Variables with a max <= 255 or with an explicit mask are not affected.
- In decoder definitions, enumVal variables can now use a so-called "radix" mask to map values on specific
digits in the CV value. Requires decoder-4-15-2.xsd schema in the xml declaration.
- Values of type DecVar can now be presented using an offset and factor to reflect their application. For
example if address 1 had to be entered as 0 (and 2 as 1) an offset of +1 would fix this for the user.
Likewise, a factor of 50 would present a setting "in steps of 50 milliseconds" in ms units while saving
it in the CV just like it used to.
Requires schema decoder-4-15-2.xsd. When a min or max is applied, the author should update that for the
numbers as entered. Entries smaller than the offset are replaced by 0.
- Menu items were harmonized with the button alternatives.
- Single CV programmer now checks for availability of global programmer.
- Updated decoder ID algorithm for the Soundtraxx Blunami
Dispatcher
- Separated reverse at end delays from reset delays
- Allow a next traininfo to be run at successful termination using the same loco info
- Support transits and sections that use multiple panels connected by edge
connectors.
- The "Use connectivity from Layout Editor panels" option in Dispatcher Options
no longer uses a specified panel. All Layout Editor panels are used for layout
connectivity.
- Always on top option for AutoTrainsFrame
- Cancel timers on stop immediate
- Add EStop to Transit Action
- correct stop resume in ready state
- On Restart, reset current block and section
- Add ability to add PreStart delay and actions.
Internationalization
LogixNG
- New actions
- Simulate turnout feedback.
It's useful to simulate feedback based turnout actions when a
simulator connection is used, for example the LocoNet simulator.
- For each. It's useful when
you want to loop thru all items in a list, for example all the
sensors in the sensor manager.
- Listen On Beans - Local variable. It can be used together with
the For each action to listen to all beans of a manager.
- Break, Continue, Error,
Exit and Return have been added to the new Flow
Control category.
- Shut down task. It executes an action when JMRI shuts down.
- Request update of all sensors. It requests
that all sensors gets updated from the layout.
- Create beans from table.
- Find table row or column.
- Set speed zero. This LocoNet action sets the speed to zero for
all the LocoNet slots.
- Improved actions
- The action Listen On Beans now sorts the named beans when selecting a bean to listen on.
- Listen On Beans - Table.
- Local Variable can now copy the value of a reference.
- If Then Else now supports Else_If statements.
- Throttle supports multiple throttle connections.
- The If Then Else action has two new options that's relevant when
there's more that one If socket.
- Evaluate all expressions - evaluates all the If sockets before executing any action.
- Evaluate needed expressions - evaluates the If sockets until one expression returns True.
- The MQTT action Subscribe now has the option Remove channel from topic.
- New expressions
- Connection name.
It's useful together with Simulate turnout feedback so
that simulation only happens for simulated connections.
- Local variable as analog value.
- Sensor Edge. It returns True when the sensor goes from
one predefined state to another predefined state.
- Improved expressions
- Local Variable and Memory now
have the choice Type which allows you to select whenether the
data should be treated as a number or a string. If Number is
choosen, it's required that both operands are numbers. Otherwise
an exception will occur.
- And and Or now have the option
to only evaluate the sockets that are needed for the result.
- Power now supports the Idle and Unknown
states. Therefore the option Other has been renamed to On or Off.
A Power expression that had the state Other now has the state On or Off,
with Is/IsNot inverted.
- Power can now ignore the Unknown state. Most
power managers in JMRI sets the state to Unknown before changing the state. This might
cause problems when using the expression Power with IfThenElse with ExecuteOnChange.
- Formula
- The formula function writeMemory is added. It's in the NamedBean category.
- The formula function new has been added. It allows
you to create a new instance of a class.
- Several formula constants have been added. See the modules
Java and Layout. Examples are constants like
sensors and turnouts that gives you direct access
to the managers. And InstanceManager that gives you direct
access to the instance manager. The constants null and
None has the null value in Java, the None value in Jython.
- LogixNG Formula now supports the boolean XOR operator ^^.
- Updates to the LogixNG editor
- The new category Flow Control is added. The actions
Call Module, For, For Each, Table: For
Each and Sequence are moved to this category, as well
as the expression Call Module.
- The popup menu in the ConditionalNG editor is changed.
All the categories are sub menus to the Add menu item.
When a new action or expression is to be created, it is
selected directly in the popup menu.
- The ConditionalNG editor and the Module editor now have the option
Paste copy. With it, you can paste from the clipboard as many times
as needed.
- Keyboard support has been added to the ConditionalNG editor.
-
When Preferences -> LogixNG option Highlight row in
ConditionalNG editor is enabled, use the arrow keys to move to the
desired row and then use one of the shortcut keys.
-
Except for the N shortcut key, the other shortcut keys are available in
the right click popup menu.
- Shortcut keys:
- Ctrl + N: Create new
- Ctrl + E: Edit
- Ctrl + R: Remove
- Ctrl + Shift + R: Remove socket
- Ctrl + X: Cut
- Ctrl + C: Copy
- Ctrl + V: Paste
- Ctrl + Shift + V: Paste copy
- Ctrl + D: Disable
- Ctrl + Shift + D: Enable
-
For macOS, use Cmd instead of Ctrl.
- Bug fixes
- Fixes a serious bug when deleting a LogixNG. Not all ConditionalNGs of
that LogixNG was deleted but that's fixed now.
- A bug that crashed the LogixNG debugger when debugging a ConditionalNG
that calls LogixNG Modules has been fixed.
- LogixNGs can now be inline in panels. Right-click on a icon on a panel and
select LogixNG -> Inline to add a LogixNG to a icon on a panel. Inline
LogixNGs can be viewed by menu item Tools -> LogixNG -> Inline LogixNGs.
When a ConditionalNG is executed that's inline, two special local variables will
be defined:
- __InlineLogixNG__ : The name of the icon
- __Editor__ : The name of the editor of the icon
- Note that these two has two underlines at the beginning and end of the name.
- LogixNG now prints (Listen) or (No Listen) when
memories are used as addressing. It also prints ::: No Listen
for expressions where the option Listen is unchecked.
-
LogixNG has now two new options that work together:
- Preferences -> LogixNG has the option
Show system name in exceptions. If it's checked, the system name
of an action/expression will be shown in the error message in the log if
an error occurs and Abort is selected in the error dialog.
- LogixNG Browse has the option Print system names. If
this option is checked, the system names of actions and expressions is
shown in the Browse window.
These two options together makes it easier to find in which action or
expression the error occurs.
- Update the Global Variable table browser to provide detail information.
- LogixNG Tables now supports two different types of CSV files.
Tab separated files are the default, but you may choose Comma
as the separator. This allows you load CSV files created by
spreadsheet programs.
- The LogixNG table now have the option Execute that lets you to
execute a single LogixNG.
Operations
- Enhanced passenger blocking. Negative blocking numbers place passenger cars in front of
freight cars.
- Added hazardous classification to car loads. Now a car can be classified as hazardous
depending on the car's load.
- Improved car blocking when car is hazardous. The program will attempt to place
non-hazardous cars in front of hazardous cars.
- New automation feature. Users can now select an automation to run at startup. See under
Tools in the operations Automations window.
- Improved Manifest and switch list formating when using tabular and load set out and pick
up messages.
Preferences
- A Shutdown preference has been created to support the
StoreAndCompare process that detects changes to PanelPro tables and panels.
Resources
- Purple on, off icons added to USS sensor directory.
Scripting
- A new script GrandReset.py has been added. The
script deletes all Transits, Sections and SignalMastLogics.
- Updated ControlPanel.py sample script to show the panel windows
instead of the panel editor windows.
Signaling
Signal Heads
Speedometer
- Expanded user documentation
Turnouts, Lights, Sensors and other elements
- Fixed a spurious error message when creating some internal items.
Warrants
- Fix bug making NXWarrants over very short blocks.
- New concatenation option (Warrant Table menu Warrants->Concatenate Warrants).
Concatenated warrant may either stop or continue at speed through the connecting
block. It is no longer required to match paths at the connecting block.
Concatenation will find the connecting path if it exists.
This method is preferred rather than linking warrants of the same DCC address.
Web Server
- Added Camera webThrottle to Web Server.
Camera webThrottle provides integrated support for controlling trains with integrated POV or overhead IP based cameras.
Throttle Learn More page has been added for the camera throttle that covers setup and connecting the cameras to the engine throttle.
Miscellaneous
-
Several of the PanelPro tables, such as Routes and Logix, display a reminder to store changes before quitting. There are a number of issues with this approach.
- Only some of the tables have the reminder.
- Panel changes don't have a reminder.
- The reminder does not occur when quitting, or if it does, it is too late.
The JMRI 5.1.1 test release has a global store reminder when running PanelPro.
DecoderPro is not affected. Any change that affects the stored layout data file will
trigger a reminder with an option to do a store before the final shutdown.
The global store reminder process is controlled by a new Shutdown option in JMRI Preferences.
This is located between Start Up and Display. There are a number of scenarios where the
global store reminder is not appropriate, such as running PanelPro using automatic start up and shutdown.
See Shutdown Preference for details.
What is considered a change that needs to be stored?
The process creates a temporary stored file and compares it to the last loaded file.
If they are different, a store notification will occur.
The comparison is a line by line compare, not a logical content comparison.
Listed below are some of the implications of the process.
- Running PanelPro without loading a layout data file,
such as running Operations, a WiThrottle server, etc.
Since there is no file to compare to, it is assumed that there might be additions that need to be stored.
- External events that make changes.
Examples are scripts that create new table entries,
new hardware that can generate table entries, such as adding a DS64 on LocoNet, etc.
- JMRI version changes. These can be significant, such as new features.
Or trivial because the sequence of rows are in a different order in the layout data file.
This last one affects layout data files from JMRI 4.26 that use signal heads and SSL.
The compare process stops with the first occurrence of a potential change.
The details of the compared lines are listed in the JMRI system console (Help => System Console).
- Minor changes to resolve Spotbug OS_OPEN_STREAM_EXCEPTION_PATH
- Minor changes to resolve Spotbug ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD
- Reduce the verbosity of MDNS logging.
- jmri.jmrix.SystemConnectionMemoManager has new utility methods to find a connection by its connection name.
LocoNetSystemConnectionMemo memo = SystemConnectionMemoManager.getConnection("L2", LocoNetSystemConnectionMemo.class);
LocoNetSystemConnectionMemo memo = SystemConnectionMemoManager.getConnectionByUserName("LocoNet", LocoNetSystemConnectionMemo.class);
MqttSystemConnectionMemo memo = SystemConnectionMemoManager.getConnection("M", MqttSystemConnectionMemo.class);
MqttSystemConnectionMemo memo = SystemConnectionMemoManager.getConnectionByUserName("MQTT", MqttSystemConnectionMemo.class);
- The PlantUML library has been updated to the current version. This is used for
developer documentation.
- The French JMRI Help pages were updated for responsive display.
They will appear when using the French locale, or from their own
starting page.
- The local help stub file has been moved from the settings location to the home
location. This fixes a problem introduced by recent versions of Ubuntu and its
derivatives.
- Updated File Chooser to enable directories to be selectable.
- SpotBugs has been updated to 4.7.3
- Remove the i18n-consistency-check ant target (and related jar) as ineffective