Reactor (Multi-System/Multi-Hub) Announcements
-
Reactor build 24302
UPGRADE NOTICE: If you are upgrading to this version from earlier than 24293, please see the notes and instructions for 24293 for additional actions you need to perform during upgrade.
- You may supply a CSS (Cascading Style Sheet) containing customizations for Bootstrap 5.3 in a file called
config/customstyles.css
. This allows you to further adjust theme colors to your liking. For instructions on how to customize Bootstrap styles, refer to its documentation. - PR 0000383 (and 385): The changes operator was not allowing "pulse" output option. It is now allowed (whether terminal values are used or not).
NUTController build 24303
- PR 0000384: Fix an error that may be thrown when the NUT client library fails to get the UPS list from the service. This error prevents the real error from being logged properly.
- You may supply a CSS (Cascading Style Sheet) containing customizations for Bootstrap 5.3 in a file called
-
Reactor STABLE Update
The stable branch of Reactor is now updated to build 24257. For changes, please scroll back and see the changes and advisory listed since the previous stable branch build (which was 24057).
IMPORTANT: Bare-metal users will need to update installed packages (run
npm i --no-save --no-package-lock --omit-dev
in the Reactor install directory).NOTE: This stable branch build no longer supports nodejs versions under 18. If you are installing Reactor bare-metal (i.e. not using docker), please make sure you have upgraded to nodejs 18+. An even-numbered LTS (Long-Term Support) version of nodejs is recommended.
-
Reactor build 24343
BARE-METAL USERS: Please run
npm run deps
from your Reactor install directory to upgrade packages. Remove any existingpackage-lock.json
file first if it exists. These steps are only required for bare-metal installs (does not apply to Docker).NOTE: Notable UI Change: removing widgets on the Status tab now requires you to drag the widget (by its header) to the top navigation bar and release it there. Previously, moving a widget anywhere outside the content panel would remove it, but this was troublesome for small touch displays (too easy to remove items while scrolling).
NOTE: If your Current Alerts widget displays two menu icons in its header, remove the widget (by dragging it to the top nav bar and releasing it), and then create a new replacement Current Alerts widget.
- PR 0000389: Improve mobile device compatibility. Although many aspects of the UI have been tweaked for better presentation on small displays, it will continue to be the case that editing of major system objects (Rules, Reactions, Expressions) is a high-interactivity task, and the design goals do not and will not include "mobile first" compatibility for that.
- PR 0000387: Make VirtualEntityController operation of
reactor_system.set_attribute
action identical to (and in fact, just an alias for)x_virtualentity.set_attribute
. On virtual entities, all attributes are de-facto writable. - PR 0000386: Fix an issue with HubitatController where it could attempt to set
NaN
on an attribute, generating a warning in the log. - The Reaction List has been modified to show a spinner while a Reaction is running, rather than holding a green highlight.
- Fix an issue with the Reaction List not repainting correctly after editing a (global) reaction.
- Additional hard-coded colors in some CSS styles have been removed in favor of CSS variables (Bootstrap- or Reactor-defined). This should help user making custom themes.
- Improve the error message given when a script/expression attempts to set a global variable that is not writable (i.e. it's not expressionless).
- The default action handlers for increasing/decreasing values in
dimming
,position
, andvolume
capabilities has been updated to more consistently move in increments of the related step value. For example, when the current dimming level is 0.55 (55%), thedimming.up
action with a step of 0.1 will move to 0.6 rather than 0.65 as previously implemented. Not all devices/Controllers use the default action handlers for these actions — if the Controller implements its own semantics, this change has no effect. - VirtualEntityController can now do HTTP requests in actions. This allows you to create a virtual entity that functions as an interface for a device that is HTTP-controllable without the need to write a custom Controller instance. See the docs for VirtualEntityController for updated section on actions.
- HassController: Bless Hass to 2024.11.3
I am working on some bigger structural changes to Reactor, and have been for a while now. In the interest of finishing those changes, the rate of
latest
builds is going to go down for a bit. I will, of course, address any serious issues that need fixing during that time. -
Reactor build 24366
- Fix an issue with the Entities list not filtering by group correctly.
- Fix an issue with the Entities list not presenting the "Primary Value" alternate selector when a capability filter is active.
- Fix an issue with the Global Expression editor not freeing resources when closing (since 24302).
- Dashboard: adjust the action areas of Level widgets for more predictable touches on small devices.
- HassController: Force a refresh of extended capabilities when the Home Assistant server version changes.
- Entities List: adjust spacing of rows for improved appearance.
- Rule Sets: Fix alignment of title for Rule Set selection panel (offcanvas).
- Rules/conditions: Fix appearance (size) of fields in Interval condition.
- Rules: (experimental) Show the rule state history on the detail panel (Rules tab, open rule panel).
- Status: Fix an issue where widget frames may not be correctly upgraded when upgrading Reactor to 24343 (and beyond).
- HassController: Bless Hass to 2024.12.5
-
Reactor build 25016
HOME ASSISTANT NOTE: Versions of Home Assistant earlier that 2024.1.0 are no longer supported. They may continue to work, but I won't be troubleshooting any issues that come up with them. Generally speaking, HA releases are supported one year in arears from current.
NODEJS V18 EOL: If you are using nodejs version 18, it will go off maintenance on April 15, 2025, and is therefore now deprecated. Please update to a more recent version before this date. Even-numbered LTS versions are recommended. Version 20 will go EOL in April 2026, and version 22 (recommended) in 2028.
- Reaction List: Fix an error thrown when creating a new Reaction.
- Dashboard: improve display of ValueSensor class objects for capabilities temperature_sensor, humidity_sensor, battery_level, and volume.
- HassController: Support new vacuum
activity
attribute and values (see HA 2025.1 release info). - HassController: Support state for lawn mowers.
- HassController: Add
x_hass_system.reload_configuration
andx_hass_system.restart
actions. - HassController: Bless Hass to 2025.1.2
-
Reactor build 25060
- Reactions: Reactions can now be assigned to a Rule Set. This is strictly an organizational tool/capability for user convenience. For purposes of the Engine, Reactions in Rule Sets are still Global Reactions. That means, for example, that a Rule from one Rule Set can still run a Reaction in another Rule Set.
- UI: The login page background should now look better on ultra-wide or beyond XXL monitors.
- Docs: clarify formatting requirement for YAML octal values (must use 1.2 spec
0o
prefix; the old0
prefix withouto
no longer works). - Structure: improve startup handling of controllers and messages around controller startup and status (e.g. inability to load an implementation, etc.). These changes are cosmetic and intended to provide more helpful log messages when things don't go well.
- Fix a sync problem in the Current Alerts and Controller Status Status tab widgets across restarts of the Reactor service.
- VeraController: Fix an issue with
lock.set
affecting both it andtoggle.toggle
for locks. - HassController: Bless Hass to 2025.2.5
-
Reactor build 25067
- Fix a runtime error thrown when creating a Reaction in a Rule Set.
- Fix a race condition causing a runtime error in some browsers when the "Exit" button is hit on a Reaction Editor instance. The error was discovered to be more reliably reproducible when the Reaction being edited had a group (i.e. used an interior/child instance of a Reaction Editor).
- Fix deletion of global expression.
There are workarounds for the first two issues if upgrading is a hassle for you. For the first, create the Reaction under Global Reactions and then move it to the target Rule Set. For the second, you can safely ignore the error as it occurs after all save and cleanup have already taken place.
-
Reactor build 25082
NOTE: Bare-metal users, please run
npm run deps
in your Reactor directory after updating, then restart Reactor. Generally, you should always do this after upgrading to a new build, but for this build in particular, it's necessary.- Status Tab: fix an error that could cause lost notifications on object changes to some widgets.
- Packages: update some packages and force one dependency to eliminate a warning from node about a deprecated subsystem (not every package has caught up yet).
- Reactor UI: improve cleanup and memory utilization of tabs when switching between them.
- Engine: The
isRuleSet()
andisRuleEnabled()
expression functions now trigger re-evaluation of expressions in which they appear when the subject rule changes state. - HassController: Bless Hass to 2025.3.4
ZWaveJSController build 25082
This build of ZWaveJSController requires Reactor build 25082 or higher.
BREAKING CHANGE: For RGBW/RGBWW devices, the
color_temperature
capability is no longer used; white channels will now be mapped to thedimming
capability. If you have such devices and usecolor_temperature
attributes and actions, you will need to make appropriate adjustments to your Rules and Reactions.- Add support for start and stop heal actions (in
zwave_network
capability). - Improve connection retry decay computation (use slow initial decay with rapid ramp).
- Improve handling of white channels in RGBW/RGBWW devices. Mapping them to
color_temperature
seems to be incorrect in most cases, so they are now mapped todimming
. If the device has multiple channels, the white or color channels may be pushed to child entities. - The
zwave_device.set_value
action now accepts JSON in the value fields for Z-Wave JS values that support it. Some devices are able to report or set multiple values simultaneously by using a dictionary as the value (aka JSON object with key/value pairs). RGBWW devices, for example, may support thecurrentColor
andtargetColor
property with a value object like{ "warmWhite": 0, "coldWhite": 0, "red": 128, "green": 0, "blue": 240 }
.
-
Reactor build 25097
- Expression syntax enhancement: it is now possible to use a variable's value as a key when creating an object on the fly. For example, if the variable
cmd
contains the word "econo" (presumably derived from configuration or some other dynamic source), it is now possible to create an object{ econo: true }
by enclosing the key source in square brackets:obj = { [cmd]: true }
. For reference, this syntax mimicks JavaScript. - Fixed a UI crash when bringing up Reactor initially after using the About page bypass.
- OWMWeatherController: implement
sys_system.restart
, which will cause all locations to be refreshed immediately. - OWMWeatherController: new config option (boolean)
ignore_certs
can be set to ignore certificate errors. These seem to pop up occasionally, perhaps because of a misconfiguration in the load balancing at OWM.
- Expression syntax enhancement: it is now possible to use a variable's value as a key when creating an object on the fly. For example, if the variable
-
Reactor build 25139
BARE-METAL USERS: You must execute the shell command
npm run deps
in your Reactor install directory after upgrading, to update package dependencies. The UI may not start if you fail to do this. This advisory does not apply to docker containers.BARE-METAL USERS: nodejs version 18 is End of Life (EOL) as of April 30, 2025, and is no longer supported. For best results and longevity, upgrade to an even-numbered version of nodejs. The current LTS (Long Term Support) version (recommended) is 22 and will go EOL in April 2027.
BREAKING CHANGE FOR DEVELOPERS: If you use
Entity.registerAction()
and specify a function, the target function now takes the canonical action name as its second argument, and the action parameters will be the third argument (the target entity remains the first argument). That is, the signature of the function has changed fromtargetFunc( entity, params)
totargetFunc( entity, actionName, params)
.- Engine: Improve the approach of Rule State conditions to changes in the subject rule's state that don't end up changing the top-level rule state. This should considerably reduce potential throttling that can occur when inter-related/co-dependent rules change.
- Reactor UI: On the Entities list, fixed a minor display error in the display of atttribute values when an attribute other than the entity's primary is selected.
- Reactor UI: Reworked the URL routing so that linking to tabs and objects is possible. For this build, this will be most visible in many (but not all) of the Status tab widgets. More linking will be done in future. There's a lot more to do; please don't bother reporting areas where objects are not linked at this time.
- Reactor UI: The Rule Sets offcanvas navigation now has a search field that allows you to search for a rule by name.
- Upgraded some packages used by Reactor to maintainer's latest versions.
- HassController: Bless Hass to 2025.5.2
ZWaveJSController build 25139
- Minor bug fixes for initialization of devices with scene controller capability.
MQTTController build 25139
NOTE: Uses latest
mqtt
package, which is version 5.11 as of this writing. You must runnpm run deps
in the MQTTController install directory to update the package.- New template support for Shelly Plus 1PM (use
include: shellyplus1pm
) and Shelly 1 Mini Gen3 (useinclude: shelly1minig3
). - The
query
directive in a device configuration now supports payload construction using the same semantics as that for action payload constructions. Principally, this gives you access toexpr
for query payloads, which facilitates more dynamic construction of payload fields where devices or templates need. - New inbound topic
reactor/:ident/Reaction/:reaction_id/:command
; thecommand
may berun
,stop
, orquery
to run (enqueue), stop (if running), or query the status of the specified global or Ruleset-based Reaction. You cannot run, stop, or query the state of the SET or RESET Reactions in a Rule. Thequery
command requires Reactor build 25111 or higher for accurate response.