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. Device information in string or array
Arming Envisalink panel from MSR
T
Topic thumbnail image
Multi-System Reactor
[Solved] DynamicGroupController updating members issue
CrilleC
Edit: Solved in latest-26221. Bare-metal latest-26193 I have this group: "OKforLarm": name: OK för Larm select: - include_controller: vera - include_capability: door_sensor filter_expression: entity.attributes.door_sensor.state It contains the entities I expect but behaves a bit odd. When I open vera>device_10097 the entity attribute door_sensor.state changes to true but it won't show up as member in the group, when I also open vera>device_10095 they both shows as members and when I close vera>device_10095 it disappear from the group but when I close vera>device_10097 it lingers in the group until I restart Reactor.
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
DynamicGroupController and attributes
therealdbT
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!
Multi-System Reactor
Upgrade Issues
T
Topic thumbnail image
Multi-System Reactor
[SOLVED] Conflicting Set Reaction Groups Appear to Fire Simultaneously in Single Rule Evaluation
G
Topic thumbnail image
Multi-System Reactor
[SOLVED] Question regarding "in" vs "contains" vs contents of the string
G
Topic thumbnail image
Multi-System Reactor
Logon screen timeout
G
Noticing since 170 that the lock screen doesn't switch to the logon prompt but, rather, stays on the active UI until such time as you go to click something within it. Then it jumps to the login screen. Brave browser Brave 1.92.139 (Official Build) (arm64) Chromium: 150.0.7871.114
Multi-System Reactor
[MSR] Copy&past of actions and/or drag&drop between set/reset
therealdbT
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!
Multi-System Reactor
Upgrade advice - upgrade from aarch64 to ARM64 image
T
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
Multi-System Reactor
Alexa for MSR, any interest?
MikeReadingtonM
Topic thumbnail image
Multi-System Reactor
[RESOLVED] Telegram notification broke with latest update
3
Topic thumbnail image
Multi-System Reactor
[RESOLVED] Phantom device, “INFO” appears
wmarcolinW
Topic thumbnail image
Multi-System Reactor
[RESOLVED] Mode Status NULL
wmarcolinW
Topic thumbnail image
Multi-System Reactor
[RESOLVED] HTTP query failing after version 26177
wmarcolinW
Topic thumbnail image
Multi-System Reactor
Question about the find function
wmarcolinW
Topic thumbnail image
Multi-System Reactor
[Answered] OK to remove old json files?
3
Topic thumbnail image
Multi-System Reactor
Deprecation Announcement: 32-bit ARM *docker* images
toggledbitsT
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.
Multi-System Reactor
[Solved] build 26150 - engine not starting
G
@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.
Multi-System Reactor
http request action & digest auth
tunnusT
I’m using the HTTP Request action in MSR and need to authenticate against an endpoint that uses HTTP Digest authentication. Now that endpoint was changed to use SHA-256 in digest auth, so I would like to know if MSR supports it, or is it limited to MD5-based digest auth?
Multi-System Reactor

Device information in string or array

Scheduled Pinned Locked Moved Multi-System Reactor
18 Posts 4 Posters 3.6k Views 4 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.
  • wmarcolinW Offline
    wmarcolinW Offline
    wmarcolin
    wrote on last edited by
    #1

    Hi,

    I need help to create a search within MSR that shows me the name of all sensors in a certain status.

    User case: Based on the information from category_num and subcategory_num, return in a string or array the name of all devices that meet the Tripped = 1 status.

    Example: generate a warning message of all the windows that are open before triggering the alarm.

    Which function should I use in MSR? What would this search look like?

    Thanks.

    rafale77R 1 Reply Last reply
    0
    • toggledbitsT Online
      toggledbitsT Online
      toggledbits
      wrote on last edited by
      #2

      Currently there is no function or "global" value that will give you all entities. I've talked with other users about this, so it's a planned feature, it just hasn't materialized yet, and since it's core, it's probably a 1.1 thing and not for 1.0.

      But, you can take a list of known entities that you specify and rip through them to see which matches a particular test (or tests). This has been covered here: https://smarthome.community/post/7041

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

      wmarcolinW 1 Reply Last reply
      0
      • wmarcolinW wmarcolin

        Hi,

        I need help to create a search within MSR that shows me the name of all sensors in a certain status.

        User case: Based on the information from category_num and subcategory_num, return in a string or array the name of all devices that meet the Tripped = 1 status.

        Example: generate a warning message of all the windows that are open before triggering the alarm.

        Which function should I use in MSR? What would this search look like?

        Thanks.

        rafale77R Offline
        rafale77R Offline
        rafale77
        wrote on last edited by rafale77
        #3

        @wmarcolin

        Replying to a PM so it may sound off topic.
        This is an example of how I would do it in lua:

        for k, v in pairs(luup.devices) do
           if v.device_num_parent == 1 then
             if v.category_num == 4 then
               atr = luup.variable_get("urn:micasaverde-com:serviceId:SecuritySensor1", "ArmedTripped", k)
               tr = luup.variable_get("urn:micasaverde-com:serviceId:SecuritySensor1", "Tripped", k)
               if atr == "1" then natr = natr + 1 end
               if tr == "1" then ntr = ntr + 1 end
             end
             fail = luup.variable_get("urn:micasaverde-com:serviceId:HaDevice1", "CommFailure", k)
             if fail == "1" then 
               nfail=nfail + 1 
             end
           end
         end
         return ntr,natr,nfail
        end
        

        You can see in this example that I am counting specifically devices from a bridge which is device id 1 (I think it was a vera) and am counting devices which are tripped, armed tripped and failed. It's a code that I used to run regularly to check my device status.
        You can then extract the name of the device and append it to a device list.

        local list = {}
        for k, v in pairs(luup.devices) do
             if v.category_num == 4 then
               tr = luup.variable_get("urn:micasaverde-com:serviceId:SecuritySensor1", "Tripped", k)
               if tr == "1" then table.insert(list,v.name) end
             end
        end
        return list
        
        1 Reply Last reply
        0
        • wmarcolinW Offline
          wmarcolinW Offline
          wmarcolin
          wrote on last edited by
          #4

          @rafale77 thanks, it worked inside Vera, but as I am leaving the platform, and as many of you have already said, my VeraPlus Hub will be just a radio very soon, I have to find a way to do it in MSR. And I don't think I'm far, I'll post a message in the sequence that may be that @toggledbits give me the missing information.

          1 Reply Last reply
          0
          • toggledbitsT toggledbits

            Currently there is no function or "global" value that will give you all entities. I've talked with other users about this, so it's a planned feature, it just hasn't materialized yet, and since it's core, it's probably a 1.1 thing and not for 1.0.

            But, you can take a list of known entities that you specify and rip through them to see which matches a particular test (or tests). This has been covered here: https://smarthome.community/post/7041

            wmarcolinW Offline
            wmarcolinW Offline
            wmarcolin
            wrote on last edited by
            #5

            @toggledbits first step ok, I took the example you told me to look at and that is exactly what I want to follow. I managed to reproduce the example for the battery, but now I lack the variable to test the Tripped.

            254ea07c-71a9-401c-a0ed-52fee3ade2ad-image.png

            I believe that attributes.Tripped == "1" is not the correct one to validate.

            If you can tell me what query I have to do, I would be grateful.

            wmarcolinW 1 Reply Last reply
            0
            • wmarcolinW wmarcolin

              @toggledbits first step ok, I took the example you told me to look at and that is exactly what I want to follow. I managed to reproduce the example for the battery, but now I lack the variable to test the Tripped.

              254ea07c-71a9-401c-a0ed-52fee3ade2ad-image.png

              I believe that attributes.Tripped == "1" is not the correct one to validate.

              If you can tell me what query I have to do, I would be grateful.

              wmarcolinW Offline
              wmarcolinW Offline
              wmarcolin
              wrote on last edited by
              #6

              After much trying and error, I found which attribute to use, and the problem was solved. Thanks @rafale77 and @toggledbits for the tips. Now it opens a universe of new toys to put in my automation, increasing the information.

              1e32985e-dd7a-438c-bfcb-071fc2213759-image.png

              1 Reply Last reply
              2
              • toggledbitsT Online
                toggledbitsT Online
                toggledbits
                wrote on last edited by
                #7

                Nice job!

                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
                • wmarcolinW Offline
                  wmarcolinW Offline
                  wmarcolin
                  wrote on last edited by
                  #8

                  One extra query, is it possible to put in an array a search that lists all the device names that meet a characteristic, for example category_num 4 and subcategory_num 1? An array that returns ["vera>device_1", "vera>device_2", "vera>device_3"].

                  In other words, I would like to fill in my above example, the variable OpenDoorWindList more automatically, without having to manually prepare this list.

                  1 Reply Last reply
                  0
                  • toggledbitsT Online
                    toggledbitsT Online
                    toggledbits
                    wrote on last edited by
                    #9

                    Yes, that's what I am referring to as planned but not yet implemented in my earlier reply.

                    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
                    1
                    • wmarcolinW Offline
                      wmarcolinW Offline
                      wmarcolin
                      wrote on last edited by
                      #10

                      Ah, ok, thanks!

                      1 Reply Last reply
                      0
                      • H Offline
                        H Offline
                        HansW
                        wrote on last edited by toggledbits
                        #11

                        Well, I have been trying to use the above example to get a message reporting LAN connectivity failure of devices in my network.

                        So I have set up an array with devices the Global expressions named DeviceTrackerList:

                        ['hass>device_tracker_airport_time_capsule_van_hw','hass>device_tracker_airport_time_capsule_van_hw','hass>device_tracker_akita','hass>device_tracker_altherma_lan_adapter','hass>device_tracker_ap_bijkeuken' etc] 
                        

                        Then I run into problems defining the loop into a variable DeviceTrackerNotHome:

                        each id in DeviceTrackerList:getEntity( id).state == not_home ? id: null
                        

                        Which returns the entire list. I have tried a few dozen of other options but either the entire list or an empty list is returned. Obviously my .state does not do the trick but what is the correct syntax to use here? (And where could I have found that myself?...)

                        Then the next step is to use the names of the failing devices in a message.

                        My last global variable is named DeviceTrackerMessage and holds

                        join(each id in DeviceTrackerNotHome:getEntity(id).name, ', ')
                        

                        which returns a nice list of friendly names but I have no idea how to use that in my message.

                        I expected { "message": {DeviceTrackerMessage} } to work but it did not and all other attempts to construct something failed as well.

                        So I do hope someone can help here to point out to me what is probably obvious but difficult for a novice user to see. 🙂

                        toggledbitsT 1 Reply Last reply
                        0
                        • H HansW

                          Well, I have been trying to use the above example to get a message reporting LAN connectivity failure of devices in my network.

                          So I have set up an array with devices the Global expressions named DeviceTrackerList:

                          ['hass>device_tracker_airport_time_capsule_van_hw','hass>device_tracker_airport_time_capsule_van_hw','hass>device_tracker_akita','hass>device_tracker_altherma_lan_adapter','hass>device_tracker_ap_bijkeuken' etc] 
                          

                          Then I run into problems defining the loop into a variable DeviceTrackerNotHome:

                          each id in DeviceTrackerList:getEntity( id).state == not_home ? id: null
                          

                          Which returns the entire list. I have tried a few dozen of other options but either the entire list or an empty list is returned. Obviously my .state does not do the trick but what is the correct syntax to use here? (And where could I have found that myself?...)

                          Then the next step is to use the names of the failing devices in a message.

                          My last global variable is named DeviceTrackerMessage and holds

                          join(each id in DeviceTrackerNotHome:getEntity(id).name, ', ')
                          

                          which returns a nice list of friendly names but I have no idea how to use that in my message.

                          I expected { "message": {DeviceTrackerMessage} } to work but it did not and all other attempts to construct something failed as well.

                          So I do hope someone can help here to point out to me what is probably obvious but difficult for a novice user to see. 🙂

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

                          @hansw said in Device information in string or array:

                          each id in DeviceTrackerList:getEntity( id).state == not_home ? id: null

                          The state part isn't right... everything from getEntity() to the question mark, in fact. Go to the Entities list, find one of the entities you have listed in DeviceTrackerList, and click on it to open its detail pane. You'll see the correct names of all the attributes listed there. Two things need to be fixed: (a) where you have getEntity( id ).state in the above example, you need to replace it with getEntity( id ).attributes.capabilityname.attributename (e.g. .attributes.x_hass.state or .attributes.x_hass_device_tracker.location_name); and (2) where you have not_home, there is probably no variable by that name, and I'm betting you actually meant to compare to a string here, so that needs to be surrounded in quotes: ... == "not_home"

                          @hansw said in Device information in string or array:

                          which returns a nice list of friendly names but I have no idea how to use that in my message.
                          I expected { "message": {DeviceTrackerMessage} } to work

                          The message would be something like:

                          ${{ "Trackers not home: " + DeviceTrackerMessage }}
                          

                          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
                          • H Offline
                            H Offline
                            HansW
                            wrote on last edited by HansW
                            #13

                            Thanks again for your help @toggledbits. I had been looking at the wrong place (in HASS) for the entities but your pointer was a great help also for other uses of reactor. The expressions are working like a charm now.

                            Still having trouble getting the JSON correct using the Variable though. I am using the x_hass_system.call_service and whatever I try it fails.

                            The string looks like:
                            { "title": "The following devices fail: ", "message": XXXX } Where at the location of the XXXX I probably need a trick to insert the DeviceTrackerMessage with surrounding double quotes but I don't have a clue.

                            I even tried building the JSON into a global variable but it looks like the escape characters do not work or maybe I overlook something obvious.

                            1 Reply Last reply
                            0
                            • toggledbitsT Online
                              toggledbitsT Online
                              toggledbits
                              wrote on last edited by toggledbits
                              #14

                              Show me all of the variables involved, and your rule and it's reactions. We'll work from the point you've arrived at.

                              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
                              • H Offline
                                H Offline
                                HansW
                                wrote on last edited by
                                #15

                                Thanks @toggledbits , the variables I showed you in my earlier post and I corrected them zo they evaluate properly now into a string DeviceTrackerMessage which holds the friendly name of the devices offline, separated with comma's. As a string it does not have "" around it.

                                My rule has a lot of Entity Attribute checks of all devices checked on x_hass.state <> home and combined into an OR.

                                Then as a constraint I check the Variable Value DeviceTrackerMessage <> ""

                                And then the Set Reaction holds:

                                Entity Action hass>system x_hass_system.call_service with service: notify.my_device and the data: holding
                                { "title": "Some devices failed: ", "message": XXXXX }

                                Where on the position of XXXX I tried all I could think of.

                                I know the rule might not be perfect yet but just testing the Set Reaction should generate a message. When replacing the XXXX with "test" I get a message.

                                Also I tried adding a variable called JSONString and populating that using to JSON but I cannot get the result to look like a JSON string nor to work.

                                Hope this helps.....

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

                                  The data field requires either a string that can be parsed as JSON data, or (works but not documented), you can pass an object from an expression. Both of these will require that you use a substitution to get the object or string into the field.

                                  My suggestion is that you minimize the need to understand quoting, etc. by creating another variable to house the data object, and pass that variable in the Entity action. Two steps:

                                  1. Create an expression (could be local or global) called notify_data defined as follows:

                                     { "title": "Some devices failed", "message": DeviceTrackerMessage }
                                    
                                  2. To insert that into your Entity Action, set the data field to ${{ notify_data }}

                                  That's what I would consider to be the "easy" way, which is a little longer than the most direct route, but easier (I think) to understand (and support/remember in future). The first step creates an object with two keys and sets their values: the title is a string, and the message is the value of DeviceTrackerMessage (no quotes around that name means it's a variable reference). The second step passes the object to the data field.

                                  The other way would simply be to set the data field in your action to the JSON string directly in one step. There are several ways to do this, and one of them is to use a similar approach to what we've done above, and just have the stringify() function convert it to JSON for us (that's what it does). Set the data field in your Entity Action to:

                                  ${{ stringify( { "title": "Some devices failed", "message": DeviceTrackerMessage } ) }}
                                  

                                  You should be able to see the similarity here. The interior object definition creates an object with two keys, title and message, and their particular values. That is passed to stringify(), which converts it to JSON, and that result string becomes the value of the field passed to Hass on the service call.

                                  You can also do this without stringify(), but it's more complicated. We have to build the JSON string ourselves and insert the data from DeviceTrackerMessage into it using string concatenation, with careful use of different quotes for different purposes (the tricky part):

                                  ${{ '{ "title": "Some devices failed", "message": "' + DeviceTrackerMessage + '" }' }}
                                  

                                  Notice that before and after + DeviceTrackerMessage + we have double quotes inside single quotes (hard to see, especially at the end). But this would also work, provided DeviceTrackerMessage does not contain any double quotes itself. Quoting can be hard to get right, especially for new players, so I generally try to find solutions that avoid it, which is why I put the other two solutions first on my list.

                                  Edit: heh... actually, an even shorter version of my first alternative is to not use stringify() at all and just create and pass the object on the fly... set data field to this:

                                  ${{ { "title": "Some devices failed", "message": DeviceTrackerMessage } }}
                                  

                                  That's about as direct as it gets -- you're creating and passing the data object in one step, there is no need to convert it to a JSON string because you can pass the object directly. For clarity, no additional variable needs to be created, either. I think I like this best.

                                  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
                                  • H Offline
                                    H Offline
                                    HansW
                                    wrote on last edited by
                                    #17

                                    Thanks a lot for your elaborate answer and explanation @toggledbits! I do appreciate this and it helps me further, also with other issues, to make better use of your wonderful tool! I was not aware of this ${{ }} construction and I have no idea from which language this syntax is but I guess it forces the bit in between to be evaluated.

                                    Anyway, it solved the problem! Thanks a lot!!

                                    toggledbitsT 1 Reply Last reply
                                    1
                                    • H HansW

                                      Thanks a lot for your elaborate answer and explanation @toggledbits! I do appreciate this and it helps me further, also with other issues, to make better use of your wonderful tool! I was not aware of this ${{ }} construction and I have no idea from which language this syntax is but I guess it forces the bit in between to be evaluated.

                                      Anyway, it solved the problem! Thanks a lot!!

                                      toggledbitsT Online
                                      toggledbitsT Online
                                      toggledbits
                                      wrote on last edited by toggledbits
                                      #18

                                      @hansw said in Device information in string or array:

                                      I was not aware of this ${{ }} construction and I have no idea from which language this syntax is but I guess it forces the bit in between to be evaluated.

                                      That is exactly what it does, and the value that results become the value of that field for the action. Similar syntax is used in many applications (it's not really a language feature as much as it is an application feature), among them Home Assistant. Reactor for Vera used plain { } but this was problematic because the more robust expression language of MSR uses those characters.

                                      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
                                      1
                                      • toggledbitsT toggledbits locked this topic on
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      Recent Topics

                                      • Arming Envisalink panel from MSR
                                        T
                                        tamorgen
                                        0
                                        7
                                        168

                                      • [Solved] DynamicGroupController updating members issue
                                        CrilleC
                                        Crille
                                        0
                                        5
                                        104

                                      • Reactor (Multi-System/Multi-Hub) Announcements
                                        toggledbitsT
                                        toggledbits
                                        5
                                        148
                                        129.6k

                                      • DynamicGroupController and attributes
                                        therealdbT
                                        therealdb
                                        1
                                        5
                                        114

                                      • Upgrade Issues
                                        T
                                        tbully
                                        0
                                        9
                                        226

                                      • [SOLVED] Conflicting Set Reaction Groups Appear to Fire Simultaneously in Single Rule Evaluation
                                        toggledbitsT
                                        toggledbits
                                        0
                                        10
                                        254

                                      • [SOLVED] Question regarding "in" vs "contains" vs contents of the string
                                        G
                                        gwp1
                                        0
                                        5
                                        136

                                      • openLuup console disappeared - 500 - Internal Server Error
                                        A
                                        a-lurker
                                        0
                                        2
                                        173

                                      • Logon screen timeout
                                        G
                                        gwp1
                                        0
                                        5
                                        193

                                      • [MSR] Copy&past of actions and/or drag&drop between set/reset
                                        toggledbitsT
                                        toggledbits
                                        0
                                        9
                                        363

                                      • Upgrade advice - upgrade from aarch64 to ARM64 image
                                        toggledbitsT
                                        toggledbits
                                        0
                                        4
                                        215
                                      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