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
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.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.
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 🙂
Hi @toggledbits.
After a couple of weeks, I noticed that my Remotec zrc90 isn't working as expected.
Scenes are working in ZWaveJS, but this device has a strange behavior: the scene change, but then it's set again to null. In Reactor, this remains null:
battery_power.level=0.7 battery_power.since=1725817957361 x_debug.dt={"description":"Scene master 8 button remote","model":"BW8510/ZRC-90US","default_name":"Scene master 8 button remote","manufacturerId":21076,"productType":0,"productId":34064} x_zwave_values.Battery_isLow=false x_zwave_values.Battery_level=70 x_zwave_values.Central_Scene_scene_001=null x_zwave_values.Central_Scene_scene_002=null x_zwave_values.Central_Scene_scene_003=null x_zwave_values.Central_Scene_scene_004=null x_zwave_values.Central_Scene_scene_005=null x_zwave_values.Central_Scene_scene_006=null x_zwave_values.Central_Scene_scene_007=null x_zwave_values.Central_Scene_scene_008=null x_zwave_values.Central_Scene_slowRefresh=null x_zwave_values.Manufacturer_Specific_manufacturerId=21076 x_zwave_values.Manufacturer_Specific_productId=34064 x_zwave_values.Manufacturer_Specific_productType=1 x_zwave_values.Version_firmwareVersions=["1.1","1.1"] x_zwave_values.Version_hardwareVersion=3 x_zwave_values.Version_libraryType=2 x_zwave_values.Version_protocolVersion="4.5" x_zwave_values.Wake_Up_controllerNodeId=1 x_zwave_values.Wake_Up_wakeUpInterval=0 zwave_device.capabilities=[91,114,128,132,134] zwave_device.endpoint=0 zwave_device.failed=false zwave_device.generic_class="Remote Controller" zwave_device.impl_sig="24242:1:22315:1" zwave_device.is_beaming=false zwave_device.is_listening=false zwave_device.is_routing=false zwave_device.is_secure=false zwave_device.manufacturer_info=[21076,1,34064] zwave_device.max_data_rate=null zwave_device.node_id=154 zwave_device.specific_class="Simple Remote Control" zwave_device.status=2 zwave_device.status_text="awake" zwave_device.version_info=[null,"1.1"] zwave_device.wakeup_interval=0Anything I could look at? Thanks.
Hi, @toggledbits!
I have a question about the execution behavior. See the code below, and I'll explain the situation.
12957c3e-ff06-46c9-929d-b53f936665df-image.png
This is a routine that, at a certain point, determines that the desktop on which the VM hosting the Reactor is located receives an instruction to perform a shutdown (Shell Command).
When this happens, the desktop is turned off, and then Hubitat detects by a "ping" that the VM has been down, waits 15 seconds, turns off the power to this desktop, and then 15 seconds later turns on the desktop with the Reactor VM again.
After restarting the desktop, the VM is loaded, and the Reactor is triggered. Still, the following problem occurs: I expected that when the rule was continued to be executed again, the next step would be executed, that of the 900-second delay after shutdown, but the Shell command is executed again, and then it goes into a loop, the rule does not advance.
To break the loop, I first have to make the VM not load, change the desktop password, and then start the VM. In this case, Reactor generates an error when trying to execute the Shell Command because of the invalid password and then finishes the routine following the 900 delay step.
b58b0d4a-d6c1-4fe3-bab7-4222acea9607-image.png
Is my interpretation that when it returns, the routine should continue to the next step that has not yet been executed incorrectly? Or does Reactor, through the shutdown command, interpret that it hasn't finished this step and keep trying, which is the correct reaction?
Thanks for clarifying.
Hi @toggledbits ,
I'm slowly moving my ZWave network from Vera to ZWaveJS. I successfully cloned my ZWave network using a spare Vera Edge (a new post for the community later when I'll be fully back from vacation) and I'm testing a couple of things before moving everything to ZWaveJS.
In the meanwhile, I have a couple of venetian blinds connected to Fibaro Roller Shutters 2 (FGR222) and I'm using some proprietary ZWave commands to control the tilt position, that right now I'm sending via Vera (with some code from the old place, messing with this):
af7f883c-f49e-419c-a2fe-8669572e3792-image.png
The ZWaveJS values are reported via this:
x_zwave_values.Manufacturer_Proprietary_fibaro_venetianBlindsPosition=0 x_zwave_values.Manufacturer_Proprietary_fibaro_venetianBlindsTilt=0I hope there's a way to expose a separate device to control the tilt position directly, without doing the mess I'm doing now. Let me know if you need some files. Thanks.
As per @toggledbits request, new topic.
Position and cover commands not working and position/cover attributes are incorrect. Dimming is OK.
cover.state=null dimming.level=1 dimming.step=0.1 energy_sensor.units="kWh" energy_sensor.value=0.41 position.value=null power_sensor.units="W" power_sensor.value=0 power_switch.state=true x_debug.dt={"entity_class":"Cover","match":"deviceClass.generic.key=17;deviceClass.specific.key=6","capabilities":["cover","toggle","position"],"primary_attribute":"cover.state"} x_zwave_values.Meter_reset=null x_zwave_values.Meter_value_65537=0.41 x_zwave_values.Meter_value_66049=0 x_zwave_values.Multilevel_Switch_Down=null x_zwave_values.Multilevel_Switch_Up=null x_zwave_values.Multilevel_Switch_currentValue=99 x_zwave_values.Multilevel_Switch_duration="unknown" x_zwave_values.Multilevel_Switch_restorePrevious=null x_zwave_values.Multilevel_Switch_targetValue=99 x_zwave_values.Notification_Power_Management_Over_current_status=0 x_zwave_values.Notification_System_Hardware_status=0 x_zwave_values.Notification_alarmLevel=null x_zwave_values.Notification_alarmType=null zwave_device.capabilities=[38,50,113] zwave_device.endpoint=1 zwave_device.failed=null zwave_device.impl_sig="24225:1:22315:1" zwave_device.manufacturer_info=null zwave_device.node_id=148 zwave_device.version_info=nullThanks!
Reactor (Multi-System/Multi-Hub) Announcements
-
Reactor build 23114
- Conditions: add
is NOT TRUE
andis NOT FALSE
operators. Theis NOT TRUE
operator (for example) is unlike theis FALSE
operator in that, if the tested value isnull
, theis NOT TRUE
operator result would be true, while theis FALSE
operator result would be false. This distinction facilitates some tests where it may be desirable to handlenull
as equivalent to eithertrue
orfalse
without having to provide an additional, separateis NULL
condition (and possibly an enclosing OR group). - DynamicGroupController: document group actions; this makes it an official feature (was experimental).
- Engine/Rule: Clean up a misspelled method name.
- InfluxFeed docs: update supported and recommended versions. [doc]
- HubitatController: Tweak reconnect timing decay (allow for longer decay when hub cannot be contacted for an extended period).
- Reactions: Clarify what "Disabled" means in the constraints of a Group action (incl. Repeat...While) of a reaction. It does not disable the actions in the group. The disable flag applies to the constraint conditions only, having the same effect as it would on rule-based triggers and constraints (i.e. it becomes as if the constraint conditions do not exist). [docs] and [docs]
- HassController: Bless Hass to 2023.4.6
- Conditions: add
-
MQTTController 23135
- In action payload, force conversion of all data types to string for "raw" output, rather than assuming result of expression is a string (although docs say to do that, it's just too easy to omit, and too easy to change it so the requirement is moot).
- Add
parameter: name
value form to action payload definition to draw payload value from the named parameter without the need to use anexpr
ession (this follows the implementation of action definitions in other Controller instances as well). That is, you can specify, for example,parameter: level
instead of usingexpr: parameters.level
(assuming the parameter value requires no scaling or other modifications to be compatible with the device). [docs]
-
Reactor Build 23171
NOTE: This build includes fixes made in a prior silent release (where the change(s) affected only one user).
DEPRECATION NOTICE: Support for versions of Home Assistant prior to 2022.5.3 will be removed on the next build. These older versions may continue to operate successfully with HassController going forward, but I will not address/fix issues for them.
- PR 0000356: Fix an issue where a rule with multiple sunrise/sunset conditions using the between operator chooses the first condition's before/after constraints rather than its own (i.e. it was choosing the control states from the first row rather than the current row).
- SystemController: the deprecated
suninfo.sun_angle
attribute is now removed (its replacement issuninfo.elevation
). - HubitatController: Hub variables can now be set up to 1024 characters with hub firmware 2.3.5.135 and above; for earlier firmware, the limit is 255 characters. The length limit is enforced by the hub, not HubitatController.
- HassController: Bless Hass to 2023.6.2
-
Reactor build 23196 (latest and stable branches)
NOTICE: As announced in the release note for the previous build (23171), Home Assistant versions earlier than 2022.5.3 are no longer supported.
- Introduce a maximum delay in the write-back of certain storage containers (e.g. that used for expressions).
- Docs: fix an error in an example on the How-To: Expressions with Entities page.
- HassController: Bless Hass to 2023.7.2
-
Reactor build 23218
- Improve the initialization of new global variables so they don't show "not yet evaluated" until a non-null value is set (null is a valid evaluation result and should remove the "not yet").
- Expressions: improve the display of non-printing characters in the expression editor's "current value" display (they now display as Unicode escape sequences).
- i18n: Fix init of localized weekday names when most recent Sunday occurs in prior month (caused, for example, incorrect weekday checkbox labels in Weekday conditions; cosmetic only, no operational effect).
- SystemController: for Reactor update, include update branch, version, and commit as attributes on system entity.
- Entities page: New Copy Attributes button in entity detail copies all attribute values to the clipboard.
- HassController: Bless Hass to 2023.8.0
-
Reactor Build 23242
- Rules Editor: Fixed an issue where a condition option change to the duration operator with no change to duration value may not be saved.
- HassController: Add mapping for
proximity
domain (tovalue_sensor
). - HassController: Bless Hass to 2023.8.2
-
ZWaveJSController build 23254
- Some versions of iBlinds v3 report CC 38 (Multilevel Switch) and some report 106 (Window Covering), no obvious way to tell if there's a config parameter that controls this, or if it's a firmware change (firmware versions report same even when command class is different). Update handles both based on what's available (this is the first time I've seen a 106-reporter in the wild).
-
MQTTController build 23254
- Improve recovery time when broker is starting up, accepts our connection, but then refuses subscription (i.e. it's not fully ready).
-
Reactor build 23302
- Expressions: functions
asin()
,acos()
,atan()
, andatan2()
, and the reserved wordpi
(lowercase), are now supported (identical to their JavaScript equivalents). - Update the documentation for migrating (importing) rules from Reactor for Vera (the Vera Reactor Plugin).
- HassController: All use of
x_hass.call_service
(the entity-based service call action) now uses thetarget
field to specify theentity_id
, rather than the old form which embedded theentity_id
in thedata
field. - HassController: The
x_hass_system.call_service
(system-global service call action) has been extended to allow the user to enter atarget
field for service calls that benefit from it. It should be noted, however, that thex_hass.call_service
action on a Reactor entity (mapping a HA entity) should be used in preference to the system-global service call whenever possible, as changes in ID by HA will break the system-global call without warning (entity-based service call actions will simply use the new ID given by HA). - HassController: Bless Hass to 2023.10.5
- Expressions: functions
-
Reactor Build 23338
DEPRECATION WARNING (bare-metal installs only): all nodejs versions earlier than 18 are now end-of-life; these versions will not be supported for Reactor after 1-Mar-2024. You should upgrade nodejs as soon as possible. The minimum supported version is now 18.18, but for longevity, upgrading to the current LTS version is recommended. Users of Reactor running in docker containers are not affected, as the image always embeds a supported LTS version of nodejs (that is, no action is required for docker users).
- Expressions: Update lexpjs to fix degenerate case of
case
with singlewhen
and anelse
(which is better written as anif...then...else
, but shouldn't throw an error in any case). - CallMeBot: the built-in CallMeBot notifier is now deprecated. There are no plans to remove it right now, but it will not receive future updates. Use HTTP Request actions directly in Reactions instead.
- Reduce the frequency of reminder alerts when an upgrade is available.
- HassController: Bless Hass to 2023.11.3
- Expressions: Update lexpjs to fix degenerate case of
-
Reactor Build 23344
This is a "silent" release (you won't get upgrade notices) and available for docker containers only at this time.
- PR 0000294: InfluxFeed now supports exporting of global variable values to InfluxDB. See docs.
- VirtualEntityController: Fix issue where a global variable dependency (value change) was detected, but the old GV value was always retrieved.
- Dashboard: Strings displayed by ValueSensor widgets are now elastic-sized to reduce overflow.
- Dashboard: Fix group spec handling so that custom top-level dashboards for a group can be created. This needs documentation.
- HassController: Bless Hass to 2023.12.1
-
Reactor Build 24052
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.json
file from your Reactor install directory, and then runnpm i --no-save --no-package-lock --omit dev
to update package dependencies.BREAKING CHANGE: The
valve
capability'sstate
attribute value is now boolean, to match similar system capabilities (was previously/erroneously string). If you are using an entity with thevalve
capability in conditions or actions, make sure the type for the current or target state is boolean now.- Update support for many packages. Please remember to do
npm i --no-save --no-package-lock
(bare-metal installs only; docker containers are always up-to-date). - Add ability to override the state of a rule from the UI, for logic debugging purposes. A disabled rule will have its state forced, but will not run its reactions. An enabled rule will also have its state forced, but the corresponding rule reaction will run on the state transition. When overridden, the trigger and constraint conditions have no effect on the overall rule state, but (if rule enabled) are still evaluated and their status is still accurately displayed on the status card for the rule in the UI.
- PR 0000357: Implement
getRule()
extension function to get rule metadata; refer to the docs for more. - Fix an error in the handling of the entity action cache in the UI (occurred when running actions from the entity detail in the Entities list).
- Docs: improvements to description of custom event handlers for HassController (still a work in progress, but isn't everything?).
- Docs: add a section in VeraController doc for the firmware's
UnsafeLua
flag, required to be on for thex_vera_sys.runlua
action to be available. The value is now also published as an attribute on the system entity. - HassController: Implement new HA
valve
domain with ourvalve
capability. - HassController: Bless Hass to 2024.2.2
MQTTController Build 24050
NOTE: Either 24049 or 24050 of MQTTController is required for Reactor 24052.
- Rebuild entity when configuration change detected (supports
version
field in user templates). - PR 0000365: Fix broken config for
tasmota_generic_relay
template'stoggle.toggle
action. - New templates for genmon (generator monitoring; see https://github.com/jgyates/genmon)
- Support for new js-yaml
- Support
map
in event handling configuration.
- Update support for many packages. Please remember to do
-
Reminder for Bare-Metal Installs
Friday, March 1 2024 is the last day for Reactor support on nodejs versions earlier than 18. The next build of Reactor releasing after March 1 will not operate on any earlier version. If you haven't upgraded your system to nodejs version 18 or higher, please read the earlier advisory for details and upgrade ASAP.
For the removal of doubt, builds 24052 (most recent build) and prior will continue to run on and after March 1 on earlier nodejs versions; there is not enforced stop on this date. It is only future builds that will refuse to start on out-of-date nodejs versions.
Docker images are always up-to-date and therefore this notice does not apply to them (no action required for docker users).
-
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