@archers Very Cool gadget. I soldered to the flash pins, which given the size of the contacts was challenging, but managed to make it work. Now waiting for my BLE sensors to arrive.
Energy Monitoring built into the dual relay!
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
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
Hi everyone. Thanks for all your input recently on the topic of local notifications. I think we got some really interesting solutions 🙂
Back to more prosaic matters. Most of you will know that I've been messing around with this stuff for some years. My last major change was when I migrated from Vera, which was something like 4-5 years ago.
While my system has grown, it's not really altered very regularly, although I try to keep most of it kind of up to date.
Current set up:
Intel NUC that runs:
Bare metal install of Debian
Z-way server with Z-wave.me USB stick
Openluup
Altui
Multi system reactor
HA Bridge
Mosquito
Raspberry Pi
Running Home Assistant
About 40 varied Z-wave and Wifi devices
I also have a Synology DS224+ which may inform some responses.
Home Assistant recovery is pretty simple. I get a full backup of the system every night dumped onto my SAN and I know from experience that it would simply be a case of booting up a new install and feeding it the backup.
The NUC on the other hand....
Coming from a commercial IT world, I am becoming more and more conscious that I don't really feel I have a suitable disaster recovery plan, and my core system is running on hardware heading for 10 years old.
My initial thought, which I've kept putting off as it's awkward would be to grab a nice SSD, reboot the NUC into Mint or something similar and simply do a dd copy onto a new drive. I can get a replacement NUC on ebay simply enough, and keep it in a cupboard if anything other than the hard drive fails on the existing one, but this feels rather like a stop gap. However one immediate question:
If I had to use the replacement NUC would all the Z-wave devices simply carry on talking to the stick, or would they all need to be re-paired?
How easy would it be to move everything the NUC does (as a start) onto the NAS? Create a VM and clone the disc onto it?
Should I move to Docker? Something else?
What are the hive mind's thoughts?
Apologies if we've done this before, but while it all just works...
Cheers!
C
Morning world. Looking for some thoughts on recent experience 🙂
Yesterday my ISP had something of a catastrophic failure (in theory not yet fixed but seems OK for now)
While this is annoying for several reasons, one thing that I wasn't expecting was for AltUI to become pretty much un-usable.
Unless I have a tab already open and active, connecting to the Home page is pretty much random / impossible, just presenting with a white page and (sometimes) 'Waiting for initial data' on the bottom. Everything works (i.e. where I have controllers or Reactions I can trigger, they function flawlessly) it's just something of a pain since 99.9% of my control is via Alexa now, and not being able to access devices in AltUI makes things like turning some lights of a bit tricky 😉
I suspect that this is due to AltUI trying to pull licence info and Weather data, and failing. What I should do is probably access the OpelLuup console direct and see if that works better in future.
Does that make sense to anyone, or am I completely off track?
Cheers
C
Hi all. First post so please be gentle.
I have an Eachen two-gang smart wall switch wired no neutral (with capacitor) connected to existing bathroom lights which works perfectly. It's also wired to a Sonoff Mini R4 Extreme connected to LED lights. I want the LED lights to switch on when the bathroom lights switch on (and vice versa). The Mini R4 works separately on my phone via Ewelink as well as on the Mini R4 itself (physical button). The switch is installed inside the wall and the rest of the components are in the ceiling / attic / roof cavity. The Mini R4 is set to Edge switch mode which works in my example I wired.
How I wired it:
cb919874-6933-460a-8cd0-f063bac88674-image.png
I have a video showcasing the example I wired today works. I could share it if required. Ignore the white cable. I only used it to power the example.
77ebbc23-83de-48ee-a4bf-247bfd24f121-image.png
3827ede6-cf5c-47aa-8fdb-c75470101c4a-image.png
The wiring diagram I used for the mini R4.
485de912-e656-4da3-b6f6-81cb076e0261-image.png
I wired it together with the existing lights of the bathroom so that L1 switches on both the Mini R4 and the bathroom lights:
a3ea5c93-a9ae-4aaf-8dce-24018bcdb4d1-image.png
This is the wiring diagram for the Eachen switch:
b867a3c7-c1ac-428c-a90f-7f0f4b62a609-image.png
The Eachen's first gang (L1) doesn't trigger the Mini R4 in any way.
Any help or advice will be much appreciated.
Thanks,
R
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: intAnd 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: jsonSo 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 AMThis 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]
Hi, @toggledbits
I just noticed that following a reboot of my raspberry pi, some of the rules, that I was expecting to recover, are not catching up following a reboot. I have made a simple test rule (rule-m6rz6ol1) with only "after Date/time" as trigger and "turn on a lamp" as a set reaction. All my infrastructure is on the same board so Reactor, Hass, Zwavejs, ... are all rebooting.
Here is the sequence of the test case (All time converted to Zulu to match logs):
Rule "after Date/Time" set to 14:05:00z Shutdown on Raspberry Pi at 14:04:00z Power back up at 14:08:00z Rule overview shows true as of 14:08:14z waiting for 00:00:00 in GUIFrom the log I can see that MSR is picking up the rule and knows that the state of the rule has changed from false to true and tries to send the update to HASS but failed with websocket error.
Here is what I see from the log:
14:04:04z shutdown complete 14:08:08z Power up 14:08:13.111z websocket connection 14:08:15:323z Reaction to the light failed, Websocket not opened After there is a series of websocket connection attempt until 14:08:51z where it seemed to be really ready.Back in 2021 we had a discussion (https://smarthome.community/topic/700/solved-start-up?_=1738766986566) and you proposed to add a startup_delay:xxxx and startup_wait:xxxx parameter in the engine section of "reactor.yaml". When I try the startup_delay (this used to be a hard delay), the engine failed to start (I think). I then try the startup_wait:xxxx without any success. Since it wait for the connection status to be up to cancel the delay, it does not do anyting since Hass is reporting the socket up without really being up ( I think...).
Questions:
Did I figured it all wrong? should the startup_delay:xxxxx have worked? Any ideas?Here is the log:
OK now I am stuck. I did add the log but when I submit the editor complained saying that I am limited to 32767 characters. The log from the shutdown to the time the websocket is stable is about 300000 character long. What are my options?
Not a big issue simply a request if easily doable.
The MSR logs files inside the container are owned by root witch is fine however, the permissions are very restrictive. I do not know if there is something wrong with my installation but the logs permission are set to 222 (write only). Even if the docker volume is set for Read/Write the log files are retaining these values.
I go around the problem by doing a chmod 777 on all reactor logs but every time there is an MSR log rotation the permissions are set back to 222. So unless the permission are implemented in the container there is no permanent solution to this (that I know of).
I do not know much about Docker container so I do not know what is involved here.
Can the logfiles permission be simply chaged in the container to at least allow "other" read permission?
Could the MSR log rotation routine implement a chmod to set the permission?
Just a small anoyance
Thanks
@toggledbits In the MSR documentation, under Standard Capabilities, I noticed that the
button.since attribute was deprecated as of version 22256 and the metadata is the preferred way to access the last-modified time of an attribute.
Am I reading this right? Should I stop using it in my rules?
Thanks
When on my bare metal RPi with MSR I had a rule that ran every minute to check Internet status via a script in MSR called reactor_inet_check.sh
I've moved to containerized MSR and see in the instructions that this cannot be run from the container.
The script cannot run within the Reactor docker container. If you are using Reactor in a docker container, the script needs to be run by cron or an equivalent facility on the host system (e.g. some systems, like Synology NAS, have separate task managers that may be used to schedule the repeated execution of tasks such as this).
I've put a script on my container host that calls the reator_inet_check.sh script and it isn't erroring... but I still see the internet status within MSR as null.
Before I go diving down the rabbit hole... should this work?
My cronjob on the proxmox host:
909fe6f0-77fd-4734-80a4-c9e354c910b6-image.png
The contents of msr_internet_check_caller.sh
16337528-cf31-4968-bffe-af1149f7103e-image.png
Just bought a couple of generic smart plugs and set them up easily using SmartLife app in the house I then plugged one into a workshop over 100m away This workshop has a hardwired internet connection with a separate wireless access router (not mesh) after doing a reset on the device and pairing to the new router it actually works from the house when my phone is connected to a completely separate wifi network - how is that possible ?
I did read something about these devices connecting to a server somewhere in China similar to IP cameras but there is no lag
I need to replace about 15 traditional wall light switches (no neutral wire) to turn on/off all lights with one operation inside the warehouse. And still maintain the ability to control each light individually.
The preference is not to set up a Wifi for each switch to reduce the number of devices connected to the network, and also, they change the Wifi password regularly, so they do not want to change all 15 switches.
I am looking for some solution that will achieve this with either Bluetooth/RF or any other technology.
The warehouse dimensions are about 100ftx100ft with sheetrock walls.
Please assist.
Background: this is a Windows MSR install I've done for our local pool/amenity center just to run some fans and lights (not my daily driver at home). Install went perfectly fine.
Scenario: I want the lights to go on when it's dark enough (even if during a storm, not just after sunset) so I'm using solarRadiation from my weather station to drive that Trigger. Easy stuff.
Issue: sometimes, someone goes in the office and just starts flipping switches and the result can be lights turned on in the daytime or off at night. I'm trying to create a "catch-all" wherein if it is daytime and the lights somehow find their way ON, they will turn themselves back OFF.
I have the following Reaction built:
b30eab5b-5a14-4a3a-8c9a-47e3e7e53dc3-image.png
I also have this Reaction for opposite, ie the lights find themselves turned off after dark and they will turn themselves back on:
5c6946b1-297c-4eb1-9618-74820979df29-image.png
Here are my two rules:
288cba86-f941-4157-86d9-d8e7487905f7-image.png *NOTE that in my manual testing, ie I turn on the light switch at the incorrect time, when the solarRadiation level changes the Lights ON rule flags and shows as SET. On the next change of solarRadiation it goes back to reset again.
My expectation is that Lights OFF rule should see the lights are on, the solarRadiation is above the set limit, and turn them off. Instead, every other run, the ON rule moves to SET and then reset again on the following run.
Logs appear angry:
[latest-25016]2025-01-26T22:03:31.696Z <Engine:INFO> Enqueueing "Lights ON<RESET>" (rule-m6e4ajh7:R) [latest-25016]2025-01-26T22:03:31.712Z <Engine:NOTICE> Starting reaction Lights ON<RESET> (rule-m6e4ajh7:R) [latest-25016]2025-01-26T22:03:31.713Z <Engine:INFO> Lights ON<RESET> all actions completed. [latest-25016]2025-01-26T22:03:42.565Z <wsapi:INFO> client "127.0.0.1#3" closed, code=1001, reason= [latest-25016]2025-01-26T22:03:42.753Z <httpapi:INFO> [HTTPAPI]#1 API request from ::ffff:127.0.0.1: GET /api/v1/lang [latest-25016]2025-01-26T22:03:42.754Z <httpapi:INFO> [HTTPAPI]#1 request for /api/v1/lang from ::ffff:127.0.0.1 user anonymous auth none matches /api/v1/lang ACL (#7): [Object]{ "url": "/api/v1/lang", "allow": true, "index": 7 } [latest-25016]2025-01-26T22:03:42.790Z <wsapi:INFO> wsapi: connection from ::ffff:127.0.0.1 [latest-25016]2025-01-26T22:03:42.839Z <wsapi:INFO> [WSAPI]wsapi#1 client "127.0.0.1#6" authorized [latest-25016]2025-01-26T22:03:43.353Z <httpapi:INFO> [HTTPAPI]#1 API request from ::ffff:127.0.0.1: GET /api/v1/systime [latest-25016]2025-01-26T22:03:43.353Z <httpapi:INFO> [HTTPAPI]#1 request for /api/v1/systime from ::ffff:127.0.0.1 user anonymous auth none matches /api/v1/systime ACL (#5): [Object]{ "url": "/api/v1/systime", "allow": true, "index": 5 } [latest-25016]2025-01-26T22:03:48.146Z <wsapi:INFO> client "127.0.0.1#6" closed, code=1001, reason= [latest-25016]2025-01-26T22:03:48.308Z <httpapi:INFO> [HTTPAPI]#1 API request from ::ffff:127.0.0.1: GET /api/v1/lang [latest-25016]2025-01-26T22:03:48.309Z <httpapi:INFO> [HTTPAPI]#1 request for /api/v1/lang from ::ffff:127.0.0.1 user anonymous auth none matches /api/v1/lang ACL (#7): [Object]{ "url": "/api/v1/lang", "allow": true, "index": 7 } [latest-25016]2025-01-26T22:03:48.346Z <wsapi:INFO> wsapi: connection from ::ffff:127.0.0.1 [latest-25016]2025-01-26T22:03:48.390Z <wsapi:INFO> [WSAPI]wsapi#1 client "127.0.0.1#7" authorized [latest-25016]2025-01-26T22:03:49.412Z <httpapi:INFO> [HTTPAPI]#1 API request from ::ffff:127.0.0.1: GET /api/v1/systime [latest-25016]2025-01-26T22:03:49.413Z <httpapi:INFO> [HTTPAPI]#1 request for /api/v1/systime from ::ffff:127.0.0.1 user anonymous auth none matches /api/v1/systime ACL (#5): [Object]{ "url": "/api/v1/systime", "allow": true, "index": 5 } [latest-25016]2025-01-26T22:03:52.734Z <wsapi:INFO> client "127.0.0.1#7" closed, code=1001, reason= [latest-25016]2025-01-26T22:03:52.891Z <httpapi:INFO> [HTTPAPI]#1 API request from ::ffff:127.0.0.1: GET /api/v1/lang [latest-25016]2025-01-26T22:03:52.892Z <httpapi:INFO> [HTTPAPI]#1 request for /api/v1/lang from ::ffff:127.0.0.1 user anonymous auth none matches /api/v1/lang ACL (#7): [Object]{ "url": "/api/v1/lang", "allow": true, "index": 7 } [latest-25016]2025-01-26T22:03:52.925Z <wsapi:INFO> wsapi: connection from ::ffff:127.0.0.1 [latest-25016]2025-01-26T22:03:52.965Z <wsapi:INFO> [WSAPI]wsapi#1 client "127.0.0.1#8" authorized [latest-25016]2025-01-26T22:03:54.383Z <httpapi:INFO> [HTTPAPI]#1 API request from ::ffff:127.0.0.1: GET /api/v1/systime [latest-25016]2025-01-26T22:03:54.384Z <httpapi:INFO> [HTTPAPI]#1 request for /api/v1/systime from ::ffff:127.0.0.1 user anonymous auth none matches /api/v1/systime ACL (#5): [Object]{ "url": "/api/v1/systime", "allow": true, "index": 5 } [latest-25016]2025-01-26T22:04:01.590Z <wsapi:INFO> [WSAPI]wsapi#1 rpc_echo [Object]{ "comment": "UI activity" } [latest-25016]2025-01-26T22:04:39.646Z <Rule:INFO> Lights OFF (rule-m6e33ja3 in Atrium Lights) evaluated; rule state transition from RESET to SET! [latest-25016]2025-01-26T22:04:39.656Z <Rule:INFO> Lights ON (rule-m6e4ajh7 in Atrium Lights) evaluated; rule state transition from RESET to SET! [latest-25016]2025-01-26T22:04:39.663Z <Engine:INFO> Enqueueing "Lights OFF<SET>" (rule-m6e33ja3:S) [latest-25016]2025-01-26T22:04:39.665Z <Engine:INFO> Enqueueing "Lights ON<SET>" (rule-m6e4ajh7:S) [latest-25016]2025-01-26T22:04:39.668Z <Engine:NOTICE> Starting reaction Lights OFF<SET> (rule-m6e33ja3:S) [latest-25016]2025-01-26T22:04:39.669Z <Engine:NOTICE> Starting reaction Lights ON<SET> (rule-m6e4ajh7:S) [latest-25016]2025-01-26T22:04:39.669Z <Engine:INFO> Lights ON<SET> all actions completed. [latest-25016]2025-01-26T22:04:39.675Z <Rule:INFO> Lights OFF (rule-m6e33ja3 in Atrium Lights) evaluated; rule state transition from SET to RESET! [latest-25016]2025-01-26T22:04:39.680Z <Engine:NOTICE> ReactionHistory: no entry for [latest-25016]2025-01-26T22:04:39.683Z <Engine:NOTICE> [Engine]Engine#1 entry 256 reaction rule-m6e33ja3:S-1q2f1j0p: [Error] terminated [parent terminating] [latest-25016]2025-01-26T22:04:39.683Z <Engine:CRIT> Error: terminated [parent terminating] Error: terminated at Engine._process_reaction_queue (C:\Users\Jalan\msr\reactor\server\lib\Engine.js:1644:47) [latest-25016]2025-01-26T22:04:39.699Z <Engine:NOTICE> [Engine]Engine#1 entry 254 reaction rule-m6e33ja3:S: [Error] terminated [preempted by rule state change] [latest-25016]2025-01-26T22:04:39.699Z <Engine:CRIT> Error: terminated [preempted by rule state change] Error: terminated at Engine._process_reaction_queue (C:\Users\Jalan\msr\reactor\server\lib\Engine.js:1644:47) [latest-25016]2025-01-26T22:04:39.700Z <Engine:INFO> Enqueueing "Lights OFF<RESET>" (rule-m6e33ja3:R) [latest-25016]2025-01-26T22:04:39.704Z <Engine:NOTICE> Starting reaction Lights OFF<RESET> (rule-m6e33ja3:R) [latest-25016]2025-01-26T22:04:39.705Z <Engine:INFO> Lights OFF<RESET> all actions completed. [latest-25016]2025-01-26T22:05:48.822Z <Rule:INFO> Lights ON (rule-m6e4ajh7 in Atrium Lights) evaluated; rule state transition from SET to RESET! [latest-25016]2025-01-26T22:05:48.831Z <Engine:INFO> Enqueueing "Lights ON<RESET>" (rule-m6e4ajh7:R) [latest-25016]2025-01-26T22:05:48.847Z <Engine:NOTICE> Starting reaction Lights ON<RESET> (rule-m6e4ajh7:R) [latest-25016]2025-01-26T22:05:48.847Z <Engine:INFO> Lights ON<RESET> all actions completed.Hi @toggledbits
I found this very old post that talked about a way to limit device reading to avoid the throttled problem, because it's not a question of logic, it's that the device actually sends a lot of information, in my case the NUT ups installed in HE.
https://smarthome.community/topic/687/flapping-device?_=1737652139854
It mentions engine section of reactor.yaml by setting update_rate_limit, but I looked in the current MSR documentation and I can't find this information, so I don't know if it's still valid, its effect and parameters.
My situation is simple, when I have a UPS problem the NUT is sending dozens of reports per second and then I have the throttled problem. The same rule applies when the power is normal.
This is the rule, and the parameter that fails is the Tripp Lite UPS status.
cf9ddabf-3144-4e5a-80a4-0dc7664b9573-image.png
a813a077-974e-4737-897c-e383085b3d8f-image.png
All error is the same scenario.
[latest-25016]2025-01-23T12:01:32.753Z <Rule:WARN> (13) NUT Disconected (rule-l4djr0p7 in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Throttl> [latest-25016]2025-01-23T12:01:32.756Z <Rule:WARN> (27) Falta de Energia (rule-l4h9ceod in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Thrott> [latest-25016]2025-01-23T12:01:32.769Z <Rule:WARN> (73) UPS Battery Low (rule-l4hj850o in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Throttl> [latest-25016]2025-01-23T12:01:32.772Z <Rule:WARN> (74) UPS Comm Fail (rule-l4kbs5cp in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Throttlin> [latest-25016]2025-01-23T12:01:32.776Z <Rule:WARN> (76) UPS Utility Back (rule-l4hjhs6m in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Thrott> [latest-25016]2025-01-23T12:01:32.780Z <Rule:WARN> UPS On Battery (rule-l4hjuka5 in Datacenter) update rate 121/min exceeds limit (120/min)! Logic loop? Throttling> [latest-25016]2025-01-23T12:01:32.781Z <Rule:WARN> UPS Info (rule-l4gheo63 in Datacenter) update rate 121/min exceeds limit (120/min)! Logic loop? Throttling... [latest-25016]2025-01-23T12:01:40.757Z <Rule:WARN> (13) NUT Disconected (rule-l4djr0p7 in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Throttl> [latest-25016]2025-01-23T12:01:40.759Z <Rule:WARN> (27) Falta de Energia (rule-l4h9ceod in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Thrott> [latest-25016]2025-01-23T12:01:40.776Z <Rule:WARN> (73) UPS Battery Low (rule-l4hj850o in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Throttl> [latest-25016]2025-01-23T12:01:40.777Z <Rule:WARN> (74) UPS Comm Fail (rule-l4kbs5cp in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Throttlin> [latest-25016]2025-01-23T12:01:40.778Z <Rule:WARN> (76) UPS Utility Back (rule-l4hjhs6m in Warning) update rate 121/min exceeds limit (120/min)! Logic loop? Thrott>Thanks.
Hello -
Long time. Hope everyone is good.
I have a rule that looks at a number of temperature sensors around the house. It simply sends a general alert if any of them fall below their threshold. (A basic “House is too cold” alert for when we’re away)
Generally, this has worked well. But I was wondering if there’s a way to make the message somewhat dynamic without creating separate rules for each sensor.
E.g. “House is too cold due to Sump Temperature below 45 degrees.”
I thought I remember reading about someone doing this in the past but couldn’t find it.
Thanks for any ideas!
After upgrade from 24366 to 25016 toggle on Vera (openLuup) lock entity doesn't seem to work.
VeraController log level 5
24366:
25016:
[latest-25016]2025-01-20T20:30:25.457Z <VeraController:INFO> VeraController#vera perform action toggle.toggle on Lock#vera>device_10016 with [Object]{ } [latest-25016]2025-01-20T20:30:25.458Z <VeraController:5:VeraController.js:1210> VeraController#vera no configured implementation for toggle.toggle on Lock#vera>device_10016; calling super [latest-25016]2025-01-20T20:30:25.458Z <VeraController:INFO> VeraController#vera perform action lock.set on Lock#vera>device_10016 with [Object]{ "state": false } [latest-25016]2025-01-20T20:30:25.461Z <VeraController:5:VeraController.js:1255> VeraController#vera sending action request [Object]{ "newTargetValue": "0", "DeviceNum": 10016, "id": "action", "serviceId": "urn:upnp-org:serviceId:DoorLock1", "action": "SetTarget" } [latest-25016]2025-01-20T20:30:25.461Z <VeraController:5:VeraController.js:515> [VeraController:verarequest] requesting http://127.0.0.1:3480/data_request?newTargetValue=0&DeviceNum=10016&id=action&serviceId=urn%3Aupnp-org%3AserviceId%3ADoorLock1&action=SetTarget&output_format=json&_r=1737405025461 ([Object]{ }) [latest-25016]2025-01-20T20:30:25.463Z <VeraController:NOTICE> VeraController#vera action lock.set([Object]{ "state": false }) on Lock#vera>device_10016 succeededI tried to log an issue in Mantis Bug Tracker but I can't log in anymore?
Trying to understand what cause a local expresssion to be evaluated. I have read the manual but I am still not clear about it. Using the test rule below, I can see in the log that the rule is being automatically evaluated every time the temperature entity is changing. That is great...
What I am trying to understand is why the expression is not evaluated based on time as well since the "case" statement has time dependencies.
Any help would be appreciated
I have the following test rule:
eba6a3ea-ff61-4610-88c9-9b9864f11ff8-Screenshot 2025-01-21 095244.png
2d9c1ff5-7b73-4005-b324-9029c2709db9-Screenshot 2025-01-21 095302.png
Here is the expressioncode:
vFrom1 = "09:25:00", vFrom2 = "09:30:00", vFrom3 = "09:41:00", vTo = "10:55:00", # Get current time (format HH:MM:SS) vToDay = strftime("%H:%M:%S"), #Get current house temperature CurrentHouseTemp = getEntity( "hass>Thermostat2 " ).attributes.temperature_sensor.value, case when CurrentHouseTemp <= 19 and vToDay >= vFrom1 && vToDay <= vTo: "true1" # From1 when CurrentHouseTemp <= 20 and vToDay >= vFrom2 && vToDay <= vTo: "true2" # From2 when CurrentHouseTemp < 26 and vToDay >= vFrom3 && vToDay <= vTo: "true3" # From3 else "false" endI’ve set up an automation in Apple Home to turn on the lights when the first person arrives. However, the lights also turn on when I leave for work. It seems like the automation is triggered when I cross the geofence, whether arriving or leaving.
I’m using Matter-compatible Tapo smart plugs. Is there a way to fix this behavior?
Hi,
I started home automation in 2013 and using Vera controllers from the start. When Reactor plugin became available (super plugin of @toggledbits !!) I transferred all scenes to Reactor.
I must say everything here works still okay and I have a lot of devices, plugins and Reactors. But I fear at some point my Vera's will stop working.
I recognize many of your names here from the Vera forum. I also was banned a couple of years ago.
Recently I decided to switch to Home Assistant. I already transferred some of my zwave devices from Vera to HA and made some new automations.
I must say HA is great and with huge amount of integrations, add-ons, the HACS store and many examples (like blueprints) the opportunites to increase home automation are huge.
HA will be for sure my central system (incl UI)
But... the learning curve is quite steap (YAML is completely different from Lua/luup).
So for the time being I will keep my most complex Reactor automations.
I already found how I can connect/integrate Vera for binairy sensors via webhooks (as an example: changes in my home modes are directly send from Vera to HA).
Now I also want to use some data like sensors or Reactor variables automatically to HA via https requests (put those in Reactor).
I know I can create virtual sensors in HA via templates.
As an example: I have my own PWS with a rainmeter. In Reactor I compare the amount of rain (in mm) in the actual year with historical figures (past 15 years) and calculate the difference actual vs history in % Every day at 0.00h these figures are updated. I defined variables in Reactor and use Multistring plugin (Variable container) to show the data.
I know several specialists in coding with experience in both Vera and HA are active here on this forum.
Who can help me with this ?
And then MSR...
My first issue: I'm logged into the msr CT as reactor (I used the suggested username just to keep things simple as this is new space for me and I was high off my success of migrating HA over).
When I run
docker pull toggledbits/reactor:latest-amd64... it assigns the \reactor\ subdirectory where installed root ownership. I am absolutely logged in with the correct non-root user.
1c58aead-85ca-4b2c-8f48-c3d1f57d7fe3-image.png
Second issue: I copied over the following folders:
67e7e4a5-cee8-4de1-90c7-1df35f1070b9-image.png
When MSR loads, all of my Global Expressions are missing.
Third issue:
All controllers connect wonderfully (Hubitat, etc)... except HA.
After changing ownership of the logs to reactor again I can see this when MSR calls HA:
Yes, I created a fresh new long-lived access token for the MSR containerized install and updated the reactor.yaml config file correctly.
Honestly, all-in-all, for my total lack of expertise here I'm very pleased that I only have these three issues. But they are def blockers atm.
My RPi bare metal install of MSR hooked right up to the new HA and is humming along just fine (I used hostnames were possible and shuffled some IPs in other places so I wouldn't run into things later that were mapped incorrectly that I'd forgotten about.)
Proxmox 8.3.2 MSR lives in an Ubuntu 24.04 Proxmox container MSR is latest docker versionWhat else can I provide to those smarter than me here?
@archers Very Cool gadget. I soldered to the flash pins, which given the size of the contacts was challenging, but managed to make it work. Now waiting for my BLE sensors to arrive.
Energy Monitoring built into the dual relay!
I was seeing similar network issues and also came to the conclusion that the socket library was most likely at fault. My solution is to use Mosquitto as my main broker, which accepts all MQTT traffic (topic # in 0) with all my MQTT devices pointing to it, and then Mosquitto filters push traffic to openLuup. Below is my config file that displays the filters:
allow_anonymous true
password_file /mosquitto/data/PW.txt
listener 1883
connection openLuup
address 127.0.0.1:1882
topic tele/# out
topic stat/# out
topic BlueIris/# out
topic # in 0
cleansession false
notifications true
username *****
password *******
bridge_protocol_version mqttv311
try_private false
log_timestamp true
log_timestamp_format %Y-%m-%d--T_%H:%M:%S
As you can see, Mosquitto runs on the same server as openLuup. It is started by a docker compose file. The config filters eliminated the network errors on openLuup and my openLuup install now runs for days on end without any errors at all. I also have HA running on the same server via docker compose, though I only use it for its Hacs Alexa integration. I pipe my Alexa calls to HA using an HA token and a crude plugin that I wrote. I have not found a use for HA outside of openLuup yet, though there are some interesting integrations I will eventually try out.
As regards MQTT I don't think you need to worry about network traffic so much as mqtt is an extremely light protocol, at least in so far as compared to cameras and hi-def wireless etc ( I have a bunch of these high bandwidth devices on my network in their own subnets). I have found that the thing that tends to bog down is the lua socket function and as long as you limit its connections, you will probably alleviate most of the network problems.
Nginx is one of the best web servers available, specializing in load balancing millions of connections, and from what I've read, it is written in Lua. Which suggests that the lua socket module itself is causing the network issues as Nginx most likely rolled their own network library.
@akbooer I think I found the culprit causing the random connection disconnects to Mosquitto. The LWT payload for a given device is a simple string, which doesn't seem to decode in the json decode call. So I added the below code to send a json string to the decoder. The errors have disappeared and I now see the LWT variable in the service variables. The variable reads "LWT : Online"
--line 165
local valid = {SENSOR = true, STATE = true, RESULT = true, LWT = true}
--line 172
-- begin code
local info, err = json.decode (message)
if message then
if not info then -- json did not decode because of single string parameter
message = '{' .. '"' .. mtype .. '"' .. ':' .. '"' .. message .. '"' .. '}'
end
end
-- end code
local info, err = json.decode (message)
This is probably not the way you would handle the error, but it does work.
@akbooer Tasmota energy sensor
{
"Time": "2021-03-28T21:51:01",
"ENERGY": {
"TotalStartTime": "2020-06-07T00:10:43",
"Total": 2356.063,
"Yesterday": 7.056,
"Today": 6.459,
"Period": 24,
"Power": 285,
"ApparentPower": 302,
"ReactivePower": 99,
"Factor": 0.95,
"Voltage": 123,
"Current": 2.453
}
}
No, you can still configure UDP. You just need login credentials now.
If I have a few moments, I will try to set up one of my Pi machines this weekend with an instance of Mosquitto. My HA server that runs my docker Mosquitto is headless, and I run Ubuntu server, so command line captures of packets are just a drag. My Pi has an hdmi port so I should be able to load the gui version of wireshark, and then test/capture the traffic between the two instances. I will let you know.
@rafale77 hey Rafale,
I went down the very same road a while back and threw in towel because the polling by the MQTT plugin created CPU drags that stopped openLuup from functioning "reliably". The instability was also in part because I use two other must-have plugins that rely on polling, and I imagine that the combination of the three was creating a scenario that caused intermittent failures. And I too ended up implementing MQTT in Home Assistant and then using RealDB's virtual HTTP plugin to send commands to my WiFi devices--albeit not knowing the status of the devices in openLuup after the send.
I'm looking at RigPapa's socket proxy and WebSocket plugins to see if I can transform my polling plugins to Async. The MQTT plugin is too complex for me to convert though, so if you take a crack at it, and are successful, I would very much appreciate you publishing your results, as MQTT is becoming a must for me.
@akbooer I hate to add more to the pile... but I'm still seeing a receive error for the connection to mosquitto. openLuup 2021.04.29b
Here's the log error:
2021-05-01 14:22:38.815 openLuup.io.server:: MQTT:1882 connection closed tcp{client}: 0x5579919e9c58
2021-05-01 14:22:38.816 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x5579919e9c58
2021-05-01 14:22:43.935 luup.io.incoming:: bytes received: 51, status: OK tcp{client}: 0x557990e7f528
2021-05-01 14:22:48.435 luup.io.incoming:: bytes received: 51, status: OK tcp{client}: 0x557990e7f528
2021-05-01 14:22:49.763 luup.variable_set:: 10181.urn:micasaverde-com:serviceId:EnergyMetering1.KWHReading was: 1619904116 now: 1619904168 #hooks:0
2021-05-01 14:22:50.158 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x557991971ff8
2021-05-01 14:22:53.834 openLuup.io.server:: MQTT:1882 connection from 127.0.0.1 tcp{client}: 0x5579920dc0b8
2021-05-01 14:22:53.834 openLuup.mqtt:: client is in ERROR empty
2021-05-01 14:22:53.834 openLuup.mqtt:: credentials is in ERROR empty
2021-05-01 14:22:53.834 openLuup.mqtt:: subscriptions is in ERROR empty
using the below error trapping in function "MQTTservlet"
local function MQTTservlet (client)
if client == nil then
_log ("client is in ERROR nil")
else
if table.concat(client) == "" then
_log ("client is in ERROR empty")
else
_log (table.concat {"MQTT ERROR: ", table.concat(client)})
end
end
if credentials == nil then
_log ("credentials is in ERROR nil")
else
if table.concat(credentials) == "" then
_log ("credentials is in ERROR empty")
else
_log (table.concat {"MQTT ERROR: ", table.concat(credentials)})
end
end
if subscriptions == nil then
_log ("subscriptions is in ERROR nil")
else
if table.concat(subscriptions) == "" then
_log ("subscriptions is in ERROR empty")
else
_log (table.concat {"MQTT ERROR: ", table.concat(subscriptions)})
end
end
return function () incoming (client, credentials, subscriptions) end
end
I can't find a deeper layer in the stack where I can trap for the incoming message to see what's in the message that is throwing the error. As near as I can tell, if openLuup tries to connect to a running mosquitto instance, then it fails to see the topics and messages, and passes empty--but not nil--strings when the servlet interface sees incoming bytes.
If I restart mosquitto, openLuup then sees the topics and messages and the error messages stop--and the connection to mosquitto remains stable.
This behavior does not occur when I aim an IOT device directly at openLuup--in that the connection to the device always resumes when openLuup reloads--in other words, I don't need to restart the IOT device to enable the connection.
@akbooer Below is the relevant output of a typical packet between mosquitto and a mosquitto bridged instance. In this case, mosquitto is sending update data to the bridge regarding a tasmota device/switch I use to remotely reboot my Vera. The format is definitely MQTT 3.1 and not 5.0, as 5.0 would not parse correctly in the wireshark viewer. The data payload is at the top of the window as Wireshark will truncate long messages. I can PM you the entire capture as it's not much, but may contain technical info that's best kept private. Let me know.
I'll try to capture some traffic between openLuup and mosquitto later.
{"Version":"9.1.0(tasmota)","BuildDateTime":"2020-11-07T11:57:45","Module or Template":"Gosund-WP5","RestartReason":"Software/System restart","Uptime":"6T05:50:22","Hostname":"power_MainVera-0278","IPAddress":"10.17.2.33","RSSI":"100","Signal (dBm)":"-17","WiFi LinkCount":5,"WiFi Downtime":"0T00:00:10","MqttCount":14,"LoadAvg":19}
Frame 9: 433 bytes on wire (3464 bits), 433 bytes captured (3464 bits) on interface eth0, id 0
Ethernet II, Src: Advansus_0a:8c:3a (00:19:0f:0a:8c:3a), Dst: 96:62:08:fb:22:8a (96:62:08:fb:22:8a)
Internet Protocol Version 4, Src: 10.17.2.41, Dst: 10.17.2.110
Transmission Control Protocol, Src Port: 40664, Dst Port: 1882, Seq: 3, Ack: 3, Len: 367
MQ Telemetry Transport Protocol, Publish Message
Header Flags: 0x30, Message Type: Publish Message, QoS Level: At most once delivery (Fire and Forget)
0011 .... = Message Type: Publish Message (3)
.... 0... = DUP Flag: Not set
.... .00. = QoS Level: At most once delivery (Fire and Forget) (0)
.... ...0 = Retain: Not set
Msg Len: 364
Topic Length: 30
Topic: tele/power_MainVera/HASS_STATE
Message [truncated--see above]: {"Version":"9.1.0(tasmota)","BuildDateTime":"2020-11-07T11:57:45","Module or Template":"Gosund-WP5","RestartReason":"Software/System restart","Uptime":"6T05:50:22","Hostname":"power_MainVera-0278","IPAddress":"10.17.2
@buxton In the above, I'm seeing an extra closing right hand bracket in the JSON string.
I've been waiting for something like this. Very cool. Thx for the post
@akbooer
And a ping response from bridge to main instance:
Frame 33: 68 bytes on wire (544 bits), 68 bytes captured (544 bits) on interface eth0, id 0
Ethernet II, Src: 96:62:08:fb:22:8a (96:62:08:fb:22:8a), Dst: Advansus_0a:8c:3a (00:19:0f:0a:8c:3a)
Internet Protocol Version 4, Src: 10.17.2.110, Dst: 10.17.2.41
Transmission Control Protocol, Src Port: 1882, Dst Port: 40664, Seq: 5, Ack: 2851, Len: 2
MQ Telemetry Transport Protocol, Ping Response
Header Flags: 0xd0, Message Type: Ping Response
1101 .... = Message Type: Ping Response (13)
.... 0000 = Reserved: 0
Msg Len: 0
@toggledbits I was able to install the container through compose, however, I had to make some changes to get it working. See below for my compose file:
MSR:
container_name: reactor
image: toggledbits/reactor:latest-generic-amd64
restart: "on-failure"
environment:
REACTOR_DATA_PREFIX: /var/reactor
TZ: America/Los_Angeles
expose:
- 8111
ports:
- 8111:8111
volumes:
- /home/username/reactor:/var/reactor
- /etc/localtime:/etc/localtime:ro
tmpfs: /tmp
# logging:
# driver: "json-file"
# options:
# max-file: 5
# max-size: 2m
The changes I made are:
1.) substitute "MSR" for "web" for the service name. This was just a precaution against a generic service name interfering with container management programs I use, and was not a needed/critical change to get things working.
2.) simplify the volume syntax for binding a data volume. The syntax you have on your website caused a yaml compile error with version: '3.7' compose.
3.) comment out the logging options. These options compiled, but threw a runtime JSON error that stopped the container from coming up:
ERROR: for MSR Cannot create container for service MSR: json: cannot unmarshal number into Go struct field LogConfig.HostConfig.LogConfig.Config of type string
ERROR: Encountered errors while bringing up the project.
I hope to cut out some time next week to start forming some logic. The web UI looks great.
@akbooer No errors in 2021.04.18. Thanks for this as the changes also stabilized my Mosquitto bridge connection, which tended to flop with every error message.
2021-04-18 15:29:04.173 luup.tasmota:262: Topic ignored : tele/power_ServerWork/LWT : Online
2021-04-18 15:29:04.175 luup.tasmota:262: Topic ignored : tele/power_MainVera/LWT : Online
2021-04-18 15:29:04.176 luup.tasmota:262: Topic ignored : tele/power_HAServer/LWT : Online
2021-04-18 15:29:04.177 luup.tasmota:262: Topic ignored : tele/power_SideLandscape/LWT : Online
2021-04-18 15:29:04.178 luup.tasmota:262: Topic ignored : tele/power_GarageVera/LWT : Online
The Connect packet:
MQ Telemetry Transport Protocol, Connect Command
Header Flags: 0x10, Message Type: Connect Command
Msg Len: 94
Protocol Name Length: 4
Protocol Name: MQTT
Version: Unknown (132)
Connect Flags: 0xec, User Name Flag, Password Flag, Will Retain, QoS Level: At least once delivery (Acknowledged deliver), Will Flag
1... .... = User Name Flag: Set
.1.. .... = Password Flag: Set
..1. .... = Will Retain: Set
...0 1... = QoS Level: At least once delivery (Acknowledged deliver) (1)
.... .1.. = Will Flag: Set
.... ..0. = Clean Session Flag: Not set
.... ...0 = (Reserved): Not set
Keep Alive: 60
Client ID Length: 14
Client ID: Thing.MosquittoBridge
Will Topic Length: 43
Will Topic: $SYS/broker/connection/Thing.MosquittoBridge/state
Will Message Length: 1
Will Message: 0
User Name Length: 6
User Name: YYYYYY
Password Length: 10
Password: XXXXXXXXXX
@akbooer No historian errors and all "checked" variables are publishing to my InfluxDB server.
@akbooer
The subscribe packet:
Frame 156: 81 bytes on wire (648 bits), 81 bytes captured (648 bits) on interface eth0, id 0
Ethernet II, Src: Advansus_0a:8c:3a (00:19:0f:0a:8c:3a), Dst: 96:62:08:fb:22:8a (96:62:08:fb:22:8a)
Internet Protocol Version 4, Src: 10.17.2.41, Dst: 10.17.2.110
Transmission Control Protocol, Src Port: 36446, Dst Port: 1882, Seq: 147, Ack: 9, Len: 15
MQ Telemetry Transport Protocol, Unsubscribe Request
Header Flags: 0xa2, Message Type: Unsubscribe Request
1010 .... = Message Type: Unsubscribe Request (10)
.... 0010 = Reserved: 2
Msg Len: 5
Message Identifier: 2
Topic Length: 1
Topic: #
MQ Telemetry Transport Protocol, Subscribe Request
Header Flags: 0x82, Message Type: Subscribe Request
1000 .... = Message Type: Subscribe Request (8)
.... 0010 = Reserved: 2
Msg Len: 6
Message Identifier: 3
Topic Length: 1
Topic: #
Requested QoS: At most once delivery (Fire and Forget) (0)
The connect ACK:
MQ Telemetry Transport Protocol, Connect Ack
Header Flags: 0x20, Message Type: Connect Ack
0010 .... = Message Type: Connect Ack (2)
.... 0000 = Reserved: 0
Msg Len: 2
Acknowledge Flags: 0x00
0000 000. = Reserved: Not set
.... ...0 = Session Present: Not set
Reason Code: Success (0)
@akbooer Yes but as you can see on the connect, the version is "Version: Unknown (132)"
This is what is causing the problem. After much searching and trying different configs, I stumbled on the following which solved the problem. From mosquitto.org
try_private [ true | false ]
If try_private is set to true, the bridge will attempt to indicate to the remote broker that it is a bridge not an ordinary client. If successful, this means that loop detection will be more effective and that retained messages will be propagated correctly. Not all brokers support this feature so it may be necessary to set try_private to false if your bridge does not connect properly.
Defaults to true.
So I set the attribute to false in my bridge config and immediately connected openLuup to the mosquitto broker. The connect packet shows the right version, and with a luup reload, all of my mosquitto broker topics populated in mqtt explorer that was pointed at openLuup. However, I don't see the topics in the mqtt console on openLuup?? Which is odd because I not only see the openLuup topics in explorer, but I see the topics actively changing.
I'm not a good one to suggest code changes, but since this mosquitto setting defaults to true, can you try to incorporate the try_private flag in openLuup's MQTT server.... It took a long time to track this down and I imagine anyone else that tries to connect the two servers will be in for a similar bug fix adventure.
@akbooer Yes, I was thinking along those lines as the bridge config allows filters. The latest openLuup version now works fine with try_private flag set to default (true). Thanks for nailing this down and your work is definitely appreciated. Below is the connection to openLuup.
Here's my Mosquitto config for anyone who wants to bridge the two brokers:
allow_anonymous true
password_file /mosquitto/data/PW.txt
listener 1883
connection openLuup
address 127.0.0.1:1882
topic # out 0
topic # in 0
cleansession false
notifications true
username XXXXX
password YYYYYYYYYY
bridge_protocol_version mqttv311
Most of these settings can/should be modified to suit one's particular needs, but the settings should be employed. The password file for mosquitto needs to be encrypted with mosquitto's built-in encryption tool. The directions are straightforward and are described in on-line documents.