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
Set Reaction > Script Action
wmarcolinW
Topic thumbnail image
Multi-System Reactor
Wiring Samotech SM308-S into light fitting
F
Hi Smart Home Community. I have used a Sonos inline WiFi switch to make one of my light fittings smart, but it requires a hard reset for WiFi changes, plus it isn't zigbee compatible, which means I can't use the Hue app to control it with the rest of the lights. To that end I bought a Samotech SM308-S as it is recommended as the better than the Sonos equivalent. I am however not exactly sure how to wire it in. The manual is available here Can anyone help me by clarifying which ports I need to use, and whether I should be using the live or switched live line for live etc. I will be keeping using standard switches for a while, although hope to upgrade to tap dials once I have all the fittings upgraded. Thanks
Hardware
Errors after updating to MQTTController build 25139
tunnusT
I'm running MSR build 25139 on Docker, using MQTT controller 24293, and everything working as expected. But if I try to upgrade to MQTTController build 25139, I'm getting the following errors on MSR UI: An Entity Attribute condition in "Lay-Z-Spa auto heating off" (Terrace) failed because the referenced entity "Lay-Z-Spa States" (mqtt>layzspa_states) does not have attribute value_sensor.god Last 11:20:37 An Entity Attribute condition in "Lay-Z-Spa auto heating off" (Terrace) failed because the referenced entity "Lay-Z-Spa States" (mqtt>layzspa_states) does not have attribute temperature_sensor.green Last 11:20:37 An Entity Attribute condition in "Lay-Z-Spa filter pump auto off" (Terrace) failed because the referenced entity "Lay-Z-Spa States" (mqtt>layzspa_states) does not have attribute temperature_sensor.red Last 11:20:37 An Entity Attribute condition in "Lay-Z-Spa filter pump auto run" (Terrace) failed because the referenced entity "Lay-Z-Spa States" (mqtt>layzspa_states) does not have attribute value_sensor.pump Last 11:20:37 An Entity Attribute condition in "Lay-Z-Spa watchdog" (Terrace) failed because the referenced entity "Lay-Z-Spa States" (mqtt>layzspa_states) does not have attribute value_sensor.status Last 11:20:37 My MQTT configuration (local_mqtt_devices.yaml) for the related entity is: layzspa_message: type: ValueSensor capabilities: ["temperature_sensor", "value_sensor", "power_sensor"] primary_attribute: power_sensor.value events: "layzspa/message": "power_sensor.value": json_payload: true if_expr: '! isnull( payload?.PWR )' expr: "float(payload.PWR)" "value_sensor.air": json_payload: true if_expr: '! isnull( payload?.AIR )' expr: "float(payload.AIR)" "value_sensor.pump": json_payload: true if_expr: '! isnull( payload?.FLT )' expr: "float(payload.FLT)" "value_sensor.god": json_payload: true if_expr: '! isnull( payload?.GOD )' expr: "float(payload.GOD)" "value_sensor.lock": json_payload: true if_expr: '! isnull( payload?.LCK )' expr: "float(payload.LCK)" "value_sensor.unit": json_payload: true if_expr: '! isnull( payload?.UNT )' expr: "float(payload.UNT)" "value_sensor.error": json_payload: true if_expr: '! isnull( payload?.ERR )' expr: "float(payload.ERR)" "temperature_sensor.green": json_payload: true if_expr: '! isnull( payload?.GRN )' expr: "float(payload.GRN)" "temperature_sensor.red": json_payload: true if_expr: '! isnull( payload?.RED )' expr: "float(payload.RED)" "temperature_sensor.target": json_payload: true if_expr: '! isnull( payload?.TGT )' expr: "float(payload.TGT)" "temperature_sensor.value": json_payload: true if_expr: '! isnull( payload?.TMP )' expr: "float(payload.TMP)" "temperature_sensor.virtual": json_payload: true if_expr: '! isnull( payload?.VTM )' expr: "round(float(payload.VTM), 1)" "temperature_sensor.ambient": json_payload: true if_expr: '! isnull( payload?.AMB )' expr: "float(payload.AMB)" "layzspa/Status": "value_sensor.status": if_expr: '! isnull( payload )' expr: "payload" "layzspa/button": "value_sensor.button": if_expr: '! isnull( payload )' expr: "payload" and in reactor.yaml I have: "layzspa_states": name: "Lay-Z-Spa States" friendly_name: 'Lay-Z-Spa States' include: layzspa_message I realize my MQTT configuration might be a bit unorthodox, but could there still be something unintentional in the latest MQTTController build? If needed, I can provide detailed logs.
Multi-System Reactor
🎉 My very first MSR controller: OpenSprinkler
therealdbT
Since today is my birthday - and I still pretend to be unconventional - I'm giving away a present to this wonderful community and I'm releasing my first OpenSprinkler controller for MSR. It was real fun to code it - and while it's still WIP, it seems to work OK for me. It's polling-based at the moment, but I'll add support for updates via MQTT very soon (it's already partially coded). Get it at (install is similar to MQTTController and such): https://github.com/dbochicchio/reactor-opensprinkler Feel free to try it. It's beta software, but it's stable. I'll update it weekly until all the tasks from my todo list are empty. Since I've learnt a lot from this controller, I'll explore new controllers soon.
Multi-System Reactor
Advice reqeusted to migrate MSR from Bare Metal to Container
T
Good day all, I'm in the process of trying to shut down my 10 year old Linux home server that served many purposes, but primarily it's what I used for my NAS/Plex Media server. I migrated the NAS aspect of the server in November of last year to a true NAS solution (Ubiquti UNAS Pro), which is rack mount and much more efficient than my old tower, which it's only side benefit was heating my home office during the winter. Unfortunately it also means heating my home office during the summer, which were about to be in full swing. I have two things running on this 10 year old server at this point. MSR and pi-hole. I'm running Plex Media Server on Fedora Workstation in Podman on mini PC, which is much more energy efficient than my old tower. My next step is to migrate MSR. I know there are images of MSR out there, and creating it is well documented. I'm going to be using Podman instead of Docker for various reasons, but they work very similar. What I don't know, is what I need to do to migrate my existing Bare Metal installation over to a container. Has anyone done this? Any advice?
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
Z-Wave Future....
DesTD
https://forum.z-wave.me/viewtopic.php?f=3417&t=36140 That's not a good thing I think Time to switch again?
Z-Wave.me
Can´t restart or upgrade/deploy MSR
F
Topic thumbnail image
Multi-System Reactor
[Solved] Limit HA Entity in MSR
wmarcolinW
Topic thumbnail image
Multi-System Reactor
Disaster recovery and virtualisation
CatmanV2C
Following on from my last thread, some progress has been made over the weekend. With 18G of spanky RAM in my Synology DS224+. I've jumped into the murky world of virtualisation and already eliminated the need for two Raspberry Pi's from my system. Home Assistant: In theory they provide an OVA file which is supported by the Synology. I couldn't get it to work, however, so grabbed a copy of the .img file they supply, renamed it .iso and imported it as a VM. Restored from my full back up and that all seems fantastic. Minidnla Music server: Trivial. Grabbed a Debian .iso for Bookworm and copied that onto the NAS. Created a new machine which mirrored the specs of the Raspberry Pi, booted from the ISO then did an expert install. Once that was all stable with a basic core of stuff and networking, I've made a copy of that as a good base system. Then fired up minidnla on it, mounted my media and that's also woking. Not bad for a short weekend's work. Still not sure about the main NUC though. I'm thinking of buying a new USB stick so I can mess around getting it working on the Synology before I do anything drastic. Once that hurdle is sorted I'm torn between: Using a brand new install of Bookworm, re-installing Z-way server, OpenLuup, AltUI, MSR and HA bridge, then restoring across or Making an ISO of the current system, importing that and upgrading in place (which will be pretty risk free since I can snapshot everything before I make any changes.) Decisions, decisions. C
General Discussion
Remote access of Zwave stick from Z-wave server
CatmanV2C
Topic thumbnail image
Software
Organizing/ structuring rule sets and rules
R
Hi guys, Just wondering how you guys organize your rule sets and rules. I wish I had an extra layer to have some more granularity, but my feature request was not popular. Maybe there are better ways to organize my rule sets. I use the rule sets now primarily for rooms. So a rule set per room. But maybe grouping by functionality works better. Any examples/ suggestions would be appreciated.
Multi-System Reactor
Moving MSR from a QNAP container to RP 5 - some issues
Tom_DT
Topic thumbnail image
Multi-System Reactor
Widget deletion does not work and landing page (status) is empy
M
Topic thumbnail image
Multi-System Reactor
Need help reducing false positive notifications
T
Topic thumbnail image
Multi-System Reactor
Deleting widgets
tunnusT
Hopefully a trivial question, but how do you delete widgets in a status page? Using build 22266
Multi-System Reactor
MQTT configuration question
tunnusT
I have the following yaml configuration in local_mqtt_devices file x_mqtt_device: set_speed: arguments: speed: type: str topic: "command/%friendly_name%" payload: type: json expr: '{ "fan": parameters.speed }' While this works fine, I'm wondering how this could be changed to "fixed" parameters, as in this case "fan" only accepts "A", "Q" or a numeric value of 1-5?
Multi-System Reactor
System Configuration Check - time is offset
F
Hi! I get this message when I'm on the status tab: System Configuration Check The time on this system and on the Reactor host are significantly different. This may be due to incorrect system configuration on either or both. Please check the configuration of both systems. The host reports 2025-04-01T15:29:29.252Z; browser reports 2025-04-01T15:29:40.528Z; difference 11.276 seconds. I have MSR installed as a docker on my Home Assistant Blue / Hardkernel ODROID-N2/N2+. MSR version is latest-25082-3c348de6. HA versions are: Core 2025.3.4 Supervisor 2025.03.4 Operating System 15.1 I have restarted HA as well as MSR multiple times. This message didn´t show two weeks ago. Don´t know if it have anything to do with the latest MSR version. Do anyone know what I can try? Thanks in advance! Let's Be Careful Out There (Hill Street reference...) /Fanan
Multi-System Reactor
Programmatically capture HTTP Request action status code or error
therealdbT
I have a very strange situation, where if InfluxDB restarts, other containers may fail when restarting at the same time (under not easy to understand circumstances), and InfluxDB remains unreachable (and these containers crashes). I need to reboot these containers in an exact order, after rebooting InfluxDB. While I understand what's going on, I need a way to reliable determine that InfluxDB is not reachable and these containers are not reachable, in order to identify this situation and manually check what's going on - and, maybe, in the future, automatically restart them if needed. So, I was looking at HTTP Request action, but I need to capture the HTTP response code, instead of the response (becase if ping is OK, InfluxDB will reply with a 204), and, potentially, a way to programmatically detect that it's failing to get the response. While I could write a custom HTTP controller for this or a custom HTTP virtual device, I was wondering if this is somewhat on you roadmap @toggledbits Thanks!
Multi-System Reactor
ZwaveJSUI - RGBWW BULB - Warm/Cold White interfered with RGB settings - Bulb doesn't change color if in WarmWhite state.
N
Hi , I'm on -Reactor (Multi-hub) latest-25067-62e21a2d -Docker on Synology NAS -ZWaveJSUI 9.31.0.6c80945 Problem with ZwaveJSUI: When I try to change color to a bulb RGBWW, it doesn't change to the RGB color and the bulb remains warm or cold white. I tryed with Zipato RGBW Bulb V2 RGBWE2, Hank Bulb HKZW-RGB01, Aentec 6 A-ZWA002, so seems that it happens with all RGBWW bulb with reactor/zwavejsui. I'm using from reator the entity action: "rgb_color.set" and "rgb_color.set_rgb". After I send the reactor command, It changes in zwavejsui the rgb settings but doesn't put the white channel to "0", so the prevalent channel remains warm/cold White and the bulb doesn't change into the rgb color. This is the status of the bulb in zwavejsui after "rgb_color.set" (235,33,33,) and the bulb is still warmWhite. x_zwave_values.Color_Switch_currentColor={"warmWhite":204,"coldWhite":0,"red":235,"green":33,"blue":33} The "cold white" and "warm white" settings interfer with the rgb color settings. Reactor can change bulb colors with rgb_color set — (value, ui8, 0x000000 to 0xffffff) or rgb_color set_rgb — (red, green, blue, all ui1, 0 to 255) but if warm or cold white are not to "0", zwavejsui doesn't change them and I can't find a way to change into rgb or from rgb back to warm white. So if I use from reactor: rgb_color set_rgb — (235,33,33) in zwavejsui I have x_zwave_values.Color_Switch_targetColor={"red":235,"green":33,"blue":33} 14/03/2025, 16:43:57 - value updated Arg 0: └─commandClassName: Color Switch └─commandClass: 51 └─property: targetColor └─endpoint: 0 └─newValue └──red: 235 └──green: 33 └──blue: 33 └─prevValue └──red: 235 └──green: 33 └──blue: 33 └─propertyName: targetColor 14/03/2025, 16:43:57 - value updated Arg 0: └─commandClassName: Color Switch └─commandClass: 51 └─property: currentColor └─endpoint: 0 └─newValue └──warmWhite: 204 └──coldWhite: 0 └──red: 235 └──green: 33 └──blue: 33 └─prevValue └──warmWhite: 204 └──coldWhite: 0 └──red: 235 └──green: 33 └──blue: 33 └─propertyName: currentColor In zwavejsui, the bulb changes rgb set but warm White remains to "204" and the bulb remais on warm White channel bacause is prevalent on rgb set. x_zwave_values.Color_Switch_currentColor_0=204 x_zwave_values.Color_Switch_currentColor_1=0 x_zwave_values.Color_Switch_currentColor_2=235 x_zwave_values.Color_Switch_currentColor_3=33 x_zwave_values.Color_Switch_currentColor_4=33 Is it possible to targetColor also for "warmWhite" and "coldWhite" and have something similar to this? x_zwave_values.Color_Switch_targetColor={"warmWhite":0,"coldWhite":0,"red":235,"green":33,"blue":33} Thanks in advance.
Multi-System Reactor
About
Posts
23
Topics
8
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • 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

  • REST API implementation
    M mgvra

    @gwp1 said in REST API implementation:

    @mgvra said in REST API implementation:

    I kind of think toggling the rules as a core functionality since it's already on the UI.

    I see this opening up the proverbial can-o-worms wherein another obscure rule turns off the one you're using to drive something completely unrelated to the first.

    Well I don't see it that way. You can already enable/disable the rules from the UI. Adding that same functionality to a different interface (REST API) woudn't open can-o-worms.

    Please correct me if I'm wrong, but if you enable the rule I doesn't mean that it will trigger to true. It just evaluates the rule and if the conditions / constraints are met, it will trigger, otherwise not.

    Of course if at the exact same moment you enable the rule and the conditions are, it will trigger, but that should happen anyway. So if you could do enabling / disabling via the REST API wouldn't it be just like hitting that red/green switch 'remotely'?

    I think of rules as true/false vs on/off (knowing I could be miles away from how Patrick intended lol)

    Well I think too. Maybe I was a bit unclear what I meant by toggling the rules. I didn't mean altering the rules evaluation outcome (true/false), just enabling/disabling the evaluation.

    Multi-System Reactor

  • REST API implementation
    M mgvra

    @toggledbits said in REST API implementation:

    Enabling and disabling rules is not a way to add additional conditional logic to your automations, IMO, and I've stuck pretty firmly to that opinion (at least, I haven't been convinced otherwise to date).

    Actually I don't see enabling / disabling rules as way to add additional conditional logic but merely as a user preference. For example I have a single rule that triggers lounge music playing through Sonos in my toilet whenever the PIR toggles the lights. But since I would like provide other users a possibility to switch off that feature, 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.
    And when I saw the REST API specs, that felt like a proper way to do it.

    See also this topic: https://smarthome.community/post/13111

    I think this post is more about the additional logic or maybe I'm just seeing it in a different light. I kind of think toggling the rules as a core functionality since it's already on the UI. You could do it with additional rules or entity attributes but it just feels more of hack. But maybe it's just me.

    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