Reactor (Multi-System/Multi-Hub) Announcements
-
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
activityattribute and values (see HA 2025.1 release info). - HassController: Support state for lawn mowers.
- HassController: Add
x_hass_system.reload_configurationandx_hass_system.restartactions. - 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
0oprefix; the old0prefix withoutono 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.setaffecting both it andtoggle.togglefor 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 depsin 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_temperaturecapability is no longer used; white channels will now be mapped to thedimmingcapability. If you have such devices and usecolor_temperatureattributes and actions, you will need to make appropriate adjustments to your Rules and Reactions.- Add support for start and stop heal actions (in
zwave_networkcapability). - 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_temperatureseems 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_valueaction 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 thecurrentColorandtargetColorproperty 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
cmdcontains 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_certscan 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 depsin 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
mqttpackage, which is version 5.11 as of this writing. You must runnpm run depsin 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
querydirective in a device configuration now supports payload construction using the same semantics as that for action payload constructions. Principally, this gives you access toexprfor query payloads, which facilitates more dynamic construction of payload fields where devices or templates need. - New inbound topic
reactor/:ident/Reaction/:reaction_id/:command; thecommandmay berun,stop, orqueryto 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. Thequerycommand requires Reactor build 25111 or higher for accurate response.
-
Reactor STABLE Update
The stable branch of Reactor is now updated to build 25139. Please scroll back and see the changes and advisories listed for builds here since the previous stable branch build (which was 24257, 13-Sep-2024), or whatever build you are currently running.
ALL USERS: It's always recommended to back up your Reactor system before upgrading.
IMPORTANT: Bare-metal users (only) need to do the following:
- Update dependent packages by executing
npm run depsin the Reactor install directory. - Reactor no longer supports nodejs versions before 20. If you are running on an earlier version, please upgrade nodejs before upgrading to this build, and make sure your current environment is working. Once you are sure Reactor is happy on the upgraded nodejs, then and only then should you upgrade Reactor to this new stable build. An even-numbered LTS (Long-Term Support) version of nodejs is recommended; the current LTS version is 22.
- If you are running extension controllers like ZWaveJSController or MQTTController in your configuration, you will need to upgrade those to their respective latest versions.
- Update dependent packages by executing
-
Reactor build 25208
- Status page: fix an issue placing the widget adder tool the first time (i.e. on a new browser or after flushing cache/cookies).
- HTTP Request action now offers storage of the query response in "advanced form." This is a structure (object) that includes the response body as well as the response status, messages, and response headers. The simple form (store body or null) is the default and all existing HTTP Request actions will use the simple form response unless/until modified.
- Telegram notifications now support photo and video messages. To send a photo or video message, select the appropriate Message Format and place the URL or filename in the Message field. Telegram's limits for file type and size must be observed (refer to Telegram's documentation).
- HassController: Configuration for
filter_entitynow accepts regular expressions to match to entity IDs (i.e. it can now do pattern matching, not just match exact strings). Specify regular expressions in/regexp/flagsform (e.g./^update./ito match IDs that begin withupdate., case insensitive; flags are optional, and the only flag supported right now isifor case-insensitive matching). - HassController will requery for service data if the lookup of service data from the startup query does not have the needed info. This can occur when an integration is not fully up and running when HA restarts -- HA will only report on services for fully running integrations at the time. The requery updates the service data for integrations that start later.
- HassController remove old entity mapping configuration that was preventing a mutable attribute (
dimming.step) from being changed by the user permanently. - Expressions: new
geodist()extension function to compute Great Circle Distance between two points (presumably on Earth). See docs for details. Example:kilometers = geodist( lat1, lon1, lat2, lon2 ) - HassController: Bless Hass to 2025.7.3
-
Reactor build 25304
BARE-METAL USERS: It is recommended that you update package dependencies when installing all Reactor updates. After unpacking the Reactor archive, remove any existing
package-lock.jsonfile from your Reactor install directory, and then runnpm run depsto update package dependencies.ALL USERS: If you are using extension Controllers (like ZWaveJSController) please update them to the latest versions as well. Please refer to the CHANGELOG files for each for information on specific changes. Also don't forget to update any dependent packages for those extensions — dependent packages are maintained separately from Reactor itself and must be updated individually.
- Rules: POTENTIALLY BREAKING CHANGE the evaluation mechanism for rule-based (local) variables has been changed. Users with rules that rely on specific nuances (or bugs) in the old behavior/mechanism may find their variables and rules do not work as expected. However, most users should find that the new mechanism aligns well with their expectations. See the docs for Variables & Expressions - Overview for a complete description.
- The "Force re-evaluation of expressions and conditions" option available in the Set Variable action of Rule Reactions (SET & RESET) has been removed. When a rule-based variable is used in a trigger, and the variable's value changes, the Rule will now re-evaluate itself automatically. This is part of the above changes.
- Rule Reactions (SET & RESET) now have a "Wait for completion" option. When set, the rule will wait for its Reaction to finish before allowing itself to be re-evaluated. When not set (the default), the Rule will not wait and the Reaction runs asynchronously, and therefore a change to the rule state during the Reaction's execution could cause the Reaction to be pre-empted (stopped before completion).
- Rules: fix handling of some very old rule conditions where the changes operator was stored in an older structure (i.e. handling the legacy structure had a bug).
- A new
alarm( interval_seconds )function has been added; it can be used in global expressions (only) to cause periodic re-evaluation of the expression. This is particularly useful for expressions that don't have dependencies on other variables or entities/objects. A running timer can be cancelled by specifying an interval of zero (0). - Expressions: fix an error in which the
sort()function would sort the array in place rather than returning a new, sorted array (this was in conflict with its specification and intended operation, and apparently existed for a long time). - UI/Expression Editor: button coordination in expressions editing has been improved, and the highlighting of error messages has been improved.
- HTTP API: A new endpoint
/api/v1/variable/:name/updatehas been added to force re-evaluation of a global variable's expression and, if changed, set its new value. See docs - HassController HA made a breaking change in 2025.9 (pull 150721) that wasn't declared in their general release notes, affecting the
media_player.play_mediaservice. This service also has a new field and selector type, and two fields previously declared have been removed. - HassController now has ability to filter out entities (i.e. not import entities from HA into Reactor) based on source (integration). see docs
- HassController now supports binding of events directly to Reactions. This is in addition to the existing ability to bind events to entity attributes. Previously, if the user's goal was to run a Reaction in response to an event from HA, the user would need to first bind the event to a new entity and attribute, and then create a Rule triggered by that entity/attribute to launch the Reaction. Now, the Reaction can be launched directly on receipt of the event. See docs.
- DynamicGroupController: A configured group can be disabled by adding
enabled: falseto its configuration. The boolean value false is the only value that will be honored to disable the group (e.g. null and the number 0, while falsy values, will not be honored). - Resolve an issue where some Controller subclass'
systementities could lose track of their default primary attribute when unserialized (reloaded from storage at startup). - UI: The rule search tool on the Rule Set left navigation offcanvas also finds Rule IDs that match the entered text (i.e. you can search by name and ID).
- UI: Fix an error that was thrown when using search on the Rule Sets navigation offcanvas list and some existing Reaction had no name.
- UI/Entities: Refresh all displayed entities when a structure event is received from the API (such as when reconnecting after a restart), to ensure the data displayed is the most current.
- UI/Expressions: page will now refresh all expression values when a structure event is received (e.g. after a restart of Reactor), as the Engine start and update of global variables often occurs before clients reconnect to the service, so clients can easily miss the update events from those objects.
- UI/Client API: fix an issue where a group entity could be assigned the wrong entity class.
- UI/Rules: Fix column not wrapping on large value for Rule-based expressions (rule detail card).
- UI/Reaction Editor: the single-action try button (for Entity Actions) now correctly omits optional fields that contain no data, rather than sending blank data and expecting the Controller instance to sort it out.
- UI/Entity Picker: click handler now covers an empty area when no entity has been selected.
- UI/modal dialogs: the ESC key will now dismiss most dialogs; if the dialog is a confirmation, the dismissal is equivalent to hitting "Cancel".
- Pushover Notifier: remove extraneous debug message.
- Developers of Controller subclasses: the Controller method
removeControllerGroup()is now deprecated. To replace its functionality, you should now set the class static propertycreateControllerGrouptofalse. See docs. The old method will continue to be available until October 2026, but will generate a warning to the log, unless the class property is also set, in which case the warning is reduced to informational level (i.e. you can do both for compatibility until next year). - Tools: added a new trivial backup script.
- Docker images: now built with nodejs LTS (22.20 as of this entry) on Alpine 3.21
- HassController: Bless Hass to 2025.10.4






