Discussion Forum to share and further the development of home control and automation, independent of platforms.

    SmartHome Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Unsolved
    (Last Updated: 17 February 2023)
    • [Solved] Expressions - predefining a variable type

      PerH

      I have a use case where I need to have a boolean variable that will be set to true/false by reactions.

      I see that i can define a local variable by giving it a name and leaving the definition empty. This leaves it at state "null" until a reaction tells it that its a boolean.

      Is there a way to tell it that it should start out as "false" (i.e when reactor has restarted), and not null?

      Am i going about this the wrong way?

      -- The use case is that I have a sensor on my fireplace, and the following logic is for notifying when its time to get up en refill with firewood.. I also want to reset the MaxInInterval to CurrentTemp when notification is sent..

      1fd2951f-cb6b-4a2f-b957-1e0698171f4d-image.png dd99634e-f0ad-4878-bb87-0284c2df5535-image.png

      Edit: better screenhots. Reactor version 23010-7dd2c9e9

      Multi-System Reactor
    • Trying to add second Hubitat controller

      R

      Converting from Vera Plus to Hubitat at two different locations. The two sites are interconnected via a router-to-router VPN. I currently have a Hubitat C7 running at Site One and a Vera Plus at Site Two. The MSR Raspberry Pi is co-located with the Vera Plus at Site Two. I "activated" a Hubitat C8 (ethernet connected) at Site Two including the installation of Hub Information Driver and its associated device. I also installed a single zwave outlet module (GE ZW4202). I restarted MSR. The C8 and its associated devices appear on both the Entities page and the MSR Dashboard, but the C8 reports as down on the MSR Status page and the GE outlet does not respond when "clicked". I am not sure where to look to try to find the source of the problem and will greatly appreciate any suggestions.

      Multi-System Reactor
    • Reactor (Multi-System/Multi-Hub) Announcements

      toggledbits

      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
    • Home assistant addon: Import Vera/Openluup backup

      R

      Hi guys,

      I want to import my reactor sensors in the MSR addon for Home Assistant, but I can't find the app.js file anywhere. So now I don't know where to put the backup file.

      I have not tried to put it in the main directory (config/reactor) yet. Wanted to know if I'm the only one with the problem.

      Reactor addon: v0.0.8
      MSR: 23063-c464b685
      Home Assistant 2023.3.3
      Supervisor 2023.03.1
      Operating System 9.5
      Frontend 20230202.0 - latest

      I started with v0.0.7, have just updated everything. Still no file.

      Multi-System Reactor
    • MQTT Controller and extended capabilities

      M

      I'm a little bit confused how to configure extended capabilities for the entities in the MQTTController.

      mqtt_cababilities.yaml states that: "...You can add your own capabilities by adding a "capabilities" section to your own local_mqtt_capabilities.yaml file in your config directory."

      So I did this in my local_mqtt_capabilities.yaml in the config directory:

      version: 22353 revision: 1 format: 1 capabilities: x_my_config: attributes: partyMode: type: bool actions: some_action: topic: '%topic/write' payload: "some value"

      And in my reactor.yaml I have following configuration entry:

      my-config: name: 'My custom configuration' topic: 'my-config' query: "%topic%/read" init: "%topic%/read" capabilities: - x_my_config primary_attribute: x_my_config.partyMode events: "%topic%/status": "x_my_config.partyMode": json_payload: true expr: "payload.partyMode"

      This sort of works but not quite. The partyMode attribute gets updated when messages arrive for that specific topic, so that's fine. But I don't see x_my_config capability in the Capabilities list in the UI and also the some_action is missing.

      Screenshot from 2023-03-09 19-42-49.png

      Addition to that the primary value is not set and I'm getting the following error:
      Screenshot from 2023-03-09 19-30-42.png

      Have I completely misunderstood the idea behind the capability extension and the attributes? If so, could someone point me to the right direction with few explanatory example configs.

      What I'm trying to achieve is a set of configuration options that could be updated thru the MQTT, and also provide some actions that the rules could invoke.

      Reactor (Multi-hub) latest-23063-c464b685 + MQTTController [0.1.23010]

      br,
      mgvra

      Multi-System Reactor
    • localization settings

      tunnus

      Using the following localization settings in reactor.yaml:

      units: metric locale: fi-FI time_format: "%H:%M:%S" date_format: "%d/%m/%Y"

      But still I'm getting US date & time formatting, so settings do not seem to override defaults? Using 23049 on Synology Docker

      Multi-System Reactor
    • Installing MQTTController on Home Assistant Core when Reactor is installed as an Add-In (VirtualBox)

      W

      Running Home Assistant Core under VirtualBox (on Windows) and Reactor is installed and working fine as an add-in. What I can't figure out is how to install MQTTController in this situation. I can upload the files and unzip them, but I can't run install.sh in a terminal window because npm is not a part of the Core installation.

      It does appear that somewhere in the stack there is a version of docker there between VirtualBox and HA, (I see some references go by in the VirtualBox startup log) but it appears minimal and will not execute the install via the docker technique in your documentation from the VB console.

      Is there a way to do this?

      Thanks.

      Multi-System Reactor
    • Home Assistant add-on

      M

      I've done a bit of repackaging of MSR to make it work as an add-on under Home Assistant mostly for my own purposes but hopefully it makes it a bit easier to install and get going.

      GitHub - mrw298/hassio-reactor-addon GitHub - mrw298/hassio-reactor-addon

      Contribute to mrw298/hassio-reactor-addon development by creating an account on GitHub.

      Multi-System Reactor
    • Does order matter in Reactions Set/Reset

      G

      @toggledbits somewhere I thought I read that MSR goes thru the items in set reaction and reset reaction in stack order, ie from top to bottom/first to last.

      Am I mistaken?

      Multi-System Reactor
    • Reactor: How to call Hass service for noob

      W

      Reactor 23063 running on Windows Bare Metal.
      Home assistant 2023.3.1
      ESPHome 2023.2.4

      I've been trying a few ways using some results from search to call a Hass service as a reaction in a Reactor rule.

      Specifically, when the PIR in the room senses motion, wake the NsPanel screen.

      My Reactions otherwise so far are basic If this then that so I'm way behind what others are doing.

      What I want to call as a Reaction:
      Capture1.PNG

      What I've tried (a few variations on):
      Capture2.PNG

      What happens:

      [latest-23063]2023-03-07T07:45:21.688Z <wsapi:ERR> wsapi: error thrown handling client message [Object]{ "command": "perform", "entity": "WOKHASS1>system", "action": "x_hass_system.call_service", "parameters": { "service": "ESPHome: nspensuite_send_command_printf", "data": "page home" }, "qid": 75 } [latest-23063]2023-03-07T07:45:21.688Z <wsapi:CRIT> TypeError: Cannot read properties of null (reading '1') [-] TypeError: Cannot read properties of null (reading '1') at HassController.performOnEntity (C:\reactor\reactor\server\lib\HassController.js:584:108) at System.perform (C:\reactor\reactor\server\lib\Entity.js:707:56) at WSAPI.clientMessage (C:\reactor\reactor\server\wsapi\wsapi.js:499:48) at WebSocket.<anonymous> (C:\reactor\reactor\server\wsapi\wsapi.js:290:158) at WebSocket.emit (node:events:520:28) at WebSocket.emit (node:domain:475:12) at Receiver.receiverOnMessage (C:\reactor\reactor\node_modules\ws\lib\websocket.js:1059:20) at Receiver.emit (node:events:520:28) at Receiver.emit (node:domain:475:12) at Receiver.dataMessage (C:\reactor\reactor\node_modules\ws\lib\receiver.js:517:14)

      If someone can convert the 'call service' to a 'reaction' for me, or share their own similar thing I think that's what I need to achieve this goal.

      I suspect if I'm even close to being on the right track, my problems are probably formatting like curly braces etc and lack thereof.

      Thanks in advance.

      Multi-System Reactor
    • Reactor Ex Machina

      G

      @toggledbits was looking thru rule sets and updating which (new) lights I wanted REMII to impact and saw that this...

      4711b0df-5e98-4992-bb25-d0e53203f0e8-image.png

      ...is showing as (missing) in the rule Deactivatedand looking in the dropdown of Variables it appears I cannot select that local expression (only Global) as I did when originally building this out back in 2021.

      27f7025c-057e-441a-88ea-dc4bdf39614d-image.png

      In looking at the rule Active Period I'm seeing:
      487074ef-3bfa-4a84-b03d-ed6d920c118c-image.png which appears to be pointing to setting a variable in a rule?

      It's admittedly been a couple years since this was built and it's def not fresh in my memory.

      Multi-System Reactor
    • No drop-down list on Entity Attribute in "Creation Rule Sets" interface

      C

      New installation of Reactor version 23063-c464b685 on a Raspberry PI4 with Portainer/Docker.
      Report :
      No drop-down list on Entity Attribute in "Creation Rule Sets" interface
      I can however visualize the entities.
      I have configured HomeAssistant and all entities are coming up fine.
      I have an unsupported Hass version 2023.3.0b5.
      I'm new to Docker and can someone guide me to a solution?
      Christian FABRE

      Alert:
      reactor_20230305_01.png Rule :
      reactor_20230305_02.png Entities:
      reactor_20230305_03.png log Reactor :

      [latest-23063]2023-03-05T09:51:49.575Z <app:null> Process ID 1 user/group 0/0; docker; platform linux/arm64 #1595 SMP PREEMPT Wed Oct 26 11:07:24 BST 2022; locale (undefined) [latest-23063]2023-03-05T09:51:49.576Z <app:null> Basedir /opt/reactor; data in /var/reactor/storage [latest-23063]2023-03-05T09:51:49.577Z <app:null> NODE_PATH=/opt/reactor:/opt/reactor/node_modules [latest-23063]2023-03-05T09:51:49.584Z <app:INFO> Configured locale (undefined); selected locale(s) en-US.UTF-8 [latest-23063]2023-03-05T09:51:49.708Z <app:INFO> Loaded locale en-US for en-US [latest-23063]2023-03-05T09:51:49.725Z <Structure:null> Module Structure v22323 [latest-23063]2023-03-05T09:51:49.729Z <Capabilities:null> Module Capabilities v22356 [latest-23063]2023-03-05T09:51:49.806Z <Capabilities:NOTICE> System capabilities loaded from core distribution, data version 23058 revision 1 [latest-23063]2023-03-05T09:51:49.849Z <Plugin:null> Module Plugin v22300 [latest-23063]2023-03-05T09:51:49.869Z <TimerBroker:null> Module TimerBroker v22283 [latest-23063]2023-03-05T09:51:49.878Z <Entity:null> Module Entity v22353 [latest-23063]2023-03-05T09:51:49.889Z <Controller:null> Module Controller v23044 [latest-23063]2023-03-05T09:51:49.926Z <default:null> Module Ruleset v22293 [latest-23063]2023-03-05T09:51:49.928Z <default:null> Module Rulesets v22146 [latest-23063]2023-03-05T09:51:49.943Z <GlobalExpression:null> Module GlobalExpression v22146 [latest-23063]2023-03-05T09:51:49.977Z <Predicate:null> Module Predicate v22345 [latest-23063]2023-03-05T09:51:49.987Z <AlertManager:null> Module AlertManager v22283 [latest-23063]2023-03-05T09:51:49.995Z <Rule:null> Module Rule v22345 [latest-23063]2023-03-05T09:51:50.004Z <GlobalReaction:null> Module GlobalReaction v22324 [latest-23063]2023-03-05T09:51:50.008Z <Engine:null> Module Engine v23001 [latest-23063]2023-03-05T09:51:50.019Z <httpapi:null> Module httpapi v23058 [latest-23063]2023-03-05T09:51:50.078Z <wsapi:null> Module wsapi v23053 [latest-23063]2023-03-05T09:51:50.080Z <app:NOTICE> Starting Structure... [latest-23063]2023-03-05T09:51:50.100Z <Structure:NOTICE> Structure#1 plugin ID influx disabled; skipping [latest-23063]2023-03-05T09:51:50.106Z <Structure:INFO> Structure#1 loading controller interface hass (HassController) [latest-23063]2023-03-05T09:51:50.210Z <HassController:null> Module HassController v23060 [latest-23063]2023-03-05T09:51:50.639Z <Structure:INFO> Structure#1 loading controller interface groups (DynamicGroupController) [latest-23063]2023-03-05T09:51:50.649Z <DynamicGroupController:null> Module DynamicGroupController v22313 [latest-23063]2023-03-05T09:51:50.659Z <Structure:INFO> Structure#1 loading controller interface reactor_system (SystemController) [latest-23063]2023-03-05T09:51:50.672Z <SystemController:null> Module SystemController v22306 [latest-23063]2023-03-05T09:51:50.680Z <Structure:INFO> Starting controller HassController#hass [latest-23063]2023-03-05T09:51:50.682Z <HassController:NOTICE> HassController#hass starting... [latest-23063]2023-03-05T09:51:50.691Z <Controller:INFO> HassController#hass loaded hass capabilities ver 22312 rev 2 format 1 [latest-23063]2023-03-05T09:51:50.715Z <Controller:INFO> HassController#hass loaded implementation data ver 23058 rev 1 format 1 [latest-23063]2023-03-05T09:51:50.715Z <Structure:INFO> Starting controller DynamicGroupController#groups [latest-23063]2023-03-05T09:51:50.728Z <Controller:NOTICE> Controller DynamicGroupController#groups is now online. [latest-23063]2023-03-05T09:51:50.728Z <Structure:INFO> Starting controller SystemController#reactor_system [latest-23063]2023-03-05T09:51:50.733Z <Controller:NOTICE> Controller SystemController#reactor_system is now online. [latest-23063]2023-03-05T09:51:50.877Z <HassController:INFO> HassController#hass device mapping data loaded; checking... [latest-23063]2023-03-05T09:51:50.881Z <HassController:WARN> HassController: implementation of capability input_select.selector does not provide attribute values [latest-23063]2023-03-05T09:51:50.884Z <HassController:NOTICE> HassController#hass connecting to ws://192.168.1.31:8123/api/websocket [latest-23063]2023-03-05T09:51:50.894Z <app:NOTICE> Starting HTTP server and API... [latest-23063]2023-03-05T09:51:50.901Z <httpapi:NOTICE> httpapi: starting HTTP service on port "8111" [latest-23063]2023-03-05T09:51:50.909Z <app:NOTICE> Starting Reaction Engine... [latest-23063]2023-03-05T09:51:50.910Z <Engine:INFO> Reaction Engine starting [latest-23063]2023-03-05T09:51:50.911Z <Engine:INFO> Checking rule sets... [latest-23063]2023-03-05T09:51:50.916Z <Engine:INFO> Checking rules... [latest-23063]2023-03-05T09:51:50.923Z <Engine:INFO> Data check complete; no corrections. [latest-23063]2023-03-05T09:51:50.938Z <Rule:NOTICE> rule-leu8xfe4 (rule-leu8xfe4 in First Rule Set) starting [latest-23063]2023-03-05T09:51:50.939Z <Engine:NOTICE> Reaction Engine running! [latest-23063]2023-03-05T09:51:50.939Z <Rule:NOTICE> rule-leu8xfe4 (rule-leu8xfe4 in First Rule Set) can't start -- rule is disabled [latest-23063]2023-03-05T09:51:50.952Z <httpapi:NOTICE> httpapi: listening [latest-23063]2023-03-05T09:51:50.981Z <app:NOTICE> Starting WSAPI... [latest-23063]2023-03-05T09:51:50.983Z <wsapi:NOTICE> wsapi: starting version 23053 [latest-23063]2023-03-05T09:51:51.080Z <Engine:INFO> [Engine]Engine#1 master timer tick, local time "3/5/2023 10:51:51 AM" (TZ offset 60 mins from UTC) [latest-23063]2023-03-05T09:51:51.119Z <HassController:NOTICE> HassController#hass connected, starting protocol [latest-23063]2023-03-05T09:51:51.127Z <httpapi:INFO> httpapi: API request from ::ffff:192.168.1.42: GET /api/v1/systime [latest-23063]2023-03-05T09:51:51.145Z <HassController:INFO> HassController#hass successful authentication with ws://192.168.1.31:8123; fetching initial data... [latest-23063]2023-03-05T09:51:51.155Z <HassController:INFO> HassController#hass Hass reports version "2023.3.0b5" location Maison timezone Europe/Paris state RUNNING safe_mode false [latest-23063]2023-03-05T09:51:51.245Z <HassController:NOTICE> HassController#hass no signature match for update.home_assistant_supervisor_update [latest-23063]2023-03-05T09:51:51.248Z <HassController:NOTICE> HassController#hass no signature match for update.home_assistant_core_update [latest-23063]2023-03-05T09:51:51.249Z <HassController:NOTICE> HassController#hass no signature match for update.terminal_ssh_update [latest-23063]2023-03-05T09:51:51.250Z <HassController:NOTICE> HassController#hass no signature match for update.file_editor_update [latest-23063]2023-03-05T09:51:51.251Z <HassController:NOTICE> HassController#hass no signature match for update.samba_backup_update [latest-23063]2023-03-05T09:51:51.252Z <HassController:NOTICE> HassController#hass no signature match for update.home_assistant_operating_system_update [latest-23063]2023-03-05T09:51:51.253Z <HassController:NOTICE> HassController#hass no signature match for sun.sun [latest-23063]2023-03-05T09:51:51.285Z <HassController:NOTICE> HassController#hass no signature match for calendar.calendrier [latest-23063]2023-03-05T09:51:51.413Z <HassController:NOTICE> HassController#hass no signature match for siren.piscine_siren [latest-23063]2023-03-05T09:51:51.419Z <HassController:NOTICE> HassController#hass no signature match for camera.portillon [latest-23063]2023-03-05T09:51:51.607Z <Controller:INFO> HassController#hass 0 dead entities older than 86400000s purged [latest-23063]2023-03-05T09:51:51.633Z <Controller:NOTICE> Controller HassController#hass is now online. [latest-23063]2023-03-05T09:51:51.634Z <DynamicGroupController:INFO> All controllers ready, setting up dynamic groups [latest-23063]2023-03-05T09:51:51.726Z <wsapi:INFO> wsapi: connection from ::ffff:192.168.1.42 [latest-23063]2023-03-05T09:51:55.510Z <wsapi:INFO> client "192.168.1.42#1" closed, code=1001, reason= [latest-23063]2023-03-05T09:51:55.815Z <httpapi:INFO> httpapi: API request from ::ffff:192.168.1.42: GET /api/v1/lang [latest-23063]2023-03-05T09:51:55.843Z <wsapi:INFO> wsapi: connection from ::ffff:192.168.1.42 [latest-23063]2023-03-05T09:51:56.849Z <httpapi:INFO> httpapi: API request from ::ffff:192.168.1.42: GET /api/v1/systime [latest-23063]2023-03-05T09:52:07.392Z <httpapi:INFO> httpapi: API request from ::ffff:192.168.1.42: GET /api/v1/systime---

      Log Portainer:

      NODE_PATH /opt/reactor:/opt/reactor/node_modules [latest-23063]2023-03-05T08:55:17.734Z <app:null> Reactor build latest-23063-c464b685 starting on v16.15.1 [latest-23063]2023-03-05T08:55:17.736Z <app:null> Process ID 1 user/group 0/0; docker; platform linux/arm64 #1595 SMP PREEMPT Wed Oct 26 11:07:24 BST 2022; locale (undefined) [latest-23063]2023-03-05T08:55:17.737Z <app:null> Basedir /opt/reactor; data in /var/reactor/storage [latest-23063]2023-03-05T08:55:17.738Z <app:null> NODE_PATH=/opt/reactor:/opt/reactor/node_modules [latest-23063]2023-03-05T08:55:17.875Z <Structure:null> Module Structure v22323 [latest-23063]2023-03-05T08:55:17.879Z <Capabilities:null> Module Capabilities v22356 [latest-23063]2023-03-05T08:55:18.004Z <Plugin:null> Module Plugin v22300 [latest-23063]2023-03-05T08:55:18.023Z <TimerBroker:null> Module TimerBroker v22283 [latest-23063]2023-03-05T08:55:18.032Z <Entity:null> Module Entity v22353 [latest-23063]2023-03-05T08:55:18.042Z <Controller:null> Module Controller v23044 [latest-23063]2023-03-05T08:55:18.079Z <default:null> Module Ruleset v22293 [latest-23063]2023-03-05T08:55:18.080Z <default:null> Module Rulesets v22146 [latest-23063]2023-03-05T08:55:18.096Z <GlobalExpression:null> Module GlobalExpression v22146 [latest-23063]2023-03-05T08:55:18.129Z <Predicate:null> Module Predicate v22345 [latest-23063]2023-03-05T08:55:18.139Z <AlertManager:null> Module AlertManager v22283 [latest-23063]2023-03-05T08:55:18.146Z <Rule:null> Module Rule v22345 [latest-23063]2023-03-05T08:55:18.156Z <GlobalReaction:null> Module GlobalReaction v22324 [latest-23063]2023-03-05T08:55:18.159Z <Engine:null> Module Engine v23001 [latest-23063]2023-03-05T08:55:18.171Z <httpapi:null> Module httpapi v23058 [latest-23063]2023-03-05T08:55:18.232Z <wsapi:null> Module wsapi v23053 [latest-23063]2023-03-05T08:55:18.358Z <HassController:null> Module HassController v23060 [latest-23063]2023-03-05T08:55:18.780Z <DynamicGroupController:null> Module DynamicGroupController v22313 [latest-23063]2023-03-05T08:55:18.803Z <SystemController:null> Module SystemController v22306```
      Multi-System Reactor
    • Evaluating variables redux

      CatmanV2

      Sorry for another dumb question. Migrating from Vera Alexa to HASS Vera TTS. MSR is on bare metal, Debian Bullseye version 23049

      I can get TTS from MSR and basic TTS from MSR which is great!

      Trying to get some of the variables I used to use though is stumping me.

      In the original MSR, I'd use:

      It is now ${{OutingDays}} days until we go to ${{OutingName}}. , Sleep well!

      for example, and that worked fine (I've not bothered to list the variables as I know the worked)

      If I use

      { "message":"It is now${{OutingDays}} days until we go to ${{OutingName}}. , Sleep well!", "data":{"type":"announce", "method":"speak"}, "target":["media_player.everywhere"] }

      In the data field of the hass service system call it doesn't evaluate the variables (Not really surprised)

      So might someone take mercy on me and give me a clue?

      TIA

      C

      Multi-System Reactor
    • Virtual Device for Vacations

      therealdb

      I'm back from a vacation and it was the first winter one with MSR.

      I have a special vacation mode that's auto-setting after the house is in away mode for at least 18 hours - and that's mostly OK. In this mode, lights are turned on/off automatically, some things are off to preverse powers, etc. Thermostats are automatically set at 17C unless there's solar power. That's mostly OK, except when you have to deal with winters and clouds on the day back home.

      Long story short: back from vacation, we found the house at 17C - wife wasn't impressed.

      Back in the luup days I had a special override, that I forgot to port to MSR, that was basically like this in MSR (coded on the fly):

      32298706-86f7-451e-9700-2baf5d5a23b6-image.png

      So, I could tell my system when I'm on vacation and have a last day flag to re-set the house to normal behavior before I'm back. It was just two strings variable in a virtual binary sensor.

      I don't want to code this in global expressions, so I'm wondering if it's possible to accomplish this with a Virtual Device, but I'm failing to visualize the correct answer and I'm here for inspiration for what others are doing to tackle this.

      I don't want to create 4 separate devices (start date, end date, status, last day) in order to keep it easy and I want to be able to change the start/end date from the UI, to simplify things. Any hint is appreciated 🙂

      Multi-System Reactor
    • Critical Disk Space Warning

      T

      I updated to the latest version of Reactor this morning. I run reactor (successfully) on a Raspberry PI 4 4GB with SSD 64GB. I also run Home Assistant in Docker. After updating I noticed a disk space critical error warning!

      9f4e1ea1-977a-481b-9806-d3d43a4eff04-image.png

      I have tried purging the docker install (docker image prune -a)

      I have rebooted the Raspberry PI also, and the error messages keep coming.

      I have the following disk space:

      58742ed7-e10d-4572-b380-0abda64f90b4-image.png

      How do I free up space?

      Any help would be appreciated.

      Multi-System Reactor
    • Is it possible to use a single reaction for multiple entities as variables?

      T

      Good morning,
      I'm trying to recreate some notifications I received on my old Vera system based upon House mode. I migrated from Vera to Home Assistant about 6 months ago, and all the automation I have set up are working great, however, I'm noticing that there were things that were once simple in Vera that are more involved in Home Assistant.

      In House Modes in Vera, there was a screen where I could select all the devices I wanted to be armed in various house modes. I recreated those house modes in Home Assistant very early on, but what I'm not getting now is notifications for various sensors. For instance, if the system is in Away mode, and interior motion is detected, I would get a Vera push notification on my phone. I've been setting these up one by one using haas>system --> x_haas_system.call_service, then setting the notify device and the message, one by one, but it's repetitious and tedious. For a few devices, like motion sensors on my ground floor, it's not a big deal, but now I'm looking at all the windows in my home, which have sensors on them.

      So, enough of the background thesis. Simply put, is there a way to have a group of devices ( like 16 different window sensors ) as an entity, and when they are tripped, send out a notification and state which of those sensors was tripped, all in a single rule?

      If I have to copy and edit 16 different rules, I'll do that, but I'd prefer a more elegant way where there is one rule to send out the notifications that tells me what was opened.

      Thanks for all your advice/help in advance.

      I'm running MSR latest-23049-1fd87c91 and Home Assistant 2023.2.5, Supervisor 2023.01.1, Operating System 9.5,

      BTW, @toggledbits, I noticed on the About screen for MSR it still shows copyright from 2022. I know you've released versions this year.

      Reactor (Multi-hub) latest-23049-1fd87c91 © 2020-2022 Kedron Holdings LLC, All Rights Reserved; Patrick Rigney (toggledbits), Principal Engineer.

      Multi-System Reactor
    • [solved-ish] Reset Reaction doesn't allow multiple Conditions in Groups

      G

      I'd like the "None deferred" Reset Reaction group to have multiple Conditions. Is this not possible?

      Running latest version of MSR, 23049-1fd87c91

      c9f1bb6c-c477-45cc-beab-783d1ad4fe05-image.png

      Multi-System Reactor
    • [Solved] Hubitat Hub Information Driver v3 and probe device

      S

      I have upgraded my Hubitat Hub Information Driver to v3 and after the latest MSR update latest-23028 MSR is working ok. The problem is when MSR probes the device it appears to affect the polling in the new Hub Information Device and its data does not update the data fields in Hubitat. If I remove the Hub Information Device from Maker API so MSR can't see it, The Hub information driver updates the data as expected in Hubitat. I added the device back into Maker API the same problem returns in Hubitat. I have tried to have MSR probe a different device by adding a different probe device and probe action in the reactor.yaml per the documentation but it appears then it still uses the Hub Information Device as the probe device instead of the one specified in the reactor.yaml. See Logs below. Is this the intended behavior to always use the Hub Information Driver if found and not use the device in the reactor.yaml file? Any recommendations on how to get MSR and the v3 of the driver to work correctly or can you see what I am doing wrong?

      [latest-23028]2023-02-11T23:27:50.471Z <Controller:NOTICE> Controller HassController#hass is now online. [latest-23028]2023-02-11T23:27:50.471Z <Rule:INFO> Internet Check (rule-l44qss4f in Home) starting evaluation; because entity-changed System#reactor_system>system [latest-23028]2023-02-11T23:27:50.471Z <Rule:INFO> MSR Update Version Available (rule-labweim2 in Notify) starting evaluation; because entity-changed System#reactor_system>system [latest-23028]2023-02-11T23:27:50.472Z <Rule:INFO> Internet Check (rule-l44qss4f in Home) trigger evaluation result is false (previously false) [latest-23028]2023-02-11T23:27:50.472Z <Rule:INFO> Internet Check (rule-l44qss4f in Home) evaluated; trigger state unchanged (false); rule state remains RESET [latest-23028]2023-02-11T23:27:50.472Z <Rule:INFO> MSR Update Version Available (rule-labweim2 in Notify) trigger evaluation result is false (previously false) [latest-23028]2023-02-11T23:27:50.472Z <Rule:INFO> MSR Update Version Available (rule-labweim2 in Notify) evaluated; trigger state unchanged (false); rule state remains RESET [latest-23028]2023-02-11T23:27:50.472Z <Rule:INFO> Internet Check (rule-l44qss4f in Home) evaluation complete [latest-23028]2023-02-11T23:27:50.472Z <Rule:INFO> MSR Update Version Available (rule-labweim2 in Notify) evaluation complete [latest-23028]2023-02-11T23:27:50.673Z <HubitatController:INFO> HubitatController#hubitat Maker API responded with 91 devices [latest-23028]2023-02-11T23:27:50.766Z <HubitatController:INFO> HubitatController#hubitat found 'Hub Information Driver v3' device #"481"; using for probe/health checks. [latest-23028]2023-02-11T23:27:50.780Z <Controller:INFO> HubitatController#hubitat 0 dead entities older than 86400000s purged [latest-23028]2023-02-11T23:27:50.780Z <Rule:INFO> Roku Pause (rule-l3nlrzu9 in Home) starting evaluation; because entity-changed BinarySensor#hubitat>519 [latest-23028]2023-02-11T23:27:50.780Z <Rule:INFO> Stairs Light Low Light (rule-kulslls9 in Living Room) starting evaluation; because entity-changed BinarySensor#hubitat>519 [latest-23028]2023-02-11T23:27:50.780Z <Rule:INFO> Porch Motion Extended check (rule-l3kr45m8 in Porch) starting evaluation; because entity-changed BinarySensor#hubitat>519 [latest-23028]2023-02-11T23:27:50.780Z <Rule:INFO> Porch Light Manual On (rule-kmtxw155 in Porch) starting evaluation; because entity-changed BinarySensor#hubitat>519

      Snippet from the reactor.yaml:

      # action_pace: 100 # warn_unresponsive: true # probe_device: hubitat>132 (not needed if Hub Information app installed) probe_device: hubitat>2 # probe_action: x_hubitat_Configuration.configure (not needed if Hub Information app installed) probe_action: x_hubitat_Configuration.configure # probe_action: x_hubitat_Refresh.refresh

      Synology Docker latest-23028
      Hubitat v2.3.4.139
      Hub Information Driver v3

      Multi-System Reactor
    • Home assistant Native Notification

      T

      @toggledbits

      Hey Patrick,
      I’m trying to figure out how to run Home Assistant native push notifications from MSR. I have MSR set up to arm my home alarm every night, and when all users are out of the home. I’ve used it for years through Reactor, and it works fine, but when I ran Vera and Reactor for Vera, I would get notifications from Vera when Vera went into different home modes. (Home, Away, Night, etc). I’ve set up Home Modes in HA as well, so I’m looking to get the native push notifications from the HA companion app (i.e., System in Home Mode, System Armed Away, or Good Night, etc) Can I set up notifications from MSR to use those native push notifications, or does that need to be done from HA exclusively?

      I’m running latest-23028-ddc3fb14 and Home Assistant 2023.1.7.

      Multi-System Reactor
    • Play music in random order with Sonos playlists/favorites?

      F

      Hi!
      I have MSR latest-23049-1fd87c91 and Home Assistant 2023.2.5.
      Every friday and saturday evening I have an active reaction/automation; if any adult is home and someone is in the kitchen, music starts playing from Sonos. That works great. I have different playlists and artist radios for each friday and saturday per month (1:st, 2:nd, ...) Some evenings when I don't play an artist radio, but an ordinary playlist, the songs are always played in the same order. I would like to randomize and stir things up. Is it possible, if so, how, to make Sonos play the songs from a Sonos playlist in random order? I always play playlists that is characterized as my Sonos favorites.
      Cheers!
      /Fanan

      Multi-System Reactor
    For those who registered but didn't received the confirmation email, please send an email to support@smarthome.community with the email you used

    Adding remotes, scene controllers as entities to MSR

    Multi-System Reactor
    4
    31
    549
    Loading More Posts
    • 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.
    • A
      Andr last edited by Andr

      EDIT: 2022.07.01

      So I will try to remake this thread to some kind of guide for future use, or in worst case a documentation of my failure. At least that could also be useful for letting someone know what didn't work...
      I have zero knowledge of programming, so every time I need to edit a config file in HomeAssistant or similar it requires a good portion of googletime and read, re-reading instructions.
      Also is english not my native language, so bear with me.

      Two goals!
      1: Get MSR to take notice (and then actions of course) of pressed buttons on remotes.
      2: Document what I do in hope I can help someone else in the future.

      I will use a Fibaro Keyfob as described below, but what I understand from Togglebits answers most type of remotes should work in similar ways.

      Original thread:
      Fibaro Keyfob support in MSR? (thru Hassio & Z-wave JS)
      Hi

      I just bought a Fibaro Keyfob FGKF-601 and plan to give this to my son so he can control some stuff in his own room. Primary some lightning and Sonos, maybe blinds in the future.

      As the noob I am it will, of course, not work as I expected.👶🏻

      The remote handle 1x, 2x, 3x clicks per button (six of them) and "release button"
      I thought that it would appear like some "scene controller" in HA and that I could make Rules in MSR depending on what scene-entety that was triggered.
      So is not the case, and if that is because of HA, Z-wave JS or MSR I have no idea.
      I found a HA Blueprint that works in HA, but of course I would prefer to keep all automation in MSR.
      I guess a workaround could be using HA virtual switches "Helpers" that I suppose will come up as an on/off trigger in MSR, but before going this way I would like to check with the wisdom of your guys if there is a better way of doing this.

      I am using:
      MSR 22168 on windows.
      Home Assistant Core 2022.6.7
      Home Assistant Supervisor 2022.05.3
      Home Assistant OS 7.6
      Z-Wave JS version: 0.1.64

      1 Reply Last reply Reply Quote 0
      • toggledbits
        toggledbits last edited by toggledbits

        OK. We're going to have to rush to look at this, as I'm going on a long vacation in a couple of days.

        Go ahead and open a PR in Mantis, and with it post your hass_states.json file (in logs) as an attachment (do not copy-paste the text of it). I also need the entity IDs (Home Assistant's) for the device in question.

        In addition, you haven't "shown the work" as is required for posts here. I need you to show the entities (Entities page, attributes open) that MSR has produced for its version of Home Assistant's entities, as well as any and all rules you've created to try to use them (Rule Status views, not Rule Editor editor). You can also attach all of that to the PR. The guidelines and recommendations for posts are in a pinned topic in this category.

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

        A 1 Reply Last reply Reply Quote 0
        • A
          Andr @toggledbits last edited by

          @toggledbits

          Reported in Mantis now.
          Have a great vacation 🙂

          1 Reply Last reply Reply Quote 0
          • toggledbits
            toggledbits last edited by toggledbits

            Re: PR 0000326:

            The way Home Assistant handles keyfobs is unlike the old Vera model you are used to. There is by default no "device" with variables indicating the state of the buttons. Home Assistant sends events when the buttons are pressed, but it doesn't set values on entities.

            In order to use these devices, you need to follow the configuration instructions here: https://reactor.toggledbits.com/docs/HassController/#handling-home-assistant-events

            What you will be doing is effectively telling HassController to create and maintain a virtual (Reactor) entity to track button state, and use the events sent by Home Assistant to map to state values on that entity. Since Reactor cannot know in advance what events are sent, there is no way for it to automatically "guess" these entities and create them; you've got to do the work. You will be editing/extending the configuration for your HassController in reactor.yaml.

            To help you find the events you need to build config for, add log_events: true to the config: section for your HassController and restart. Then play with your buttons, and observe what is logged to logs/hass_events.log. There will probably be a lot of data, so don't leave this setting on for too long, just for your research. Once you've identified the events sent by the device, you can build the configuration for the event_targets subsection as described in the linked docs.

            Let's keep the conversation here, instead of on the PR, as it's not looking like a bug or device support request at the moment, and the process of getting the config right will probably require some back and forth that would be educational for all to have documented here.

            Here's an example I use for testing... I have an Amcrest camera supported by Hass that sends events when it detects audio (and motion, etc., but this is just audio to keep it simple):

            It logs this event when audio is first detected:

            2022-06-28T16:29:23.885Z amcrest {"id":1656433623424,"type":"event","event":{"event_type":"amcrest","data":{"camera":"Cam2","event":"AudioMutation","payload":{"Code":"AudioMutation","action":"Start","index":"0"}},"origin":"LOCAL","time_fired":"2022-06-28T16:29:23.879133+00:00","context":{"id":"01G6NJASH7Y06R2AM49E7MF5YK","parent_id":null,"user_id":null}}}
            

            ...and this event when audio is no longer detected:

            2022-06-28T16:29:28.301Z amcrest {"id":1656433623424,"type":"event","event":{"event_type":"amcrest","data":{"camera":"Cam2","event":"AudioMutation","payload":{"Code":"AudioMutation","action":"Stop","index":"0"}},"origin":"LOCAL","time_fired":"2022-06-28T16:29:28.294575+00:00","context":{"id":"01G6NJAXV6AJAXPDAX93SJ8ZKT","parent_id":null,"user_id":null}}}
            

            For your review, I would copy-paste your logged data into jsonlint.com to format it and make it more readable. Here's the Start event, reformatted:

            {
            	"id": 1656433623424,
            	"type": "event",
            	"event": {
            		"event_type": "amcrest",
            		"data": {
            			"camera": "Cam2",
            			"event": "AudioMutation",
            			"payload": {
            				"Code": "AudioMutation",
            				"action": "Start",
            				"index": "0"
            			}
            		},
            		"origin": "LOCAL",
            		"time_fired": "2022-06-28T16:29:23.879133+00:00",
            		"context": {
            			"id": "01G6NJASH7Y06R2AM49E7MF5YK",
            			"parent_id": null,
            			"user_id": null
            		}
            	}
            }
            

            The event section the part to focus on, and everything in the config is relative to it. From this, I built this config to drive a binary sensor that's true when my Amcrest camera detects sound:

            controllers:
              - id: hass
                enabled: true
                implementation: HassController
                name: Hass System
                config:
                  source: 'ws://192.168.0.10:8123'
                  access_token: "X.X.X"
                  log_events: true
                  event_targets:
                    "cam2_audio":
                      capabilities: ['binary_sensor']
                      primary_attribute: binary_sensor.state
                      events:
                        - event:
                            event_type: amcrest
                            data:
                              camera: "Cam2"
                              event: "AudioMutation"
                          response:
                            "binary_sensor.state":
                              from: "event.data.payload.action"
                              map:
                                Start: true
                                Stop: false
            

            A quick tour of that: you're telling HassController to build an entity with ID cam2_audio that has (only) binary_sensor capability, and binary_sensor.state as its primary attribute. From there, it looks for just one event: something with an event_type of amcrest, and data.camera equal to Cam2, and data.event equal to AudioMutation. That's what the events: section is describing. The response section that follows tells HassController what to do when it finds a matching event: set binary_sensor.state on the entity using the value of event.data.payload.action, and mapping the word Start to boolean true, and Stop to boolean false.

            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 Reply Quote 0
            • A
              Andr last edited by

              So, first steps taken - Logging events from HomeAssistant.

              First enable logging by adding marked line in reactor\config\reactor.yaml
              78392197-2613-4579-b354-99083d01ab73-image.png And of course edit false to TRUE when for logging to start, I am done with that part now 🙂

              A little tip.
              I had my file explorer in reactor\logs folder
              So to don't get to much data in the hass_events.log i made a copy of the file as soon I had send the different commands for one of the buttons.
              So now i have one log file for everyone of my six buttons, and every button handle 1x, 2x, 3x click + hold so it feels some what readable.

              1 Reply Last reply Reply Quote 1
              • A
                Andr last edited by

                I am reading about MSR abilities, and wonder which one is best in my scenario.

                Standard Capabilities - Reactor - Multi-Hub Automation

                I am thinking about "button" as it should be only one entity for each button on the remote, if I have got it right?

                Any thoughts?

                button

                Used when the device implements the behavior of a pressable button.

                Attributes:

                state — (string) last button state: single (pressed once), double (double-press), triple (triple-press), 4 (four-press), 5 (five-press), hold, release, long, unknown. Not all Controller instances will (or are required to) implement all values; this is dependent on the capabilities of the underlying hub and the device itself.
                
                toggledbits 1 Reply Last reply Reply Quote 0
                • toggledbits
                  toggledbits @Andr last edited by

                  @andr great choice!

                  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 Reply Quote 0
                  • A
                    Andr last edited by Andr

                    ===group

                    ===So, a little report of a night of testing what does not work.

                    Read @toggledbits tips above together with the manual about Capabilites and put this in my reactor.yaml:

                        config:
                          source: ':-D'
                          access_token: ':-)'
                          log_events: false
                              # Additions to config section for Lukas Fibaro Keyfob:
                          event_targets:    # this section starts the event-receiving entities
                            "Keyfob_fyrkant":      # Assign an ID to your entity; each entity must have a unique ID
                              name: Lukas Keyfob Fyrkant   # This is optional but recommended, so you have a friendly name
                              capabilities: ['button'] # define an array of capabilities to be modified by the event 
                               attributes:
                                 state:
                                   type: string
                                   values:
                                     - 'single'
                                     - 'double'
                                     - 'triple'
                                     - 'hold'
                                     - 'release'
                                 since:
                                   type: int, timestamp
                              events:  # define an array of events that modify capability attributes on the entity
                              - event:  # start of an event; each element of the events array begins this way
                                  event_type: zwave_js_value_notification
                                  data:  # optional section, if further matching to the event data is required
                                    property: "Scene 001" # Square button
                                    value: "KeyPressed"   # Square button event
                                response:  # begin the (required) response section for handling the event
                                  "button.state":  # an attribute that the event modifies.
                                    expr: "single"   # expression to get attribute value from event data
                                    from: "event.data.property.value"  # dot-reference expression to pull value from event message
                                    map:                    # optional, map to modify value
                                      string: 'single'   # if value is value_in, it is mapped to new_value 
                                  # repeat "capability.attribute" section for all attributes modified by the event
                          #    - event:  # start of next event for this entity, same form as above
                    

                    This did not work at all, Reactor would not even start 😲
                    Tinkered with a bit, but no luck.
                    Anyone see if it is something simple to fix or is this beyond saving?

                    Testing something simpler, just to see that I can create some kind of Hass Entity, I copied @toggledbits motion_sensor example above and made some adjustments.

                          event_targets:
                            "knapp_fyrkant":
                              capabilities: ['binary_sensor']
                              primary_attribute: binary_sensor.state
                              events:
                                - event:
                                    event_type: zwave_js_value_notification
                                    data:
                                      property: "Scene 001"
                                      value: "KeyPressed"
                                  response:
                                    "binary_sensor.state":
                                      from: "event.data.property.value"
                                      map:
                                        KeyPressed: true
                    

                    A tiny, little bit, closer... Reactor starts again and I got myself a fresh new binary sensor "knapp_fyrkant"
                    But I am guessing something is wrong in data and/or response section because the "sensor" doesn't changes to true.

                    I dont think I really follow how event data and response from relate. I need to sleep on this

                    bf818829-c121-4d92-9e22-c2feed752ccd-image.png

                    from: "event.data.payload.action"
                    

                    Here is info from hass event log, for pressing the Square button 1x and 2x.

                    2022 - 06 - 29 T21: 15: 44.500 Z zwave_js_value_notification {
                    	"id": 1656536987817,
                    	"type": "event",
                    	"event": {
                    		"event_type": "zwave_js_value_notification",
                    		"data": {
                    			"domain": "zwave_js",
                    			"node_id": 15,
                    			"home_id": 3523230191,
                    			"endpoint": 0,
                    			"device_id": "4cfedde34f701262785f27ac571a7f80",
                    			"command_class": 91,
                    			"command_class_name": "Central Scene",
                    			"label": "Scene 001",
                    			"property": "scene",
                    			"property_name": "scene",
                    			"property_key": "001",
                    			"property_key_name": "001",
                    			"value": "KeyPressed",
                    			"value_raw": 0
                    		},
                    		"origin": "LOCAL",
                    		"time_fired": "2022-06-29T21:15:43.082064+00:00",
                    		"context": {
                    			"id": "01G6RN3S3ASSBZ33RYPHND6QG8",
                    			"parent_id": null,
                    			"user_id": null
                    		}
                    	}
                    }
                    2022 - 06 - 29 T21: 15: 50.890 Z zwave_js_value_notification {
                    	"id": 1656536987817,
                    	"type": "event",
                    	"event": {
                    		"event_type": "zwave_js_value_notification",
                    		"data": {
                    			"domain": "zwave_js",
                    			"node_id": 15,
                    			"home_id": 3523230191,
                    			"endpoint": 0,
                    			"device_id": "4cfedde34f701262785f27ac571a7f80",
                    			"command_class": 91,
                    			"command_class_name": "Central Scene",
                    			"label": "Scene 001",
                    			"property": "scene",
                    			"property_name": "scene",
                    			"property_key": "001",
                    			"property_key_name": "001",
                    			"value": "KeyPressed2x",
                    			"value_raw": 3
                    		},
                    		"origin": "LOCAL",
                    		"time_fired": "2022-06-29T21:15:49.475286+00:00",
                    		"context": {
                    			"id": "01G6RN3ZB3BYRPDZMM9S6CMRZB",
                    			"parent_id": null,
                    			"user_id": null
                    		}
                    	}
                    }
                    

                    Just noticed that I have mixed up "property" with "label" so I think I start there tomorrow.
                    Good night!

                    1 Reply Last reply Reply Quote 0
                    • toggledbits
                      toggledbits last edited by toggledbits

                      This did not work at all, Reactor would not even start

                      Not surprised it wouldn't start... it's not properly formatted. Two errors: the attributes line is incorrectly indented (and therefore so is everything underneath it). Second issue, it shouldn't even be there. If it was properly indented, it would be ignored, because the code isn't looking for it. The definition of the button capability is already determined by system files; you don't need to repeat it here.

                      As for the rest of it, the - event is also not properly indented, although this may not make it choke.

                      Your property value in the event section won't match anything. That value doesn't appear in the example data you posted. It does match label, however, but I don't recommend using that. Change the property value to scene and add property_key with value 001. You probably also want to match the specific device, so that if you have more than one of these, these rules apply only to this one; do this by matching node_id.

                      Your response has a few issues. Traversing your sample data, the action field is event.data.value not event.data.property.value. The expr line shouldn't be there, since you're using map to remap the string values grabbed by from. The word string in the map data should be the word KeyPressed (an actual string you are looking for) with the value single (the string you want it to be, which matches the definition of the button.state attribute). If there are other possible strings that map to double, triple, hold and release, those should be added to the map; since you show in your sample data a 2x press, I added that (see below).

                      Then, to make sure button.since is correctly updated (modified for each event), you need to specify it as an attribute to be updated as part of the event response, and in this case we will use an expression to set it to the current time.

                      Correcting all that, I give you this:

                            event_targets:    # this section starts the event-receiving entities
                              "Keyfob_fyrkant":      # Assign an ID to your entity; each entity must have a unique ID
                                name: Lukas Keyfob Fyrkant   # This is optional but recommended, so you have a friendly name
                                capabilities: ['button']  # define an array of capabilities to be modified by the event 
                                events:  # define an array of events that modify capability attributes on the entity
                                  - event:  # start of an event; each element of the events array begins this way
                                      event_type: zwave_js_value_notification
                                      data:  # optional section, if further matching to the event data is required
                                        node_id: 15
                                        property: "scene" # Square button
                                        property_key: "001"
                                    response:  # begin the (required) response section for handling the event
                                      "button.state":  # an attribute that the event modifies.
                                        from: "event.data.value"  # dot-reference expression to pull value from event message
                                        map:                    # optional, map to modify value
                                          KeyPressed: 'single'   # if value is value_in, it is mapped to new_value
                                          KeyPressed2x: 'double'
                                        map_unmatched: 'unknown'
                                      "button.since":
                                        expr: "time()"
                      

                      I highly recommend using a syntax-highlighting YAML editor. Check out https://onlineyamltools.com/edit-yaml

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

                      A 1 Reply Last reply Reply Quote 0
                      • A
                        Andr @toggledbits last edited by Andr

                        Many thanks!
                        will be digging in to this later tonight again.

                        A few follow up questions to check that I understand things correctly.

                        capabilities: ['button']
                        

                        In frase above, somewhere in MSR code, the word 'button' is equal to what I tried to specify with this section and that why that was unnecessary?
                        ```
                        attributes:

                                 state:
                        
                                   type: string
                        
                                   values:
                        
                                     - 'single'
                        
                                     - 'double'
                        
                                     - 'triple'
                        
                                     - 'hold'
                        
                                     - 'release'
                        
                                 since:
                        
                                   type: int, timestamp
                        
                        
                        About how to fill the 'form' row, in your example you use
                        

                        from: "event.data.payload.action"

                        
                        And I assume that this comes from this marked words? 
                        ![b80fc4eb-315e-4ba0-af3b-ffe5f470ebc6-image.png](/assets/uploads/files/1656701263037-b80fc4eb-315e-4ba0-af3b-ffe5f470ebc6-image.png) 
                        
                        I starting to think that yaml file should be read somewhat like a folder tree, would that make sense?
                        So, in your example, if the 'start action' was like a .bat-file the way to think about the Form row the adress would be **event\data\payload\action**
                        Please say I am on the right track 😂🙏
                        1 Reply Last reply Reply Quote 0
                        • A
                          Andr last edited by

                          Sorry for the messy post above, writing from my phone 😳

                          1 Reply Last reply Reply Quote 0
                          • toggledbits
                            toggledbits last edited by

                            Yeah, you need to fix it. It should not be left like this, as the discussion may be read by others in future, and I can't follow it (also on my phone), and likely nobody would bother

                            From what I can see, I don't know why you're stuck on using payload in your from value, that word/key does not appear in your event data.

                            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 Reply Quote 0
                            • A
                              Andr last edited by Andr

                              Ok, for some reason i can't make the mess go away in earlier post, so double post...

                              Many thanks!
                              will be digging in to this later tonight again.

                              A few follow up questions to check that I understand things correctly.

                              capabilities: ['button']
                              

                              In frase above, somewhere in MSR code, the word 'button' is equal to what I tried to specify with this section and that why that was unnecessary?

                              attributes:
                              
                                          state:
                              
                                            type: string
                              
                                            values:
                              
                                              - 'single'
                              
                                              - 'double'
                              
                                              - 'triple'
                              
                                              - 'hold'
                              
                                              - 'release'
                              
                                          since:
                              
                                            type: int, timestamp
                              

                              About how to fill the 'form' row, in your example you use

                              from: "event.data.payload.action"
                              

                              And I assume that this comes from this marked words?

                              907c3188-47d3-4cac-9e5e-d9660a3eedae-image.png

                              I starting to think that yaml file should be read somewhat like a folder tree, would that make sense?
                              So, in your example, if the 'start action' was like a .bat-file the way to think about the Form row the adress would be event\data\payload\action
                              Please say I am on the right track 😂🙏

                              1 Reply Last reply Reply Quote 0
                              • A
                                Andr last edited by

                                Ok, some progress thanks to @toggledbits of course.

                                Copied in his code in reactor.yaml and that worked fine of course. Also added a line for 3x click and that worked also.

                                event_targets:    # this section starts the event-receiving entities
                                        "Keyfob_fyrkant":      # Assign an ID to your entity; each entity must have a unique ID
                                          name: Lukas Keyfob Fyrkant   # This is optional but recommended, so you have a friendly name
                                          capabilities: ['button']  # define an array of capabilities to be modified by the event 
                                          events:  # define an array of events that modify capability attributes on the entity
                                            - event:  # start of an event; each element of the events array begins this way
                                                event_type: zwave_js_value_notification
                                                data:  # optional section, if further matching to the event data is required
                                                  node_id: 15
                                                  property: "scene" # Square button
                                                  property_key: "001"
                                              response:  # begin the (required) response section for handling the event
                                                "button.state":  # an attribute that the event modifies.
                                                  from: "event.data.value"  # dot-reference expression to pull value from event message
                                                  map:                    # optional, map to modify value
                                                    KeyPressed: 'single'   # if value is value_in, it is mapped to new_value
                                                    KeyPressed2x: 'double'
                                                    KeyPressed3x: 'tripple'
                                

                                But, still, I can't for some reason really understand the code and how different parts relate to each other.😖

                                In 'event data' I was expecting to fill out in the 'label' field from hass_event log because that is an uniq value for each one of the six buttons, and then the 'value' field that identifies the number of keypresses on this specific button.
                                In my mind that would give a uniq combination for MSR to identify.
                                I did (with very low hopes) tried it also

                                event_targets:    # this section starts the event-receiving entities
                                        "Keyfob_fyrkant":      # Assign an ID to your entity; each entity must have a unique ID
                                          name: Lukas Keyfob Fyrkant   # This is optional but recommended, so you have a friendly name
                                          capabilities: ['button']  # define an array of capabilities to be modified by the event 
                                          events:  # define an array of events that modify capability attributes on the entity
                                            - event:  # start of an event; each element of the events array begins this way
                                                event_type: zwave_js_value_notification
                                                data:  # optional section, if further matching to the event data is required
                                                  node_id: 15
                                                  label: "Scene 001" # Square button
                                                  value: "KeyPressed"
                                                  value: "KeyPressed2x"
                                                  value: "KeyPressed3x"
                                              response:  # begin the (required) response section for handling the event
                                                "button.state":  # an attribute that the event modifies.
                                                  from: "event.data.value"  # dot-reference expression to pull value from event message
                                                  map:                    # optional, map to modify value
                                                    KeyPressed: 'single'   # if value is value_in, it is mapped to new_value
                                                    KeyPressed2x: 'double'
                                                    KeyPressed3x: 'tripple'
                                

                                and of course: 💩 💩 💩
                                Reactor did not start.

                                I would really like to get a grip why this is what is needed in event data

                                                  property: "scene" # Square button
                                                  property_key: "001"
                                

                                Meanwhile, as @toggledbits code of course worked I did the simplest rule with an action, toggle a lamp on off.

                                7e171983-e3cc-4c2f-825b-62db8219b87e-image.png

                                Here I expected (or hoped) to find triggers for every combination of button presses.
                                For now Square: 1x, 2x, 3x
                                But I guess I need to set the 'button.state' to 'contains' 'single' 'double' etc.
                                But whatever event state MSR caught, it doesn't resest.
                                When MSR start the value is NULL, but after a click it holds that value, for example 'single', and I expect it to reset immediately after the 'single' event have passed by.

                                So, this is it for today. It is friday night and I am happy to say that I think my wife misses me😉
                                Have a great weekend everyone.

                                1 Reply Last reply Reply Quote 0
                                • toggledbits
                                  toggledbits last edited by toggledbits

                                  But, still, I can't for some reason really understand the code and how different parts relate to each other.

                                  The event section is a filter to look for a specific event. In your version, you have multiple value keys, which is not allowed. Also, you don't want to filter by value, just accept them all and let the response section deal with them. I recommended against using label because it's changeable in ZWave, whereas the property and property_key values are defined by the device and will not change.

                                  So again, the event section is the filter that determines what incoming event will match, and what will not.

                                  Once an event matches, the response section determines what to do with it. Each component of the response section is an attribute of an assigned capability and the instructions to set it. In the case of button.state, my version says grab the value from event.data.value, and then, map that value from the device's string to one of Reactor's accepted capability/attribute value. Setting button.since completes the "contract" of the button capability (i.e. makes it work like similar uses of button in other devices and related to other controllers). I'm not sure I can explain it more simply than that.

                                  It's really just a "if you find this... do this" configuration. The effect is that if a matching button event is detected by the event section, the response section will interpet the value and map it to a Reactor-compatible value to place on the entity attribute button.state, and also update the button.since timestamp. Thus the since timestamp changes every time a button press event is received, but state may not change, because it's possible to press a button once, wait 15 seconds, and press the same button again, which will result in the value single being persistent on the state attribute and not changing. So to detect an event, you have to check both state and since (and this is consistent with all button behavior in Reactor).

                                  To test button state in a rule, you test button.state for what you want in that rule (equals single, double, triple), and you AND that test with a button.since changes (from any to any). That will send a very short pulse when a matching button press occurs. While testing, to make sure you can see it, add a "sustained for" delay on the changes condition of a few seconds (keep it short), and you'll more easily see what's going on in the status view. Make sure to remove the delay when you're done playing (keeping it will dampen response to buttons when, for example, a single press is done repeatedly within the delay period).

                                  Example here: https://smarthome.community/assets/uploads/files/1646184651741-cbff18f3-ce2d-4ecd-ae65-2554f77a4a80-image.png

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

                                  A 1 Reply Last reply Reply Quote 0
                                  • A
                                    Andr @toggledbits last edited by

                                    @toggledbits

                                    Ok, I understood it at first that I needed to specify more stuff in the event section, like 'value' so it then could be mapped to right command, otherwise it would not be known.

                                    But nodeid, property and property key is just to filter out right device, all the other data is still there?
                                    And in that case, I guess that it would work to skip event data and just mapping commands to MSR functions? (Of course nothing else can send 'Keypressed' command because that would be messy)

                                    toggledbits 1 Reply Last reply Reply Quote 0
                                    • toggledbits
                                      toggledbits @Andr last edited by

                                      @andr said in Adding remotes, scene controllers as entities to MSR:

                                      But nodeid, property and property key is just to filter out right device, all the other data is still there?

                                      That's right. The event section only filters using the data; it does not modify the data or transform it in any way. Whatever is received in the event structure stays as received.

                                      @andr said in Adding remotes, scene controllers as entities to MSR:

                                      And in that case, I guess that it would work to skip event data and just mapping commands to MSR functions?

                                      I'm not sure what you mean by this. I don't think you want to skip anything. You should filter the incoming events, to make sure that you are handling the right events from the right device. So you need to be specific in the event filter to both the event type and the sending device.

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

                                      A 1 Reply Last reply Reply Quote 0
                                      • A
                                        Andr @toggledbits last edited by

                                        @toggledbits said in Adding remotes, scene controllers as entities to MSR:

                                        @andr said in Adding remotes, scene controllers as entities to MSR:

                                        And in that case, I guess that it would work to skip event data and just mapping commands to MSR functions?

                                        I'm not sure what you mean by this. I don't think you want to skip anything. You should filter the incoming events, to make sure that you are handling the right events from the right device. So you need to be specific in the event filter to both the event type and the sending device.

                                        That was just me trying to understand how stuff is related, not something I would try out.
                                        For example, in my system there is only one device that are sending "Keypressed3x" and that can not be mixed up with anything else. In that case if I had such uniq string to map to MSR command 'triple' I could skip the filtering in event section?

                                        Again, this is just for my own curiosa trying to learn something new.

                                        toggledbits 1 Reply Last reply Reply Quote 0
                                        • A
                                          Andr last edited by toggledbits

                                          Anyway, some kinds of sucess the last nights 👍

                                          All buttons are configured and seems to work so far.

                                          The final reactor.yaml looks like this (just showing the first two buttons as it is just the entity name and 'property key' that differ )

                                          event_targets:    # this section starts the event-receiving entities
                                                  "Keyfob_Fyrkant":      # Assign an ID to your entity; each entity must have a unique ID
                                                    name: Lukas Keyfob Fyrkant   # This is optional but recommended, so you have a friendly name
                                                    capabilities: ['button']  # define an array of capabilities to be modified by the event 
                                                    events:  # define an array of events that modify capability attributes on the entity
                                                      - event:  # start of an event; each element of the events array begins this way
                                                          event_type: zwave_js_value_notification
                                                          data:  # optional section, if further matching to the event data is required
                                                            node_id: 15
                                                            property: "scene" # Square button
                                                            property_key: "001"
                                                        response:  # begin the (required) response section for handling the event
                                                          "button.state":  # an attribute that the event modifies.
                                                            from: "event.data.value"  # dot-reference expression to pull value from event message
                                                            map:                    # optional, map to modify value
                                                              KeyPressed: 'single'   # if value is value_in, it is mapped to new_value
                                                              KeyPressed2x: 'double'
                                                              KeyPressed3x: 'tripple'
                                                              KeyHeldDown: 'hold'
                                                              KeyReleased: 'release'
                                                          "button.since":  # an attribute that the event modifies.
                                                            from: "event.context.id"  # dot-reference expression to pull value from event message
                                                  "Keyfob_Ring":      # Assign an ID to your entity; each entity must have a unique ID
                                                    name: Lukas Keyfob Ring   # This is optional but recommended, so you have a friendly name
                                                    capabilities: ['button']  # define an array of capabilities to be modified by the event 
                                                    events:  # define an array of events that modify capability attributes on the entity
                                                      - event:  # start of an event; each element of the events array begins this way
                                                          event_type: zwave_js_value_notification
                                                          data:  # optional section, if further matching to the event data is required
                                                            node_id: 15
                                                            property: "scene" # Circle button
                                                            property_key: "002"
                                                        response:  # begin the (required) response section for handling the event
                                                          "button.state":  # an attribute that the event modifies.
                                                            from: "event.data.value"  # dot-reference expression to pull value from event message
                                                            map:                    # optional, map to modify value
                                                              KeyPressed: 'single'   # if value is value_in, it is mapped to new_value
                                                              KeyPressed2x: 'double'
                                                              KeyPressed3x: 'triple'
                                                              KeyHeldDown: 'hold'
                                                              KeyReleased: 'release'
                                                          "button.since":  # an attribute that the event modifies.
                                                            from: "event.context.id"  # dot-reference expression to pull value from event message
                                          

                                          A thought that crossed my mind recently, to maybe expand the functions of this little remote in the future.
                                          Fibaro have built in a possibilty for 6 extra scenes that activates after a sequence of button presses I specify. I have not activated this yet as I don't think I really need it, but what I realised is that it probably quite easy to add a lot of differnt button sequences in MSR as long or short that I want?

                                          Next part is to get some rules and actions set-up that can use the remote.

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            Andr last edited by Andr

                                            Seems to work like a charm 😁

                                            Started out with a few rules to let him control a Sonos in his room.
                                            This one is for starting his favorite playlist, when it not is bedtime and that playlist isn't already playing.

                                            c9770192-464f-4eb0-854f-9348e4b5b494-image.png

                                            1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Welcome. If you’d like to participate in the discussion, rather than just read, then you can join the forum. As a member, you can interact with others here to share your experience and ask the questions you need answered.

                                            Powered by NodeBB | Contributors
                                            Hosted freely by PointPub Media Communications Inc. | Contact us