Hello AK
Have been writing about the openLuup email server as I was tinkering with it the other day. One minor problem: it looks like the domain part of the email address eg ...@openLuup.local is case sensitive in openLuup.
Looking round the net, it suggests that the local part is case sensitive but the domain part is not meant to be. To keep things so they are more likely to work, it's suggested the email address should be totally case insensitive regardless. Refer to rfc2821 page 13 or search on the word "sensitive". Suffice to say I was using mail@openluup.local rather than mail@openLuup.local, so it didn't work for me.
Next challenge was that the file saved in /etc/cmh-ludl/mail has "Content-Transfer-Encoding: base64" so the body of the email was encoded:
Received: from ((openLuup.smtp) [ip_address_1] by (openLuup.smtp v18.4.12) [ip_address_2]; Tue, 26 Nov 2024 14:21:22 +1000 From: "dali@switchboard" <dali@switchboard> To: "mail@openLuup.local" <mail@openLuup.local> Subject: Warning form R2E. MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: base64 QXV0byBXYXJuaW5nOiBDb2xkIHN0YXJ0IGV2ZW50The above base 64 text translates to "Auto Warning: Cold start event".
Is it your preference to leave the saved files in the raw mode or would you consider translating the base64 text in the openLuup code base?
On a side note, does the reception of an email by openLuup generate some sort of trigger that can be watched. In the case above; the email represents the restoration of power after a power outage. I would like to know about that by the email triggering a "Telegram" notification on my mobile.
I see that the images@openLuup.local images@openLuup.local can be associated with I_openLuupCamera1.xml, which spawns a movement detector child. Anything similar for the other email addresses?
Sorry if this has been covered before, just curious why triggers in openluup are not consistent..
I looked at a scene i’d created a while back via ALTUI using the Console view and noticed it didn’t show any Triggers, which was strange as it was my main front door event 🙂 . So I added the door tripped trigger again, but I’ve just noticed I now how two tiggers using this view.
25bfe00a-d63e-4dc1-a501-23e779c64379-image.png
In ALTUI it shows this.
9b430cc4-49be-4276-ad36-d1dfdaa1ca47-image.png
AK. Was doing an openLuup install and the installer errored with:
openLuup_install 2019.02.15 @akbooer getting openLuup version tar file from GitHub branch master... un-zipping download files... getting dkjson.lua... lua5.1: openLuup_install.lua:45: GitHub download failed with code 500 stack traceback: [C]: in function 'assert' openLuup_install.lua:45: in main chunk [C]: ?The installer code was executing this URL:
http://dkolf.de/src/dkjson-lua.fsl/raw/dkjson.lua?name=16cbc26080996d9da827df42cb0844a25518eeb3Running it manually gives:
dkolf.de The script could not be run error-free. Please check your error log file for the exact error message. You can find this in the KIS under "Product Management > *YOUR PRODUCT* > *CONFYGUAR* > Logfiles". Further information can be found in our FAQ. The script could not be executed correctly. Please refer to your error log for details about this error. You find it in your KIS under item "Product Admin > *YOUR PRODUCT* > *CONFIGURE* > Logfiles". Further information can also be found in our FAQ.I'm thinking the dkjson code URL has been changed. On dkolf.de there is a download link:
http://dkolf.de/dkjson-lua/dkjson-2.8.luaand dkjson code also seems to be in GitHub (I presume this is the same code?):
https://github.com/LuaDist/dkjson/blob/master/dkjson.luaI'm don't know what dkolf.de looked like previously but I do see the dkjson code has been updated as of 2024-06-17. Hope this helps.
Oh - and by the way the dkjson.lua file seems to have been downloaded OK by the installer - error or no error, so go figure.
It’s been a while since I looked at openLuup as it had been running nicely and quietly in the background doing some basic tasks. With my VeraPlus looking like it’s finally succumbing to old age, I want to shift a number of the global module I have over to openLuup.
To do this, I have added the files (example would be xxpushover.lua to the cmh-ludl folder and the following to the startup
require “xxpushover”
The xxpushover.lua file itself starts with the following..
module("xxpushover", package.seeall)
And I always have a line in these files to allow me to check it’s been read in the start up related logs, which in this case it is..
The challenge I’m having is that when I try to call any of the functions within the module, it returns the following error..
"[string "ALTUI - LuaRunHandler"]:1: attempt to index global 'xxpushover' (a nil value)”
I’m no doubt missing something obvious, can anyone help me find out what it is ? Many thanks
Currently I have some Whisper files used by DataYours that been working well for ages and do what I want.
One of the files is called Watts_L1.d.wsp and uses this retention from "storage_schemas_conf" in openLuup file virtualfilesystem.lua:
[day] pattern = \.d$ retentions = 1m:1dInside the actual "Watts_L1.d.wsp" file is a header like so:
1, 86400, 0, 1 84, 60, 1440The 1, 86400 is one minute & one day (in minutes) as per the retention listed above. As a side issue I would like to know what the other header values mean ie what's the syntax here?
New challenge: I now have three Shelly variables named:
em1/0/act_power
em1/1/act_power
em1/2/act_power
with a device ID of "10006" and a SID of "shellypro3em"
And I would like to plot them using the Historian, just like I do with Watts_L1.d.wsp in DataYours. So I need a file in the history directory for the data. So I looked at doing this:
local whisper = require "openLuup.whisper" -- Syntax: history/0.deviceNumber.shortServiceId.variableName local filename = "history/0.10006.shellypro3em.em1/0/act_power.wsp" local archives = "1m:1d" whisper.create (filename,archives,0)Problem is that the variable names contains forward slashes, which are invalid filename characters. What to do?
Also should the retentions now be (to suit the latest openLuup software)?:
local archives = "1m:1d,10m:7d,1h:30d,3h:1y,1d:10y"Also "shellypro3em" is not a "shortServiceID" as per those listed in "servertables.lua". So can "shellypro3em" be used instead? ie can both short and long service IDs be used in the above call to whisper.create?
A list of openLuup releases including the latest developments…
master – stable, and infrequently updated, development – latest updates and bug fixes, testing – use only when advised!A long while ago (May, 2015) I wrote my 2000-th post on another forum: openLuup - running unmodified plugins on any machine.
Now rehosted at https://community.ezlo.com/t/openluup-running-unmodified-plugins-on-any-machine/187412
Here’s the gist of it:
...I want to work in a more open and stable [Vera] environment...
...All would be solved if Luup was open source and could be run on the plethora of cheap and reliable hardware available today. But it’s not. But we could get something like that effect if we engineered a sufficient subset of Luup to run on such a platform. Could it be done? What would we need?
1. UI
2. scheduler
3. web server
4. Luup compatible API
5. Device and Implementation xml file reader
6. Zwave bridge to Vera
7. runs most plugins without modification
What we wouldn’t need is UPnP.
What have we (nearly) got already?
We have, courtesy of @amg0, the most excellent AltUI: Alternate UI to UI7, and that, I think, is probably the hardest one to do in the above list. Items 2 - 5, and 7, I’ve prototyped, in pure Lua, and posted elsewhere: DataYours on Raspberry Pi, running selected plugins unmodified, including: DataYours, EventWatcher, Netatmo, RBLuaTest, altUI. See screenshot attached.Is it worth the effort? Probably not. Will I pursue this quest? Yes.
openLuup was the result.
DE2056BF-E548-4611-972B-40276F00BFEB.jpeg
Looks like the GetSolarCoords() doesn't return the correct results. Right Ascension (RA) and
Declination (DEC) look OK. They presumably must be, as I have a light that goes on at sunset at the correct time for years.
Altitude and Azimuth look incorrect. They both have the hour angle in common, so I'm wondering if it's incorrect and hence the sidereal time. Should be able to convert the angle to hours and check it against this clock:
sidereal time clock
The formula used looks like Compute sidereal time on this page. Might be some mix up between JD2000 that has a 12 hour offset. Could also be some issue with the hour angle.
I'm assuming all Right Ascension (RA) and
Declination (DEC) are degrees plus & minus from north.
Likewise Altitude (ALT) and Azimuth (AZ) are in degrees?
Bit of caution: I haven't looked at this too closely, so may be barking up the wrong tree. It probably doesn't help living near Greenwich.
This site may also be helpful.
PS did you have a look at the link in my last PM?
Set up:
a) Many many many many kms from home: laptop connected to modem router. Router running wireguard client to create a virtual network.
b) Home: modem router running wireguard server. openLuup pi4 connect to router and also a PC and other stuff, etc.
The problem: When accessing charts, AltUI or the openLupp console the web pages are returned OK up to the point where they are truncated and therefore fail to display anything useful.
Note this all works fine over short distances eg around a major city (I tested it) but not seemingly at world wide distances. ie network delays seem to be the issue here? Windows TeamViewer works fine overy the exact same network/wireguard set up. That's how I was able to get the openLuup logs shown below.
Here is any example of openLuup trying to return a chart:
2023-09-04 21:31:20.463 openLuup.io.server:: HTTP:3480 connection from 10.0.0.2 tcp{client}: 0x55aed35038 2023-09-04 21:31:20.464 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=316885191&Timeout=60&MinimumDelay=1500&_=1692128389970 HTTP/1.1 tcp{client}: 0x55ae538348 2023-09-04 21:31:20.465 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=316885191&Timeout=60&MinimumDelay=1500&_=1692129024374 HTTP/1.1 tcp{client}: 0x55addbe1e8 2023-09-04 21:31:20.477 openLuup.server:: GET /data_request?id=lr_render&target={temp_first_floor.w,temp_ground_floor.w,temp_back_wall_of_office.w,temp_inside_roof.w,temp_jps_bedrm_north.w,temp_outside.w}&title=Temperatures&height=750&from=-y&yMin=0&yMax=40 HTTP/1.1 tcp{client}: 0x55aed35038 2023-09-04 21:31:20.478 luup_log:6: DataGraph: drawing mode: connected, draw nulls as: null 2023-09-04 21:31:20.502 luup_log:6: DataGraph: Whisper query: CPU = 23.122 mS for 2016 points 2023-09-04 21:31:20.532 luup_log:6: DataGraph: Whisper query: CPU = 22.952 mS for 2016 points 2023-09-04 21:31:20.561 luup_log:6: DataGraph: Whisper query: CPU = 22.738 mS for 2016 points 2023-09-04 21:31:20.575 luup_log:6: DataGraph: Whisper query: CPU = 9.547 mS for 2016 points 2023-09-04 21:31:20.587 luup_log:6: DataGraph: Whisper query: CPU = 9.569 mS for 2016 points 2023-09-04 21:31:20.598 luup_log:6: DataGraph: Whisper query: CPU = 9.299 mS for 2016 points 2023-09-04 21:31:20.654 luup_log:6: visualization: LineChart(2016x7) 196kB in 51mS 2023-09-04 21:31:20.655 luup_log:6: DataGraph: render: CPU = 51.219 mS for 6x2016=12096 points 2023-09-04 21:31:20.755 openLuup.server:: error 'socket.select() not ready to send tcp{client}: 0x55aed35038' sending 2 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:20.855 openLuup.server:: error 'socket.select() not ready to send tcp{client}: 0x55aed35038' sending 6 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.037 openLuup.server:: error 'socket.select() not ready to send tcp{client}: 0x55aed35038' sending 2 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.138 openLuup.server:: error 'socket.select() not ready to send tcp{client}: 0x55aed35038' sending 6 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.332 openLuup.server:: error 'socket.select() not ready to send tcp{client}: 0x55aed35038' sending 2 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.432 openLuup.server:: error 'socket.select() not ready to send tcp{client}: 0x55aed35038' sending 6 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.507 openLuup.server:: error 'closed' sending 196367 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.507 openLuup.server:: ...only 144000 bytes sent 2023-09-04 21:31:21.507 openLuup.server:: error 'closed' sending 2 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.507 openLuup.server:: ...only 0 bytes sent 2023-09-04 21:31:21.507 openLuup.server:: error 'closed' sending 5 bytes to tcp{client}: 0x55aed35038 2023-09-04 21:31:21.507 openLuup.server:: ...only 0 bytes sent 2023-09-04 21:31:21.507 openLuup.server:: request completed (196367 bytes, 10 chunks, 1030 ms) tcp{client}: 0x55aed35038 2023-09-04 21:31:21.517 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55aed35038 2023-09-04 21:31:22.824 openLuup.io.server:: HTTP:3480 connection from 10.0.0.2 tcp{client}: 0x55aea22c88Re: socket.select() not ready to send
Is there some sort of timeout I change; to see if this can make this work?
Note that openLuup is still running everything flawlessly for ages now, including the more recent addtions of ZigBee stuff. Much appreciated.
Hi @akbooer
Just bringing this over as suggested..
I’ve started to use the console view a lot more, mainly for it’s look and simplicity , but I noticed it does not do any live updates compared to ALTUI, you have to do a full browser reload. Is that by design, or is mine not working?
Also if I want to go strait to the console view, rather than into ALTUI, I recall seeing something abut altering that in the guide by for the life of me I can’t find it. Is it possible to do, if so how would I do that..
You suggested this was something you were looking at ? Also you said You don't need a "full browser reload", just click on the display menu item to refresh the screen. - what do you mean by `display menu?
Very minor issue: was messing about renaming a few rooms and ended up with a room being listed twice. One with the room's contents and the other with no room contents.
It simply turns out one room name had a trailing space. It is possible in both AltUI and the openLuup console to create a room name with a trailing space. Once having done so chaos then ensues, as the rooms are not necessarily treated as different and become difficult to manipulate.
Just need to trim white space off room names. Haven't tested if it's possible to add in leading spaces. That may also be possible.
Hey guys...
Long time... 😉
Since my first day with Vera, I'm using RulesEngine from @vosmont to handle complex rules that will do something based on multiple condition base on "true/false" and also based on time.
Do you think I will be able to do that directly with LUA in openLuup ?
For example..
IF bedroom-motion1 is not detecting motion for 15 minutes
AND
IF bedroom-motion2 is not detecting motion for 15 minutes
AND
IF current-time is between 6am and 11pm
AND
IF binary-light1 is OFF
AND
IF binary-light2 is OFF
THEN
execute LUA code
WAIT 2 minute
execute LUA code
BUT IF any "conditions" failed while in the "THEN" , It need to stop...
I currently have around 60 rules like that 😞
Currently I have a Vera and Hue hub all reliably controlled by openLuup with AltUI, plus any number of plugins. Been working really well for a few years now. However would like to head for a more MQTT based set up. Eliminate the Hue hub and hopefully eliminate Vera by using ZWAVE JS UI. Noting that Zwavejs2mqtt has been renamed to Z-Wave JS UI. Probably also run the stuff using Docker. Just because. Everything would end up on the one computer for easier management. Erhhh that's the hope.
Some of the new Zigbee Aqara stuff is very good and inexpensive plus it fits in with HomeKit. Also the Aqara battery powered stuff looks to have a good battery lifetime: ie suggested up to five years. The battery operated Hue buttons I have; have lasted for ages. Would like to use zigbee2mqtt with a SonOff dongle, which would allow access to the over two and half thousand devices zigbee2mqtt now supports:
Zigbee2MQTTAK has the MQTT stuff working in openLuup. Have played around with it and it works well, as one would expect. Love the UDP to MQTT code.
Shellys are great and also very inexpensive and they spit out & accept MQTT but I would prefer to stay away from WiFi. Not meshed and higher power consumption. Horses for courses.
Now here's the query:
Got about forty or more ZWave twin light switches, plus a few other ZWave bits & pieces such as blind controllers. Then there are the Hue devices on top of that. That's a lot of virtual devices to set up in openLuup. What's an appropriate way to do this?
It seems there is no "auto magic bridge set up". Do I need to use say @therealdb's Virtual Devices plugin that supports MQTT or is there some other approach?
I have to confess I still don't understand the master child approach in that plugin. Seems one light switch would have all the other light switches hanging off it? Helps Vera but not a problem with openLuup - why is that? Suspect AK's good coding beats Vera's?
GitHub - dbochicchio/vera-VirtualDevices: Virtual HTTP Devices plug-in for Vera and openLuup GitHub - dbochicchio/vera-VirtualDevices: Virtual HTTP Devices plug-in for Vera and openLuupVirtual HTTP Devices plug-in for Vera and openLuup - dbochicchio/vera-VirtualDevices
Setting up manually say 100 virtual devices is a bit much to ask. I had a look at hacking the user_data.json file. Good approach till you see all the UIDs and the individually numbered ControlURL and EventURLs that need to be set up.
I need some way of say of creating about 80 light switches in "No room" or in say the "ZWave upgrade" room. Or say some sort of code that could go through all my existing bridged ZWAVE devices in openLuup and create virtual devices for each one. I caould then use the openLuup console to name them and place them in their rooms:
openLuup_IP_address:3480/console?page=devices_table
At that point I could hack the user_data.json file to insert the MQTT topics fairly easily for each? Plus any other fine tuning needed.
Then the old ZWave stuff could be swapped over to ZWAVE JS UI and all the virtual MQTT devices would be ready to go or am I dreaming? Then delete all the old Vera bridged stuff. I'm not too fussed about scene code and the like, as a I have all my code in one block, that is set up in the openLuup start up.
It seems that with ZWay you can create all the ZWave device by doing some sort of interrogation of ZWay's API? Seems also to be the case with the Shelleys?
So any ideas, suggestions or code snippets are welcome on how to move towards MQTT and in particular ZWAVE JS UI and zigbee2mqtt.
I'm in no hurry as openLuup is performing nicely, with the old Vera handling all my ZWave devices.
Bit of an odd one this:
Bare metal install on Debian Bullseye (Intel NUC)
I've noticed when travelling, I connect to my L2TP VPN and I cannot get AltUI to update. I just get 'Waiting Initial Data'
Specifically this is in Chrome:
Version 108.0.5359.94 (Official Build) (x86_64)
In Chrome I can access and control everything via the Openluup console.
In Chrome I can also access and control everything via the Z-Wave expert UI and Z-Wave UI
In Safari I get a more complete view of AltUI but loads of errors along the lines of:
the module or function ALTUI_PluginDisplays.drawBinaryLight does not exist, check your configuration
Homewave on my iOS devices is fine across the same VPN config,
I can ssh into all my servers
Not a huge issue, just curious if anyone has any thoughts of what I might tweak to resolve it?
(FWIW I also access my IMAP and SMTP servers across the same VPN with no issues, as well as remote desktop. Also MS Reactor on the same host as Openluup)
TIA for any thoughts
C
Hi Ak,
Not sure when it started as it took me a while to notice.
I have a function on a luup.call_timer to turn on a switch and then use a luup.call_delay to turn it off a minute later. This is done by the same global function, but on the luup.call_delay i get a message in the log : "luup.call_delay:: unknown global function name: HouseDevice1_PumpCommand"
This is in the init function:
luup.call_timer("HouseDevice1_PumpCommand", 2, "2:15:00", hm_Heating.PumpHealthRunDay, hm_Heating.PumpCMD.HEALTH.."1", true)This is in the function to schedule to off command giving the global function name not found:
luup.call_delay("HouseDevice1_PumpCommand", hm_Heating.PumpHealthOnDuration, hm_Heating.PumpCMD.HEALTH.."0")Is it because I use the "TRUE" parameter that is openLuup specific so the timer does not fire just once?
Running v21.7.25, may be time to update?
Cheers Rene
Hi, I have been trying to install OpenLuup on MacOS but I am failing, so far.
Is there a step-by-step instruction (for MacOS) to follow?
After installing LuaRocks, luasec, luafilesystem and luasocket I then try to run lua5.1 openLuup_install.lua and then get the messages below.
Any ideas and proposals are appreciated.
Regards
Jan
openLuup_install 2019.02.15 @akbooer
lua5.1: openLuup_install.lua:18: module ‘socket.http’ not found:
no field package.preload[‘socket.http’]
no file ‘./socket/http.lua’
no file ‘/usr/local/share/lua/5.1/socket/http.lua’
no file ‘/usr/local/share/lua/5.1/socket/http/init.lua’
no file ‘/usr/local/lib/lua/5.1/socket/http.lua’
no file ‘/usr/local/lib/lua/5.1/socket/http/init.lua’
no file ‘./socket/http.so’
no file ‘/usr/local/lib/lua/5.1/socket/http.so’
no file ‘/usr/local/lib/lua/5.1/loadall.so’
no file ‘./socket.so’
no file ‘/usr/local/lib/lua/5.1/socket.so’
no file ‘/usr/local/lib/lua/5.1/loadall.so’
stack traceback:
[C]: in function ‘require’
openLuup_install.lua:18: in main chunk
Every now and then my openLuup stops responding. This is the LuaUPnP.log when it happens:
2021-08-20 14:59:39.827 :: openLuup LOG ROTATION :: (runtime 11.0 days) 2021-08-20 14:59:39.831 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b6023b8088 2021-08-20 14:59:39.853 openLuup.server:: request completed (49215 bytes, 4 chunks, 22 ms) tcp{client}: 0x55b6023b8088 2021-08-20 14:59:39.854 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6023b8088 2021-08-20 14:59:40.826 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600f46ab8 2021-08-20 14:59:40.829 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b600f46ab8 2021-08-20 14:59:40.846 openLuup.server:: request completed (49215 bytes, 4 chunks, 16 ms) tcp{client}: 0x55b600f46ab8 2021-08-20 14:59:40.847 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600f46ab8 2021-08-20 14:59:41.827 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600d1ad98 2021-08-20 14:59:41.829 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b600d1ad98 2021-08-20 14:59:41.838 openLuup.server:: request completed (49215 bytes, 4 chunks, 8 ms) tcp{client}: 0x55b600d1ad98 2021-08-20 14:59:41.838 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600d1ad98 2021-08-20 14:59:42.827 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6016b9848 2021-08-20 14:59:42.829 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b6016b9848 2021-08-20 14:59:42.847 openLuup.server:: request completed (49215 bytes, 4 chunks, 17 ms) tcp{client}: 0x55b6016b9848 2021-08-20 14:59:42.876 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6016b9848 2021-08-20 14:59:43.054 luup.watch_callback:: 30003.DS18B20.Temperature called [37]virtualSensorWatchCallback() function: 0x55b600c2fff0 2021-08-20 14:59:43.054 luup.variable_set:: 38.urn:toggledbits-com:serviceId:VirtualSensor1.PreviousRawValue was: 28.3 now: 28.5 #hooks:0 2021-08-20 14:59:43.054 luup.variable_set:: 38.urn:toggledbits-com:serviceId:VirtualSensor1.RawValue was: 28.5 now: 28.4 #hooks:0 2021-08-20 14:59:43.054 luup.variable_set:: 38.urn:upnp-org:serviceId:TemperatureSensor1.CurrentTemperature was: 28.5 now: 28.4 #hooks:0 2021-08-20 14:59:43.054 luup.variable_set:: 38.urn:toggledbits-com:serviceId:VirtualSensor1.PreviousValue was: 28.3 now: 28.5 #hooks:0 2021-08-20 14:59:43.054 luup.variable_set:: 38.urn:toggledbits-com:serviceId:VirtualSensor1.LastUpdate was: 1629464323 now: 1629464383 #hooks:0 2021-08-20 14:59:43.265 openLuup.server:: request completed (3193 bytes, 1 chunks, 5550 ms) tcp{client}: 0x55b60162e488 2021-08-20 14:59:43.267 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b60162e488 2021-08-20 14:59:43.278 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6023c8458 2021-08-20 14:59:43.278 openLuup.server:: GET /data_request?id=status&DataVersion=516611499&Timeout=15&MinimumDelay=100&output_format=json&_r=1629464383277 HTTP/1.1 tcp{client}: 0x55b6023c8458 2021-08-20 14:59:43.381 openLuup.server:: request completed (1091 bytes, 1 chunks, 102 ms) tcp{client}: 0x55b6023c8458 2021-08-20 14:59:43.381 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6023c8458 2021-08-20 14:59:43.392 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6013d6cc8 2021-08-20 14:59:43.393 openLuup.server:: GET /data_request?id=status&DataVersion=516611500&Timeout=15&MinimumDelay=100&output_format=json&_r=1629464383391 HTTP/1.1 tcp{client}: 0x55b6013d6cc8 2021-08-20 14:59:43.496 openLuup.server:: request completed (3196 bytes, 1 chunks, 4981 ms) tcp{client}: 0x55b601a37db8 2021-08-20 14:59:43.826 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601d05a08 2021-08-20 14:59:43.828 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b601d05a08 2021-08-20 14:59:43.844 openLuup.server:: request completed (49215 bytes, 4 chunks, 15 ms) tcp{client}: 0x55b601d05a08 2021-08-20 14:59:43.844 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b601d05a08 2021-08-20 14:59:44.524 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=516611500&Timeout=60&MinimumDelay=1500&_=1629292536029 HTTP/1.1 tcp{client}: 0x55b601a37db8 2021-08-20 14:59:44.828 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6023a7d18 2021-08-20 14:59:44.831 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b6023a7d18 2021-08-20 14:59:44.844 openLuup.server:: request completed (49215 bytes, 4 chunks, 12 ms) tcp{client}: 0x55b6023a7d18 2021-08-20 14:59:44.844 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6023a7d18 2021-08-20 14:59:45.514 openLuup.server:: GET /data_request?id=variableget&DeviceNum=0&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&Variable=Mode&_=1629292536030 HTTP/1.1 tcp{client}: 0x55b601ab8228 2021-08-20 14:59:45.617 openLuup.server:: request completed (1 bytes, 1 chunks, 102 ms) tcp{client}: 0x55b601ab8228 2021-08-20 14:59:45.827 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600b8de38 2021-08-20 14:59:45.828 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b600b8de38 2021-08-20 14:59:45.834 openLuup.server:: request completed (49215 bytes, 4 chunks, 5 ms) tcp{client}: 0x55b600b8de38 2021-08-20 14:59:45.836 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600b8de38 2021-08-20 14:59:46.828 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6018a53f8 2021-08-20 14:59:46.830 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b6018a53f8 2021-08-20 14:59:46.841 openLuup.server:: request completed (49215 bytes, 4 chunks, 11 ms) tcp{client}: 0x55b6018a53f8 2021-08-20 14:59:46.842 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6018a53f8 2021-08-20 14:59:47.829 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600d2d938 2021-08-20 14:59:47.832 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b600d2d938 2021-08-20 14:59:47.854 openLuup.server:: request completed (49215 bytes, 4 chunks, 21 ms) tcp{client}: 0x55b600d2d938 2021-08-20 14:59:47.855 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600d2d938 2021-08-20 14:59:47.962 luup.variable_set:: 10086.urn:upnp-org:serviceId:TemperatureSensor1.CurrentTemperature was: 28.3 now: 28.5 #hooks:0 2021-08-20 14:59:48.370 openLuup.server:: request completed (1359 bytes, 1 chunks, 4977 ms) tcp{client}: 0x55b6013d6cc8 2021-08-20 14:59:48.372 openLuup.server:: request completed (1359 bytes, 1 chunks, 3847 ms) tcp{client}: 0x55b601a37db8 2021-08-20 14:59:48.373 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6013d6cc8 2021-08-20 14:59:48.384 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601e62df8 2021-08-20 14:59:48.385 openLuup.server:: GET /data_request?id=status&DataVersion=516611502&Timeout=15&MinimumDelay=100&output_format=json&_r=1629464388383 HTTP/1.1 tcp{client}: 0x55b601e62df8 2021-08-20 14:59:48.813 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=516611502&Timeout=60&MinimumDelay=1500&_=1629292536031 HTTP/1.1 tcp{client}: 0x55b601a37db8 2021-08-20 14:59:48.829 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600c44bf8 2021-08-20 14:59:48.832 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b600c44bf8 2021-08-20 14:59:48.854 openLuup.server:: request completed (49215 bytes, 4 chunks, 21 ms) tcp{client}: 0x55b600c44bf8 2021-08-20 14:59:48.856 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600c44bf8 2021-08-20 14:59:49.829 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600e1fea8 2021-08-20 14:59:49.830 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b600e1fea8 2021-08-20 14:59:49.835 openLuup.server:: request completed (49215 bytes, 4 chunks, 5 ms) tcp{client}: 0x55b600e1fea8 2021-08-20 14:59:49.835 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600e1fea8 2021-08-20 14:59:50.831 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601cfa118 2021-08-20 14:59:50.832 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b601cfa118 2021-08-20 14:59:50.837 openLuup.server:: request completed (49215 bytes, 4 chunks, 4 ms) tcp{client}: 0x55b601cfa118 2021-08-20 14:59:50.838 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b601cfa118 2021-08-20 14:59:51.833 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601462bb8 2021-08-20 14:59:51.835 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b601462bb8 2021-08-20 14:59:51.852 openLuup.server:: request completed (49215 bytes, 4 chunks, 17 ms) tcp{client}: 0x55b601462bb8 2021-08-20 14:59:51.854 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b601462bb8 2021-08-20 14:59:52.834 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6016b1c98 2021-08-20 14:59:52.836 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b6016b1c98 2021-08-20 14:59:52.847 openLuup.server:: request completed (49215 bytes, 4 chunks, 11 ms) tcp{client}: 0x55b6016b1c98 2021-08-20 14:59:52.848 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6016b1c98 2021-08-20 14:59:53.193 luup.variable_set:: 10005.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 255 now: 255 #hooks:0 2021-08-20 14:59:53.193 luup.variable_set:: 10006.urn:micasaverde-com:serviceId:HaDevice1.sl_TamperAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.193 luup.variable_set:: 10094.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.193 luup.variable_set:: 10096.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 10 now: 10 #hooks:0 2021-08-20 14:59:53.193 luup.variable_set:: 10098.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 10 now: 10 #hooks:0 2021-08-20 14:59:53.193 luup.variable_set:: 10104.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 10 now: 10 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10106.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10109.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10112.urn:micasaverde-com:serviceId:DoorLock1.sl_UserCode was: UserID="4" UserName="Ella" now: UserID="4" UserName="Ella" #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10112.urn:micasaverde-com:serviceId:DoorLock1.sl_LockButton was: 1 now: 1 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10112.urn:micasaverde-com:serviceId:DoorLock1.sl_PinFailed was: 1 now: 1 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10112.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10131.urn:micasaverde-com:serviceId:HaDevice1.sl_TamperAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10132.urn:micasaverde-com:serviceId:HaDevice1.sl_TamperAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10133.urn:micasaverde-com:serviceId:HaDevice1.sl_TamperAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10165.urn:micasaverde-com:serviceId:HaDevice1.sl_Alarm was: SMOKE now: SMOKE #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10165.urn:micasaverde-com:serviceId:HaDevice1.sl_TamperAlarm was: 0 now: 0 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10188.urn:micasaverde-com:serviceId:HaDevice1.sl_TamperAlarm was: 1 now: 1 #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10188.urn:micasaverde-com:serviceId:HaDevice1.sl_Alarm was: TAMPER_ALARM now: TAMPER_ALARM #hooks:0 2021-08-20 14:59:53.194 luup.variable_set:: 10191.urn:micasaverde-com:serviceId:HaDevice1.sl_BatteryAlarm was: 10 now: 10 #hooks:0 2021-08-20 14:59:53.299 openLuup.server:: request completed (5449 bytes, 1 chunks, 4485 ms) tcp{client}: 0x55b601a37db8 2021-08-20 14:59:53.505 openLuup.server:: request completed (5449 bytes, 1 chunks, 5119 ms) tcp{client}: 0x55b601e62df8 2021-08-20 14:59:53.511 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b601e62df8 2021-08-20 14:59:53.513 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=516611523&Timeout=60&MinimumDelay=1500&_=1629292536032 HTTP/1.1 tcp{client}: 0x55b601a37db8 2021-08-20 14:59:53.522 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600bc7068 2021-08-20 14:59:53.524 openLuup.server:: GET /data_request?id=status&DataVersion=516611523&Timeout=15&MinimumDelay=100&output_format=json&_r=1629464393521 HTTP/1.1 tcp{client}: 0x55b600bc7068 2021-08-20 14:59:53.834 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601b8cbe8 2021-08-20 14:59:53.835 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b601b8cbe8 2021-08-20 14:59:53.840 openLuup.server:: request completed (49215 bytes, 4 chunks, 5 ms) tcp{client}: 0x55b601b8cbe8 2021-08-20 14:59:53.841 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b601b8cbe8 2021-08-20 14:59:54.834 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6013dacd8 2021-08-20 14:59:54.836 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b6013dacd8 2021-08-20 14:59:54.849 openLuup.server:: request completed (49215 bytes, 4 chunks, 12 ms) tcp{client}: 0x55b6013dacd8 2021-08-20 14:59:54.850 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b6013dacd8 2021-08-20 14:59:55.835 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b602316198 2021-08-20 14:59:55.836 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b602316198 2021-08-20 14:59:55.841 openLuup.server:: request completed (49215 bytes, 4 chunks, 5 ms) tcp{client}: 0x55b602316198 2021-08-20 14:59:55.842 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b602316198 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601547598 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6016c7cf8 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b600b75158 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b60187d188 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6011a5bf8 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b60115ecd8 2021-08-20 15:00:10.955 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601018c18 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b60175d068 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b60224ced8 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b6017869d8 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601ab40e8 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601914178 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b60100a228 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b60197a998 2021-08-20 15:00:10.956 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601103238 2021-08-20 15:00:10.956 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b600c62438 2021-08-20 15:00:10.956 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601eaabf8 2021-08-20 15:00:10.956 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6017c95b8 2021-08-20 15:00:10.956 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b600d6e508 2021-08-20 15:00:10.956 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601dd2168 2021-08-20 15:00:10.956 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b60155eb68 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6016ddcd8 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b602384ca8 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b60230cc78 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6017e3338 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b600965de8 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601e23608 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6018da2f8 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b600c9aa08 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b600bbf0f8 2021-08-20 15:00:10.957 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601334518 2021-08-20 15:00:10.958 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b60183b5f8 2021-08-20 15:00:10.958 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6015682a8 2021-08-20 15:00:10.958 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6018869e8 2021-08-20 15:00:10.958 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6008839c8 2021-08-20 15:00:10.958 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b60154ed58 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601a259e8 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b600f617c8 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6015884c8 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601c85fe8 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b602275ae8 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b60190ab88 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601692038 2021-08-20 15:00:10.959 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601fcea78 2021-08-20 15:00:10.960 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601ca7f28 2021-08-20 15:00:10.960 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b601fd37f8 2021-08-20 15:00:10.960 openLuup.io.server:: MQTT:1888 connection from 127.0.0.1 tcp{client}: 0x55b6020ec968 2021-08-20 15:00:10.961 openLuup.server:: GET /data_request?id=variableget&DeviceNum=0&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&Variable=Mode&_=1629292536033 HTTP/1.1 tcp{client}: 0x55b601ab8228 2021-08-20 15:00:10.967 luup_log:0: 32Mb, 3.3%cpu, 11.0days 2021-08-20 15:00:10.972 openLuup.server:: request completed (3361 bytes, 1 chunks, 17459 ms) tcp{client}: 0x55b601a37db8 2021-08-20 15:00:10.973 openLuup.server:: request completed (3361 bytes, 1 chunks, 17449 ms) tcp{client}: 0x55b600bc7068 2021-08-20 15:00:10.990 luup.variable_set:: 10116.urn:upnp-org:serviceId:TemperatureSensor1.CurrentTemperature was: 21.8 now: 21.9 #hooks:0 2021-08-20 15:00:10.990 luup.variable_set:: 10129.urn:micasaverde-com:serviceId:HumiditySensor1.CurrentLevel was: 58.8 now: 58.7 #hooks:0 2021-08-20 15:00:10.991 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600ba45a8 2021-08-20 15:00:10.991 openLuup.mqtt:: closed tcp{client}: 0x55b600ba45a8 2021-08-20 15:00:10.992 openLuup.mqtt:: mqttthing_Klimat kllaren_838dee2e UNSUBSCRIBE from tele/Källartemp/SENSOR tcp{client}: 0x55b600ba45a8 2021-08-20 15:00:10.992 openLuup.mqtt:: ERROR publishing application message for mqtt:tele/Källartemp/SENSOR : closed 2021-08-20 15:00:10.992 openLuup.io.server:: HTTP:3480 connection from 127.0.0.1 tcp{client}: 0x55b601c8c288 2021-08-20 15:00:10.992 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x55b600bc7068 2021-08-20 15:00:10.992 openLuup.server:: GET /data_request?id=sdata HTTP/1.1 tcp{client}: 0x55b601547598 2021-08-20 15:00:10.993 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600a62818 2021-08-20 15:00:10.993 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600a62818 2021-08-20 15:00:10.994 openLuup.mqtt:: mqttthing_Uttag garaget_6f4265a1 UNSUBSCRIBE from openLuup/update/10149/SwitchPower1/Status tcp{client}: 0x55b600a62818 2021-08-20 15:00:10.994 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600ba8428 2021-08-20 15:00:10.994 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600ba8428 2021-08-20 15:00:10.994 openLuup.mqtt:: mqttthing_Takflkt hallen_6da387bf UNSUBSCRIBE from tele/TakfläktHall/LWT tcp{client}: 0x55b600ba8428 2021-08-20 15:00:10.994 openLuup.mqtt:: mqttthing_Takflkt hallen_6da387bf UNSUBSCRIBE from stat/TakfläktHall/POWER2 tcp{client}: 0x55b600ba8428 2021-08-20 15:00:10.994 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600e59b88 2021-08-20 15:00:10.994 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600e59b88 2021-08-20 15:00:10.994 openLuup.mqtt:: mqttthing_Klimat sovrummet_0d664e41 UNSUBSCRIBE from openLuup/update/20010/HumiditySensor1/CurrentLevel tcp{client}: 0x55b600e59b88 2021-08-20 15:00:10.994 openLuup.mqtt:: mqttthing_Klimat sovrummet_0d664e41 UNSUBSCRIBE from openLuup/update/20021/TemperatureSensor1/CurrentTemperature tcp{client}: 0x55b600e59b88 2021-08-20 15:00:10.994 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600bd02d8 2021-08-20 15:00:10.994 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600bd02d8 2021-08-20 15:00:10.994 openLuup.mqtt:: mqttthing_Entrdrr_6acda58a UNSUBSCRIBE from openLuup/update/10095/SecuritySensor1/Tripped tcp{client}: 0x55b600bd02d8 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600bb6cf8 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600bb6cf8 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Temperatur poolen_a589d192 UNSUBSCRIBE from tele/Pooltemp/SENSOR tcp{client}: 0x55b600bb6cf8 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b6009ff868 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b6009ff868 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Rrelsesensor hallen_cf7c8293 UNSUBSCRIBE from openLuup/update/20013/SecuritySensor1/Tripped tcp{client}: 0x55b6009ff868 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600a23e28 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600a23e28 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Luftfuktighet badrum_d79a0ffb UNSUBSCRIBE from openLuup/update/10190/HumiditySensor1/CurrentLevel tcp{client}: 0x55b600a23e28 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600bb33b8 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600bb33b8 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Ljussensor hallen_19569c17 UNSUBSCRIBE from openLuup/update/20006/LightSensor1/CurrentLevel tcp{client}: 0x55b600bb33b8 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600a136b8 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600a136b8 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Ljussensor trningsrum_ebf319c5 UNSUBSCRIBE from openLuup/update/20004/LightSensor1/CurrentLevel tcp{client}: 0x55b600a136b8 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600babaa8 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600babaa8 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Solceller watt_e351a23b UNSUBSCRIBE from openLuup/update/10163/LightSensor1/CurrentLevel tcp{client}: 0x55b600babaa8 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b6004a9de8 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b6004a9de8 2021-08-20 15:00:10.995 openLuup.mqtt:: mqttthing_Luftfuktighet dusch_91df9a58 UNSUBSCRIBE from openLuup/update/20008/HumiditySensor1/CurrentLevel tcp{client}: 0x55b6004a9de8 2021-08-20 15:00:10.995 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600b84628 2021-08-20 15:00:10.995 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600b84628 2021-08-20 15:00:10.996 openLuup.mqtt:: mqttthing_Altandrr kk_db6d3edd UNSUBSCRIBE from openLuup/update/10097/SecuritySensor1/Tripped tcp{client}: 0x55b600b84628 2021-08-20 15:00:10.996 openLuup.io.server:: MQTT:1888 connection closed tcp{client}: 0x55b600be6548 2021-08-20 15:00:10.996 openLuup.mqtt:: RECEIVE ERROR: closed tcp{client}: 0x55b600be6548 2021-08-20 15:00:10.996 openLuup.mqtt:: mqttthing_Test datarum_adbe85e6 UNSUBSCRIBE from openLuup/update/20007/Dimming1/LoadLevelTarget tcp{client}: 0x55b600be6548 2021-08-20 15:00:10.996 openLuup.mqtt:: mqttthing_Test datarum_adbe85e6 UNSUBSCRIBE from openLuup/update/20007/SwitchPower1/Status tcp{client}: 0x55b600be6548And then in syslog:
Aug 20 15:00:11 username systemd[1]: openluup.service: Control process exited, code=exited status=7 Aug 20 15:00:11 username systemd[1]: openluup.service: Failed with result 'exit-code'.ZWaveJS and MQTT
-
I've been investigating using Z-Wave-JS with openLuup. I get these subscriptions reported in the console in openLuup.
zwave/+/+/+/+/+/set zwave/+/+/+/+/set zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/# zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/broadcast/# zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/multicast/#
I can run test code that publishes to this topic:
zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/#
and it all works. But this is not the way the developers envisage how you should use MQTT with their app, as they are more low level. These topics need to be used instead:
zwave/+/+/+/+/set
zwave/+/+/+/+/+/setCurrently the openLuup broker does not handle the + wild card, so these examples below do not work. The examples represent how Z-Wave-JS should/could be commanded:
zwave/4/38/0/targetValue/set zwave/Test_dimmer/switch_multilevel/endpoint_0/targetValue/set zwave/Lounge_downstairs/Test_dimmer/switch_multilevel/endpoint_0/targetValue/set
So my questions are: is it a big task to get the + wild card working? And in the interim can I force a publish of the topics listed immediately above for test purposes?
-
Yes, this definitely needs to be addressed.
There is (or was) a performance reason for not implementing the '+' wildcard... every topic published need to have the match tested. But I believe, now, that there is a way around this.
The MQTT server was written carefully, especially the low-level implementation, but as a total system was never fully completed, since it was really written for basic built-in support of Shelly devices, rather than a more general service. But now its uses have grown, and I think it needs revisiting.
-
If I remember correctly; you said you had removed all your ZWave gear. I've still got a Vera Edge acting as a ZWave radio with about thirty devices. Works fine but I don't want to be locked into to that long term. Ultimately I would like to see the ZWay plugin MQTTized. I believe that's possible from looking at the code. So I can have a go at testing; with the + wildcards certainly as a starting point. Might need to do a few backups regardless!!
-
@a-lurker said in ZWaveJS and MQTT:
Ultimately I would like to see the ZWay plugin MQTTized.
What would that look like? All the ZWay devices reflected in openLuup should be accessible by MQTT? I can turn switches and lights on and off using MQTT commands already.
-
"How would that look like?"
In my case I have single relays, double relays, shade controllers and minimotes. That's it. At a basic level, I could set up some virtual devices and sensors with associated plugins. However this would take a while to set up.
openLuup could contain some code that just handles these items but then someone else comes along and wants a security sensor or a worst still say a thermostat.
I'm not overly familiar with ZWay or the openLuup ZWay plugin implementation, so please excuse any displayed ignorance.
I see the ZWay plugin as the code basis for a new completely separate plugin for Z-Wave JS.
ZWay has an "Expert User Interface" that does low level stuff such as include and exclude. Z-Wave JS also has a similar low level interface. None of that's required, as it can all be done using the "Z-Wave JS UI" (using their exact naming). Likewise, I don't see any point in trying to support ZWave scenes or associations.
Comparing ZWay with Z-Wave JS gettors & setttors looks like this:
ZWay:
Set: http://openLuup-ip-address:8083/ZWaveAPI/Run/devices[4].instances[0].commandClasses[38].Set(100) Get: http://openLuup-ip-address:8083/ZWaveAPI/Run/devices[4].instances[0].commandClasses[38].Get
ZWave JS: see example setting a value
Set: zwave/4/38/0/targetValue/set with json payload: { "value": 100, "options": { "transitionDuration": "5s" } } Get: zwave/4/38/0/targetValue that is: exact same command without the "set" suffix. Where: - devices[4] becomes 4 (device id) - instances[0] becomes 0 (endpoint id) - 38 is the command class
The openLuup ZWay plugin has all the command classes already defined and hooked into openLuup.
The command classes as seen by Z-Wave JS are detailed here.
and MQTT here.
Authentication would just be the usual MQTT broker authentication. No login is required.
Topics: Z-Wave JS allows a variety of topics and payloads to be formed, based on the user settings. See here.
This format seems the simplest, as it excludes room names and device names:
zwave/4/38/0/targetValue
CloneRooms and NameDevices booleans: Initially it would appear easier to place all ZWave devices in the "ZWave room" (as would be seen in say AltUI) and then reassign the various devices to their rooms with their names using say AltUI.
You could then use setNodeName and setNodeLocation to push the info back to Z-Wave JS?
Note: where it says "➤Mqtt usage" click on the little arrow head "➤" immediately to the left to see the info (I'm a bit slow - took me awhile to realise this).
zway_cgi.lua - not sure how this is used (configs ZWave devices via a web page?) but it looks like it's not needed?
I see the ZWay plugin uses async and non async HTTP requests - not sure why this is? Is it just about advantage of "http_aysnc.lua" in openLuup when its available?
getNodes, getInfo, pollValue and pingNode are potentially useful?
Looking at it somewhat naively, it looks like some minimal functionality could be got going by changing the http stuff in L_ZWay2.lua --> function ZWayAPI to the equivalent MQTT commands.
With this openLuup function:
-- send a data packet --> /ZWaveAPI/Run/SendData local function zwsend (id, data)
I think you can use this: Send a custom command to a node
Here is an example. From another post: "to get the payload, you can snoop on it using the Debug option in the ZWave JS to MQTT interface" UI.
Also the outgoing & incoming json payloads would have to be reinterpreted to suit the identifiers used, etc.
I'm not sure how events, such as button pushes etc, are handled. Needs further investigation.
Very minor point: many of the ZWay plugin files have trailing whitespace - would be good to strip them off. eg Notepad ++, Edit --> Blank operations.
Clearly I need to learn more but regardless of the above I can experiment further as needed.
-
OK the "plus" wildcards are, as tested here; operational. Great stuff.
I can do this with Z-Wave JS with the correct outcome:
local topic = "zwave/4/38/0/targetValue/set" local message = "0" mqtt.publish (topic, message)
or
local topic = "zwave/4/38/0/targetValue/set" local message = '{"value":99}' mqtt.publish (topic, message)
These also work OK:
-- setNodeName local topic = "zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/setNodeName/set" local message = '{ "args": [4, "New device Chandelier"] }' mqtt.publish (topic, message) Reply: message received on zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/setNodeName {"success":true,"message":"Success zwave api call","result":true,"args":[4,"New device Chandelier"],"origin":{"args":[4,"New device Chandelier"]}} -- setNodeLocation local topic = "zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/setNodeLocation/set" local message = '{ "args": [4, "New room Laundry"] }' mqtt.publish (topic, message) Reply: message received on zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/setNodeLocation {"success":true,"message":"Success zwave api call","result":true,"args":[4,"New room Laundry"],"origin":{"args":[4,"New room Laundry"]}}
getNodes and getInfo are not particularly helpful:
-- getNodes local topic = "zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/getNodes/set" local message = '{ "args": [] }' REPLIES with a torrent of info. -- getInfo local topic = "zwave/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/api/getInfo/set" local message = '{ "args": [] }' REPLIES with info about the server.
If you want info about a node, you need to subscribe to it, along the lines of :
zwave/4/# ???
ie it's event driven. You send a command and get a response outcome. You don't request node info.
Not sure about sensors ( I have none). However, as I understand it, you request a report?
Good steps in the right direction.
-
ZWave centers around values. In effect, everything is a value within a command class and endpoint on a node. The paradigm is thinly visible in the old Vera firmware, and more clearly visible in the new Ezlo stuff. On a simple switch, for example, the Binary Switch (37) command class has a targetValue boolean; you set it to non-zero and it commands the switch on; set it zero and it commands the switch off. The currentValue value/property in the same CC should reflect the state of the switch as the device updates itself. When you set the targetValue, you should expect to receive events for value changed for targetValue and currentValue, and possibly other values in other CCs depending on the device type and behaviors.
Sensors behave in a similar way, it's just that their state is generally read-only (i.e. they tell you current value, but there's no target value to modify). Where things get hard for sensors in particular, but also for all ZWave devices generally, is that the command classes have evolved over time, and there's a lot of "flexibility" in how manufacturers implement them and which they choose to use. For example, a sensor may use the Basic (32) command class to show its tripped/untripped state, while a different sensor or even the same brand/model but later firmware/generation of the same sensor will instead use the Binary Sensor (48) command class. Many devices will advertise both, but only one works. Some devices will even have configuration to let you choose which one you want. Within the command classes, there are different versions evolved over time, having different capabilities and behaviors. I think this is the real struggle with implementing ZWave, and it is certainly the reason Vera/Ezlo and others (myself included) have had to chase individual support/exceptions for many models of devices. The ZWave standard isn't absolute, definitive, or deterministic despite many assertions and hopes to contrary.
Oh, additionally, there's also an Alarm command class, and a Notification command class, which are frequently used to send asynchronous events for, for example, door open/close, battery low, keypad unlock, and every other type of event and changing condition you can imagine. These are often transient, and in order to get the event, you have to receive the event the moment it's delivered -- unlike values on other command classes, you can't always poll them later to see what event you may have missed.
The upshot is, every device is going to be a little different when you are working at this (low) level.
-
@toggledbits Thanks for that. Zensys had it as their proprietary stuff ie under their control for ages and it's still a constellation of confusion. For example - how hard should it be to copy a set up from one USB stick to another? They really shot themselves in the foot a long time ago. Meanwhile Zigbee seems to have flourished?