Skip to content

Multi-System Reactor

747 Topics 7.1k Posts
  • Category Topic Guide -- Read Before Posting

    Pinned Locked
    1
    8 Votes
    1 Posts
    702 Views
    No one has replied
  • Reactor (Multi-System/Multi-Hub) Announcements

    Pinned Locked
    113
    5 Votes
    113 Posts
    15k Views
    toggledbitsT
    Reactor STABLE Update

    The stable branch of Reactor is now updated to build 24257. For changes, please scroll back and see the changes and advisory listed since the previous stable branch build (which was 24057).

    IMPORTANT: Bare-metal users will need to update installed packages (run npm i --no-save --no-package-lock --omit-dev in the Reactor install directory).

    NOTE: This stable branch build no longer supports nodejs versions under 18. If you are installing Reactor bare-metal (i.e. not using docker), please make sure you have upgraded to nodejs 18+. An even-numbered LTS (Long-Term Support) version of nodejs is recommended.

  • Thanksgiving lighting took a holiday

    5
    0 Votes
    5 Posts
    79 Views
    G

    Ok, oddly, the correct lights came on last night. 🤷♂

  • Reference error - null object

    Solved
    4
    0 Votes
    4 Posts
    56 Views
    toggledbitsT

    @tunnus et al, please don't post screen shots of code/expressions or logs. Screen shots often end up displaying at a reduced size that makes them very difficult to read. Just copy-paste the actual text and use a fenced code block.

    To the question, as @therealdb said, judicious use of the coalesce operators will generally help here, particularly if you apply local knowledge of the desired outcome. There's another one that's often helpful when working with sources for numeric values that can be occasionally null:

    The ?# operator will take any left side expression and convert it to a number or the value on the right side, so someexp ?# -1 would produce -1 if the value of someexp can't be converted to a number or is null or NaN. In other words, the general form somexp ?# altval is shorthand for do local t=float(someexp), isvalue(t) ? t : altval done

    You can use this to produce, for example, an "off scale low" value that wouldn't trip a "greater than" operator on a trigger for a temporary missing value on an entity. This would let you write your expression more tightly as:

    round( getEntity( "..." )?.attributes?.current_sensor?.value ?# 0 * getEntity( "..." )?.attributes?.x_hubitat_extra_values?.voltagePhase1 ?# 0, 0 )

    Note that the ?# operator has higher precedence than the math operators (like * and +) so you don't need parentheses around the subexpression in this case.

    That said, if it's specifically zero you're after where there's a null, you may not need to do anything special, because the expression language follows the JavaScript semantics for null in arithmetic: null is treated as zero (e.g. null * 8 = 0 * 8 = 0 and null + 8 = 0 + 8 = 8). So this could be written even shorter as:

    round( getEntity( "..." )?.attributes?.current_sensor?.value * getEntity( "..." )?.attributes?.x_hubitat_extra_values?.voltagePhase1, 0 )
  • Trouble Configuring Multi-System Reactor Logic Across Devices

    4
    0 Votes
    4 Posts
    70 Views
    therealdbT

    @gwp1 I removed the link. Let's see if @gregbowers is a bot or not 🙂

  • MSR UI on a mobile browser

    7
    0 Votes
    7 Posts
    161 Views
    toggledbitsT

    @mrFarmer said in MSR UI on a mobile browser:

    Toggling the hamburger menu shows most pages except status. That rarely shows a widget especially in landscape mode. I would not think about making or changing rules on a small screen, but being able to look at the status would be nice.

    Found and fixed for next build. That sent me on a bit of a mission to try to improve the general appearance on the UI, even if editing will never really be fully supported (it may work, but I'm not going to approach it as a "mobile first" redesign, because I don't think that makes sense for this project). Here are some examples of work so far.

    Screenshot_20241125_123614_Brave.jpg Screenshot_20241125_123645_Brave.jpg

    This is a Samsung Galaxy S24 phone. Reduced top (nav)bar, menu moved from left margin to top and stripped of text. Columns removed from lists at this size.

    Screenshot_20241125-123742.png Screenshot_20241125-123711.png

    This is Samsung Galaxy S2 tablet. At this size, the menu returns to the left side, but still without text.

    The Status widget problem is fixed, and in addition, there was an issue where the Status widgets would drag if you touched anywhere in them -- they're only supposed to drag from their headers. Touch is still not working great on the phone (smallest size), but I'm still chipping at it, trying to find a workaround (the gridstack library controls the touch behavior, so I'm at the mercy of their choices and issues).

  • 0 Votes
    2 Posts
    67 Views
    toggledbitsT

    Harmless. Just a warning. I'll see about quieting it for the next build.

  • 0 Votes
    4 Posts
    181 Views
    toggledbitsT

    The error message will be improved, but for reference for future readers, there are two ways to fix this when it happens:

    Change the name of your local variable.

    Explicitly declare and initialize your local variable at the start of your expression as explicitly local. For example, assuming alpha is the name of a global expression/variable but we want to use it as a local variable name:

    local alpha=0, each e in matchEntities( { capability: 'dimming' } ): alpha = alpha + 1
  • 0 Votes
    5 Posts
    141 Views
    therealdbT

    @toggledbits thanks for the help. I will eventually improve this code and apply capabilities only if the device is somewhat new/changed or at startup. OpenSprinklerController is peculiar, but I think I could manage to achieve this result.

    This code is shared among my controllers, I've modified them to better handle updates. Thanks!

  • Access to log file viewer denied

    6
    0 Votes
    6 Posts
    180 Views
    toggledbitsT

    If you change nothing in the ACL configuration, you can add the username and password for access to the query URL as request parameters. The specifics of this are described in the documentation (under Access Control).

    You can modify the ACL to allow anonymous access but restrict the source IP address to whatever host(s) you use.

  • Darker Reactor style

    10
    1 Votes
    10 Posts
    197 Views
    therealdbT

    I just released a new update. I'll eventually move to a dedicated repo when it's stable. This update will specifically address a couple of too bright colors on rule editor. Just replace the file and remember to hard refresh the browser.

  • TTS in MSR?

    Solved
    33
    0 Votes
    33 Posts
    2k Views
    N

    @therealdb said in TTS in MSR?:

    [
    "Bentornato a casa",
    "Casa, dolce casa!",
    "Ciao!",
    ]

    Grazie! and thanks to @toggledbits for the new dark theme, also my eyes are happy!

  • Should MSR import this device type from an Ezlo controller?

    7
    0 Votes
    7 Posts
    165 Views
    cw-kidC

    As for your other comments Gentlemen, I don't disagree with them..

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    2 Views
    No one has replied
  • A couple of things about Reactor 24293

    3
    0 Votes
    3 Posts
    166 Views
    therealdbT

    @toggledbits said in A couple of things about Reactor 24293:

    Yellow has been dealt with. The remaining coloring is Bootstrap (5.3). I don't specify color directly here, I specify type or usage and it chooses color, and it adjusts color based on theme.

    true, but these could be overridden by CSS variables.

    [data-bs-theme=dark] { --bs-blue: #0b5ed7; /* Darker Blue */ --bs-indigo: #520dc2; /* Darker Indigo */ --bs-purple: #59359e; /* Darker Purple */ --bs-pink: #b02a6b; /* Darker Pink */ --bs-red: #b02a37; /* Darker Red */ --bs-orange: #dc6a0a; /* Darker Orange */ --bs-yellow: #e0a800; /* Darker Yellow */ --bs-green: #146c43; /* Darker Green */ --bs-teal: #169b7e; /* Darker Teal */ }

    Give it a try.

  • Error on start for MSR after update to 24293

    14
    0 Votes
    14 Posts
    235 Views
    G

    @toggledbits ignorance is bliss 🙂

  • Dark Mode not Working - 24293

    Solved
    13
    0 Votes
    13 Posts
    207 Views
    CrilleC

    Yes, that did it! Thanks

  • This topic is deleted!

    2
    0 Votes
    2 Posts
    5 Views
  • Is there a way to restart an add-on in HAAS from MSR?

    Locked
    14
    0 Votes
    14 Posts
    277 Views
    T

    @toggledbits said in Is there a way to restart an add-on in HAAS from MSR?:

    If it doesn't work, be sure to check the logs for how HASS responded (it will be logged). My guess that data: line in the service data is redundant, and it's going to complain about it, but let's see.

    I thought it might be as well, but I figured I'd start with the way it was in the YAML code. If it doesn't work, I'll remove that line. The add-on hasn't gone unresponsive since I implemented this, so I can't say if it works or not.

  • Log files

    8
    0 Votes
    8 Posts
    264 Views
    tunnusT

    @toggledbits godspeed Patrick!

Recent Topics