Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Unsolved
Collapse
Discussion Forum to share and further the development of home control and automation, independent of platforms.
  1. Home
  2. Software
  3. Multi-System Reactor
  4. [Reactor] Variables not updating correctly in latest-25201-2aa18550
Home Assistant 2025.11.2 and latest-25315
CrilleC
Topic thumbnail image
Multi-System Reactor
Reactor (Multi-System/Multi-Hub) Announcements
toggledbitsT
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.
Multi-System Reactor
Notice to Docker + ARM Users (RPi 3/4/5 and others)
toggledbitsT
This post does not apply to users of Intel/AMD-based systems. If you are using a Reactor image tagged latest-amd64 or stable-amd64, then this post does not apply to you. It also does not apply to bare-metal installs; it's for users of docker images on ARM-based systems only (principally Raspberry Pi hosts, but could be others). After January 15, 2026, I will no longer produce the aarch64-tagged docker image for Reactor. The ARM images will be arm64 for 64-bit operating systems, and armv7l for 32-bit operating systems. For those of you running a container from the aarch64 image today, this will be a relatively simple change: you just need to switch the image used for your docker container to a differently-tagged image. If you are using docker-compose, then this is a relatively simple matter of changing the image line in your docker-compose.yaml file and then stopping (docker-compose down) and restarting (docker-compose up -d) your Reactor daemon. But there's a catch... not all of you can safely just switch from the aarch64 image to the arm64 image. And, you can't just trust the output of uname -m, for example, because this exposes the CPU architecture, but not the word size of the OS running on that CPU. For Raspberry Pi systems, the transition to 64-bit operating systems was long (starting in 2016) and not always obvious — although there was a first "official" 64-bit OS for RPis in 2020, it did not become a default recommendation in the Raspberry Pi Imager until 2021, and then that was only the default for Pi 3/4 systems with >4GB RAM; it was 2022 before it was universally recommended for all 64-bit CPUs regardless of RAM size. Depending on when you first imaged your RPi system and what default you may have been offered/chosen, you could today easily have a 64-bit CPU Raspberry Pi running a 32-bit version of the operating system. Upgrades along the way would not change this; changing it to fully 64-bit requires a full reimage of the system. To establish if your OS is 64- or 32-bit, log in to your Pi and run: sudo dpkg-architecture -q DEB_HOST_ARCH. If the response is arm64 or aarch64, then you are running a 64-bit OS and you should use the arm64-tagged image. If it's anything else, you are running a 32-bit OS, and you should use the armv7l-tagged image. pi@rpi4-1:~ $ sudo dpkg-architecture -q DEB_HOST_ARCH armhf pi@rpi4-1:~ $ uname -m aarch64 pi@rpi4-1:~ $ In the example above, the uname command reports that the CPU is 64-bit architecture (aarch64), which is true for the host on which I ran these commands, but the DEB_HOST_ARCH value is armhf, indicating a 32-bit operating system. This system has to use the armv7l-tagged image. Other systems will have their own ways of determining the word size of the running OS. Since the majority of Reactor users running ARM systems are on Raspberry Pis, I am able to supply the above instructions, but if you happen to have a different ARM system, you'll need to do some web searching to figure out how to expose that information. Or, you can just try the arm64 image, and if it doesn't start up, try the armv7l image. Remember to always back up your system before making any changes. For everyone, please make this change as soon as possible, and if you have any trouble finding a working image, please (1) go back to the current aarch64 image; and (2) let me know in this thread along with as much detail about your host system as you can offer (including the output of the dpkg-architecture command mentioned above).
Multi-System Reactor
Requesting a proper ARM64/aarch64 Docker image (Pi 5 support)
M
Hi, I'm in the process of migrating from a Raspberry Pi 4 (ARMv7) to a Raspberry Pi 5 (ARMv8/aarch64), but I’ve run into an issue: there is no proper ARMv8/aarch64 image available. None of the existing images run on the Pi 5 - they all exit immediately with code 139 (segmentation fault), which typically indicates that the binaries inside the image are not compatible with the ARM64/aarch64 architecture used by the Pi 5. Would it be possible to publish a correct ARMv8/aarch64 (linux/arm64) image? Building one should be relatively straightforward using docker buildx with multi-arch support. For example, my own Node.js images are built this way: docker buildx build --push \ -t <localrepo>/<project>:<tag> \ --platform=linux/arm64,linux/amd64 \ --file ./apps/<project>/Dockerfile . This produces both the AMD64 and ARM64/v8 variants automatically. Also, as a side note, it may be best to avoid using Alpine as the base image for the ARM64 build, since musl-based builds often cause compatibility issues and unnecessary headaches. A glibc-based base image (e.g., Debian or Ubuntu) tends to work far more reliably on ARM64, especially for Node.js applications. @toggledbits - tagging you in case you missed this. Thanks, mgvra
Multi-System Reactor
Script action and custom timers
therealdbT
Sorry to write here without trying, but I’m flying today. Am I correct if i say that script action with alarm() makes it possible to execute a reaction in a given interval, lets say 15 seconds or 3.5 minutes? That sounds amazing, since I’ve used weird tricks, including a custom controller, just to do this.
Multi-System Reactor
Help resolve change in behaviour post update
CatmanV2C
Topic thumbnail image
Multi-System Reactor
Reactor w/HA 2025.11 error on set_datetime service call setting only time
CrilleC
@toggledbits Do you know if this is related to that PR or is it a change they made in 2025.11.1? [latest-25310]2025-11-11T13:16:24.319Z <HassController:INFO> HassController#hass perform x_hass_input_datetime.set_datetime on Entity#hass>input_datetime_vvb_dag with { "time": "10:45" } [latest-25310]2025-11-11T13:16:24.320Z <HassController:INFO> HassController#hass: sending payload for x_hass_input_datetime.set_datetime on Entity#hass>input_datetime_vvb_dag action: { "type": "call_service", "service_data": { "date": (null), "time": "10:45", "datetime": (null), "timestamp": (null) }, "domain": "input_datetime", "service": "set_datetime", "target": { "entity_id": "input_datetime.vvb_dag" } } [latest-25310]2025-11-11T13:16:24.321Z <HassController:ERR> HassController#hass request 1762866984320<2025-11-11 14:16:24> (call_service) failed: [Error] Not a parseable type for dictionary value @ data['date'] [-] [latest-25310]2025-11-11T13:16:24.321Z <HassController:WARN> HassController#hass action x_hass_input_datetime.set_datetime({ "time": "10:45" }) on Entity#hass>input_datetime_vvb_dag failed! [latest-25310]2025-11-11T13:16:24.321Z <HassController:INFO> Service call payload: {"type":"call_service","service_data":{"date":null,"time":"10:45","datetime":null,"timestamp":null},"domain":"input_datetime","service":"set_datetime","target":{"entity_id":"input_datetime.vvb_dag"},"id":1762866984320} [latest-25310]2025-11-11T13:16:24.322Z <HassController:INFO> Service data: {"fields":{"date":{"example":"\"2019-04-20\"","selector":{"text":{"multiline":false,"multiple":false}}},"time":{"example":"\"05:04:20\"","selector":{"time":{}}},"datetime":{"example":"\"2019-04-20 05:04:20\"","selector":{"text":{"multiline":false,"multiple":false}}},"timestamp":{"selector":{"number":{"min":0,"max":9223372036854776000,"mode":"box","step":1}}}},"target":{"entity":[{"domain":["input_datetime"]}]}} [latest-25310]2025-11-11T13:16:24.322Z <Engine:ERR> Engine#1 reaction rule-mgb8pfhs:S step 0 perform x_hass_input_datetime.set_datetime failed: [Error] Not a parseable type for dictionary value @ data['date'] [-] [latest-25310]2025-11-11T13:16:24.322Z <Engine:INFO> Engine#1 action args: { "time": "10:45" } [latest-25310]2025-11-11T13:16:24.322Z <Engine:INFO> Resuming reaction Sätt Schema VVB i Home Assistant<AKTIV> (rule-mgb8pfhs:S) from step 1 [latest-25310]2025-11-11T13:16:24.323Z <HassController:INFO> HassController#hass perform x_hass_input_datetime.set_datetime on Entity#hass>input_datetime_vvb_natt with { "time": "03:00", "timestamp": 0 } [latest-25310]2025-11-11T13:16:24.323Z <HassController:INFO> HassController#hass: sending payload for x_hass_input_datetime.set_datetime on Entity#hass>input_datetime_vvb_natt action: { "type": "call_service", "service_data": { "date": (null), "time": "03:00", "datetime": (null), "timestamp": 0 }, "domain": "input_datetime", "service": "set_datetime", "target": { "entity_id": "input_datetime.vvb_natt" } } [latest-25310]2025-11-11T13:16:24.324Z <HassController:ERR> HassController#hass request 1762866984323<2025-11-11 14:16:24> (call_service) failed: [Error] Not a parseable type for dictionary value @ data['date'] [-] [latest-25310]2025-11-11T13:16:24.324Z <HassController:WARN> HassController#hass action x_hass_input_datetime.set_datetime({ "time": "03:00", "timestamp": 0 }) on Entity#hass>input_datetime_vvb_natt failed! [latest-25310]2025-11-11T13:16:24.324Z <HassController:INFO> Service call payload: {"type":"call_service","service_data":{"date":null,"time":"03:00","datetime":null,"timestamp":0},"domain":"input_datetime","service":"set_datetime","target":{"entity_id":"input_datetime.vvb_natt"},"id":1762866984323} [latest-25310]2025-11-11T13:16:24.324Z <HassController:INFO> Service data: {"fields":{"date":{"example":"\"2019-04-20\"","selector":{"text":{"multiline":false,"multiple":false}}},"time":{"example":"\"05:04:20\"","selector":{"time":{}}},"datetime":{"example":"\"2019-04-20 05:04:20\"","selector":{"text":{"multiline":false,"multiple":false}}},"timestamp":{"selector":{"number":{"min":0,"max":9223372036854776000,"mode":"box","step":1}}}},"target":{"entity":[{"domain":["input_datetime"]}]}} [latest-25310]2025-11-11T13:16:24.324Z <Engine:ERR> Engine#1 reaction rule-mgb8pfhs:S step 1 perform x_hass_input_datetime.set_datetime failed: [Error] Not a parseable type for dictionary value @ data['date'] [-] [latest-25310]2025-11-11T13:16:24.324Z <Engine:INFO> Engine#1 action args: { "time": "03:00", "timestamp": 0 } [latest-25310]2025-11-11T13:16:24.325Z <Engine:INFO> Resuming reaction Sätt Schema VVB i Home Assistant<AKTIV> (rule-mgb8pfhs:S) from step 2 [latest-25310]2025-11-11T13:16:24.325Z <Engine:INFO> Sätt Schema VVB i Home Assistant<AKTIV> all actions completed.
Multi-System Reactor
Reactor Version 25310 : Office Light control via rule in reactor no longer working since last update.
P
Hello, I currently have an office light (connected via a Leviton Zwave Dimmer switch) controlled from a Gen5 Aeotech Zwave switch installed on my Synology 720+ NAS. I run HA(2025.11.10) in a virtual machine from my NAS and Reactor on the container manager of the same NAS. Prior to updating to 25304 the rule I had set to turn the light on to a specific dimming value worked correctly. Now the rule appears to follow the decision tree, however the reaction does not trigger setting the dimming or turning on the office light? Strangely I can still turn the light on and off as well as dim it directly from HASS..? I have tried using the ''try this action'' button in the rules reaction setting and it will not control the light and does not throw an error flagÉ Please help, P.S Reactor has been rock steady for me over the last few years and I'm a big fan of this solution.
Multi-System Reactor
[Solved] alarm() in global expression throws error in log.
CrilleC
Topic thumbnail image
Multi-System Reactor
[Solved] Define function issue in latest-25304
CrilleC
Topic thumbnail image
Multi-System Reactor
No Upgrade Notification for Build 25308?
CatmanV2C
FWIW I'm no longer getting a notification from MSR that there's an update. Just thought I'd mention it C
Multi-System Reactor
Strange behavior in MSR latest-25304 with disabled groups in Reaction
therealdbT
Topic thumbnail image
Multi-System Reactor
[Reactor] Variables not updating correctly in latest-25201-2aa18550
therealdbT
Topic thumbnail image
Multi-System Reactor
The reaction stopped working (Google Nest max playing a video)
F
Topic thumbnail image
Multi-System Reactor
Handling Dead Entities and Renamed Entities
PablaP
Hello all.. been a minute! I recently rebuilt my Z wave network and migrated to a new z wave stick. In order to prevent any downtime I kept my original z wave network up and ran a docker version of Z Wave JS UI with my new controller. This way I could add device by device without having any devices down. I finally moved all the devices over to my new stick today. The final step was to migrate everything from my Docker instance of Z Wave JS UI to the HA add-on of Z Wave JS UI. However during this migration some of the names didn't populate correctly which I later managed to import back into Z Wave JS UI. The issue was in Reactor it is stuck on the default names and the entities are not updating. I removed the controller from Reactor, restarted, hard refreshed, and added the controller back however the new entity names have not updated. Also it seems like the old entities from my previous instance of Z Wave JS UI are lingering and not being marked as dead (I believe a certain amount of time needs to lapse before they're marked as dead in Reactor). My goal is to basically purge all the entities for the 'ZWaveJS' controller in Reactor so it can pull all the updated entity names and only the entities that exist in Z Wave JS UI. I cannot find a quick way to do this, I know entities can be deleted one by one, but with over 100 entities this would take long I am guessing that if I added the controller with a new name in in the Reactor config it would pull the updated entities and names but I think that would break my rules since the entity IDs would change (I made sure to name all the entities the exact same as they were previously to prevent this issue).
Multi-System Reactor
Strange behavior for MQTT templates using payload and attributes
therealdbT
Topic thumbnail image
Multi-System Reactor
[MSR] reactor-mqtt-contrib package for additional MQTT templates
therealdbT
I'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: https://github.com/dbochicchio/reactor-mqtt-contrib 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
Multi-System Reactor
HA 2025.9.4 Supported Yet?
CatmanV2C
Tangentially did I miss 2025.9.4 getting blessed in MSR? I've been holding off Cheers C
Multi-System Reactor
Rule Set UI bug - RESOLVED
3
Topic thumbnail image
Multi-System Reactor
[Reactor] Copy&Paste of Rules
therealdbT
I don't know if I'm the only one, but managing more than one Reactor installs, the need to have some sort of copy&paste for rules has grown on me. While I understand the technical challenges, I'm wondering if a "god mode" where I could copy the raw JSON rule and paste it into another rule could be an advanced, flag only feature that could benefit power users. I know I can copy the JSON file and proceed, but I must stop Reactor and when doing maintenance, it's more clicks to do. Just an idea
Multi-System Reactor

[Reactor] Variables not updating correctly in latest-25201-2aa18550

Scheduled Pinned Locked Moved Multi-System Reactor
95 Posts 7 Posters 10.4k Views 7 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • toggledbitsT Offline
    toggledbitsT Offline
    toggledbits
    wrote on last edited by toggledbits
    #10

    I'd need a full picture of this... every variable and rule involved. This is a very complex area to look at.

    Again, the key rule to understand here, is that the local variables in a Rule do not update every time a global or other local they refer to changes -- they only update when the Rule has been marked for evaluation. The recomputation of the local variable values occurs before trigger conditions are evaluated, and only then. That is very different from the way global variables are handled.

    Also in your second example, the use of "==" is a "loose" comparison. The use of "===" is tighter and matches type. In your example, if success is 0 (numeric), that will satisfy the test success == false -- that's true because numeric 0 will cast to boolean false, so they are logically equal, although not exactly equal. That alone would explain unexpected results, if the values of success can be other than true or false.

    Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

    tunnusT 1 Reply Last reply
    0
    • toggledbitsT toggledbits

      I'd need a full picture of this... every variable and rule involved. This is a very complex area to look at.

      Again, the key rule to understand here, is that the local variables in a Rule do not update every time a global or other local they refer to changes -- they only update when the Rule has been marked for evaluation. The recomputation of the local variable values occurs before trigger conditions are evaluated, and only then. That is very different from the way global variables are handled.

      Also in your second example, the use of "==" is a "loose" comparison. The use of "===" is tighter and matches type. In your example, if success is 0 (numeric), that will satisfy the test success == false -- that's true because numeric 0 will cast to boolean false, so they are logically equal, although not exactly equal. That alone would explain unexpected results, if the values of success can be other than true or false.

      tunnusT Offline
      tunnusT Offline
      tunnus
      wrote on last edited by tunnus
      #11

      @toggledbits "success" variable cannot be other than true or false, that I know.

      But is it so that every time a rule is triggered, its local variables are evaluated (or should be evaluated) at least once?

      Also, you wrote earlier: "If there's already a pending request for re-evaluation queued, new requests are ignored. This is all to prevent infinite loops in rule evaluations where rules manipulate devices and rule-based variables in Reactions that are also part of the rule's dependencies"

      I was wondering if this could happen in cases where re-evaluation is queued but somehow gets stuck, and because new requests are ignored, updates won't occur?

      Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

      toggledbitsT 1 Reply Last reply
      0
      • tunnusT tunnus

        @toggledbits "success" variable cannot be other than true or false, that I know.

        But is it so that every time a rule is triggered, its local variables are evaluated (or should be evaluated) at least once?

        Also, you wrote earlier: "If there's already a pending request for re-evaluation queued, new requests are ignored. This is all to prevent infinite loops in rule evaluations where rules manipulate devices and rule-based variables in Reactions that are also part of the rule's dependencies"

        I was wondering if this could happen in cases where re-evaluation is queued but somehow gets stuck, and because new requests are ignored, updates won't occur?

        toggledbitsT Offline
        toggledbitsT Offline
        toggledbits
        wrote on last edited by
        #12

        @tunnus said in [Reactor] Variables not updating correctly in latest-25201-2aa18550:

        I was wondering if this could happen in cases where re-evaluation is queued but somehow gets stuck, and because new requests are ignored, updates won't occur?

        Well, they won't get stuck, but there is no guaranteed order to the re-evaluation. Other things waiting to execute can run before the re-evaluation happens, including things that could change the global variables or entity attributes on which the first Rule depends.

        Here's something to try (it's the @therealdb solution he mentioned):

        1. Make msg an expressionless local variable.
        2. Before your notification, use a Set Variable or Script Action to compute the value of msg that you want to send in the notification.

        Would look something like this:

        db9f6cf3-f3c6-4045-8dac-cbfc4a59fd3d-image.png

        ...or this, using a Script Action...

        91ba83f7-e245-433c-88ab-fd33e4bc1ea7-image.png

        I personally prefer the Script Action because you can set several variables at once in the script, if that's what you need, and the syntax looks cleaner (you don't have to use the ${{ }} substitution.

        Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

        tunnusT 1 Reply Last reply
        1
        • therealdbT Offline
          therealdbT Offline
          therealdb
          wrote on last edited by therealdb
          #13

          Yep, I confirm I had to update a couple of rules where I had similar variables as @tunnus
          I used script action because it’s multi line and definitely better in terms of readability.

          --
          On a mission to automate everything.

          My MS Reactor contrib
          My Luup Plug-ins

          tunnusT 1 Reply Last reply
          0
          • toggledbitsT toggledbits

            @tunnus said in [Reactor] Variables not updating correctly in latest-25201-2aa18550:

            I was wondering if this could happen in cases where re-evaluation is queued but somehow gets stuck, and because new requests are ignored, updates won't occur?

            Well, they won't get stuck, but there is no guaranteed order to the re-evaluation. Other things waiting to execute can run before the re-evaluation happens, including things that could change the global variables or entity attributes on which the first Rule depends.

            Here's something to try (it's the @therealdb solution he mentioned):

            1. Make msg an expressionless local variable.
            2. Before your notification, use a Set Variable or Script Action to compute the value of msg that you want to send in the notification.

            Would look something like this:

            db9f6cf3-f3c6-4045-8dac-cbfc4a59fd3d-image.png

            ...or this, using a Script Action...

            91ba83f7-e245-433c-88ab-fd33e4bc1ea7-image.png

            I personally prefer the Script Action because you can set several variables at once in the script, if that's what you need, and the syntax looks cleaner (you don't have to use the ${{ }} substitution.

            tunnusT Offline
            tunnusT Offline
            tunnus
            wrote on last edited by
            #14

            @toggledbits ok, I'll have to try script action. Still, as @therealdb stated, I'm also sure the "old style" used to work with pre-252xx builds.

            Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

            tunnusT 1 Reply Last reply
            0
            • tunnusT tunnus

              @toggledbits ok, I'll have to try script action. Still, as @therealdb stated, I'm also sure the "old style" used to work with pre-252xx builds.

              tunnusT Offline
              tunnusT Offline
              tunnus
              wrote on last edited by
              #15

              Some strange results happened while I was experimenting with script action. I noticed that the order of local variables had an effect whether those variables did update or not.

              If I had e.g. the following order:

              case1.png

              "peak_power" did not update. But if I switched places of "ok_to_reset" and "peak_power", "peak_power" started to update in real-time:

              case2.png

              Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

              1 Reply Last reply
              0
              • toggledbitsT Offline
                toggledbitsT Offline
                toggledbits
                wrote on last edited by toggledbits
                #16

                Post your script. Based on the instructions given, your local variables should be expressionless, so that seems wrong and I want to see what your script is trying to do.

                I can tell you right now, if ok_to_reset is expressionless and you are resetting it in the Script Action script, and expecting peak_power to see the updated value, it won't work.

                Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                tunnusT 1 Reply Last reply
                0
                • toggledbitsT toggledbits

                  Post your script. Based on the instructions given, your local variables should be expressionless, so that seems wrong and I want to see what your script is trying to do.

                  I can tell you right now, if ok_to_reset is expressionless and you are resetting it in the Script Action script, and expecting peak_power to see the updated value, it won't work.

                  tunnusT Offline
                  tunnusT Offline
                  tunnus
                  wrote on last edited by
                  #17

                  @toggledbits that wasn’t what I was trying to convey here. Let’s forget script action for a moment as it has no relevance for my finding.

                  What I’m trying to say here is that by merely changing the order of variables (and to be clear, that setup has worked before), my rules are working again. Somehow new builds do not like if expressionless variables are in the middle of regular ones. If they are last in line, all is well. Sounds crazy, but please test.

                  Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

                  1 Reply Last reply
                  0
                  • toggledbitsT Offline
                    toggledbitsT Offline
                    toggledbits
                    wrote on last edited by
                    #18

                    I'll say again, local variables are not processed/evaluated in the same way as global variables. Local variables are only evaluated when the Rule to which they belong is being evaluated (i.e. its triggers are being checked). They are not evaluated when a dependent local variable is changed. When the Rule is evaluated, its local variables, if any, are evaluated before the triggers, and yes, they are evaluated in the order in which they are defined. That is known.

                    Combine this with using a Set Variable action... if you don't check the "Force re-evaluation" checkbox, any other local variables that use the variable being set will not be updated until the Rule is next evaluated. If you check the box, it forces a Rule evaluation, and it is the second evaluation that will update the dependent variables.

                    The Script Action is absolutely relevant in your case, at least from what you've posted, because you apparently still had local variables that are dependent on the local variable that the script was changing, and that was not consistent with my recommendation. The script will not cause the dependent variables to be updated, because there is no "Force re-evaluation" option for the script, and local variables are not dependency-scanned/triggered, as I said above. That means your script action will change the local variable ok_to_reset, but that won't make peak_power change immediately after. That is why I recommended that you make all local variables expressionless when using the Script Action, and do all of the work in the script, none of the work in the local variables' expressions.

                    None of this is new. And again, no changes have been made to how variables (global or local) in any of these recent builds. The earlier changes you mentioned to make isRuleSet() and isRuleEnabled() trigger with the rules they reference (build 25082 -- a long time ago) was a change to the implementation of those functions themselves , but was not in any way a change to the mechanism that handles changes in global expressions.

                    Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                    tunnusT 2 Replies Last reply
                    0
                    • toggledbitsT toggledbits

                      I'll say again, local variables are not processed/evaluated in the same way as global variables. Local variables are only evaluated when the Rule to which they belong is being evaluated (i.e. its triggers are being checked). They are not evaluated when a dependent local variable is changed. When the Rule is evaluated, its local variables, if any, are evaluated before the triggers, and yes, they are evaluated in the order in which they are defined. That is known.

                      Combine this with using a Set Variable action... if you don't check the "Force re-evaluation" checkbox, any other local variables that use the variable being set will not be updated until the Rule is next evaluated. If you check the box, it forces a Rule evaluation, and it is the second evaluation that will update the dependent variables.

                      The Script Action is absolutely relevant in your case, at least from what you've posted, because you apparently still had local variables that are dependent on the local variable that the script was changing, and that was not consistent with my recommendation. The script will not cause the dependent variables to be updated, because there is no "Force re-evaluation" option for the script, and local variables are not dependency-scanned/triggered, as I said above. That means your script action will change the local variable ok_to_reset, but that won't make peak_power change immediately after. That is why I recommended that you make all local variables expressionless when using the Script Action, and do all of the work in the script, none of the work in the local variables' expressions.

                      None of this is new. And again, no changes have been made to how variables (global or local) in any of these recent builds. The earlier changes you mentioned to make isRuleSet() and isRuleEnabled() trigger with the rules they reference (build 25082 -- a long time ago) was a change to the implementation of those functions themselves , but was not in any way a change to the mechanism that handles changes in global expressions.

                      tunnusT Offline
                      tunnusT Offline
                      tunnus
                      wrote on last edited by
                      #19

                      @toggledbits I’m not using script action currently, and those screenshots were from a rule that uses set variable action.

                      But could you test my finding? Even rule triggers are not relevant when reproducing this finding. Just put a variable referencing an entity which frequently changes as a first one. Then make expressionless variable second, and as a third one make some kind of expression which uses first variable and does some calculation with it. Observe what happens and then swap second and third line and again watch what happens.

                      Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

                      1 Reply Last reply
                      0
                      • toggledbitsT toggledbits

                        I'll say again, local variables are not processed/evaluated in the same way as global variables. Local variables are only evaluated when the Rule to which they belong is being evaluated (i.e. its triggers are being checked). They are not evaluated when a dependent local variable is changed. When the Rule is evaluated, its local variables, if any, are evaluated before the triggers, and yes, they are evaluated in the order in which they are defined. That is known.

                        Combine this with using a Set Variable action... if you don't check the "Force re-evaluation" checkbox, any other local variables that use the variable being set will not be updated until the Rule is next evaluated. If you check the box, it forces a Rule evaluation, and it is the second evaluation that will update the dependent variables.

                        The Script Action is absolutely relevant in your case, at least from what you've posted, because you apparently still had local variables that are dependent on the local variable that the script was changing, and that was not consistent with my recommendation. The script will not cause the dependent variables to be updated, because there is no "Force re-evaluation" option for the script, and local variables are not dependency-scanned/triggered, as I said above. That means your script action will change the local variable ok_to_reset, but that won't make peak_power change immediately after. That is why I recommended that you make all local variables expressionless when using the Script Action, and do all of the work in the script, none of the work in the local variables' expressions.

                        None of this is new. And again, no changes have been made to how variables (global or local) in any of these recent builds. The earlier changes you mentioned to make isRuleSet() and isRuleEnabled() trigger with the rules they reference (build 25082 -- a long time ago) was a change to the implementation of those functions themselves , but was not in any way a change to the mechanism that handles changes in global expressions.

                        tunnusT Offline
                        tunnusT Offline
                        tunnus
                        wrote on last edited by
                        #20

                        @toggledbits have you had time to look at this? I suspect there’s a bug in evaluating local variables when expressionless variables are not last items in the list

                        Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

                        1 Reply Last reply
                        0
                        • toggledbitsT Offline
                          toggledbitsT Offline
                          toggledbits
                          wrote on last edited by
                          #21

                          It works as I would predict.

                          Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                          1 Reply Last reply
                          0
                          • therealdbT therealdb

                            Yep, I confirm I had to update a couple of rules where I had similar variables as @tunnus
                            I used script action because it’s multi line and definitely better in terms of readability.

                            tunnusT Offline
                            tunnusT Offline
                            tunnus
                            wrote on last edited by
                            #22

                            @therealdb could you test this if you could get your original rules (variables) to work just by rearranging local expressions? My hypothesis being that expressionless variables should be last in the list

                            Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

                            1 Reply Last reply
                            0
                            • tunnusT Offline
                              tunnusT Offline
                              tunnus
                              wrote on last edited by
                              #23

                              @therealdb & @toggledbits, below you can find my simple test case for this case. At least in my setup I can consistently reproduce this behaviour. (Still) using build 25208.

                              1. First, make sure you have some device/entity which updates often (not strictly necessary, but it's faster to see the results & differences).
                              2. Then put "target" variable immediately after "source", and "expressionlessVariable" should be the last one
                              3. Now "target" should follow/change as "source" changes
                              4. Next, swap "target" & "expressionlessVariable" (as seen in the image). Save.
                              5. Now "target" ceases to update

                              Screenshot 2025-09-05 at 20.40.57.png

                              Using MSR on Docker (Synology NAS), having InfluxDB, Grafana & Home Assistant, Hubitat C-8, Zigbee2MQTT

                              1 Reply Last reply
                              0
                              • toggledbitsT Offline
                                toggledbitsT Offline
                                toggledbits
                                wrote on last edited by toggledbits
                                #24

                                It's probably moot at this point... I've just spent the last two weeks completely revamping the evaluation of Rule-based variables, to make them perform more like global variables, respect dependencies between them better, etc. The last week has just been a deep dive through the logs watching the performance of my own house on the updated approach.

                                I'll shortly be releasing a blind build with these changes, just for you (@tunnus) and @therealdb to try. I expect this to be disruptive, because any approaches in the logic that rely on specific behaviors and side-effects of the old approach will now work differently, maybe fail, and adapting to the new approach will be necessary. But, I think the new approach will produce a result that is much more in keeping with how you would expect it to work. So, sit tight... I'll be ready to build later today or early tomorrow.

                                Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                                toggledbitsT 1 Reply Last reply
                                0
                                • toggledbitsT toggledbits

                                  It's probably moot at this point... I've just spent the last two weeks completely revamping the evaluation of Rule-based variables, to make them perform more like global variables, respect dependencies between them better, etc. The last week has just been a deep dive through the logs watching the performance of my own house on the updated approach.

                                  I'll shortly be releasing a blind build with these changes, just for you (@tunnus) and @therealdb to try. I expect this to be disruptive, because any approaches in the logic that rely on specific behaviors and side-effects of the old approach will now work differently, maybe fail, and adapting to the new approach will be necessary. But, I think the new approach will produce a result that is much more in keeping with how you would expect it to work. So, sit tight... I'll be ready to build later today or early tomorrow.

                                  toggledbitsT Offline
                                  toggledbitsT Offline
                                  toggledbits
                                  wrote on last edited by toggledbits
                                  #25

                                  OK. Interim build latest-25248 for 64-bit docker systems only is up for testing/trials.

                                  NOTE TO ALL USERS NOT CONTRIBUTING TO THIS THREAD — this is not an official build and you are advised not to upgrade to it just yet. This build is specifically for participants in this thread as we work to improve the behavior of Rule-based variables. Wait for a build advertised in the official announcement thread before upgrading your system.

                                  Behavior of Rule-based variables now:

                                  • Will still be re-evaluated when the Rule is started, and any time the Rule is subject to trigger condition check (i.e. behavior not changed);
                                  • When the trigger condition check occurs, Rule-based variables are always evaluated/updated before trigger conditions (i.e. also same as before);
                                  • Rule-based variables may be modified by Set Variable action and assignment statements in Script Actions in Rule Reactions (unreliable before);
                                  • If a Rule-based variable references another Rule-based variable, and the latter changes, the former will be re-evaluated (now same as Global Variables).
                                  • The order of Rule-based variables doesn't matter, it's just for your convenience. Dependencies between variables are established at startup, and evaluation takes place in dependency tree order, not the order shown in the UI (now same as Global Variables).

                                  If you run into an issue you can't resolve, here's what I ask:

                                  1. Make sure your expectations are aligned with the changes above; make sure you are not relying on any prior behavior or side-effect of the prior behavior.

                                  2. Enable logging for the rule in question. Put a snippet like below in your logging.yaml file (replace the part after # with your rule ID):

                                     "Rule#rule-l3hj06aa":
                                       level: 5
                                       streams:
                                       - type: file  # filename is derived from rule ID
                                         keep: 2
                                         level: 999
                                         recycle: true
                                    
                                  3. Restart Reactor and get the rule in question to demonstrate whatever the issue is. Make sure to then capture the log file called Logger#Rule#XXX.log... I will be asking for it.

                                  4. Report the issue here on this thread, with all of the usual attention to posting requirements: good, detailed description; expectations of behavior; clear description of what's not meeting expectations; etc.

                                  5. I will PM you a URL where you can upload the log file and your rule JSON file (from storage/rules) if necessary.

                                  The locally-installed version of the documentation is also updated.

                                  Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                                  G 1 Reply Last reply
                                  0
                                  • toggledbitsT toggledbits

                                    OK. Interim build latest-25248 for 64-bit docker systems only is up for testing/trials.

                                    NOTE TO ALL USERS NOT CONTRIBUTING TO THIS THREAD — this is not an official build and you are advised not to upgrade to it just yet. This build is specifically for participants in this thread as we work to improve the behavior of Rule-based variables. Wait for a build advertised in the official announcement thread before upgrading your system.

                                    Behavior of Rule-based variables now:

                                    • Will still be re-evaluated when the Rule is started, and any time the Rule is subject to trigger condition check (i.e. behavior not changed);
                                    • When the trigger condition check occurs, Rule-based variables are always evaluated/updated before trigger conditions (i.e. also same as before);
                                    • Rule-based variables may be modified by Set Variable action and assignment statements in Script Actions in Rule Reactions (unreliable before);
                                    • If a Rule-based variable references another Rule-based variable, and the latter changes, the former will be re-evaluated (now same as Global Variables).
                                    • The order of Rule-based variables doesn't matter, it's just for your convenience. Dependencies between variables are established at startup, and evaluation takes place in dependency tree order, not the order shown in the UI (now same as Global Variables).

                                    If you run into an issue you can't resolve, here's what I ask:

                                    1. Make sure your expectations are aligned with the changes above; make sure you are not relying on any prior behavior or side-effect of the prior behavior.

                                    2. Enable logging for the rule in question. Put a snippet like below in your logging.yaml file (replace the part after # with your rule ID):

                                       "Rule#rule-l3hj06aa":
                                         level: 5
                                         streams:
                                         - type: file  # filename is derived from rule ID
                                           keep: 2
                                           level: 999
                                           recycle: true
                                      
                                    3. Restart Reactor and get the rule in question to demonstrate whatever the issue is. Make sure to then capture the log file called Logger#Rule#XXX.log... I will be asking for it.

                                    4. Report the issue here on this thread, with all of the usual attention to posting requirements: good, detailed description; expectations of behavior; clear description of what's not meeting expectations; etc.

                                    5. I will PM you a URL where you can upload the log file and your rule JSON file (from storage/rules) if necessary.

                                    The locally-installed version of the documentation is also updated.

                                    G Offline
                                    G Offline
                                    gwp1
                                    wrote on last edited by gwp1
                                    #26

                                    @toggledbits whoops... guess this is one time having the system auto-update containers with new images is bad....

                                    So I'm on the test version. Found this:

                                    cc690a62-1fe5-49f5-8586-636b6c8316ce-image.png

                                    This is a Dynamic Group I'd created forever ago:

                                    df0d4e38-393d-4864-adf4-dbef6e53897e-image.png

                                    My ruleset:
                                    23a5760e-ff12-45c2-b30e-11a08a13138b-image.png bc3bb93c-572b-4d5c-a718-fcbde56d7abb-image.png

                                    I added the snippet as noted into my logging.yaml file:

                                    bb33c4d6-94b5-45a7-bd0e-cf91caaf9b4d-image.png

                                    When it didn't work I checked my yaml and found a spacing issue. That's been corrected, I now have a proper logger* log. Will upload to our pre-x Dropbox in folder 25248 logs along with the rule JSON file.

                                    *Hubitat C-7 2.4.3.149
                                    *Proxmox VE v8, Beelink MiniPC 12GBs, SSD

                                    *HASS 2025.11.1
                                    w/ ZST10-700 fw 7.18.3

                                    *Prod MSR in docker/portainer
                                    MSR: latest-25310-dc2bb580
                                    MQTTController: 25139
                                    ZWave Controller: 25139

                                    1 Reply Last reply
                                    0
                                    • toggledbitsT Offline
                                      toggledbitsT Offline
                                      toggledbits
                                      wrote on last edited by toggledbits
                                      #27

                                      Is there a global variable called dead (it's not shown above)?

                                      Or are you looking for the word dead in status_text? Because if it's that, your expression is incorrectly formed.

                                      Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                                      G 1 Reply Last reply
                                      0
                                      • toggledbitsT toggledbits

                                        Is there a global variable called dead (it's not shown above)?

                                        Or are you looking for the word dead in status_text? Because if it's that, your expression is incorrectly formed.

                                        G Offline
                                        G Offline
                                        gwp1
                                        wrote on last edited by
                                        #28

                                        @toggledbits kicker is: this has been working for a long while. Dead iblind nodes (far too common, btw) get caught and pinged and I get the alerts on my phone.

                                        I don't see a Global Expression called dead and, yes, I believe when I wrote this I was looking for either a status of 3 or status_text of dead.

                                        *Hubitat C-7 2.4.3.149
                                        *Proxmox VE v8, Beelink MiniPC 12GBs, SSD

                                        *HASS 2025.11.1
                                        w/ ZST10-700 fw 7.18.3

                                        *Prod MSR in docker/portainer
                                        MSR: latest-25310-dc2bb580
                                        MQTTController: 25139
                                        ZWave Controller: 25139

                                        1 Reply Last reply
                                        0
                                        • toggledbitsT Offline
                                          toggledbitsT Offline
                                          toggledbits
                                          wrote on last edited by toggledbits
                                          #29

                                          OK. Yes, the new build also has some new error reporting. That message was probably being logged, but since you weren't looking at the logs, you didn't see it.

                                          You can also combine those into one status test, which will be a good bit more efficient:

                                          - id: groups
                                            enabled: true
                                            implementation: DynamicGroupController
                                            name: Dynamic Group Controller
                                            config:
                                              groups:
                                                zwavejs_dead:
                                                  select:
                                                    - include_group: zwavejs
                                                  filter_expression: <
                                                    entity?.attributes?.zwave_device?.status === 3 ||
                                                    entity?.attributes?.zwave_device?.status_text === "dead"
                                          

                                          Also, please... Please... PLEASE do not screen shot pure text. Use the fenced code block formatting here for text like expressions, configs, logs, etc. It may be expeditious for you to just paste the screen shot, but when I try to give you suggestions or corrections like the above, I have to retype the entire block (I can't copy-paste the text and update it). That not only takes a bunch of time, but also introduces the possibility that I will make a typo in the part we don't care about and leave you with a non-working example we then need to fix in yet another series of post replies.

                                          Don't forget to remove the Rule logging when it isn't needed.

                                          Author of Multi-system Reactor and Reactor, DelayLight, Switchboard, and about a dozen other plugins that run on Vera and openLuup.

                                          G 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Recent Topics

                                          • Home Assistant 2025.11.2 and latest-25315
                                            G
                                            gwp1
                                            0
                                            6
                                            50

                                          • Reactor (Multi-System/Multi-Hub) Announcements
                                            toggledbitsT
                                            toggledbits
                                            5
                                            129
                                            73.4k

                                          • Notice to Docker + ARM Users (RPi 3/4/5 and others)
                                            toggledbitsT
                                            toggledbits
                                            1
                                            1
                                            36

                                          • Requesting a proper ARM64/aarch64 Docker image (Pi 5 support)
                                            M
                                            mgvra
                                            1
                                            3
                                            105

                                          • Script action and custom timers
                                            toggledbitsT
                                            toggledbits
                                            0
                                            4
                                            118

                                          • Help resolve change in behaviour post update
                                            CatmanV2C
                                            CatmanV2
                                            0
                                            12
                                            325

                                          • There is an alternative to homebridge-mqttthing
                                            akbooerA
                                            akbooer
                                            1
                                            2
                                            105

                                          • Reactor w/HA 2025.11 error on set_datetime service call setting only time
                                            CrilleC
                                            Crille
                                            0
                                            6
                                            131

                                          • Reactor Version 25310 : Office Light control via rule in reactor no longer working since last update.
                                            toggledbitsT
                                            toggledbits
                                            0
                                            17
                                            386

                                          • Shelly Wall Display XL
                                            akbooerA
                                            akbooer
                                            2
                                            9
                                            752

                                          • [Solved] alarm() in global expression throws error in log.
                                            toggledbitsT
                                            toggledbits
                                            0
                                            26
                                            707

                                          • [Solved] Define function issue in latest-25304
                                            CrilleC
                                            Crille
                                            0
                                            12
                                            443
                                          Powered by NodeBB | Contributors
                                          Hosted freely by 10RUPTiV - Solutions Technologiques | Contact us
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Unsolved