@toggledbits I understand that you do not perform testing on Mac computers but thought I'd share the following with you in case something can be done.
I started seeing these errors with version 24302. I thought that upgrading to 24343 would have fixed the issue but unfortunately not. I either have to close the browser or clear the cache for the errors to stop popping-up but they slowly come back.
I see these errors on the following browsers:
Safari 16.6.1 on macOS Big Sur Safari 18.1.1 on MacOS Sonoma DuckDuckGo 1.118.0 on macOS Big Sur and Sonoma Firefox 133.0.3 on macOS Big Sur Chrome 131.0.6778 on macOS Big SurHere are the errors
Safari while creating/updating an expression
@http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:543:91 makeExprMenu@http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:537:28 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:92:64 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:89:68 each@http://192.168.0.13:8111/node_modules/jquery/dist/jquery.min.js:2:3133 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:89:35 @http://192.168.0.13:8111/client/MessageBus.js:98:44 forEach@[native code] @http://192.168.0.13:8111/client/MessageBus.js:95:54 @http://192.168.0.13:8111/client/MessageBus.js:106:44 @http://192.168.0.13:8111/client/Observable.js:78:28 signalModified@http://192.168.0.13:8111/reactor/en-ca/lib/js/ee.js:146:21 signalModified@http://192.168.0.13:8111/reactor/en-ca/lib/js/expression-editor.js:40:29 reindexExpressions@http://192.168.0.13:8111/reactor/en-ca/lib/js/expression-editor.js:71:32 @http://192.168.0.13:8111/reactor/en-ca/lib/js/expression-editor.js:608:40 dispatch@http://192.168.0.13:8111/node_modules/jquery/dist/jquery.min.js:2:40040DuckDuckGo while clicking on status
http://192.168.0.13:8111/reactor/en-ca/lib/js/reactor-ui-status.js:789:44 asyncFunctionResume@[native code] saveGridLayout@[native code] dispatchEvent@[native code] _triggerEvent@http://192.168.0.13:8111/node_modules/gridstack/dist/gridstack.js:1401:30 _triggerAddEvent@http://192.168.0.13:8111/node_modules/gridstack/dist/gridstack.js:1383:31 makeWidget@http://192.168.0.13:8111/node_modules/gridstack/dist/gridstack.js:968:30 addWidget@http://192.168.0.13:8111/node_modules/gridstack/dist/gridstack.js:388:24 placeWidgetAdder@http://192.168.0.13:8111/reactor/en-ca/lib/js/reactor-ui-status.js:183:44Firefox while updating a rule
@http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:543:91 makeExprMenu@http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:537:28 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:92:64 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:89:68 each@http://192.168.0.13:8111/node_modules/jquery/dist/jquery.min.js:2:3133 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reaction-editor.js:89:35 @http://192.168.0.13:8111/client/MessageBus.js:98:44 forEach@[native code] @http://192.168.0.13:8111/client/MessageBus.js:95:54 @http://192.168.0.13:8111/client/MessageBus.js:106:44 @http://192.168.0.13:8111/client/Observable.js:78:28 notifySaved@http://192.168.0.13:8111/reactor/en-ca/lib/js/ee.js:82:21 notifySaved@http://192.168.0.13:8111/reactor/en-ca/lib/js/expression-editor.js:47:26 @http://192.168.0.13:8111/reactor/en-ca/lib/js/reactor-ui-rules.js:1460:39 forEach@[native code] @http://192.168.0.13:8111/reactor/en-ca/lib/js/reactor-ui-rules.js:1459:58Chrome while creating/updating an expression
TypeError: Cannot read properties of undefined (reading 'getEditor') at RuleEditor.makeExprMenu (http://192.168.0.13:8111/reactor/en-ca/lib/js/rule-editor.js:1788:86) at Object.handler (http://192.168.0.13:8111/reactor/en-ca/lib/js/rule-editor.js:2174:54) at http://192.168.0.13:8111/client/MessageBus.js:98:44 at Array.forEach (<anonymous>) at MessageBus._sendToBus (http://192.168.0.13:8111/client/MessageBus.js:95:54) at MessageBus.send (http://192.168.0.13:8111/client/MessageBus.js:106:44) at ExpressionEditor.publish (http://192.168.0.13:8111/client/Observable.js:78:28) at ExpressionEditor.signalModified (http://192.168.0.13:8111/reactor/en-ca/lib/js/ee.js:146:14) at ExpressionEditor.signalModified (http://192.168.0.13:8111/reactor/en-ca/lib/js/expression-editor.js:40:15) at ExpressionEditor.reindexExpressions (http://192.168.0.13:8111/reactor/en-ca/lib/js/expression-editor.js:71:18) ``Thanks to @toggledbits for adding a custom CSS. I've started doing a darker Reactor style.
Here's the file: https://gist.github.com/dbochicchio/825098ac13b7f8cac22012eae37ff7ce
A couple of things are still too bright and I'll eventually catch-up. Just place it under your /config directory, naming the file as customstyles.css. Hard refresh your browser.
Hi
Having to rebuild my Linux Debian box as the SSD failed. And I have forgotten exactly what I did the first time to get it all setup.
I have Debian 12 up and running on the new SSD, I only have console no Desktop GUI.
I am trying to do the bare metal install for MSR. However I am not sure if I am meant to install nodejs whlist logged in as the root user or as the none root user with my name ?
I used putty and connected via SSH and logged in as root and I installed nodejs but I think this was wrong as when logged in as my user name and I do a node -v command it says node is not installed or doesn't show any version number anyway.
But when logged in as root and I do a node -v command it does show me its installed and displays the version number. maybe its a path issue for my username and he can't see node is installed?
So now I am thinking I should of installed node whilst logged in as my user name and not as the root user.
This is how I installed nodejs as whilst logged in as root
ac7bf6c3-23ad-46fc-8ada-44af6704e63e-image.png
Thanks in advance.
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.As the title says, here's my OpenAI Controller for Reactor:
OpenAI Controller per Reactor. Contribute to dbochicchio/reactor-openai development by creating an account on GitHub.
It supports both OpenAI and Azure OpenAI endpoints. You'll need keys/endpoints, according to each service.
The controller supports multiple models, and each one could be mapped as an entity.
It's quite easy to use, and responses can be stored in variables, for easy access. Or sent to another action (Text To Speech, another endpoint, etc).
9013ae50-fd68-42a2-87c3-97479132e465-image.png
80a88eec-7c89-464a-8196-690b4b72d044-image.png
Have fun with LLM into your scenes!
In Home Assistant I have an integration that if I add entities to it, I will get the following error in MSR as certain entity values I'm using in expressions are null for a moment. This is more or less cosmetic issue and happens very rarely as I rarely modify that integration on the hass side.
Screenshot 2024-11-28 at 22.20.41.png
And the expression is
Screenshot 2024-11-28 at 22.38.19.png
Could I "wrap" hass-entity shown above somewhat differently to prevent this error from happening? Using build 24302.
Hello
I am trying to set up Multi System Reactor to automate routines across multiple smart home devices & platforms (e.g., Home Assistant, SmartThings, and Hubitat). While I have successfully linked the systems; I am facing issues with:
-Delays in triggering actions on secondary devices.
-Inconsistent execution of complex logic conditions.
-Synchronization of states between devices when one system updates.
Is there a recommended way to optimize performance & confirm seamless state sharing across systems?
I have checked https://smarthome.community/category/22/multi-system-reactor-msbi guide for reference but still need advice.
Any tips on debugging or log analysis to pinpoint where the issue arises would also be appreciated.
Thank you !
I've managed to use MSR UI on iOS devices to some degree*, so that although UI elements (e.g. rule sets) are not visible in portrait mode, you've seen them in landscape. Now with recents builds (24302) this does not work anymore, elements (rule sets, entities) are not anymore visible in landscape mode.
Does anyone have similar experiences? Using iOS 18 and Safari/Chrome browser.
( *Drag & drop of rule conditions have never worked on a mobile)
@toggledbits Since I have upgraded ZWaveJSController to 24293 from 24257 I am seeing entries related to registering action set_volume, but action is not defined by the capability 143 every time I restart Reactor.
The Siren seems to be doing what it is supposed to do. The volume levels are fine. Should I worry about it?
Reactor version 24302
ZWaveJSController version 24293
Z-Wave JS UI version 9.27.4
zwave-js version 14.3.4
I have the following ACL defined:
groups: admin: users: - admin applications: true api_acls: # This ACL allows users in the "admin" group to access the API - url: "/api" group: admin allow: true log: true # This ACL allows anyone/thing to access the /api/v1/alive API endpoint - url: "/api/v1/alive" allow: trueAnd I have authenticated to MSR as "admin" user. However, I'm getting "access denied" when trying to access http://*******:8111/api/v1/log
So what I'm missing, is my ACL incorrectly defined?
Using build 24302 on Docker.
Hi
I have just connected a bunch of EzloPi controllers to MSR to import some ESP based devices etc.
They all seemed to have worked and imported in to MSR apart from I have one missing device. It is a Digital Gas Sensor device.
This is how that device looks in the Ezlo API.
Devices Info:
_id: "10696001" deviceTypeId: "ezlopi" parentDeviceId: "10696000" category: "level_sensor" subcategory: "" gatewayId: "457a5069" batteryPowered: false name: "Gas Sensor Digital" type: "sensor" reachable: true persistent: true serviceNotification: false armed: false roomId: "" security: "no" ready: true status: "idle" parentRoom: true protectConfig: "default"Items Info:
_id: "20696001" deviceId: "10696001" hasGetter: true hasSetter: false name: "smoke_density" show: true valueType: "substance_amount" scale: "parts_per_million" value: 2.7472610473632812 valueFormatted: "2.75" status: "idle"There is also an Analog Gas sensor that one did import in to MSR OK.
68d63dab-b871-4f44-912b-cf6e0b9eb4c6-image.png
Devices Info:
_id: "10696000" deviceTypeId: "ezlopi" parentDeviceId: "10696000" category: "security_sensor" subcategory: "gas" gatewayId: "457a5069" batteryPowered: false name: "Gas Sensor Analog" type: "sensor" reachable: true persistent: true serviceNotification: false armed: false roomId: "" security: "no" ready: true status: "idle" parentRoom: true protectConfig: "default"Items Info:
_id: "20696000" deviceId: "10696000" hasGetter: true hasSetter: false name: "gas_alarm" show: true valueType: "token" enum: 0: "no_gas" 1: "combustible_gas_detected" 2: "toxic_gas_detected" 3: "unknown" valueFormatted: "no_gas" value: "no_gas" status: "idle"And this is how this MQ2 Gas Sensor looks like on their dashboard:
Digital
cb77dfa3-4af5-4d06-9635-89207a716a89-image.png
Analog
4fb4da1b-e946-4b89-876c-bcd9f5699b6c-image.png
They have an EzloPi website here you can create your own sensor projects using ESP boards, which is very interesting stuff!
And I just wrote on the Ezlo forum here, how to connect an EzloPi controller to MSR.
THANKS.
A couple of things for you @toggledbits, since you mentioned that this release has new features and some tweaks are expected.
Local expressions cannot be deleted. Pushing the X button has no effect for me.
When cloning an entity action, the result is strange (first is cloned one, second is the original action):
a92ea094-9e2c-4aaa-bf47-2d07a6ffdbd0-image.png
When changing the action on the cloned element, the params are added to the original one. See screenshot:
92ac3011-83c8-466b-bd23-47d483ad7a52-image.png
Dark theme has a couple of strange contrasts. One is visible in the previous screenshots (white text on yellow background). Another one is in groups (blue text on blue background):
9b3c4988-53ef-44e6-9672-30e744cacb75-image.png
Overall, I found blue, yellow, red and green (in buttons and forms) to be too bright.
On the bright side:
I love the new script action: thank you! The dark theme is a great start to avoid getting blinded at night I promise I'll try very soon the new features around actions. Thanks!@toggledbits
I just upgraded to version MSR 24293, bare metal running on Fedora. Upon restart, I am getting a error banner:
I followed the new directions about npm
npm i --no-save --no-package-lock --omit dev
Any idea what the issue is?
Seems like switching the UI to the newly added dark mode (thank you for this) does nothing. The UI stays in light mode and only a few buttons turn into dark mode (see screenshot)
Things I have tried:
Hard refresh
Different browser
Different computer
Restarting Reactor
Failed troubleshooting attempts:
No errors in Chrome console
No relevant errors in Reactor log (can still PM the full log file)
Reactor version: latest-24293-ea42a81d
Hardware: Odroid N2+
Linux version: Ubuntu 24.04.1 LTS
3df2806f-9146-485b-9ec1-d056e91cefe5-image.png Dark mode enabled
ff823023-c079-4684-b01f-d6ac6527d31a-image.png Light mode enabled
Good morning,
I have a service MQTT service that needs a restart occasionally. The add-on (Smartbed MQTT) is for the smart bed base for my bed. It has a "safety light" that I can control from HAAS & MSR as a light entity, and also moves the head of the bed to a preset at bedtime, and then lies it back flat in the morning The problem is, from time to time, the light becomes "unavailable" Restarting from the Add-ons tab in HAAS always fixes it, but I should be able to detect when it happens when "light.tempur_pedic_safety_lights" is not true or false, i.e., unavailable.
What I don't know how to do is how to restart that service. Does anybody have experience in restarting add-ons from MSR?
Running:
Reactor (Multi-hub) latest-24212-3ce15e25 ZWaveJSController [0.1.24232]HAAS:
RPi5-64 (8GB) Core 2024.7.3 Supervisor 2024.08.0 Operating System 13.0 Frontend 20240710.0Low-priority GUI feedback
-
You are correct. That is what I wanted, Just not smart enough to try drag and drop. That works perfectly.
Thanks -
Haven't touched my system for a while (or read updates here), busy with other projects..
Just have to mention that I updated to the latest today and found the new entity selector tool... LOVE it! That has been my only nagging thing about reactor since vera reactor, all that scrolling..
Thanks, @toggledbits, this is really turning into something VERY good! -
@toggledbits I'm finally checking out the [RULE RESULT] condition type, and with only a cursory look (I don't recall it from the Docs -- just found its stub at /docs/Rule-Conditions/), come away with more questions than solid understanding... (the rest of my day will be spent gaining the latter):
• I see the options
[is TRUE]
,[is FALSE]
,[is NULL]
,[is not NULL]
, and[changes state]
(which make sense to me)
• I believe the[is NULL]
state applies to the target Rule's status reading "undefined -- false as of 10:18:46" (i.e. "undefined" and NULL being treated as equivalent) -- but wonder if users should therefore see its status as "NULL -- false as of 10:18:46" for clarity?
• I believe that only Rules that have never (ever) been Run* will match with[is NULL]
?
*Probably more apt to say "has never been RESET" (since I noticed never-run Rules on which I manually click RESET go from "undefined" to "null")
• Disabled rules, since they continue to display their last state (true
orfalse
), are not distinguished by this mechanismIn light of the last fact, I propose that two more states be included for testing:
[is Enabled]
and[is Disabled]
This would allow a couple of important decisions in the logic flow, such as "Don't do this if the other Rule isn't firing", as well as allow a kind of "Master Switch" setup whereby the referred Rule can serve as a "virtual switch" to effectively enable/disable all of the referring Rules.
-
@librasun said in Low-priority GUI feedback:
In light of the last fact, I propose that two more states be included for testing: [is Enabled] and [is Disabled]
This would allow a couple of important decisions in the logic flow, such as "Don't do this if the other Rule isn't firing", as well as allow a kind of "Master Switch" setup whereby the referred Rule can serve as a "virtual switch" to effectively enable/disable all of the referring Rules.Slippery slope defined.
I've already been asked to make an action to enable and disable rules at will. This strikes me as a highway to nightmarish scenarios in which not only does a user's (and by extension likely my) troubleshooting necessarily include the already ample detective work of figuring out the states of conditions in enabled rules (and how the logic came to be, and what the problem is that that logic is intended to solve), but now also we have added carnival funhouse horror that any reaction anywhere in the system can enable or disable any rule at will. In other words, you're moving a part of the logic of a rule out to some other part of the system where there is no visibility from the rule in question that the rule may, in fact, be run or not. I have not yet seen an argument in favor of an enable/disable action that overwhelmes my concerns over how they will be applied.
So, if there's a test for
is Enabled
andis Disabled
, I can see right on the heels of that the question coming (again) for an action to cause those states. And your further "Master Switch" comment pretty much confirms this direction.whereby the referred Rule can serve as a "virtual switch" to effectively enable/disable all of the referring Rules.
I'd rather provide a built-in set of virtual entities that live entirely in the MSR side. It's also more consistent with the model.
So, sorry, I understand how much power enable/disable might be, and how it could be used for good, but in this case the potential for abuse is rife.
-
All valid reasoning, as per usual. There's plenty logic in place as-is for users to construct what they need in the way of gates.
My next question has to do with HTTP Request: Do you plan to add "PUT" and other methods (e.g. "PATCH", "DELETE"), alongside "GET" and "POST"?
-
Yes, can do.
-
I vote that the expanded list of Rule Sets be (a) indented slightly, so as to distinguish them from the primary UI elements (e.g. "Entities" et seq), and (b) perhaps display a vertical rule | alongside to further differentiate them as a "submenu".
Right now, the bold-vs-not-bold sometimes throws me, because my list of Rule Sets (greatly truncated here, for clarity) can be longer than the scroll window itself.
P.S. THANKS for the "PUT" and other verbs now available with HTTP Request!
-
@toggledbits would it be possible to augment
vera>housemode
with its own timestamp, so that repeated setting to the same mode can be detected? Currently, I have no obvious way to trigger on "HOME" if Vera is already set to "HOME", etc.I wasn't even certain that Vera herself reacts internally in any way when I click "HOME" on the Dashboard while she's already in "HOME" mode, so I peeked in her LuaUPnP log and saw:
08 04/06/21 8:56:08.257 JobHandler_LuaUPnP::HandleActionRequest device: 0 service: urn:micasaverde-com:serviceId:HomeAutomationGateway1 action: SetHouseMode <0x70a0e520> 08 04/06/21 8:56:08.257 JobHandler_LuaUPnP::HandleActionRequest argument serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1 <0x70a0e520> 08 04/06/21 8:56:08.258 JobHandler_LuaUPnP::HandleActionRequest argument action=SetHouseMode <0x70a0e520> 08 04/06/21 8:56:08.258 JobHandler_LuaUPnP::HandleActionRequest argument Mode=1 <0x70a0e520> 08 04/06/21 8:56:08.258 JobHandler_LuaUPnP::HandleActionRequest argument rand=0.7538517467636494 <0x70a0e520> 06 04/06/21 8:56:08.261 Device_Variable::m_szValue_set device: 224 service: urn:micasaverde-com:serviceId:SecuritySensor1 variable: Armed was: 0 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x1057770/NONE duplicate:1 <0x70a0e520> 06 04/06/21 8:56:08.282 Device_Variable::m_szValue_set device: 264 service: urn:micasaverde-com:serviceId:SecuritySensor1 variable: Armed was: 0 now: 0 #hooks: 0 upnp: 0 skip: 0 v:0x1057770/NONE duplicate:1 <0x
Short of creating a virtual switch or sensor that Vera "arms" on every mode change, I'm unsure how to detect the logged reactions back on MSR. Any thoughts?
P.S. Funny, I'm also just discovering that Vera cannot trigger her own Scenes based on House Mode changing. Who knew?
EDIT: So, I went with creating a (binary on/off) Virtual Switch using Switchboard plug-in. By having Vera turn this switch "On" for every House Mode, MSR can now detect "updates" to House Mode, not merely "changes". This is useful to my workflow. I'll simply create an additional action in SET REACTION which turns the new VS back "Off" automatically.
-
I would not be able to make this work on RFV or MSR. There is no timestamp for house mode on Vera because it isn't a state variable, it's an attribute of (virtual) device 0, the HomeAutomationGateway1 engine (which is why it appears as an attribute of the root in user_data). There's nothing to put a watch callback on, because you can only watch state variables. This is why the HouseModes plugin has to poll for changes. Reactor (for Vera) takes a different approach (to eliminate polling and the response delay it causes--RFV reacts immediately), but nonetheless can't see when house mode is set to what it already is because Vera itself won't take any action when that happens. And therefore MSR cannot see it either (although MSR uses yet another approach and can respond immediately on changes like RFV).
-
By the way, this could also segue into a treatise about why there's no updates operator in MSR, because it's related, so let's do that:
On Vera, every state variable also has a timestamp. The general behavior on Vera is that when a state variable value changes, its timestamp is updated as well. If a state variable is set to the same value it already has (write without change), the timestamp does not change. There are, however, exceptions to this rule: state variables whose name starts with
sl_
will get a timestamp update when their value is set, even if it is set to the same value it already has. This specifically allows scene controllers, locks, and keypads to work. These device types all usesl_
-named variables for those states/data that can be "active" when set to the same value (e.g. the same lock code is used twice on a keypad or lock, or the same button is pressed back-to-back on a scene controller).This also manifests in Vera as a call to the watch callback for the variable, if any. The watch callback is typically only called when the value of the state variable changes, unless it's an
sl_
-named variable, in which case the watch callback is called unconditionally. This is how Reactor for Vera (RFV) detects and implements the updates operator.Given that information, one might think that you can, from outside Luup (i.e. in MSR using HTTP requests for interface), detect same-value updates by tracking the timestamp, but there are two problems:
- The timestamp is not exported in the
user_data
orstatus
requests (or any that I'm aware of), so you can't access it from outside the system. The only place it is visible/available is within Luup itself by callingluup.variable_get()
; - Even if we got the timestamps, the timestamps are not stable, they are volatile: Luup does not store the timestamps in user_data.json, it only keeps them in RAM (which is probably also why they are not exported). Every time Vera reloads, every state variable's timestamp is updated/rewritten to the current time during startup. So it's actually not usable as a persistent value to compare to prior values across reloads, it's only usable within the context of the current Luup reload. That raises the complexity of determining if a timestamp change is the result of an actual change, or a reload with no change in value, or a reload with a change in value during downtime.
- If we stored timestamps with values, it would double the memory consumption of attributes (because then it has to store two values for every attribute rather than one, and there are a lot of attributes in memory), and do so only for the benefit of one operator applicable in a very small number of cases.
Aside from this, MSR isn't a Vera plugin, or a logic engine just for Vera. Neither Hubitat nor Hass, nor any other system I've yet seen, has timestamps with which an equivalent comparison could be made, or a replacement mechanism by which updates could be reliably implemented for entities originating in any HAC. So in all, updates hasn't (yet) shown a use case/demand that overwhelms the costs in the face of the available workarounds.
- The timestamp is not exported in the
-
But I'd argue this also gives a solid rationale for instantiating a "Reactor Helper Service" back on the host controller, expressly for detecting and propagating these otherwise unavailable "Updates". I know you've considered it, and while not a top priority by any stretch, something to debate with MSR's most ardent users.
-
Definitely doable, and some controllers may require it, but as yet, I'm still holding out. Having a no-dependency install on the controller side I think is a big win.
-
@toggledbits while testing the
random()
function, I created a Rule whose Set Reaction simply waited a period defined by${{timerD}}
where:timerD := random()*5 // (number) 3.7140944926129995 since 16:59:40
then turned on a light, performed another identically-defined Delay, turned off the light, and then re-ran itself with [Run Set Reaction].
Seemed to run as intended, namely with the light going on and off at visibly divergent intervals (0-5 seconds each). However, I notice that the displayed Expression value in Rule Sets (with the Rule expanded, so I could watch its status) never seemed to change. It sat fixed at
3.7140944926129995 since 16:59:40
throughout, despite running for well over a minute (fun to watch!).Should I expect the variable in this instance to update, i.e. each time it is referenced? Or is it truly updating internally and just not showing me the new values with each run?
-
If you are running the same reaction (which I probably should not allow, eh?), it does not re-evaluate the rule, so the expression value never changes. You're getting the same delay every time. Any variance you are seeing is caused by device communication.
-
@toggledbits said in Low-priority GUI feedback:
...the expression value never changes. You're getting the same delay every time.
So:
(a) if I indeed WANT different values each cycle, I assume I should be placingrandom()
nakedly inside the${{ }}
.
(b) up to you whether[ Run ]
should permit self-iteration or not, although aside from the risk of cycling too quickly, I'm loathe to say "Save users from themselves" (unless you envision abuses of the "Use Pulse Instead, Dammit" variety looming ahead).On a separate note, might you consider placing an "Open Eye" / "Closed Eye" icon next to "Enabled"/"Disabled" rules so that color-blind users can benefit? I'm sure the current %(#cc0000)[red font] means nothing to them.
-
@librasun Yes, (a) would work.
WRT (b), reactions aren't throttled, and it's not something I want to go to right now because I don't need to maintain state for reactions, they just run. There is also an unexposed mode of reactions where you can run them inline, rather than as separate processes, so the step after Run Reaction would not start until the reaction finishes (in the current/default mode, the reaction is started asynchronously). That would cause infinite recursion and eventually take things down. Even if I block direct self-reference, I would not go so far as to block A runs B, B runs A. Caveat user, but possible.
I don't like that icon anyway. But I'm trying to stay in one icon family, because using multiple is painful (different sizes, spacing, alignments, etc.), and the library I'm using is big, but still I haven't found anything in it I'm happier with. But I agree, I need to stay away from color alone as a cue (and in this case, it's not just color, but the icon change is very subtle). Here are the eyes in that library:
If you want to look through others, go here: https://icons.getbootstrap.com/
-
@toggledbits said in Low-priority GUI feedback:
Here are the eyes in that library:
Though I don't "love" the eyes, I'm accustomed to them being used with Switchboard app (I believe), so I know they do the job.
We don't need "fancy".
-
-
@toggledbits I just happened to catch a glimpse, in Rule Sets with one of my Rules expanded, of the countdown displaying:
false as of 13:23:58 waiting 0-0:00:03
// then0-0:00:02
, then0-0:00:01
I believe...
instead of just:
false as of 13:23:58 waiting 0:00:01
02, 03, etc.
The extra '0-` bit disappeared after a few seconds, and only happened at the beginning of the count. (My constraint condition is supposed to be true for 60 seconds, and I was specifically watching it to monitor progress.) -
@toggledbits Nice touch allowing the Expression definition cells to be persistently resized. Really helps with large "Objects".
Also just noticing the A-Z sort button atop Rule Sets, which I haven't used yet, but that's a nice touch! New to 21096 or just me not noticing before?