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.
M

mgvra

@mgvra
Single protocol?
CatmanV2C
Another question to the hive mind. Prompted by the fact that I lost yet another z-wave device over the weekend due to a power issue. It looks like z-way server is reporting another device failed (although it's working fine) and message queue is far too long IMHO. Also the failed device has been removed in the expert interface, but still there in the 'normal' one. Sigh. Currently I have z-wave, Tuya, thinking about Zigbee.... Does anyone use one single protocol for everything? Right now I'm feeling that as the z-wave stuff dies, I'm just gonna replace it with something else.... C
General Discussion
HDMI oddness
CatmanV2C
Not really Smart Home stuff, but going to ask as we have smart people... Bear with me on this one. Asking here because of the font of knowledge! For many eek years I have had a Virgin V6 box and a Raspberry Pi running Kodi connected to my TV through a cheap *** HDMI switch. It all worked beautifully but the absolutely critical thing was that the TV remote passed the signals back to the Pi to allow remote control of Kodi. Couple of changes of late: Installed a soundbar on the TV using the ARC (audio return channel). That then turns the soundbar on and off when the TV turns on and off and the TV volume control controls the soundbar volume direct. Everything continues to work Upgraded the software of the Tivo box to Virgin 360. This is literally software only. You get sent a snacky new Bluetooth remote hit 'upgrade' on the screen and off it goes. Now, things are not playing well. Typically when I turn on to watch Kodi the soundbar comes on (as it should) but the TV either puts out sound through its own speakers and the soundbar, or just the soundbar. It's not possible to control the volume of the soundbar through the TV. Also it's not longer possible to control Kodi using the TV remote. If I turn the TV360 box off, i.e. power it down, before turning on to watch Kodi, everything is fine. This makes little to no sense to me. My assumption is that the cheap *** HDMI switch is getting something from the TV360 connection that it didn't used to get when the software was Tivo and that's screwing up the HDMI communications. I'm upgrading the switch to something a little less chap, but wondered if anyone could validate my theory at all? TIA C
General Discussion
Any thoughts on which is better
CatmanV2C
Obviously a quiet forum, but perhaps it's time I'm looking at rolling Zigbee into my system, in large part for the Aqara FP300 presence sensors which seem to finally provide a solution to if the wasp is actually in the box. My current set up is as follows: One Debian VM on Synology NAS running: Z-wave Server Open Luup Multi system reactor HA bridge Mosquito MQQT broker This machine has a UZB Z-wave stick connected via the USB port on the NAS Another HAOS VM on the same NAS running HAOS I've got some older Z-wave stuff that I keep around until it fails. I have some Tuya stuff integrated in HA My thought was to get either a SMLIGHT SLZB-06M or an Aqara Hub M2 Integrate them via Zigbee2MQQT (running on the Debian machine) and then expose them in HA so I can continue to automate in MSR. Thoughts on which of those devices wold be preferable long term. Both are POE capable which is good. It also appears I could add a USB dongle to the NAS and expose it to the HAOS machine. Any thoughts from the assembled experts here? TIA C
Zigbee
Reactor Loading Screen Safari
S
Topic thumbnail image
Multi-System Reactor
Constraints states visually do not match actual
S
Topic thumbnail image
Multi-System Reactor
Oh the joy of pairing
CatmanV2C
When I remember the old days Just added a new Tuya plug (OK so it's cloud) Start to finish, visible in HA and MSR < 30 seconds... C
Vera
Home Assistant Connect ZWA-2 & ZBT-2
therealdbT
Topic thumbnail image
Hardware
[MSR] Feature request: For Each action on arrays/groups
therealdbT
Topic thumbnail image
Multi-System Reactor
[Solved] Error: Command timeout
G
at _ClientAPI._commandTimeout (http://192.168.1.100:8111/client/ClientAPI.js:807:179 Seeing this randomly when returning to open browser tab after being away awhile. Once, maybe twice a day. "What did you do to trigger it?" Literally nothing, just walked away and returned and there it was. Actions taken in reasonably close proximity to this particular instance of it popping up: I'd restarted the MSR container in Portainer. I'll try to grab some logs here shortly.
Multi-System Reactor
Issue with MSR UI becoming unresponsive
S
I'm having an issue with MSR's UI being very unresponsive. It started happening a couple days ago and I didn't make any changes that would have caused this except adding some meross lan devices in HA. When I go into an entity action and use the search functionality, it usually will start filtering and then get to a place after a few letters are entered where it will take 30 seconds or more (sometimes minutes) for the UI to show what I am typing. During this time MSR ui is completely unresponsive. I've tried multiple browsers and multiple computers. HA and MSR are both deployed in docker. I have run HTOP on the host and when the problem happens there are no CPU/Memory spikes at all. From a functionality standpoint MSR is working perfectly. This seems to be an UI issue only. Do i need to ditch Docker and run MSR on a Proxmox VM? I have both stand alone Docker and Proxmox environments. I dont mind doing that I just want to be able to use the UI again... Installation method Home Assistant Container Core 2025.7.3 Frontend 20250702.3 nothing crazy in the logs except some openweather map stuff that doesn't make any sense as it is working fine in MSR Any help would be greatly appreciated Reactor latest-25328-b2ed1365 app 25328 configuration from /var/reactor/config NODE_PATH /opt/reactor:/opt/reactor/node_modules [latest-25328]2025-11-30T20:01:53.843Z <app:null> Reactor build latest-25328-b2ed1365 starting on v24.11.1 /usr/local/bin/node [latest-25328]2025-11-30T20:01:53.844Z <app:null> Process ID 1 user/group 0/0; docker; platform linux/x64 #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025; locale (undefined) [latest-25328]2025-11-30T20:01:53.844Z <app:null> Basedir /opt/reactor; data in /var/reactor/storage [latest-25328]2025-11-30T20:01:53.844Z <app:null> NODE_PATH=/opt/reactor:/opt/reactor/node_modules [latest-25328]2025-11-30T20:01:53.865Z <app:null> Resolved timezone=America/New_York, environment TZ=America/New_York; offset minutes from UTC=-300 [latest-25328]2025-11-30T20:01:53.867Z <default:null> Module i18n v25141 [latest-25328]2025-11-30T20:01:53.867Z <app:null> Configured locale (undefined); selected locale(s) en-US.UTF-8 [latest-25328]2025-11-30T20:01:53.879Z <app:null> Loaded locale en-US for en-US [latest-25328]2025-11-30T20:01:53.879Z <app:null> Local date/time using configured timezone and locale formatting is "11/30/2025, 3:01:53 PM" [latest-25328]2025-11-30T20:01:53.889Z <Structure:null> Module Structure v25326 [latest-25328]2025-11-30T20:01:53.890Z <Capabilities:null> Module Capabilities v24312 [latest-25328]2025-11-30T20:01:53.904Z <Plugin:null> Module Plugin v25141 [latest-25328]2025-11-30T20:01:53.923Z <Timer:null> Module Timer v25279 [latest-25328]2025-11-30T20:01:53.924Z <TimerBroker:null> Module TimerBroker v25314 [latest-25328]2025-11-30T20:01:53.927Z <Entity:null> Module Entity v25251 [latest-25328]2025-11-30T20:01:53.929Z <Controller:null> Module Controller v25253 [latest-25328]2025-11-30T20:01:53.930Z <AlertManager:null> Module AlertManager v25318 [latest-25328]2025-11-30T20:01:53.937Z <default:null> Module Ruleset v25283 [latest-25328]2025-11-30T20:01:53.937Z <default:null> Module Rulesets v25141 [latest-25328]2025-11-30T20:01:53.942Z <GlobalExpression:null> Module GlobalExpression v25258 [latest-25328]2025-11-30T20:01:53.953Z <Predicate:null> Module Predicate v25328 [latest-25328]2025-11-30T20:01:53.956Z <Rule:null> Module Rule v25323 [latest-25328]2025-11-30T20:01:53.958Z <GlobalReaction:null> Module GlobalReaction v25292 [latest-25328]2025-11-30T20:01:53.959Z <Engine:null> Module Engine v25325 [latest-25328]2025-11-30T20:01:53.964Z <httpapi:null> Module httpapi v25328 [latest-25328]2025-11-30T20:01:53.972Z <wsapi:null> Module wsapi v25328 [latest-25328]2025-11-30T20:01:53.994Z <TaskQueue:null> Module TaskQueue 24138 [latest-25328]2025-11-30T20:01:53.994Z <VeraController:null> Module VeraController v25141 [latest-25328]2025-11-30T20:01:54.179Z <HassController:null> Module HassController v25325 [latest-25328]2025-11-30T20:02:13.797Z <OWMWeatherController:null> Module OWMWeatherController v25268 [latest-25328]2025-11-30T20:02:13.800Z <SystemController:null> Module SystemController v25323 [latest-25328]2025-11-30T20:02:13.807Z <MQTTController:null> Module MQTTController v22092 [latest-25328]2025-11-30T20:02:20.630Z <OWMWeatherController:CRIT> FetchError: request to https://api.openweathermap.org/data/2.5/weather?lat=xxxxxxxxxx&lon=-xxxxxxxxx&appid=xxxxxxxxxxxxxxxxxxxxxxxxxx&units=standard&_r=1xxxxxxxxxxxxxxfailed, reason: [-] FetchError: request to https://api.openweathermap.org/data/2.5/weather?lat=xxxxxxxxxxx&lon=-xxxxxxxxxxxxxxxxxx&appid=xxxxxxxxxxxxxxxxxxx&units=standard&_r=xxxxxxxxxxxxxxxfailed, reason: at ClientRequest.<anonymous> (/opt/reactor/node_modules/node-fetch/lib/index.js:1501:11) at ClientRequest.emit (node:events:508:28) at ClientRequest.emit (node:domain:489:12) at emitErrorEvent (node:_http_client:108:11) at TLSSocket.socketErrorListener (node:_http_client:575:5) at TLSSocket.emit (node:events:508:28) at TLSSocket.emit (node:domain:489:12) at emitErrorNT (node:internal/streams/destroy:170:8) at emitErrorCloseNT (node:internal/streams/destroy:129:3) at processTicksAndRejections (node:internal/process/task_queues:89:21
Multi-System Reactor
Date/time condition
tunnusT
Topic thumbnail image
Multi-System Reactor
Is there a way to turn this section (image in post) off?
toggledbitsT
Topic thumbnail image
Comments & Feedback
Device log?
G
@toggledbits is there a log that will show me what rule is turning on a specific device? I've got a switch that has been kicking on at 2200 ET for several nights now and the reactor.log doesn't have a thing in it that I can see on a device level (it being more rules-based).
Multi-System Reactor
Midnight crossing not working in date/time condition (build 25325)
tunnusT
Topic thumbnail image
Multi-System Reactor
Reactor (Multi-System/Multi-Hub) Announcements
toggledbitsT
Build 21228 has been released. Docker images available from DockerHub as usual, and bare-metal packages here. Home Assistant up to version 2021.8.6 supported; the online version of the manual will now state the current supported versions; Fix an error in OWMWeatherController that could cause it to stop updating; Unify the approach to entity filtering on all hub interface classes (controllers); this works for device entities only; it may be extended to other entities later; Improve error detail in messages for EzloController during auth phase; Add isRuleSet() and isRuleEnabled() functions to expressions extensions; Implement set action for lock and passage capabilities (makes them more easily scriptable in some cases); Fix a place in the UI where 24-hour time was not being displayed.
Multi-System Reactor
[Solved] Local expression in Rule does not evaluate as they used to do
CrilleC
Topic thumbnail image
Multi-System Reactor
Home Assistant 2025.11.2 and latest-25315
CrilleC
Topic thumbnail image
Multi-System Reactor
Notice to Docker + ARM Users (RPi 3/4/5 and others)
toggledbitsT
This post does not apply to users of Intel/AMD-based systems. If you are using a Reactor image tagged latest-amd64 or stable-amd64, then this post does not apply to you. It also does not apply to bare-metal installs; it's for users of docker images on ARM-based systems only (principally Raspberry Pi hosts, but could be others). After January 15, 2026, I will no longer produce the aarch64-tagged docker image for Reactor. The ARM images will be arm64 for 64-bit operating systems, and armv7l for 32-bit operating systems. For those of you running a container from the aarch64 image today, this will be a relatively simple change: you just need to switch the image used for your docker container to a differently-tagged image. If you are using docker-compose, then this is a relatively simple matter of changing the image line in your docker-compose.yaml file and then stopping (docker-compose down) and restarting (docker-compose up -d) your Reactor daemon. But there's a catch... not all of you can safely just switch from the aarch64 image to the arm64 image. And, you can't just trust the output of uname -m, for example, because this exposes the CPU architecture, but not the word size of the OS running on that CPU. For Raspberry Pi systems, the transition to 64-bit operating systems was long (starting in 2016) and not always obvious — although there was a first "official" 64-bit OS for RPis in 2020, it did not become a default recommendation in the Raspberry Pi Imager until 2021, and then that was only the default for Pi 3/4 systems with >4GB RAM; it was 2022 before it was universally recommended for all 64-bit CPUs regardless of RAM size. Depending on when you first imaged your RPi system and what default you may have been offered/chosen, you could today easily have a 64-bit CPU Raspberry Pi running a 32-bit version of the operating system. Upgrades along the way would not change this; changing it to fully 64-bit requires a full reimage of the system. To establish if your OS is 64- or 32-bit, log in to your Pi and run: sudo dpkg-architecture -q DEB_HOST_ARCH. If the response is arm64 or aarch64, then you are running a 64-bit OS and you should use the arm64-tagged image. If it's anything else, you are running a 32-bit OS, and you should use the armv7l-tagged image. pi@rpi4-1:~ $ sudo dpkg-architecture -q DEB_HOST_ARCH armhf pi@rpi4-1:~ $ uname -m aarch64 pi@rpi4-1:~ $ In the example above, the uname command reports that the CPU is 64-bit architecture (aarch64), which is true for the host on which I ran these commands, but the DEB_HOST_ARCH value is armhf, indicating a 32-bit operating system. This system has to use the armv7l-tagged image. Other systems will have their own ways of determining the word size of the running OS. Since the majority of Reactor users running ARM systems are on Raspberry Pis, I am able to supply the above instructions, but if you happen to have a different ARM system, you'll need to do some web searching to figure out how to expose that information. Or, you can just try the arm64 image, and if it doesn't start up, try the armv7l image. Remember to always back up your system before making any changes. For everyone, please make this change as soon as possible, and if you have any trouble finding a working image, please (1) go back to the current aarch64 image; and (2) let me know in this thread along with as much detail about your host system as you can offer (including the output of the dpkg-architecture command mentioned above).
Multi-System Reactor
Requesting a proper ARM64/aarch64 Docker image (Pi 5 support)
M
Hi, I'm in the process of migrating from a Raspberry Pi 4 (ARMv7) to a Raspberry Pi 5 (ARMv8/aarch64), but I’ve run into an issue: there is no proper ARMv8/aarch64 image available. None of the existing images run on the Pi 5 - they all exit immediately with code 139 (segmentation fault), which typically indicates that the binaries inside the image are not compatible with the ARM64/aarch64 architecture used by the Pi 5. Would it be possible to publish a correct ARMv8/aarch64 (linux/arm64) image? Building one should be relatively straightforward using docker buildx with multi-arch support. For example, my own Node.js images are built this way: docker buildx build --push \ -t <localrepo>/<project>:<tag> \ --platform=linux/arm64,linux/amd64 \ --file ./apps/<project>/Dockerfile . This produces both the AMD64 and ARM64/v8 variants automatically. Also, as a side note, it may be best to avoid using Alpine as the base image for the ARM64 build, since musl-based builds often cause compatibility issues and unnecessary headaches. A glibc-based base image (e.g., Debian or Ubuntu) tends to work far more reliably on ARM64, especially for Node.js applications. @toggledbits - tagging you in case you missed this. Thanks, mgvra
Multi-System Reactor
Script action and custom timers
therealdbT
Sorry to write here without trying, but I’m flying today. Am I correct if i say that script action with alarm() makes it possible to execute a reaction in a given interval, lets say 15 seconds or 3.5 minutes? That sounds amazing, since I’ve used weird tricks, including a custom controller, just to do this.
Multi-System Reactor
About
Posts
25
Topics
9
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

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

    The latest-arm64 works perfectly now on my RPi5 - huge thanks for pushing the arm64 Bookworm build! 🙌
    This was the last showstopper for my RPi4 → RPi5 migration, so I can finally continue the move.

    Here’s the container coming up cleanly:

    mgvra@desktop:/development/knx-hal-mono$ docker --context production-rpi5 compose --env-file .env-prod up msr
    [+] Running 1/1
     ✔ Container mosquitto  Running 0.0s 
    Attaching to msr
    msr  | Reactor latest-25315-bc301993 app 25315 configuration from /var/reactor/config
    msr  | NODE_PATH /opt/reactor:/opt/reactor/node_modules
    msr  | [latest-25315]2025-11-15T03:42:09.308Z <app:null> Reactor build latest-25315-bc301993 starting on v24.11.1 /usr/local/bin/node
    msr  | [latest-25315]2025-11-15T03:42:09.309Z <app:null> Process ID 1 user/group 0/0; docker; platform linux/arm64 #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1 (2025-09-16); locale (undefined)
    msr  | [latest-25315]2025-11-15T03:42:09.309Z <app:null> Basedir /opt/reactor; data in /var/reactor/storage
    msr  | [latest-25315]2025-11-15T03:42:09.309Z <app:null> NODE_PATH=/opt/reactor:/opt/reactor/node_modules
    msr  | [latest-25315]2025-11-15T03:42:09.332Z <app:null> Resolved timezone=Europe/Helsinki, environment TZ=Europe/Helsinki; offset minutes from UTC=120
    .
    .
    .
    

    Thanks again — I dropped a few drams for such a fast support. 🥃
    br,
    mgvra

    Multi-System Reactor

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

    Hi,

    I'm in the process of migrating from a Raspberry Pi 4 (ARMv7) to a Raspberry Pi 5 (ARMv8/aarch64), but I’ve run into an issue: there is no proper ARMv8/aarch64 image available.

    None of the existing images run on the Pi 5 - they all exit immediately with code 139 (segmentation fault), which typically indicates that the binaries inside the image are not compatible with the ARM64/aarch64 architecture used by the Pi 5.

    Would it be possible to publish a correct ARMv8/aarch64 (linux/arm64) image?
    Building one should be relatively straightforward using docker buildx with multi-arch support. For example, my own Node.js images are built this way:

    docker buildx build --push \
        -t <localrepo>/<project>:<tag> \
        --platform=linux/arm64,linux/amd64 \
        --file ./apps/<project>/Dockerfile .
    

    This produces both the AMD64 and ARM64/v8 variants automatically.

    Also, as a side note, it may be best to avoid using Alpine as the base image for the ARM64 build, since musl-based builds often cause compatibility issues and unnecessary headaches. A glibc-based base image (e.g., Debian or Ubuntu) tends to work far more reliably on ARM64, especially for Node.js applications.

    @toggledbits - tagging you in case you missed this.

    Thanks,
    mgvra

    Multi-System Reactor

  • Widget deletion does not work and landing page (status) is empy
    M mgvra

    Hi,
    Well my bad and classic RTFM case. Actually I also tried to drag it to the top but it seems that you have to hit the top bar on the spot in order to trigger the deletion, which is fine when you know it. And well right after the post, new release came out which fixed the landing page problem - nice work!

    br,
    mgvra

    Multi-System Reactor

  • Widget deletion does not work and landing page (status) is empy
    M mgvra

    Hi,
    It seems that the widget deletion does not work. I tried to drag the widget to the left (as explained in here https://smarthome.community/topic/1071/deleting-widgets?_=1744037333660)
    but it does not delete it. Anyone else experiencing the same problem?

    Also the landing page after login is empty and seems be have some JS issues on the dev console:

    Screenshot from 2025-04-07 18-06-19.png

    fd7f0424-debb-49d3-86d8-9a3b09ad3868-image.png

    Using dockerized version of Reactor (Multi-hub) latest-25082-3c348de6 on Chromium 135.0.7049.52 (Official Build) snap (64-bit)

    br,
    mgvra

    Multi-System Reactor

  • Custom capabilities in MQTT templates
    M mgvra

    @toggledbits

    @toggledbits said in Custom capabilities in MQTT templates:

    Showing off all your cool toys, eh?

    Well I wouldn't boast with employer provided montitor, and definitely wouldn't call it cool, just damn wide. 🙂

    But speaking of showing off cool toys, this is something I bet you've never seen before, one of my weird projects:
    A custom made flow through heater for my summer cottage's outdoor shower. Based on old used Webasto ThermoTop EVO 5kW car engine diesel
    heater and controlled by ESP32 which provides WiFi AP and web UI. Fully modular, so that the heating unit can be removed before the winter.
    Wouldn't call this cool either (no pun intented) but unique. Works pretty well, at least @tunnus agrees.

    Old WIP photo

    ec26e87f-a937-47b5-a30c-0bbeafc63695-image.png

    Thanks for letting me know. I'll see what I can do to make it look more presentable.

    np

    br,
    mgvra

    Multi-System Reactor

  • Custom capabilities in MQTT templates
    M mgvra

    @toggledbits

    Thank you for your reply! Well this is what I mean, the answer is right in your face (local_mqtt_capabilities.yaml) and you just can't see it.
    Now it works like charm and I can even refactor my existing KNX templates using the custom capabilities.

    For anyone else who might be struggling with the same problem, here's my config:

    local_mqtt_capabilities.yaml

    capabilities:
      x_mqtt_sonos_announcement:
        actions:
          speak:         
            arguments:
              text:
                type: string
              volume:
                type: int
                default: 50
              delay:
                type: int
                default: 500
    

    local_mqtt_devices.yaml

    templates:
      sonos-announcement: 
        capabilities:
         - x_mqtt_sonos_announcement
        actions:
          x_mqtt_sonos_announcement:
            speak:          
              topic: "sonos/cmd/speak"
              payload:
                expr: >
                  { "text": parameters.text, "volume": parameters.volume, "delayMs": parameters.delay, "onlyWhenPlaying": false, "engine": "neural" }
                type: json
    
    

    UI looks like this:
    d88d6c9d-8a4f-4b0f-a4ac-3903d9c41348-image.png

    FYI there's a subtle layout issue with the login screen background image when using ultra wide monitors, just to let you know.

    beffa9e7-a4de-4969-85e1-4c6ef8d2f6b0-image.png

    Multi-System Reactor

  • Custom capabilities in MQTT templates
    M mgvra

    @therealdb

    Well thanks for your reply, but didn't get it working.
    This is my config now:

    capabilities:
      x_sonos_announcement:
        actions:
          speak:         
            arguments:
              text:
                type: string
              volume:
                type: int
              delay:
                type: int
    templates:
    
      sonos-announcement: 
        capabilities:
         - x_sonos_announcement
        actions:
          x_sonos_announcement:
            speak:          
              topic: "sonos/cmd/speak"
              payload:
                expr: >
                  { "text": parameters.text, "volume": parameters.volume, "delayMs": parameters.delay, "onlyWhenPlaying": false, "engine": "neural" }
                type: json
    

    I just fail to see what is the problem here.

    br,
    mgvra

    Multi-System Reactor

  • Custom capabilities in MQTT templates
    M mgvra

    Hi,
    I'm trying to integrate the sonos-mqtt (https://sonos2mqtt.svrooij.io/) with the MSR and it's coming along nicely so far.
    But cannot wrap my head around how to define custom capabilities in MQTT templates. I need this for the TTS announcements and similarly for the notification sounds where I would pass the sound file as parameter.

    So this is what I have in the local_mqtt_devices.yaml

    capabilities:
      x_sonos_announcement:
        attributes:
        actions:
          speak:
            arguments:
              text:
                type: string
              volume:
                type: int
              delay:
                type: int
    

    And this is the template:

    templates:
      sonos-announcement: 
        capabilities: 
          - x_sonos_announcement
        actions:
          x_sonos_announcement:
            speak:
              topic: "sonos/cmd/speak"
              payload:
                expr: >
                  { "text": parameters.text, "volume": parameters.volume, "delayMs": parameters.delay, "onlyWhenPlaying": false, "engine": "neural" }
                type: json
    

    So the speak action should send something like this to topic sonos/cmd/speak

    {
      "text": "message goes here",
      "volume": 50,
      "delayMs": 100,
      "onlyWhenPlaying": false,
      "engine": "neural"
    }
    

    At startup the MSR seems to be quite unhappy with my configuration:

    reactor  | [latest-25016]2025-02-09T08:19:59.029Z <MQTTController:WARN> MQTTController#mqtt entity Entity#mqtt>sonos-announcement unable to configure capabilities [Array][ "x_sonos_announcement" ]
    reactor  | i18n: missing fi-FI language string: Configuration for {0:q} is incomplete because the following requested capabilities are undefined: {1}
    reactor  | i18n: missing fi-FI language string: Configuration for {0:q} has unrecognized capability {1:q} in actions
    reactor  | Trace: Configuration for {0:q} is incomplete because the following requested capabilities are undefined: {1}
    reactor  |     at _T (/opt/reactor/server/lib/i18n.js:611:28)
    reactor  |     at AlertManager.addAlert (/opt/reactor/server/lib/AlertManager.js:125:25)
    reactor  |     at MQTTController.sendWarning (/opt/reactor/server/lib/Controller.js:627:30)
    reactor  |     at MQTTController.start (/var/reactor/ext/MQTTController/MQTTController.js:268:26)
    reactor  |     at async Promise.allSettled (index 0)
    
    Configuration for "sonos-announcement" has unrecognized capability "x_sonos_announcement" in actions
    Controller: MQTTController#mqtt
    Last 10:21:37 AM
    
    Configuration for "sonos-announcement" is incomplete because the following requested capabilities are undefined: x_sonos_announcement
    Controller: MQTTController#mqtt
    Last 10:21:37 AM
    

    This is probably a pretty stupid question and the approach may not even work at all, but maybe someone or @toggledbits for sure, could point me to the right direction.
    Basically the idea is to be able to send TTS messages from reactions using entity actions. I've previously used HTTP requests to Sonos HTTP API (https://hub.docker.com/r/chrisns/docker-node-sonos-http-api/) for the same functionality, but since moving to sonos-mqtt, I need a way to send the TTS notifications using MQTTController. Along with the actual message, volume and delay must also be parameterizable.

    br,
    mgvra

    MSR latest-25016-d47fea38 / MQTTController [0.2.24293]

    Multi-System Reactor

  • case statement with a single when clause fails
    M mgvra

    A case with only a single when (and possibly an else) is an if statement, so why not use that? This is the workaround/recommendation. Using case in this way just seems unnecessarily complex

    Well that's true and I don't think anyone uses the case-when structure with a single when. But for example in my case, I was testing the expressions, had written only one section and was getting this mysterious syntax error. As a software engineer myself, coming from C / Java / JS background, I naturally associated the case-when structure to switch-case where it's perfectly fine to have a single case, although as you mentioned, does not make much sense.

    This is not a bug that needs to be necessarily fixed ASAP, but it would be nice if you could add a clarification to the manual, stating that the case-when structure must have at least two when sections.

    Multi-System Reactor

  • case statement with a single when clause fails
    M mgvra

    Well I stumbled across exactly the same bug and was able to resolve the problem only because @tunnus knew what was the issue.

    Multi-System Reactor

  • Dismiss -option for updates
    M mgvra

    This would be nice a improvement.

    Multi-System Reactor

  • Rule's sustain / delay reset etc. value parameterization thru entities
    M mgvra

    Thanks for your quick reply!

    You can use expressions in condition operands by using the substitution syntax: ${{ your-expression }}

    I'll use that for the brightness threshold.

    The workaround is to group conditions and use additional conditions as gating criteria. For example, if you would change the "sustained for" delay based on time of day, say 120 for day and 600 for night, then you would have conditions structured like this:

    Group A - Daytime -- AND group
        Rule Condition: Rule "Is Day" is TRUE
        Entity Condition: some entity test that tests a value
            condition option: Sustained for 120 seconds
    Group B - Night -- AND group
        Rule Condition: Rule "Is Day" is FALSE
        Entity Condition: the same test as used in group A
            condition option: Sustained for 600 seconds
    

    Well unfortunately this doesn't help much if I need to set an arbitrary delay value from my custom UI.

    You cannot use expression substitution in the values of condition options. These are required to be constants (literal values).

    Could this be a new feature request to support expression substitution in timeout values (sustain / delay reset etc) if it's feasible to implement?

    br,
    mgvra

    Multi-System Reactor

  • Rule's sustain / delay reset etc. value parameterization thru entities
    M mgvra

    Some background
    I have two simple rules that will toggle my carport's down lights depending on outdoor brightness when I open the motorized sliding gate. I.e. if the brightness is 1500 lux or less and the gate is opened, the down lights will be switched on, and when the gate is closed, the lights will switch off after 3 minutes. Pretty simple 'coming home' functionality so to speak.

    Here's the switch off rule showing the 'hard coded' thresholds

    Screenshot from 2023-10-31 18-44-46.png

    The problem
    I would like to parameterize the lux and switch off delay using entities. I bet the lux threshold can be done with local expressions the same way I do my WC background music scheduling:

    weekdays_enabled = (time() >= time(getEntity( "mqtt>wc-music-weekdays-enable" ).attributes.string_sensor.value )) && (time() <= time(getEntity( "mqtt>wc-music-weekdays-disable" ).attributes.string_sensor.value ))
    

    But the since I'm using the Condition must be sustained for functionality for the switch off rule, I have no idea how to parameterize that with some entity value.

    So my question is that is it even possible to do this using entities or could there some other way to accomplish the same functionality? In this example it's the sustain -value but I might need same kind of parameterization for the delay reset also.

    I have to go with entities, since my own HA system will provide the threshold values for the MSR through the MQTTController.

    Help would be appreciated @toggledbits
    br,
    mgvra

    MSR latest-23302-b7def56a and MQTTController [0.1.23254]

    Multi-System Reactor

  • JSON payload in MQTTController entities actions (+ reverse color mapping to RGB)
    M mgvra

    Thanks for yet another quick reply! I'll start playing with the expressions and JSON payloads now that I know the proper syntax.

              expr: >
                { "brightness": parameters.level * 255 }
    

    So it is this implicit parameters object that contains the value (level) to be set.
    In the case of step dimming, is this the notation?

              expr: >
                { "brightness": parameters.step * 255 }
    

    Don't forget you can set MQTTController's log level to 5 while doing this work to troubleshoot what you are doing and see more clearly what is ultimately being sent.

    Good point!

    I do have functions for converting between HS(L), RGB, and XY. Currently they are only available to HubitatController, but I can easily extend them to MQTTController as well. The trick there, however, is that your device's implementation is the same (e.g. for HSL 0° is red, 120° is green, 240° is blue, etc.). There's a de facto standard, but some devices have their own way.

    Well that would be really nice if it doesn't require too much effort. A new release of the MSR or just the MQTTController?

    The trick there, however, is that your device's implementation is the same (e.g. for HSL 0° is red, 120° is green, 240° is blue, etc.). There's a de facto standard, but some devices have their own way.

    Well I think those functions should exist even if they don't work with all possible devices. It's sure better than nothing and chances are that they work just fine.

    br,
    mgvra

    Multi-System Reactor

  • JSON payload in MQTTController entities actions (+ reverse color mapping to RGB)
    M mgvra

    Some background
    I'm trying to integrate a Zigbee device into the MSR using zigbee2mqtt bridge and MQTTController. The device in question is a cheap mood light that has following properties that I'd like to control:

    • switch (on/off)
    • brightness
    • color

    I'v already managed to get the switch part working and can toggle the light on/off. Also the brightness value is mapped back to MSR. In zigbee2mqtt it has a value range from 0 to 254, so this the reason for the expression:

    expr: 'payload.brightness / 254'
    

    Here's the entity definition (don't know whether the type should be something else than the Switch)

    zigbee-lidl-mood-light:
      name: 'Lidl Mood Light'
      friendly_name: 'Mood Light'
      type: Switch
      uses_template: lidl-moodlight      
    

    And the corresponding template (NOTE: rgb_color has not been defined in this example):

    lidl-moodlight:
      init: "zigbee2mqtt/%friendly_name%/get/state"
      query: "zigbee2mqtt/%friendly_name%/get/state"
      capabilities:
        - power_switch
        - toggle
        - dimming
      primary_attribute: power_switch.state
      events:
        "zigbee2mqtt/%friendly_name%":
          "power_switch.state":
            json_payload: true
            expr: 'upper(payload.state) == "ON"'
          "dimming.level":
            json_payload: true
            expr: 'payload.brightness / 254'          
      actions:
        power_switch:
          "on":
            topic: "zigbee2mqtt/%friendly_name%/set/state"
            payload: 'ON'
          "off":
            topic: "zigbee2mqtt/%friendly_name%/set/state"
            payload: 'OFF'
          set:
            topic: "zigbee2mqtt/%friendly_name%/set/state"
            payload: 
              expr: "parameters.state ? 'ON' : 'OFF'"
              type: raw
          toggle:
            topic: "zigbee2mqtt/%friendly_name%/set/state"
            payload: 'TOGGLE'
    

    The problem
    In order to control the brightness or the RGB color values, I would have send a JSON payload in corresponding actions. But I have no idea how to define it in the template. The reason why the switch part is working is that the zigbee2mqtt accepts also plain ON / OFF / TOGGLE string payloads in that case.

    But the brightness should be controlled with the following payload:

    {"brightness": 196}
    

    And the RGB color like:

    {"color":{"rgb":"46,102,150"}}
    

    Here's the link for the documentation (the Exposes part defines the messages).

    So how should I define the JSON payload for example for the dimming action? It definitely should be some sort of expressions since I have to map the MSR real value (0...1) to (0...254) for the zigbee2mqtt.

    actions:
        dimming:
          set:
            topic: "zigbee2mqtt/%friendly_name%/set"
            payload: 
              expr: ?????
              type: json
    

    Another problem is the RGB value. I could use the rgb_color capability for the setting but the problem is that the zigbee2mqtt only reports the current color in hue/saturation or xy coordinates.

    Here's an example of published message after setting the color:

    Topic: zigbee2mqtt/Mood Light QoS: 0
    {
       "brightness":254,
       "color":{
          "hue":240,
          "saturation":100,
          "x":0.1355,
          "y":0.0399
       },
       "color_mode":"xy",
       "color_temp":574,
       "linkquality":96,
       "state":"ON"
    }
    

    I would have to map those values back to RGB, but is it even possible with existing constructs in MQTTController's templates?

    Help would be appreciated @toggledbits
    br,
    mgvra

    Multi-System Reactor

  • Local expressions not evaluated in rules (MQTTController based entities)
    M mgvra

    Thanks for your quick reply!
    With added NUL group and interval it seems to be working just fine.

    Well don't know about great post, just asking 'stupid' questions and hoping to learn something along the way.
    But it's nice if it can be used as an example of how tackle that kind of problem.

    br,
    mgvra

    Multi-System Reactor

  • Local expressions not evaluated in rules (MQTTController based entities)
    M mgvra

    Some background

    I have MQTTController based entities that I want to use in time calculations in my rules. These entities represent two separate time ranges, one for the weekdays and the other for the weekends. In this particular example they are used to control my doorbell activity (whether it's enabled or disabled).

    MQTT message which is used to update the entities. NOTE: time is in 24h format

    {
      "data": {
        "weekdays": {
          "enable": "09:28",
          "disable": "20:00"
        },
        "weekends": {
          "enable": "09:00",
          "disable": "21:00"
        }
      }
    }
    

    Entity definitions (here's only the definition for the weekdays for brevity)

            doorbell-weekdays-enable:
              name: 'Ovikello päälle (arkisin)'
              topic: 'doorbell/settings'
              capabilities:
                - string_sensor
              primary_attribute: string_sensor.value
              events: 
                "%topic%":
                  "string_sensor.value":
                    json_payload: true
                    expr: "payload.data.weekdays.enable"
    
            doorbell-weekdays-disable:
              name: 'Ovikello pois päältä (arkisin)'
              topic: 'doorbell/settings'
              capabilities:
                - string_sensor
              primary_attribute: string_sensor.value
              events: 
                "%topic%":
                  "string_sensor.value":
                    json_payload: true
                    expr: "payload.data.weekdays.disable"
    
    

    I have verified that the entities are populated correctly and the values are working in local expressions.

    The entity (only the range start for brevity):
    Screenshot from 2023-03-22 09-27-54.png

    The rule:
    Screenshot from 2023-03-22 09-28-28.png

    And the local expression within the rule:

    weekdays_enabled = (time() >= time(getEntity( "mqtt>doorbell-weekdays-enable" ).attributes.string_sensor.value )) &&
    (time() <= time(getEntity( "mqtt>doorbell-weekdays-disable" ).attributes.string_sensor.value ))
    

    The problem
    Local expression doesn't seem to evaluate to true even if the current time gets within the range. But if the related entities are updated, then the expression is evaluated and the rule is triggered.

    As seen from the screenshots, the current time is 09:28:12 and the start time in corresponding entity is set to 09:28. But still the rule is not triggered. However, if I update the entity e.g. to 09:27, the local expression will get evaluated and the rule is triggered.

    My understanding is that the local expression is working correctly but since it's not evaluated, it will not trigger the rule.

    Is this a bug or have I misunderstood something? If so, how should I implement this kind of functionality?

    br,
    mgvra

    Reactor (Multi-hub) latest-23078-d592d400 + MQTTController [0.1.23010]

    Multi-System Reactor

  • MQTT Controller and extended capabilities
    M mgvra

    @toggledbits any comments on this?

    Multi-System Reactor

  • MQTT Controller and extended capabilities
    M mgvra

    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

  • REST API implementation
    M mgvra

    @toggledbits said in REST API implementation:

    @mgvra said in REST API implementation:

    I would have to be able to disable that particular rule without the MSR UI for the reasons I've explained in my previous post.

    Your logic could include, for example, examination of a virtual switch that determines if the rule should be applied at all. This could be part of the triggers for that rule, or a constraint on that rule. This is a very common model. I myself use it for "Party Mode" in my house, to prevent the automatic locking of doors and the "Night mode" from dousing of all the lights that would cause an unwelcome interruption of the merriment.

    Thanks for your quick response. Well it seems that I have to forget the REST API approach if it's going the get scrapped anyway. I just wanted to know the 'proper' way to go before I have too many rules to refactor. But as you pointed out, it seems that I have to go with the virtual switch / config object while integrating MSR to my existing backend/UI.

    Multi-System Reactor
  • Login

  • Don't have an account? Register

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