Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Unsolved
Collapse
Discussion Forum to share and further the development of home control and automation, independent of platforms.
  1. Home
  2. Software
  3. Multi-System Reactor
  4. [Reactor] Services with sync response
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
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
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
Problem with simultaneous notifications.
T
Topic thumbnail image
Multi-System Reactor
Problem after upgrading to 25067
R
MSR had been running fine, but I decided to follow the message to upgrade to 25067. Since the upgrade, I have received the message "Controller "<name>" (HubitatController hubitat2) could not be loaded at startup. Its ID is not unique." MSR throws the message on every restart. Has anyone else encountered this problem? I am running MSR on a Raspberry Pi4 connecting to two Hubitat units over an OpenVPN tunnel. One C8 and a C8 Pro. Both are up-to-date. It appears that despite the error message that MSR may be operating properly.
Multi-System Reactor
Global expressions not always evaluated
tunnusT
Topic thumbnail image
Multi-System Reactor
[Solved] Local expression evaluation
V
Topic thumbnail image
Multi-System Reactor
[Solved] Runtime error when exiting global reaction that contains a group
S
I am getting a Runtime error on different browsers when I click exit when editing an existing or creating a new global reaction containing a group. If the global reaction does not have a group I don't get an error. I see a similar post on the forum about a Runtime Error when creating reactions but started a new thread as that appears to be solved. The Runtime Error is different in the two browsers Safari v18.3 @http://192.168.10.21:8111/reactor/en-US/lib/js/reaction-list.js:171:44 You may report this error, but do not screen shot it. Copy-paste the complete text. Remember to include a description of the operation you were performing in as much detail as possible. Report using the Reactor Bug Tracker (in your left navigation) or at the SmartHome Community. Google Chrome 133.0.6943.142 TypeError: self.editor.isModified is not a function at HTMLButtonElement.<anonymous> (http://192.168.10.21:8111/reactor/en-US/lib/js/reaction-list.js:171:34) You may report this error, but do not screen shot it. Copy-paste the complete text. Remember to include a description of the operation you were performing in as much detail as possible. Report using the Reactor Bug Tracker (in your left navigation) or at the SmartHome Community. Steps to reproduce: Click the pencil to edit a global reaction with a group. Click the Exit button. Runtime error appears. or Click Create Reaction Click Add Action Select Group Add Condition such as Entity Attribute. Add an Action. Click Save Click Exit Runtime error appears. I don’t know how long the error has been there as I haven’t edited the global reaction in a long time. Reactor (Multi-hub) latest-25060-f32eaa46 Docker Mac OS: 15.3.1 Thanks
Multi-System Reactor
Cannot delete Global Expressions
SnowmanS
I am trying to delete a global expression (gLightDelay) but for some strange reason, it comes back despite clicking the Delete this expression and Save Changes buttons. I have not created a global expression for some times and just noticed this while doing some clean-up. I have upgraded Reactor to 25067 from 25060 and the behaviour is still there. I have restarted Reactor (as well as restarting its container) and cleared the browser's cache several times without success. Here's what the log shows. [latest-25067]2025-03-08T23:50:22.690Z <wsapi:INFO> [WSAPI]wsapi#1 rpc_echo [Object]{ "comment": "UI activity" } [latest-25067]2025-03-08T23:50:26.254Z <GlobalExpression:NOTICE> Deleting global expression gLightDelay [latest-25067]2025-03-08T23:50:27.887Z <wsapi:INFO> [WSAPI]wsapi#1 rpc_echo [Object]{ "comment": "UI activity" } Reactor latest-25067-62e21a2d Docker on Synology NAS
Multi-System Reactor
Local notification methods?
CatmanV2C
Morning, experts. Hard on learning about the internet check script in MSR tools, I was wondering what suggestions anyone has about a local (i.e. non-internet dependent) notification method. This was prompted by yesterday's fun and games with my ISP. I've got the script Cronned and working properly but short of flashing a light on and off, I'm struggling to think of a way of alerting me (ideally to my phone) I guess I could set up a Discord server at home, but that feels like overkill for a rare occasion. Any other suggestions? TIA C
Multi-System Reactor

[Reactor] Services with sync response

Scheduled Pinned Locked Moved Multi-System Reactor
20 Posts 2 Posters 1.0k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • therealdbT Offline
    therealdbT Offline
    therealdb
    wrote on last edited by
    #3

    sorry, I was on my phone. I was referring to the fact it's impossible to get the response from a service inside a reaction. so, let's says I need to do that in order to pass a prompt and generate a response:

    image.png

    HTTP action is able to capture the reply in a variable. I want to build a custom controller with an action that could do the same, so reply in line with an output that I could capture inside a local variable (because replicating this code multiple times is not really efficient nor smart). Is that clear now?

    --
    On a mission to automate everything.

    My MS Reactor contrib
    My Luup Plug-ins

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

      Got it. Let me back up a second and supply a bit of background.

      When a Reaction is asked to perform an action on an entity, the Engine's executive calls Entity.perform() on the target entity with the requested action name and parameters. By default, the entity will then call its Controller's performOnEntity() with itself, the action name, and the action's parameters. The Controller is expected to provide whatever implementation is necessasry to cause the target object represented by the entity to perform the desired action. The performOnEntity() implementation is expected to return a Promise that resolves when the command has been issued successfully (or, when the command complete successfully, if that is something that can be determined). That Promise is passed back as the call stack unwinds until the Engine gets it. At that point, the Engine will suspend execution of the Reaction until the action Promise is fulfilled (successfully or not).

      TL;DR: The Engine waits for a Controller to signal that an action in a Reaction has been requested (or completed) before moving on to the next action.

      I think this is useful for you. Your implementation of the action must return a Promise that must resolve before the Engine moves on. So your action can launch its HTTP request (e.g. using Controller.fetchJSON() or .fetchText()), which itself is an asynchronous operation, and wait for that response, then do whatever processing it needs to on that response, store the result wherever it needs to go, and then and only then resolve the original Promise. The Engine will be waiting that entire time before moving on to the next action in the running Reaction.

      A couple more things to know:

      • If you don't supply an override of performOnEntity() in your Controller implementation, the default (Controller base class) implementation will try to call a method called action_<capability>_<actionname>. For example, your Controller could implement the action x_mycontroller.update_weather by providing a method action_myController_update_weather( entity, parameters ) (where entity is the target and parameters is an object of key/value pairs).
      • If you decide to implement an override of performOnEntity(), make sure it calls super.performOnEntity() if it can't figure out what to do (i.e. it is asked to perform an action it doesn't understand).

      Hopefully I've answered your question and maybe provided some additional information that will help.

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

      1 Reply Last reply
      0
      • therealdbT Offline
        therealdbT Offline
        therealdb
        wrote on last edited by
        #5

        Ok, that's clear and I think I've already done that in a coupe of controllers.
        What I'm saying here is that I need to do something similar to be sure that I could capture the response and be sure I'm not getting another one. I want to capture the output in a variable like HTTP actions, but using an entity action.

        AFAIK I cannot do that in a reliable way.

        --
        On a mission to automate everything.

        My MS Reactor contrib
        My Luup Plug-ins

        toggledbitsT 1 Reply Last reply
        0
        • therealdbT therealdb

          Ok, that's clear and I think I've already done that in a coupe of controllers.
          What I'm saying here is that I need to do something similar to be sure that I could capture the response and be sure I'm not getting another one. I want to capture the output in a variable like HTTP actions, but using an entity action.

          AFAIK I cannot do that in a reliable way.

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

          I want to capture the output in a variable like HTTP actions

          If you're building a Controller, it would (IMO) make more sense to store the query result on an entity (even if it's the system entity for the Controller) in an attribute rather than a global variable.

          AFAIK I cannot do that in a reliable way.

          I'm not really sure where you are going with the "capture the response and be sure I'm not getting another one". If you are using any of the fetch methods, for example, the response would be handled on the Promise that was created:

               this.fetchJSON( "http://example.com/myquery" ).then( jsondata => {
                  // The data from the response is now in `jsondata`. It will contain
                  // only the data for this query, no other.
                  this.getSystemEntity().setAttribute( 'x_mycontroller.myquery_result', jsondata );
              });
          

          There are many existing Controllers that can submit multiple commands to a hub/service and handle a truly asynchronous response (e.g. via a callback or a later message on the channel). In these instances, a unique (for the session) ID is passed as part of the request, and the hub's API returns the ID as part of its response, so we know what the hub is responding to. Both HassController and ZWaveJSController do this, for example.

          Here's what that looks like for both of these Controllers. This method is used to send a request to the hub. It assigns a serial ID as part of its work:

              /** Returns a Promise that sends a request to ZWave JS and resolves when it gets
               *  the matching reply. The reply can time out, and the Promise rejects.
               */
              _send_tracked_message( req, timeout ) {
                  const self = this;
                  timeout = timeout || DEFAULT_TASK_TIMEOUT;
                  let slot = {
                      req_id: ++this.next_msg_id,
                      expires: Date.now() + timeout,
                      resolve: false,
                      reject: false,
                      req: req
                  };
                  slot.promise = new util.TimedPromise( (resolve,reject) => {
                      // Now that we're in the Promise, save the resolvers for later use when we get the response.
                      slot.resolve = resolve;
                      slot.reject = reject;
                      req.messageId = slot.req_id;
                      self.log.debug( 5, "%1 sending #%2: %3", this, slot.req_id, req );
                      self.ws_send( JSON.stringify( req ) );
                  }, timeout ).catch( err => {
                      self.log.err("%1 request %2 (%4) failed: %3\n%5", self, slot.req_id, err, slot.type, slot.req);
                      slot.reject( err );
                      delete self.pending[String(slot.req_id)];
                  });
                  this.pending[String(slot.req_id)] = slot;
                  return slot.promise;
              }
          

          The Controller has an instance variable (an object) called pending that keeps track of all pending requests; it's created empty ({}) in the Controller's constructor and when a connection to the hub is acquired. Likewise, the next_msg_id variable is initialized to 0 in the constructor. The method creates a slot, which is just an object with enough data to track the request, using a TimedPromise (in util library) so that we can have a timeout if the hub never answers. The slot is stored in this.pending so we can get back to it later, whenever/however the response arrives.

          The hub later sends a response somehow. In Z-Wave JS that's a result type message on the WebSocket channel, and the handler looks like this:

              /** Called for "result" type messages. If associated with a tracked request, that Promise will
               *  resolve or reject based on the returned success flag. Otherwise, the message is logged (if
               *  level is high enough) and the message discarded.
               */
              _handle_result( event ) {
                  this.log.debug( 9, "%1 full result reply %2", this, event );
                  // Find the slot in pending
                  let slot = this.pending[String(event.messageId)];
                  if ( slot ) {
                      delete this.pending[String(event.messageId)];
                      if ( event.success ) {
                          this.log.debug( 5, "%1 request %2 (%3) success notification", this, slot.req_id, slot.req.command);
                          slot.resolve( event );
                      } else {
                          // Ref: https://github.com/zwave-js/zwave-js-server#errors
                          this.log.debug( 5, "%1 command result error: %2", this, event );
                          let err;
                          if ( "zwave_error" === event.errorCode ) {
                              err = new Error( `Z-Wave error ${event.zwaveErrorCode}: ${event.zwaveErrorMessage}` );
                          } else {
                              err = new Error( event.errorCode );
                          }
                          slot.reject( err );
                      }
                  } else {
                      this.log.debug( 6, "%1 can't resolve request %2 in reply, slot not found, maybe already timed out", this,
                          event.messageId );
                  }
              }
          

          In this case, the slot data is acquired from this.pending. The slot is removed from this.pending, and then the stored resolve() function is called (with the result message data) if the hub indicates success, or reject() is called (with the error data) otherwise.

          Does this help?

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

          1 Reply Last reply
          0
          • therealdbT Offline
            therealdbT Offline
            therealdb
            wrote on last edited by therealdb
            #7

            that's fair, but I think the problem is different. My flow is this one:

            Prompt => OpenAI => response

            It's not really different from what HTTP action is doing, after all.
            Prompt is by definition dynamic, so I cannot "bind" it to an entity. I think having multiple entities just because I need multiple response is cumbersome (and, probably, not efficient). It will eventually lead to confusion and complicate the final setup, because every time I need to write a new prompt, a new entity will be needed as well.

            Now, if I create multiple entities, your remarks are obviously right. I did a couple of controllers and the infrastructure is pretty clear to me. But if I want to create just the system entity, with an action like x_ai.prompt, I cannot store the response inside an entity attribute, because I could potentially run multiple x_ai.prompt requests and this could cause a lot of troubles. I understand that in a entity-first world this is an edge case, and in fact this is more a service-oriented Controller than the traditional ones, but nevertheless I thinks this use case will eventually surface more and more. It's like the perform_action returning an object as result using the Promise, instead of just being void.

            In my comment, I was referring to a local variable. Imagine a prompt giving you a number as a result, because you're using the GenAI engine to make some prediction based on your logic. By capturing this value inside a variable, I could write, inside the same rule, the logic necessary to tie this value to some specific actions, like turning on some light, or send a notification if a threshold is met. I know I can assign it to the system entity, but this will need multiple rules to capture the result, so this will probably make things very complicated.

            I'm asking for some guidance in order to implement this kind of architecture, where the response is directly tied (and captured, and used) in the same context of the rule where the request is generated. I'm not sure if this is clearer than my previous attempt to describe the question. Thanks!

            --
            On a mission to automate everything.

            My MS Reactor contrib
            My Luup Plug-ins

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

              What causes the request? Local variables live in rules, but rules are only evaluated (and local variables updated) when a dependency notifies a change. What will cause the query to the remote endpoint?

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

              1 Reply Last reply
              0
              • therealdbT Offline
                therealdbT Offline
                therealdb
                wrote on last edited by
                #9

                It could be a door being opened, a time trigger - or something else. The prompt will be generated from a source (this could be some text coming from an e-mail, a web site, or status coming from sensors - sky's the limit), sent to the OpenAI (or something else), processed, and a response generated. The output could be a JSON, a string, or whatever you want. The GenAI model is capable of generating everything, based on the prompt. This is a basic example:

                image.png

                The prompt is composed inline, and the response is being generated (and, in this case, sent to Alexa for TTS).

                Here's another variation, for a JSON payload:

                image.png

                It's crucial to send the request and get the response in the same logic, otherwise it will be impossible to easily build something with this. Thanks.

                --
                On a mission to automate everything.

                My MS Reactor contrib
                My Luup Plug-ins

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

                  OK. Still not fully there for me. When you run the HTTP Request action, it waits for the response, and then stores the response in the specified local variable. That value is now available to the remainder of the Reaction, so you can send it to TTS.

                  What am I missing?

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

                  therealdbT 1 Reply Last reply
                  0
                  • toggledbitsT toggledbits

                    OK. Still not fully there for me. When you run the HTTP Request action, it waits for the response, and then stores the response in the specified local variable. That value is now available to the remainder of the Reaction, so you can send it to TTS.

                    What am I missing?

                    therealdbT Offline
                    therealdbT Offline
                    therealdb
                    wrote on last edited by
                    #11

                    I don't want to use an HTTP action, but a controller one! Right now it's impossible to save entity action response to a variable, if I'm not missing something. The question is this: how to build the same flow using a controller action?

                    --
                    On a mission to automate everything.

                    My MS Reactor contrib
                    My Luup Plug-ins

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

                      But you can use the entity-based action response as if it was a variable. It is in many ways better, in fact, because there's a ton more code required in Reactor to make rule conditions responsive to variables than there is to make it responsive to attributes — attributes are very efficient.

                      I know you don't want to use an HTTP Request, but I want to know why. I guess I'm not understanding what's inadequate about the HTTP Request for your purpose in the first place.

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

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

                        My /ai/prompt endpoint encapsulate the logic to query OpenAI. That's great for me personally (so, not really shareable with the community), but that's another moving part in the system that could potentially fail. This is a simple web API that is proxying OpenAI (in this case Azure Open AI, but that's the same). It is acting as my controller, but it's not reusable, it's prone to errors and I think an OpenAIController will be better than this.

                        All that said:

                        But you can use the entity-based action response as if it was a variable. It is in many ways better, in fact, because there's a ton more code required in Reactor to make rule conditions responsive to variables than there is to make it responsive to attributes — attributes are very efficient.

                        So, you think that it's better to have two rules, one triggering the request and another looking for the response and watching the attributes (ie: response and response_id, tied to a request_id from the original prompt)?

                        --
                        On a mission to automate everything.

                        My MS Reactor contrib
                        My Luup Plug-ins

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

                          I'm not understanding why you think it takes two rules.

                          If you run an HTTP Request and store the response in a local variable, the next step in the same Reaction has access to that local variable. And the contents of that local variable will be exactly the response to the request, not any other request (so no ID tracking is necessary). The Rule that triggers the request can be the same rule that processes it.

                          Are you assuming that the HTTP Request action is asynchronous when storing the result? Because it's not. It will wait for the result and store it before moving on to the next step of the Reaction. That's documented.

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

                          1 Reply Last reply
                          0
                          • therealdbT Offline
                            therealdbT Offline
                            therealdb
                            wrote on last edited by
                            #15

                            No, I'm quite experienced and I know how a promise works 😬

                            Anyway, the point here is different but I'm not able to fully explain myself. I'm out for work for a couple of days, but I'll post a photoshopped solution, so I hope things will be more clear.

                            --
                            On a mission to automate everything.

                            My MS Reactor contrib
                            My Luup Plug-ins

                            toggledbitsT 1 Reply Last reply
                            0
                            • therealdbT therealdb

                              No, I'm quite experienced and I know how a promise works 😬

                              Anyway, the point here is different but I'm not able to fully explain myself. I'm out for work for a couple of days, but I'll post a photoshopped solution, so I hope things will be more clear.

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

                              @therealdb said in [Reactor] Services with sync response:

                              No, I'm quite experienced and I know how a promise works

                              I'm not talking about a Promise, and of course I know well that you know how that works. I'm talking about the HTTP Request action in a Reaction. It waits for the response and stores it, so that the rest of the steps of the Reaction can work with the response received. If that doesn't address your need, I'm unclear how.

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

                              1 Reply Last reply
                              0
                              • therealdbT Offline
                                therealdbT Offline
                                therealdb
                                wrote on last edited by
                                #17

                                ok, so, here's a photoshopped version of the ideal world I'm trying to describe:

                                image.png

                                The point here is that I don't want to do an HTTP request, I want to call an entity action and capture the result, if any, in a variable. Keep in mind that I'm describing an ideal world, and I'm OK to alternative solutions that still uses a Controller (and not an HTTP Action, that's temporary and I want to move to a custom Controller), wait for a response from a service, capture it and use in the same flow, if possible.

                                So, more like services than entity-oriented controller.

                                I hope this is better explained now. Thanks!

                                --
                                On a mission to automate everything.

                                My MS Reactor contrib
                                My Luup Plug-ins

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

                                  OK. I think I see where you are going. I was bogged down by the HTTP part, since that's existing functionality you can solve the problem with today. You're really asking for something much bigger. You just generally want entity actions to be able to return data, which they currently don't, so you can do things like:

                                  • Return the next upcoming event from a calendar;
                                  • Receive a value and look it up in a table, then return the found result;
                                  • Given the name of a playlist on a media player, return the list of media it contains.
                                  • Given the symbol for a security or crypto coin, return its current price.
                                  • Run a script on Home Assistant and receive whatever response it returned.

                                  And you want this to work in-line in Reactions, without necessarily binding the result value to an attribute on the entity performing the action, or having to preconfigure an input in YAML config (e.g. the symbol for a stock or crypto asset to be fetched/polled). The result value is, in fact, typically temporary and not useful outside the context of the Reaction (although it and values derived from it can be stored otherwise by other steps of the Reaction).

                                  Do I have it now?

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

                                  therealdbT 1 Reply Last reply
                                  0
                                  • toggledbitsT toggledbits

                                    OK. I think I see where you are going. I was bogged down by the HTTP part, since that's existing functionality you can solve the problem with today. You're really asking for something much bigger. You just generally want entity actions to be able to return data, which they currently don't, so you can do things like:

                                    • Return the next upcoming event from a calendar;
                                    • Receive a value and look it up in a table, then return the found result;
                                    • Given the name of a playlist on a media player, return the list of media it contains.
                                    • Given the symbol for a security or crypto coin, return its current price.
                                    • Run a script on Home Assistant and receive whatever response it returned.

                                    And you want this to work in-line in Reactions, without necessarily binding the result value to an attribute on the entity performing the action, or having to preconfigure an input in YAML config (e.g. the symbol for a stock or crypto asset to be fetched/polled). The result value is, in fact, typically temporary and not useful outside the context of the Reaction (although it and values derived from it can be stored otherwise by other steps of the Reaction).

                                    Do I have it now?

                                    therealdbT Offline
                                    therealdbT Offline
                                    therealdb
                                    wrote on last edited by therealdb
                                    #19

                                    @toggledbits yes sir. That why you're the master and I'm your humble follower 🤣

                                    Because I know it's not trivial, I'm also asking for guidance on how to achieve something similar with what we have today. Thanks.

                                    --
                                    On a mission to automate everything.

                                    My MS Reactor contrib
                                    My Luup Plug-ins

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

                                      I'm on it. Sit tight.

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

                                      1 Reply Last reply
                                      0
                                      • toggledbitsT toggledbits locked this topic on
                                      • toggledbitsT toggledbits unlocked this topic on
                                      • toggledbitsT toggledbits locked this topic on
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      Recent Topics

                                      • Advice reqeusted to migrate MSR from Bare Metal to Container
                                        T
                                        tamorgen
                                        0
                                        5
                                        33

                                      • Reactor (Multi-System/Multi-Hub) Announcements
                                        toggledbitsT
                                        toggledbits
                                        5
                                        122
                                        35.4k

                                      • Z-Wave Future....
                                        CatmanV2C
                                        CatmanV2
                                        0
                                        5
                                        125

                                      • Can´t restart or upgrade/deploy MSR
                                        toggledbitsT
                                        toggledbits
                                        0
                                        4
                                        83

                                      • [Solved] Limit HA Entity in MSR
                                        wmarcolinW
                                        wmarcolin
                                        0
                                        7
                                        188

                                      • Disaster recovery and virtualisation
                                        CatmanV2C
                                        CatmanV2
                                        0
                                        5
                                        655

                                      • Remote access of Zwave stick from Z-wave server
                                        CatmanV2C
                                        CatmanV2
                                        0
                                        3
                                        380

                                      • Organizing/ structuring rule sets and rules
                                        G
                                        gwp1
                                        0
                                        5
                                        373

                                      • Moving MSR from a QNAP container to RP 5 - some issues
                                        G
                                        gwp1
                                        0
                                        5
                                        343

                                      • Widget deletion does not work and landing page (status) is empy
                                        G
                                        gwp1
                                        0
                                        4
                                        335

                                      • Need help reducing false positive notifications
                                        T
                                        tamorgen
                                        0
                                        7
                                        518
                                      Powered by NodeBB | Contributors
                                      Hosted freely by 10RUPTiV - Solutions Technologiques | Contact us
                                      • Login

                                      • Don't have an account? Register

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