Hey @toggledbits I'm back to trying to optimize a couple of things based on dynamic group.
First of all, I think I found a typo in the doc:
primary_attribute: "binary_sensor.state"
primary_attribute_value: |
d = false;
each id in members: d = getEntity(id)?.attributes?.power_switch?.state or d,
d
I think the correct code snippet is d = false,
All that said, my use case for dynamic groups is to group 3 different climate devices, so I could easily command them at the same time. Commands are good, but sometimes I want to check if any of the devices are on, and that's easily done with a similar snippet as the one you have in the docs. But this is limited to the primary attribute, while I want to have any of the attributes in the group to be driven by a similar logic (while all are null in the group). ie, access hvac_control.mode and see if any of the unit is set to cool, or heat. Is that possible, without re-defining an expression in each of my rules? 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.
Hey @toggledbits
One thing that bothers me while doing work on new systems/new features, is that I cannot copy&paste actions, and I cannot drag&drop between set and resets.
#1 is for when I want to copy an action between different rules opened in two separate browser windows, while #2 is when I just need to flip a bunch of actions in the reset, or move some logic back and forth.
Both will be appreciated, but I understand the technical challenges. Thanks!
I'm currently on version 26011. I understand that the aarch64 image is no longer supported. So, I therefore need to update to the ARM64 image. Can anyone possibly suggest how I update my docker compose.yaml file (see below). Ideally I'd like to keep my existing reactions etc. rather than start from scratch.
# Multi-System Reactor template docker-compose.yml (version 22160)
#
# Change the lines indicated by "DO"...
#
services:
reactor:
container_name: reactor
environment:
# DO change the TZ: line to set your local time zone.
# See valid TZ list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
TZ: GB
#
# DO NOT change this path. Your directory location is in "source" below.
REACTOR_DATA_PREFIX: /var/reactor
# DO change the image below to the one you are using (e.g. armv7l or aarch64 for RPi 4)
image: toggledbits/reactor:latest-aarch64
restart: "always"
expose:
- 8111
ports:
- 8111:8111
volumes:
# DO change the /home/username/reactor below to the directory you created for
# your local data; DO NOT change the /var/reactor part
- /home/pi/docker/reactor:/var/reactor
- /etc/localtime:/etc/localtime:ro
tmpfs: /tmp
If you are using the armv7l docker image, the OpenJS Foundation that publishes node is no longer producing 32-bit builds as of v24. That means the last supported LTS version of node for armv7l is v22, which will go End-of-Life in May 2027.
Therefore, the Reactor armv7l image is now deprecated and will only be produced until node v22 goes EOL, and I will not publish armv7l images beyond that date.
If you are running an RPi 3 or earlier with Reactor, you are on this image, and will need to upgrade hardware to a 64-bit model and use the arm64 image. If you need help getting it done, ask in this category.
@toggledbits I pulled the image (well, Watchtower did) and within minutes the whole system went offline.
The log looks like it ends with 26143.
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-mkahsmgf/26qq82mw-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-lqyfljfi/22f8on0t-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-lsb61rw8/24oenqi2-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-lrh58he0/rule-lrh58he0:S-1c00gfib-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-lrh58he0/1c00dylr-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-lrh58he0/1nam9w5u-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-miuh2qqi/22ls4lql-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-kwc6rmci/rule-kwc6rmci:S-1vj8sdfc-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-kwc6rmci/rule-kwc6rmci:S-1qanz01x-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-ladyja6a/24lq19p6-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-mk0o8iox/23oy468y-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-miscg2h3/rule-miscg2h3:S-22gmbq1c-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#re-kxgrfjke/238p0old-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#re-m7ccsso5/re-m7ccsso5-1r0myjxa-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-ladyja6a/19nl9wq2-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-ladyja6a/rule-ladyja6a:S-yl3xk9t-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-ladyja6a/rule-ladyja6a:S-yl3vv5m-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#re-ln7j2nqp/re-ln7j2nqp-22mx9lzd-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#re-ln7j2nqp/22mx87c8-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-licneppy/1mzwe7ht-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-ml3194ih/25jqt1j4-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#re-kxgrg7kf/227hshak-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-reactorexmachina/13ua1p95-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-reactorexmachina/13uagam7-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-grpvl9oypg/rule-grpvl9oypg:R-134x4cbv-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-grpvl9oypg/rule-grpvl9oypg:R-134x2fyl-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#re-lscjrws1/238p5c22-cons
[latest-26143]2026-05-31T15:23:44.547Z <default:INFO> Closing container Container#Predicate#rule-lbwr0jvq/1xkczf03-cons
[latest-26143]2026-05-31T15:23:44.547Z <Structure:NOTICE> Structure Structure#1 stopped
[latest-26143]2026-05-31T15:23:44.547Z <app:NOTICE> Closing APIs...
[latest-26143]2026-05-31T15:23:44.547Z <wsapi:NOTICE> wsapi: closing...
[latest-26143]2026-05-31T15:23:44.547Z <wsapi:NOTICE> wsapi: disconnecting from "192.168.1.23#82" (1001 service closing)
[latest-26143]2026-05-31T15:23:44.548Z <httpapi:NOTICE> HTTP API closing...
[latest-26143]2026-05-31T15:23:44.549Z <wsapi:NOTICE> wsapi: server closed
[latest-26143]2026-05-31T15:23:44.549Z <httpapi:INFO> HTTP server closed.
[latest-26143]2026-05-31T15:23:44.549Z <app:NOTICE> Stopping timers...
[latest-26143]2026-05-31T15:23:44.551Z <app:null> Shutdown complete, process ID 1
[latest-26143]2026-05-31T15:23:44.551Z <app:null> Closing logs...
[latest-26143]2026-05-31T15:23:44.551Z <default:null> Closing log
I can SSH to the VM. Alas, I do not have the previous image for 26143 as I'm a little too quick sometimes on housekeeping.
[RESOLVED] Phantom device, “INFO” appears
Multi-System Reactor
2
Posts
2
Posters
181
Views
2
Watching
-
Hi
I'm seeing multiple warnings "INFO" like the one below in the Reactor log file.
[latest-26177]2026-06-28T23:19:39.784Z <Engine:INFO> Resuming reaction HOME UPDATE 30/30<SET> (rule-me9cq25r:S) from step 5 [latest-26177]2026-06-28T23:19:39.784Z <Engine:INFO> HOME UPDATE 30/30<SET> all actions completed. [latest-26177]2026-06-28T23:19:39.791Z <Engine:INFO> Engine#1 task 114 (rule-me9cq25r:S) has completed after restart [latest-26177]2026-06-28T23:19:40.211Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.214Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.312Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.314Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.413Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.414Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.513Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.515Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.615Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.616Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:40.716Z <HubitatController:INFO> HubitatController#hubitat ignoring DEVICE event for device 225 (Ping VM Reactor); device not enumerated by Maker API [latest-26177]2026-06-28T23:19:41.453Z <Rule:INFO> Panel Tripped (rule-mfdbsyrp in SharpTools) starting rule state evaluation; because predicate-state-changed Predicate#rule-mfdbsyrp/trig [latest-26177]2026-06-28T23:19:41.454Z <Rule:INFO> Panel Tripped (rule-mfdbsyrp in SharpTools) evaluated; rule state transition from SET to 'RESET'And that's correct; this device hasn't been exported from Hubitat to MSR.
I ran a query to see if it was in any of the reactor's files, and the only thing I found was the information in the log.
root@reactor:/home/wilson/reactor# grep -rl "hubitat>225" . root@reactor:/home/wilson/reactor# grep -rl "device 225" . ./logs/reactor.log.1 ./logs/reactor.log.2 ./logs/reactor.log.3 ./logs/reactor.log root@reactor:/home/wilson/reactor#I looked in the entity directory, and this device isn't there either.
root@reactor:/home/wilson/reactor# cd storage/ root@reactor:/home/wilson/reactor/storage# ls access_token.hex default.dval default.json.corrupted expressions.dval hostkey.key reactions reactor.pid rulesets baseurl.sh default.json entities expressions.json hostkey.pub reactor_inet_check.dat rules states root@reactor:/home/wilson/reactor/storage# cd entities/ root@reactor:/home/wilson/reactor/storage/entities# cd hubitat/ root@reactor:/home/wilson/reactor/storage/entities/hubitat# ls 109.dval 138.json 147.dval 15.json 170.dval 211.json 24.dval 261.json 29.dval 48.json 62.dval 656.json 668.dval 679.json 76.dval 87.json 109.json 139.dval 147.json 163.dval 170.json 219.dval 24.json 262.dval 29.json 49.dval 62.json 657.dval 668.json 67.dval 76.json 98.dval 112.dval 139.json 148.dval 163.json 182.dval 219.json 253.dval 262.json 2.dval 49.json 63.dval 657.json 669.dval 67.json 7.dval 98.json 112.json 13.dval 148.json 165.dval 182.json 21.dval 253.json 263.dval 2.json 51.dval 63.json 658.dval 669.json 681.dval 7.json 99.dval 118.dval 13.json 149.dval 165.json 190.dval 21.json 254.dval 263.json 32.dval 51.json 64.dval 658.json 66.dval 681.json 83.dval 99.json 118.json 142.dval 149.json 166.dval 190.json 220.dval 254.json 264.dval 32.json 57.dval 64.json 659.dval 66.json 68.dval 83.json controller_all.dval 11.dval 142.json 14.dval 166.json 19.dval 220.json 257.dval 264.json 3.dval 57.json 653.dval 659.json 676.dval 68.json 84.dval controller_all.json 11.json 143.dval 14.json 167.dval 19.json 224.dval 257.json 265.dval 3.json 58.dval 653.json 65.dval 676.json 69.dval 84.json sys_hsm.dval 123.dval 143.json 150.dval 167.json 201.dval 224.json 259.dval 265.json 46.dval 58.json 654.dval 65.json 677.dval 69.json 85.dval sys_hsm.json 123.json 144.dval 150.json 168.dval 201.json 22.dval 259.json 27.dval 46.json 60.dval 654.json 666.dval 677.json 70.dval 85.json sys_mode.dval 12.dval 144.json 151.dval 168.json 20.dval 22.json 260.dval 27.json 47.dval 60.json 655.dval 666.json 678.dval 70.json 86.dval sys_mode.json 12.json 146.dval 151.json 169.dval 20.json 23.dval 260.json 28.dval 47.json 61.dval 655.json 667.dval 678.json 74.dval 86.json system.dval 138.dval 146.json 15.dval 169.json 211.dval 23.json 261.dval 28.json 48.dval 61.json 656.dval 667.json 679.dval 74.json 87.dval system.json root@reactor:/home/wilson/reactor/storage/entities/hubitat#Obviously, I can't find anything when I search in the Reactor GUI either.
Where else should I look to try to resolve this situation?
Thanks.
-
That's a bug in Maker API... it's sending updates for a device that isn't enumerated for export. You can safely ignore those messages.










