Release Notes for JMRI 4.20 release
Date: July 8, 2020
From: Bob Jacobsen
Subject: Production Release 4.20 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 4.19 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 4.20" 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.
Update From Older JMRI Versions
If you are currently using a version older than JMRI 4.18, 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.
Once all is well, store your configuration and panel files under a new name and use those from now on.
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 relese.
- Is your current version older than JMRI 4.18?
Then update to JMRI 4.18 first, and ensure that works correctly: check
start-up, check things you need to be working, and check the JMRI log as well.
Once all is well, 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.
Known problems with this release
- You can not exit OperationsPro or JMRI without saving changes to OperationsPro. This is
a bug and has been fixed in 4.21.1.
New warnings for this production release:
- Since JMRI 4.17.5
JMRI's scripting support now defaults to the UTF-8 character encoding for all
script files on all platforms. This may require that some scripts be re-saved
using UTF-8.
- Since JMRI 4.17.5
Windows Only The JMRI installer removes the existing
lib folder from a JMRI installation when upgrading JMRI. The
existing lib folder contents are retained in the backup folder.
This means that any files you have added to the lib
folder will be removed.
- Since JMRI 4.17.5
macOS Only This version includes changes to how
the final .dmg file is built, signed and notarized. This was done to increase
compatibility with macOS 10.15 Catalina.
Please drag the JMRI icon to the Applications folder to install this release.
For more information on
Catalina compatibility,
see the
JMRI website.
- Since JMRI 4.17.4
Panel file NamedBean items such as Turnouts, Sensors, etc are now written to panel
files in order by their Manager system prefix and system name.
Previously, they had (roughly) been written in the order they'd be
read from the earlier file(s). This will result in a big change to the order
the first time a file is re-written, but after that it should be much more stable.
Older warnings
See the
JMRI 4.16 release note for more warnings predating the 4.17 development series.
These may be relevant to you if you're updating from an earlier version.
- Since JMRI 4.15.6
Remembering the location and size of layout panels created and maintained
using Layout Editor, Panel Editor, Control Panel Editor, and Switchboard
Editor is no longer dependent on saving the panel. The location and size
values are retained using the same processes used by other JMRI windows. This
makes the window management behavior consistent. To continue using the
old behavior, go to Preferences >> Display and enable
Use old location and size logic for editor panels.
- Since JMRI 4.15.6
Starting in JMRI 4.15.6, Memories
must have valid system names of the form "IM" folllowed by something.
"IM123" and "IMEAST" are both valid.
The system name "IM", all by itself, has never been valid, but JMRI
will now be enforcing that:
- You won't be able to create a memory with that name via
the Memory table or scripts
- If you have that name in a panel file, an error will be
logged and the panel file won't load. You'll have to
remove it from he file or rename it in the file
before loading it.
JMRI needs to start enforcing this in preparation for some
future code that will appear later this year.
- Since JMRI 4.15.5
The handling of Turnout system names has been updated
to be (more, hopefully completely) consistent with the
planned approach.
Specifically, case now (generally) matters in system names:
- You can now have an internal turnout named "ITsome lower case name".
- But note you can no longer refer to "ITSOME LOWER CASE NAME" or
"ITSome LoWeR cAse Name" and get the same one.
This should not require any migration for stored configurations or
panel files, as they have been automatically been being kept consistent
since JMRI 4.8. But you might have case errors in i.e. scripts which
will fixing inconsistent references in your scripts.
Of course, bugs are always possible. If you find a place where
names seem to be handled inconsistently, please let us know!
- Since JMRI 4.15.4
The calculation of Turnout Addresses for the
Direct DCC Accessory Command ("a" command) mode
has been fixed (commands are now sent to the correct accessory address rather
than 4 less than the nominated hardware address). For pre-existing panels,
changes will need to be made to either the actual decoder address or the panel.
If help is required, ask on the
jmriusers group.
- Since JMRI 4.15.3
The prefix that identifies a layout connection should be a single letter, like "N" or "L",
or a letter and some digits, like "K2" or "D3". Some older systems used to have
longer "legacy system prefixes" like "DX", "DCCPP", "DP", "MR", "MC", "PI", and "TM".
Those legacy system prefixes
will now cause JMRI to issues a warning at startup. In this release, JMRI will
still work with those prefixes, but they will need to be migrated to the proper form soon;
JMRI 4.19.1 and later will require that this have been fixed.
Therefore, this warning can't be suppressed
without migrating the prefix in the connection configuration (and any associated
panel files and scripts).
If you're getting this warning and therefore need to do that migration,
migration page.
- 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:
Please note that the download links in this and future JMRI releases link to
Github servers.
People are welcome to distribute the download files further via other websites, etc.
If you want to check that you've received original, unmodified versions, please
check the files against the checksums shown below.
This production version is made from test releases 4.19.1 through 4.19.9. The
full list of changes
in those is
available from our code repository.
Hardware Support
- JMRI 4.19.1 and later enforce the standard form of system names,
where the system is denoted by a single letter or a letter plus digits.
Some users of JMRI 4.18 or earlier might have incompatible values.
See warnings above.
- Fixed a problem introduced in JMRI 4.19.1 that
prevented the function buttons in the on-screen throttles
from working on some types of computers.
- Fixed a problem introduced in JMRI 4.17.7 that
causes a partial crash when reading in historical
consist data from the consist.xml file.
- A number of hardware-specific actions now require the system
connection be associated with them when used as a startup action.
In many cases, these actions will continue to "just work", but it is
recommended that actions be verified to be associated with the
correct connection in the Startup Actions Preferences.
LocoNet
- Fixed a problem where throttle functions would not
work properly with certain locomotive addresses.
- Update Digitrax Command Station definitions so that features
better match command station type in preferences
- Petr Šídlo added a timeout for SV2-mode programming.
- You can now set the number of simulated command station
slots in the LocoNet simulator, courtesy Steve Todd.
- Fixed problems acquiring and releasing LocoNet throttles.
MERG CBUS
- Track Current Meter + Command Station Steal / Share are available unless proved otherwise.
- Node Manager and Event Table no longer auto-start on JMRI startup.
These can be added as Startup Actions in JMRI Preferences to enable
Event or Node name translation in CBUS console, and other CBUS Tools.
- Refactoring of CBUS OPC's, Filters and Node Manger functions for future maintainability.
- Track Current Meter + Command Station Steal / Share are available unless proved otherwise.
- Node Manager and Event Table no longer auto-start on JMRI startup.
These can be added as Startup Actions in JMRI Preferences to enable
Event or Node name translation in CBUS console, and other CBUS Tools.
- Refactoring of CBUS OPC's, Filters and Node Manger functions for future maintainability.
- Bootloader client for CBUS node firmware update.
- Support for SPROG Generation 5 hardware using MERG CBUS and Gridconnect.
- CBUS Console - Translation of Bootloading ( Firmware Update ) CAN Frames.
- CBUS Console - Display JMRI Turnout, Sensor and Light status from CBUS On / Off Events.
- CBUS Event Table - Improvements to UI
- Support for CBUS Fast Clock messaging.
- Andrew Crosland added a CBUS multimeter.
SPROG
- Connection methods for SPROG Generation 5 hardware using MERG CBUS/Gridconnect.
New / Updated decoder definitions
BLI
- Blueline change version range
-
Marc Fourier updated a "Service Mode PWM Duty" slider
ESU
- Added LokPilot 5 family.
- Updated LokSound 5 Consist and Sound Levels panes to handle latest firmware updates.
Hornby
- Brian Jackson and Dave Heap updated the Hornby TTS definition
Public Domain and DIY decoders
- Added a definition for the ARD-8SCOM-4VYH-TC decoder
SoundTraxx
- DSD-100LC steam & diesel add CV59
- Marc Fournier added
the Alco PA-PB and F7A-B to the
SoundTraxx SndVal Diesel Walthers Mainline
decoder definition.
Control Panel Editor
- The Palette and Circuit Builder
windows make a "best effort" to open at a position minimizing
any area that may obscure the panel display.
Circuit Builder
- The system name is auto generated when the Add New Detector Circuit
window is opened. This name may be changed before the Occupancy
Block is created. After creating, the field is removed from the window
since the system name can no longer be edited.
Palette
- Each tab resizes to display itself with its preferred dimensions.
- The Memory Tab has been modified to display generic
forms of their respective devices. Dragging is best accomplished by
mouse down within the Drag to Panel box, but outside
of the device icon itself.
- Bugs in the Signal Mast and Background
tabs have been fixed.
- The Text tab items have been rearranged.
Dispatcher
- The displayed names in the Section and Transit
tables, along with the transit selection and block selections in the
Activate New Train Dispatcher window, now behave like other
JMRI tools. Instead of the system name (user name) format,
the names use the display name format. The display name format
uses the user name. If not available, the system name is used.
- The list size for the dropdown combo boxes use the content size instead of
the default 8 rows.
- The Section, Transit, and Dispatcher help documents have been updated. The
Section and Transit help have been cleaned up to reduce redundant verbiage.
Internationalization
- Fixed a place in Transit table where language
wasn't taken into account on column sizes.
- Catalan language corrections and more translated files.
Layout Editor
NX - Entry/Exit Tool
- Three new items have been added to the options dialog. These make it
easier to use entry/exit capabilities when the panels are displayed using
the JMRI web server. Note: The NX icons do not flash when the panel
is displayed using the JMRI web server.
- Route overlap action — Choices are Ask User, Cancel Route and Stack Route.
- Memory variable — Allocation messages can be sent to a memory
variable instead of displaying a dialog. The content can be displayed
on a panel.
- Memory clear delay — Automatically clear the memory value after
the selected amount of time. A value of zero disables automatic clearing.
Logix
- The system names for generated Logix definitions created by Sensor Groups (SYS),
LRoutes (RTX*), Route Exports (RTX*), USS CTC and LE Slips now have a standard Logix
prefix of "IX:". The existing names in panel xml files will be automatically
migrated during panel loading. A dialog box will be displayed with the results.
The details of the affected Logix renames will be displayed in the JMRI System
console. The migration will also apply to any other Logix which has a system
name that does not start with IX.
Operations
- Reset trains that were building during file save and would seem stuck
when the file was reloaded.
Panel Editors
Resources
Roster
- The "Export Complete Roster" and "Import Exported Roster"
actions now transfer the icons and images from the roster.
Note that for this to work, you have to do the export
with this JMRI version or later, and also do the import
with this JMRI version or later.
Routes
- The system names for Routes are required to start with "IO" to avoid
ambiguity or confusion with Reporters (the system names of which start
with "IR"). JMRI 4.19.2 or later should automatically rename Routes
correctly, but it is possible that references to those Routes will need
to be updated.
- Fixed a problem setting up turnouts on a Lenz or DCC++ connection.
Scripting
- The JavaCSV API has been replaced with the Apache Commons CSV API.
This may impact some scripts. See
TurnoutStatePersistence.py
for an example of how to use the new CSV parsing API. If unable to
use the new API, the JAR for the old API can be
downloaded
and added to jmri.conf using the
--cp:a=path/to/javacsv.jar
parameter.
- YetAnotherAutoTrain was updated to version 2.1
- Jython has been updated to version 2.7.2
- Long deprecated
instance()
methods to get the default
instance of a manager have been removed. Use
InstanceManager.getDefault(NameOfManager.class)
instead.
- PR 8286 revised the way
that JMRI code should fire and catch events. If you have code (Java or script)
of your own that implements event firing or tricky listening, you
should review those changes to see if they will or should affect your code.
-
A default instance of
jmri.jmrit.display.PanelMenu
is no
longer maintained by the InstanceManager for the purposes of maintaining
a list of open Editors or LayoutEditors. Use the default instance of
jmri.jmrit.display.EditorManager
in scripts instead. All
sample scripts have been updated to reflect this.
- If you have a script that uses the AbstractShutDownTask class, you
need to rename the "execute()" routine to "run()", and change the
return statement from "return True" to just "return"
- The jython/AC_PowerControl.py,
jython/AutoDispatcher2.py,
jython/IoT/JMRI_TcpPeripheral.py,
jython/ShutDownExample.py, and
jython/TurnoutStatePersistence.py
scripts have been updated to handle the change
listed just above. If you have your own version of these
scripts, you should either copy the distributed ones
or update your own.
Signals
Cab Signals
- Better set row height in table.
Signal Masts
- Matrix Signal Masts can now drive up to 10 outputs.
Signal Systems
- Improved how the XML files defining a signal system
are validated. Unfortunately, some files are already inconsistent.
Fixed a number of files with invisible appearance definitions
by duplicating the appearance file (i.e. adding a -b version with
the different appearances). Temporarily commented out
some of the
schema checks
until the existing files can be resolved.
- Bob Milhaupt and Greg McCarthy updated the
B&O semaphore,
NW-1981,
SOU-1981 and
WM-1980 signal systems to correct some internal inconsistencies.
- Eckart Meyer updated the DB HV 1969 system to have proper aspect control.
Throttle
- Add a speed step dropdown to the extended throttle;
this makes it easier to select the speed step mode and
makes it possible to select the less common speed step modes
exposed by some systems.
- Consolidated the throttle layout code,
centralized the logic for determining if throttle icons should be shown,
and added unit tests for the control panel layout and some preferences.
- Added key shortcuts to the throttle window. Hold the shift
down, press and release key
- A to switch to the "Address" section
- F to switch to the "Functions" section
- C to switch to the "Control" section which sets speed
This is in addition to left arrow and right arrow, which
move from one throttle to the next if you have more than one open.
Please note that this act when the key is released.
-
Chris Why fixed a bug in the speed-profiling support.
Turnouts, Lights, Sensors and other elements
- The Block Table and Memory Table use the User Name for ID Tag if it is available.
- The ID Tag Table uses the Reporter User Name for location if it is available.
Warrants
- The Warrant List now responds to changes in window size.
The length of the status field varies as needed and keeps the
Stop All Trains button visible even on small screens.
- When creating a new warrant the system name is auto generated. This name may be
changed before the warrant is saved. After saving the field can not be edited.
Web Access
- The RESTful API end point
/json/version
(start the JMRI web server on your local computer to follow that link)
has been added to provide a list of JMRI JSON API versions
supported by the running JMRI instance.
- The JSON services have been rewritten to potentially support
multiple version of the JMRI JSON API in a future release.
- JSON services now optionally take a version number as part of
the URL. See the
JSON Server JavaDocs
for details of this change. This should have no impact on
existing clients.
- The JMRI JSON API version has been incremented to 5.3.0 to
reflect the above changes.
- Fixed a problem preventing JMRI application web services from working with iOS 9.3.6
- Fixed a problem that could prevent opening a web throttle.
Where Used
- The new Where Used tool is used to search JMRI for references to a
selected item.
Virtual Sound Decoder
- In the
jmriusers forum
it has been suggested to open a JMRI throttle
automatically when a VSDecoder via Roster Entry is added.
VSD does already save the Path and the Profile of a VSDecoder in the Roster Media.
This PR adds a new attribute: VSDecoder_LaunchThrottle = yes launches
a JMRI throttle automatically.
The new attribute is stored when the user clicks the "Save to Roster" button.
The new attribute can be changed manually or by a Jython script.
- Rework on Auto-Load, see
the details.
- Added a further action "STOP_AT_ZERO" for the "ENGINE_STARTSTOP" trigger. See the
VSD documentation
- Fixed a crashing bug with short sequences.
- Included the VSDecoderID instead of the file name to make the AudioBuffer system names unique for Diesel3Sound.
- Made the VSD loop-player more robust. Another change concerns the timing. Depending on the speed of the
computer hardware, the timing of the loop-player (sleep-interval) can now be adjusted.
- The VSD old graphical user interface (GUI) was removed. For users who call VSD
from JMRI PanelPro, nothing changes. For users who call VSD from a Jython script,
theoretically the script can fail. Please see also
here.
- Added a separate volume control for each decoder. See
more details.
- Documentation updated regarding "VSD headless mode", "steam1 top speed reverse" and "sleep interval".
Miscellaneous
- The JMRI Demo shortcut has been removed from Windows installs
-
The
getBeanByUserName
and getBeanBySystemName
calls in the various Manager
classes
are no longer needed with Java 8 and have been deprecated for eventual
removal. Their replacements are
getByUserName
and getBySystemName
respectively.
If you use getBeanByUserName
and getBeanBySystemName
in script or Java code you've written, please
switch to the new names.
- Petr Sidlo added a Pragotron clock, which is digital clock
found in many European train stations.
- The
getBeanByUserName
and getBeanBySystemName
calls in the various Manager
classes
are no longer needed with Java 8 and have been deprecated for eventual
removal. Their replacements are
getByUserName
and getBySystemName
respectively.
If you use getBeanByUserName
and getBeanBySystemName
in script or Java code you've written, please
switch to the new names.
- The system names for Routes are required to start with "IO" to avoid
ambiguity or confusion with Reporters (the system names of which start
with "IR"). JMRI 4.19.2 or later should automatically rename Routes
correctly, but it is possible that references to those Routes will need
to be updated.
- Daniel Bergqvist provided information on
how to use the GitHub Desktop tool
for JMRI development.
- Updated the JDOM library from 2.0.5 to 2.0.6. Removed the unused JDOM 1 support.
- Added a feature which lets you set the height of rows
in the
cab display table,
so that signal icons can be made fully visible.
- Lots of updates to the organization of the website so that the sidebars
provide better navigation.
Manager.getSystemNameArray()
has been removed after being
deprecated for two years. Please migrate to using
Manager.getNamedBeanSet()
instead. If you really
must have an array, use Manager.getNamedBeanSet().toArray()
;
see this tutorial for examples.
- The included Jetty library was updated
from version 9.4.7.v20170914 to 9.4.26.v20200117
- The toString() method is NamedBeans has been standardized to return the system name.
There's an extension mechanism to add additional information if needed.
- An internal library used for compilation has been updated from the NetBeans 11.0 version
to the NetBeans 11.3 (current) version.
- The internal SMTP classes have been removed. Any users who depended on that capability
should manually add smtp.jar from JavaMail
to the JMRI classpath
(see Startup Scripts)
- Windows Installer updated to support OpenJDK 8 from AdoptOpenJDK.net.
- Andrew Crosland fixed some nasty flickering in the Nixie clock and
ammeter frames.