I've managed to use MSR UI on iOS devices to some degree*, so that although UI elements (e.g. rule sets) are not visible in portrait mode, you've seen them in landscape. Now with recents builds (24302) this does not work anymore, elements (rule sets, entities) are not anymore visible in landscape mode.
Does anyone have similar experiences? Using iOS 18 and Safari/Chrome browser.
( *Drag & drop of rule conditions have never worked on a mobile)
Hi @toggledbits,
I have lots of logs with this:
<Engine:ERR> Assignment to alarm ignored -- expression-driven global cannot be set by assignmentAny hints to where look at to avoid this? Thanks.
Hi @toggledbits
I'd like to update my controllers with these new features, but I'm struggling to find any guidance in the docs - and in general to understand the context.
Could you please elaborate more? Thanks.
I have the following ACL defined:
groups: admin: users: - admin applications: true api_acls: # This ACL allows users in the "admin" group to access the API - url: "/api" group: admin allow: true log: true # This ACL allows anyone/thing to access the /api/v1/alive API endpoint - url: "/api/v1/alive" allow: trueAnd I have authenticated to MSR as "admin" user. However, I'm getting "access denied" when trying to access http://*******:8111/api/v1/log
So what I'm missing, is my ACL incorrectly defined?
Using build 24302 on Docker.
Thanks to @toggledbits for adding a custom CSS. I've started doing a darker Reactor style.
Here's the file: https://gist.github.com/dbochicchio/825098ac13b7f8cac22012eae37ff7ce
A couple of things are still too bright and I'll eventually catch-up. Just place it under your /config directory, naming the file as customstyles.css. Hard refresh your browser.
Hi!
In Home Assistant I sometimes uses the TTS, either to my Sonos or Google speakers. With reactor in Vera I also use TTS.
But in MSR I can't select the TTS-service. It's simply not there. Am I missing something, or is this the case, so far?
Thanks!
/Fanan
Hi
I have just connected a bunch of EzloPi controllers to MSR to import some ESP based devices etc.
They all seemed to have worked and imported in to MSR apart from I have one missing device. It is a Digital Gas Sensor device.
This is how that device looks in the Ezlo API.
Devices Info:
_id: "10696001" deviceTypeId: "ezlopi" parentDeviceId: "10696000" category: "level_sensor" subcategory: "" gatewayId: "457a5069" batteryPowered: false name: "Gas Sensor Digital" type: "sensor" reachable: true persistent: true serviceNotification: false armed: false roomId: "" security: "no" ready: true status: "idle" parentRoom: true protectConfig: "default"Items Info:
_id: "20696001" deviceId: "10696001" hasGetter: true hasSetter: false name: "smoke_density" show: true valueType: "substance_amount" scale: "parts_per_million" value: 2.7472610473632812 valueFormatted: "2.75" status: "idle"There is also an Analog Gas sensor that one did import in to MSR OK.
68d63dab-b871-4f44-912b-cf6e0b9eb4c6-image.png
Devices Info:
_id: "10696000" deviceTypeId: "ezlopi" parentDeviceId: "10696000" category: "security_sensor" subcategory: "gas" gatewayId: "457a5069" batteryPowered: false name: "Gas Sensor Analog" type: "sensor" reachable: true persistent: true serviceNotification: false armed: false roomId: "" security: "no" ready: true status: "idle" parentRoom: true protectConfig: "default"Items Info:
_id: "20696000" deviceId: "10696000" hasGetter: true hasSetter: false name: "gas_alarm" show: true valueType: "token" enum: 0: "no_gas" 1: "combustible_gas_detected" 2: "toxic_gas_detected" 3: "unknown" valueFormatted: "no_gas" value: "no_gas" status: "idle"And this is how this MQ2 Gas Sensor looks like on their dashboard:
Digital
cb77dfa3-4af5-4d06-9635-89207a716a89-image.png
Analog
4fb4da1b-e946-4b89-876c-bcd9f5699b6c-image.png
They have an EzloPi website here you can create your own sensor projects using ESP boards, which is very interesting stuff!
And I just wrote on the Ezlo forum here, how to connect an EzloPi controller to MSR.
THANKS.
Build 21228 has been released. Docker images available from DockerHub as usual, and bare-metal packages here.
Home Assistant up to version 2021.8.6 supported; the online version of the manual will now state the current supported versions; Fix an error in OWMWeatherController that could cause it to stop updating; Unify the approach to entity filtering on all hub interface classes (controllers); this works for device entities only; it may be extended to other entities later; Improve error detail in messages for EzloController during auth phase; Add isRuleSet() and isRuleEnabled() functions to expressions extensions; Implement set action for lock and passage capabilities (makes them more easily scriptable in some cases); Fix a place in the UI where 24-hour time was not being displayed.A couple of things for you @toggledbits, since you mentioned that this release has new features and some tweaks are expected.
Local expressions cannot be deleted. Pushing the X button has no effect for me.
When cloning an entity action, the result is strange (first is cloned one, second is the original action):
a92ea094-9e2c-4aaa-bf47-2d07a6ffdbd0-image.png
When changing the action on the cloned element, the params are added to the original one. See screenshot:
92ac3011-83c8-466b-bd23-47d483ad7a52-image.png
Dark theme has a couple of strange contrasts. One is visible in the previous screenshots (white text on yellow background). Another one is in groups (blue text on blue background):
9b3c4988-53ef-44e6-9672-30e744cacb75-image.png
Overall, I found blue, yellow, red and green (in buttons and forms) to be too bright.
On the bright side:
I love the new script action: thank you! The dark theme is a great start to avoid getting blinded at night I promise I'll try very soon the new features around actions. Thanks!@toggledbits
I just upgraded to version MSR 24293, bare metal running on Fedora. Upon restart, I am getting a error banner:
I followed the new directions about npm
npm i --no-save --no-package-lock --omit dev
Any idea what the issue is?
Seems like switching the UI to the newly added dark mode (thank you for this) does nothing. The UI stays in light mode and only a few buttons turn into dark mode (see screenshot)
Things I have tried:
Hard refresh
Different browser
Different computer
Restarting Reactor
Failed troubleshooting attempts:
No errors in Chrome console
No relevant errors in Reactor log (can still PM the full log file)
Reactor version: latest-24293-ea42a81d
Hardware: Odroid N2+
Linux version: Ubuntu 24.04.1 LTS
3df2806f-9146-485b-9ec1-d056e91cefe5-image.png Dark mode enabled
ff823023-c079-4684-b01f-d6ac6527d31a-image.png Light mode enabled
Good morning,
I have a service MQTT service that needs a restart occasionally. The add-on (Smartbed MQTT) is for the smart bed base for my bed. It has a "safety light" that I can control from HAAS & MSR as a light entity, and also moves the head of the bed to a preset at bedtime, and then lies it back flat in the morning The problem is, from time to time, the light becomes "unavailable" Restarting from the Add-ons tab in HAAS always fixes it, but I should be able to detect when it happens when "light.tempur_pedic_safety_lights" is not true or false, i.e., unavailable.
What I don't know how to do is how to restart that service. Does anybody have experience in restarting add-ons from MSR?
Running:
Reactor (Multi-hub) latest-24212-3ce15e25 ZWaveJSController [0.1.24232]HAAS:
RPi5-64 (8GB) Core 2024.7.3 Supervisor 2024.08.0 Operating System 13.0 Frontend 20240710.0Hi!
Is it possible to generate two additional log files, the first being the replica of what is displayed on screen by the Rule History widgets and the other with Recently Changed Entities?
And could I configure the generation of one file per day, and delete the older ones? For example, store the last 5 days?
And being more ambitious, does Windget have an icon to open these TXT files in the navigated?
Well, we're approaching Christmas, so here's my request to Santa Claus @toggledbits 🙂
Hi @toggledbits
I'm working on a controller to generate llm response from a prompt in reactor. I have http response coming thru an http request action at the moment, capturing the response inside a local variable. So, it's practically sync.
I want to create a controller, so I don't have to rely on a proxy (and have a simpler architecture), and duplicate absurd http actions, but AFAIK in the current implementation, actions are async only. But if I have multiple requests going on, I cannot be sure what it's really inside an attribute. I also thought that something like a correlation id when sending the request could be used to identity multiple responses, but I wanted to double check with you before starting with something too complicated. I also noticed that some actions in home assistant (ie forecast) are sync and I'm wondering if you have any plan or hint to address this situation. Thanks.
Thanks.
@togglebits I am curious as to why the tilt_sensor.state (primary) = NULL. I believe it should show true or false. I have to use binary_sensor.state instead in my rules.
Again, not sure if this is related to Reactor/ZwaveJSController implementation or the actual Z-Wave JS UI docker version. I have copied, below, the attributes of the tilt sensor in hopes it can help.
Thanks in advance.
Reactor version 23302
ZWaveJSController version 23254
Z-Wave JS UI version 9.3.0.724519f
zwave-js version 12.2.3
@toggledbits I have noticed after upgrading both Reactor and ZWaveJSController to version 24257 that two of my devices/entities, TILT-ZWAVE2.5-ECO and Zooz ZSE18, had their entity re-named in an unusual way and also appears to be duplicated.
Reactor version 24257
ZWaveJSController version 24257
Z-Wave JS UI version 9.18.1
zwave-js version 13.2.0
Vestibule Motion Sensor State attributes/partial screenshot of entities it created. All entities have the same attributes.
motion_sensor.state=true x_zwave_values.Notification_Home_Security_Motion_sensor_status=8 zwave_device.capabilities=[113] zwave_device.endpoint=0 zwave_device.failed=null zwave_device.manufacturer_info=null zwave_device.node_id=23 zwave_device.valueId=[113,"Notification","Home Security","Home Security","Motion sensor status","Motion sensor status"] zwave_device.version_info=nullTilt Sensor Door State and Tilt Sensor Door State Simple attributes/partial screenshot of entities it created. All entities have similar attributes with exception of x_zwave_values.Notification_Access_Control_Door_State = 22 or 23.
tilt_sensor.state=true x_zwave_values.Notification_Access_Control_Door_state=22 zwave_device.capabilities=[113] zwave_device.endpoint=0 zwave_device.failed=null zwave_device.manufacturer_info=null zwave_device.node_id=24 zwave_device.valueId=[113,"Notification","Access Control","Access Control","Door state","Door state"] zwave_device.version_info=null tilt_sensor.state=true x_zwave_values.Notification_Access_Control_Door_state_simple=22 zwave_device.capabilities=[113] zwave_device.endpoint=0 zwave_device.failed=null zwave_device.manufacturer_info=null zwave_device.node_id=24 zwave_device.valueId=[113,"Notification","Access Control","Access Control","Door state (simple)","Door state (simple)"] zwave_device.version_info=null tilt_sensor.state=false x_zwave_values.Notification_Access_Control_Door_state=23 zwave_device.capabilities=[113] zwave_device.endpoint=0 zwave_device.failed=null zwave_device.manufacturer_info=null zwave_device.node_id=24 zwave_device.valueId=[113,"Notification","Access Control","Access Control","Door state","Door state"] zwave_device.version_info=null tilt_sensor.state=false x_zwave_values.Notification_Access_Control_Door_state_simple=23 zwave_device.capabilities=[113] zwave_device.endpoint=0 zwave_device.failed=null zwave_device.manufacturer_info=null zwave_device.node_id=24 zwave_device.valueId=[113,"Notification","Access Control","Access Control","Door state (simple)","Door state (simple)"] zwave_device.version_info=nullI'm slowly migrating all my stuff to MQTT under MSR, so I have a central place to integrate everything (and, in a not-so-distant future, to remove virtual devices from my Vera and leave it running zwave only).
Anyway, here's my reactor-mqtt-contrib package:
Contrib MQTT templates for Reactor. Contribute to dbochicchio/reactor-mqtt-contrib development by creating an account on GitHub.
Simply download yaml files (everything or just the ones you need) and you're good to go.
I have mapped my most useful devices, but I'll add others soon. Feel free to ask for specific templates, since I've worked a lot in the last weeks to understand and operate them.
The templates are supporting both init and query, so you have always up-to-date devices at startup, and the ability to poll them. Online status is supported as well, so you can get disconnected devices with a simple expression.
Many-many thanks to @toggledbits for its dedication, support, and patience with me and my requests 🙂
Reactor (Multi-System/Multi-Hub) Announcements
-
Reactor build 24057
NOTE (BARE-METAL ONLY): If you are upgrading to this build from a build earlier than 24052, please update your package dependencies. After unpacking the Reactor archive, remove any existing
package-lock.json
file from your Reactor install directory, and then runnpm i --no-save --no-package-lock --omit dev
to update package dependencies.- PR 0000366: Fix an injection caused by the rule state override option added in 24052, which results in constraints on rules being handled incorrectly.
-
MQTTController build 24085
- Support for Shelly H&T Gen3 (use
shelly_handt3
template and settopic
). This is a battery-powered WiFi device, so its attributes will not be fully populated until the first wake-up.
- Support for Shelly H&T Gen3 (use
-
-
Reactor build 24115
- Entities UI: When a capability filter is selected, the value column header displays a selector allowing the user to display a value in the column other than the primary value for the filtered entities.
- The extensions subdirectory
ext
may now be located underconfig
, which makes its location uniform for bare-metal and docker users; this will eventually become the standard location. It is not necessary at this time to relocate your existingext
directory if you have one — either or both the old and new locations will work for the foreseeable future. - Improve the coordination of the Reactions and Rules displays when open and interacting on multiple displays (e.g. when you delete a reaction on one screen, it should disappear from the other(s)).
- Fix a browser-side performance issue/delay with reconnection to a restarting Reactor service when the Status page is up and displaying the Recently Changed Entities widget. This also improves the memory consumption and performance of the widget generally.
- Increase tolerance for damage to most storage objects, particularly those that only maintain state that can usually be safely rebuilt on the fly. For those that cannot, like rules and expressions, isolate a faulty file and ignore the object with an alert to the user. Preserve the broken file.
- PR 0000367 Localization of the new strings in the rule state override menu and state display have been added.
- PR 0000368 Fix missing localization string for Copy Attributes button in Entities list entity detail card.
- Report detected time zone and offset in startup messages. Add time zone display to hover title on browser and host times in UI header.
- New
wifi_status
system capability for WiFi-connected devices that can report connection status. - PR 0000369 Docs: Add documentation for
ev_charger
system capability. - HassController now supports responses from services that support them; whether required or optional, a response will be requested and stored in
x_hass.last_response
on the target Reactor entity. The data returned is not processed in any way; it is written as-received to the attribute. Tip: if possible, always make the service call from the target entity, not from the system entity. - HassController: Bless Hass to 2024.4.4
MQTTController 24114
NOTE: This version requires Reactor build 24115 or higher
- Add template for Shelly RGBW2 (using Gen1 API) called
shelly_rgbw2_color
(requirestopic
). - Add support for
wifi_status
capability for some devices; more to come. Previously, those devices stored WiFi status info inx_mqtt_device
(extended capability) attributes. Now that a first-class capability is being used, the extended attributes are deprecated and will be removed from a future release. - Templates may now remove an action from an entity if it isn't supported by the device. This is done by specifying the action's value as
false
. If a device cannot support any action of a capability, the entire default list of actions for the capability can be removed by specifying the capability value asfalse
in theactions
section of the template. For an example, see the templateshelly_rgbw2_color
implementation for capabilitylight_effect
actionset_speed
, and the action implementation for thebutton
capability. - Templates may now define custom actions in
x_mqtt_device
. Including anarguments
object in the standard action arguments format allows the template to notify the UI of the arguments required by the action. For an example, see the templateshelly_rgbw2_color
actionx_mqtt_device.set_white
.
-
MQTTController 24120
- Soft reconfiguration of entities on configuration changes and system upgrades. This should preserve attribute values when the entity needs to be configured due to implementation changes for capabilities.
-
MQTTController 24142
DEPRECATION NOTICE: The
uses_template
entity configuration directive is now deprecated; useinclude
instead (see below). It will remain functional until build 25091 (Q2 2025).- PR 0000370: Events for tasmota_generic_relay in template have hard-coded device ID (left over from test/dev).
- System templates are now broken up to multiple files in a hierarchy within the
templates
distribution subdirectory. - New
include
directive in entity configuration or a template can be used to include the data of another template. You may name a single template (string value), or an array of template names. This permits common behaviors across devices to be modularized in templates. This directive also now replacesuses_template
, which is deprecated (see above notice). - The user custom template directory (
config/mqtt_templates/
) now supports any directory hierarchy the user wishes to maintain within it. It searches for templates in YAML or JSON files in the hierarchy, and will traverse ZIP files as well (so template developers can distribute their products in ZIP archives for easy installation/upgrade).
-
Reactor build 24152
POTENTIAL BREAKING CHANGE: The port on which Reactor provides HTTP(S) service is now determined by the
baseurl
configuration value first. If no port is given there, the PORT environment variable is then queried; if that's not set, the default port is used (different for HTTP and HTTPS; see below). In previous versions, the PORT environment variable had the highest priority, but this is no longer the case. This will likely have no effect on most users, but if you're having trouble accessing the UI after upgrade, check yourbaseurl
configuration first (if you don't have one or need an example, refer to the distribution version ofreactor.yaml
indist-config
. For users using Reactor via HTTPS (SSL/TLS encryption), I recommend using port 8554 inbaseurl
; regular HTTP (no encryption) remains on port 8111.- User Authentication and Access Control. See the Access Control documentation. This is feature request PR 0000351.
- The default port for HTTPS-enabled Reactor is now 8554 (8111+443). If your system or docker configuration set the PORT environment variable before starting Reactor, whatever port that specifies will be used as before. See the How-To: HTTPS section of the documentation for information about configuring Reactor for HTTPS.
- The port used for HTTP(S) service is now determined by the port specified in
baseurl
(inconfig/reactor.yaml
) first; if no port is specified inbaseurl
, the PORT environment variable is used if set, and finally the Reactor default of 8111 (or 8554 if TLS is enabled). - If HTTPS (HTTP + SSL/TLS) is enabled and its configured port is other than 8111 (the standard HTTP (non-SSL/TLS) port for Reactor), an HTTP service on port 8111 will now be created to redirect requests from HTTP to HTTPS (no unencrypted service is provided other than redirection). This feature can be disabled by configuring
redirect_http
tofalse
in thereactor
section ofconfig/reactor.yaml
. - The
allow_ips
in thereactor
section ofconfig/reactor.yaml
now allows CIDR address range specification (e.g.10/8
or192.168.0/24
) for ranges of addresses. - Updated the documentation theme and its supporting plugins; improved the appearance of code snippets with syntax highlighting in most cases; add line highlighting in many code snippets to draw attention to certain elements or changes.
- Dashboard: added new Thermostat type (supported by
Level.updown
layout) for capabilitieshvac_heating_unit/hvac_cooling_unit
. Evolving; further improvements coming. - VirtualEntityController: Support for time-series data collection and aggregation. See the docs).
- VirtualEntityController: Preserve attribute values if possible across system updates that affect capability definitions or implementations.
- DynamicGroupController: It is now possible to set the primary attribute of a dynamic group, and determine its value dynamically. Trivial example: add the
binary_sensor.state
attribute to a group to show true when any light in the group is on. Refer to the docs for DynamicGroupController. - The
dist-config
directory is now copied to the user data virtual path target when running in docker containers so that its contents are more easily accessible to docker users (no need todocker exec
into the running container). - Rules: the logging level for most rule evaluation messages has been reduced to
DEBUG0
(numeric level 5); rules will now log only startup/shutdown and rule state changes atINFO
level. Per-object logging configuration can be used to enable more detailed logging for a specific rule when required. - Fixed an issue in the core related to deleting certain objects (a Global Reaction was reported, but could have been many object types).
- Fixed an issue with local service of docs that caused a cross-site scripting error on some browsers (this is the "Initializing search..." bug).
- Developer Tools: the
util
functiondeepCompare()
now works with JavaScriptSet
,Map
,Buffer
, andRegExp
objects. - Developer Tools: documented
util
functionhash()
(it's been around a while, just not documented). - HassController: Bless Hass to 2024.5.5
-
MQTTController build 24155
NOTE: This build contains only compatibility changes; no bug fixes or new features.
- Small change to preserve compatibility with older builds of Reactor; this in particular is to ensure that users of the
stable
release branch are able to use the latest version of this controller.
- Small change to preserve compatibility with older builds of Reactor; this in particular is to ensure that users of the
-
Reactor STABLE Update
The
stable
branch of Reactor is now updated to build 24057. For changes, please scroll back and see the changes and advisory listed since the previous stable branch build (which was 23344).IMPORTANT: Bare-metal users will need to update installed packages (see note here) and be aware of the breaking change notification (same link).
NOTE: This will be the last
stable
branch release that supports versions of nodejs < 18. If you haven't yet upgraded nodejs on your system, you will need to do so before the nextstable
update (an even-numbered LTS version is recommended). This applies to bare-metal users only; docker users have compatible versions of nodejs built into the Reactor distribution image. -
Reactor build 24190
BREAKING CHANGE: Home Assistant versions prior to 2023.6 are no longer supported. Going forward, you may expect HassController to support Home Assistant releases made in the last 12 months. Older releases may continue to work, but will rececive a warning at startup, and may cause errors (that I will not troubleshoot or fix/work around). Special workarounds for pecularities of releases older than 24 months will be removed from the code (meaning versions of Home Assistant older than that will almost certainly have issues).
- Access Control: setting the session timeout to 0 in
users.yaml
disables timed-based session expiration. - PR 0000374: Rolling refresh appears not to work (many UI operations don't cause enough activity to stimulate the refresh).
- PR 0000371: Localization for login page submit button.
- Conditions: Ignore excess whitespace in comma-separated list of values for "in" and "not in" condition operators.
- Rule UI: Hovering over a condition's value in a rule detail card now shows info for current and previous value.
- HassController: Bless Hass to 2024.7.0
MQTTController build 24162
- Address an issue with action configuration in a template stomping on the action definition in the parent capability.
- Ensure deep copy of template applied to entity.
- Fix an initialization issue when multiple instances of MQTTController are configured.
- Access Control: setting the session timeout to 0 in
-
EnvisalinkController build 24191
This is the initial release of a Controller for Envisalink EVL4 alarm panel interfaces. The controller currently supports only Honeywell panels, but I'm happy to work with anyone who has an EVL4-connected DSC panel to get that working as well.
Distribution package is available in the
extras
folder of the download site. -
Reactor build 24212
- PR 0000376: Search by name is now available on the Reactions list (similar to Entities list).
- Attribute
security_mode.state
recognizesmax
value. - Action
security_mode.set_mode
now takescode
argument (if not given, the default code in the Controller's configuration will be applied, if available). - Dashboard: support
/dashboard/group/<group-canonical-id>
path for direct display of a group. - PR 0000375: Fix a path where a global variable (expressionless) could have its value modified and not update variables that depend on it.
- HassController: Bless Hass to 2024.7.3
-
Reactor build 24243
POTENTIAL BREAKING CHANGE: The conditions in a Reaction's repeat...while group are meant to be Constraints, not Triggers -- they are stateless, meaning that they are evaluated each time they are run, not when an underlying condition triggers them (such as a timer expiring on a sustained for option). This was always meant to be the case, but an error in the UI implementation permitted certain condition options applicable only to trigger conditions. This is now fixed, and any constraints containing condition options will have those options removed during later editing, and the options will not function (they haven't been working correctly anyway) until that time.
- Shell Command action now supports expression substitution. This makes an already dangerous (security-wise) action even moreso, so it must be enabled explicitly by setting
allow_shell_action_substitution: true
in theengine
configuration section ofreactor.yaml
. It is highly recommended that Shell Command actions only be used on systems that have HTTPS access and Access Control (user authentication) enabled, to reduce the possibility that the action could be a vector for attacking the host system and your network. - PR 0000378: VirtualEntityController: fix configuration collision between virtual entities affecting time-series aggregations.
- PR 0000369: Add
error
attribute forev_charger
system capability documentation. - PR 0000349: Support custom sounds for Pushover notification.
- PR 0000290: Display rule ID in rule editor (convenience).
- HassController: Bless Hass to 2024.8.3
ZWaveJSController 24242
BREAKING CHANGE WARNING: The entity IDs of certain child entities may change to reflect a more deterministic naming style. Entities principally effected would be those created in 2022 and earlier for scene activation. Rules that use these entities will need to be updated.
- Handle notification special events (in Notification CC 113 type 6) for locks for better performance of
keypad
capability attributes (where the device and Z-Wave JS support it). - Update Fibaro FGR222/FGRM222 handling for manufacturer proprietary venetian blind position and tilt
- Creation of child entities is expanded to include all command classes that result in capability/attribute collisions on an entity. That is, if two or more values (from Z-Wave JS) on an endpoint resolve to the same Reactor capability, a new child entity is created.
- Shell Command action now supports expression substitution. This makes an already dangerous (security-wise) action even moreso, so it must be enabled explicitly by setting
-
Reactor build 24257
- System Capabilities: the new
tag
system capability has been introduced to extend data and behavior for RFID tags and similar devices. - HassController: Implement
tag_scanned
event handling, which creates a new entity from the tag ID. This entity is updated whenever Hass reports that the tag is detected any scanning device. This automatic event handling does not preempt or prevent user-configurable event handling for different behavior, if desired. - HassController: Improve the initialization of event-driven entities so they are not cleared every time Reactor is restarted (they will be cleared only if a configuration change is detected).
- HassController: The event processor now ensures that
time_fired
is included in the event data before handling. If not, Reactor will provide it. In addition, since Hass passestime_fired
as a string, Reactor will parse the string to an Epoch time (seconds since midnight Jan 1, 1970 UTC) and provide it intime_fired_epoch
, which can be used in user configuration for events. - HassController: Allow filtering of state attributes to reduce rule re-evaluation traffic for related entities. (see docs)
- HassController: Bless Hass to 2024.9.1
ZWaveJSController build 24257
- Fix an issue with polling rescheduling that can cause polling to take too long to re-poll a node after the initial poll.
- Handle forced-write of attributes when processing events for the Notification Command Class.
MQTTController build 24257
- Code cleanups and minor bug fixes; mostly changes to sync with evolution of various system capabilities.
- System Capabilities: the new
-
Reactor build 24293
BARE-METAL USERS: UPDATE YOUR PACKAGES! You must remove any
package-lock.json
file in your Reactor install directory and runnpm i --no-save --no-package-lock --omit dev
after unpacking the Reactor distribution archive. Failure to do so will result in a non-functioning UI (notably non-working dark mode) and many other issues.POTENTIAL BREAKING CHANGE: The validity of characters in entity IDs is now enforced. Previously, only a warning was written to the log if the ID contained invalid characters; now, the entity will not be allowed to exist. If you use VirtualEntityController, MQTTController, or other Controllers where you can configurably create entities, the IDs you establish for those entities must now contain only valid characters, which are ASCII alphanumerics, dash (
-
), underscore (_
), and the high ASCII ranges 192-214, 216-246, and 248-255 (which covers some letters with diacritics). Other characters, including Unicode characters outside this range, are not permitted.POTENTIAL BREAKING CHANGE: The alert attributes have been moved off of the Reactor System (
reactor_system>system
) entity on to a separate Reactor System Alerts (reactor_system>alerts
) entity. If you have Rules or Reactions that use alert data in conditions, you will need to point them to the new entity/attributes.LOCALIZATION UPDATE: There are several new strings in the reference localization template (new version 24293). See the Github repository for the current reference version and change log.
- Entity action implementations can now return values/results and store them directly to a local (Rule-based) or global variable for further processing. Note that HassController was previously (in build 24115) given this ability in a slightly different form, where the response was written to a single attribute from which it could be retrieved by other expressions. HassController will support both mechanisms for the foreseeable future, but transition to the new mechanism is recommended.
- New Script Action action in Reactions allows you to run an expression/script in-line in a Reaction. This is intended to simplify handing of results from Entity Actions that return results.
- Fixed a bug in the changes operator where, if there were terminal values (values for changes from, to, or both), the output would pulse rather than "stick." The design intent was such that it should stick, because a change with terminal values is predictably persistent (i.e. a condition that watches for an alarm panel state change from
disarmed
toaway
will go true and should stay true as long as the alarm panel remains inaway
state). When there are no terminal values, a change is still signalled with a pulse (i.e. a change from any value to any other value produces a pulse, and is then ready to signal a change to yet another value). - Capabilities may now define user-writable attributes, and the user may set the value of such an attribute on an entity. The intent of this feature is to provide storage for user preference in actions (such as the amount to change the light level when performing
dimming.up
), but could have many other uses. To make an attribute user-writable, the developer must includewritable: true
in the attribute definition. Attributes derived from device data (like switch state or blind position; i.e. where a Controller instance controls the value) are not writable by the user and should not be made user-writable by developers. User-writable attribute values can be set using the new Set Attribute button in Entity list detail cards, or using thereactor_entity.set_attribute
action. - New
reactor_entity
capability is extended to all entities, and contains actions to rename the entity and set its writable attributes. - Additional work to preserve the state of attributes across upgrades/changes to underlying capabilities and implementations. The new Controller methods
refreshCapabilites()
andrefreshCapability()
provide a mechanism for updating an Entity's stored capability data without losing the values of attributes and metadata that exist in both the old and new versions of a capability. - Logger now supports (via
logging.yaml
entry) the rotation of log files on specific intervals. Themaxage: time
configuration can be added, wheretime
is an integer followed bysecs
,mins
,hours
, ordays
. These may be abbreviated to a single character (e.g.1d
or4h
). If thetime
is an integer only, the units are assumed to bedays
. - DynamicGroupController now supports an expanded form of
group_actions
configuration to more narrowly specify which actions are to be made available as group actions. See the Group Actions section of the documentation for DynamicGroupController. - UI now has a dark theme (long-awaited).
- UI (Reaction Editor) for HTTP Request action now shows more clearly that when storing response to a variable, it must wait for the response to complete (i.e. when you choose a target variable, it automatically checks the "Wait for" checkbox in addition to disabling it). The semantics of this have been documented since inception, but the UI now reinforces the concept in its display.
- UI (Entities List) detail cards for Entities now have a Perform dropdown to run actions, rather than a list of links. The selected action is performed immediately if it has no arguments; otherwise, the arguments are requested in a modal dialog as before. This should improve access to actions on entities from this area.
- New expression functions from updated
lexpjs
:isvalue()
,scale()
,constrain()
. See docs for Expressions. - PR 0000380: Resolve an issue with an optional argument in a HAss-specific service requiring a value in the action editor (service climate.set_temperature for example).
- A (very) simple log file viewer/fetcher is now available at
/api/v1/log
. The optionalfile
query parameter can be given to select which log file (by name); by default,reactor.log
is displayed. This endpoint is protected when access control is enabled, so if you are using access control, you may need to modify an existing ACL or create a new one to enable access to it. - HassController: Bless Hass to 2024.10.3
-
Reactor build 24296
UPGRADE NOTICE: If you are upgrading to this version from earlier than 24293, please update your packages! See the notes and instructions for build 24293 above for instructions and other notices.
- Fix a race condition when painting the Status tab when painting a widget that must traverse the ruleset index.
- Make sure errors thrown by widgets show in the widget container, not by popping the exception dialog.
- Fix activation of the Expressions tab so it paints every time (a guard for edit mode was too aggressive, because this tab is always in edit mode).
- Fix a number of reported appearance issues, and some new ones.
-
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.