-
A long while ago (May, 2015) I wrote my 2000-th post on another forum: openLuup - running unmodified plugins on any machine. 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 modificationWhat 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.
-
-
so, @rigpapa did it: https://github.com/toggledbits/Vera-Decouple
It's completely decoupling Vera from the cloud. Very cool stuff. /cc @rafale77 @akbooer
-
This is a set of openLuup icons to replace the ones which you normally would transfer over from the vera. The only thing for the dimmable lights is that one needs to use a new json file to replace the original light bulb with an vector graphics type which I am also sharing.
icons.zip
D_DimmableLight1.json.zipThis is a sample of the icons on ALTUI:
-
What's the effort/work to have a custom device "view" ?
Remember when I talked about a dimmer with low/med/high/off instead of the slider from 0 to 100 ...
What I would need to do to have that ?
Right now, I have a fan in the living room that use the fireplace heat to send it on the 2nd floor!
For the moment, I put it manually at 30%, 60% and 100% to handle the low/med/high, but will be more useful on the interface to have only 3 buttons...
-
Screen Shot 2021-02-23 at 07.14.43.png
@akbooer , I just noticed these last 3 watches which have a serviceID appended behind them in the console. It is only the last 3 and I can't figure out why. Any idea?
-
A brainfart or maybe wishful thinking here but besides MQTT, it would be a really nice addition for openLuup to provide a websocket server which would "lock" the messages tighter than MQTT and then give allow MSR to connect to it through this protocol rather than the vera style http API.
This came to me as I was observing MSR connection to openLuup through polling adding 0.3-0.4% of CPU load while not doing much of anything to Home-assistant. Just putting it out there. z-way-server also provides a websocket server through an app which could be used instead of the current fixed interval polling of the z-way bridge. MQTT would provide the same benefit but likely require a lot more user intervention to setup the MQTT topics and messages though it would lose the distributed clients/servers aspect. -
I am not sure if this is the behavior inherited from the vera but I was looking at the codes and got annoyed that the LastTrip variable updates even when the variable set is to "untrip" the sensor. A bit of a pet peeve but I ended changing this behavior in the openLuup code to only update the LastTrip when it is a trip action. This is particularly annoying because of timed lighting or other sensors which are sending API calls to openLuup on a regular interval defeating the purpose (at least the one I think it is meant to have) of the variable.
I just moved this line
set ("LastTrip", tostring(os.time()))down to the armedtripped part of the code in the luup.lua file.
@akbooer was there a reason for that behavior?
-
Have you ever considered running openLuup under LuaJIT instead of Lua5.1 interpreter?
The LuaJIT Project
For kicks, I switched my installation to the latest LuaJIT2.1 beta3 dating from 2017 and being a lua5.1 interpreter it is a drop in replacement. I had to move the lfs library from one folder to another likely because of an include path difference but I am seeing a further speed/efficiency improvement vs. lua5.1.
My CPU load has dropped another 25% to now hover around 2.2% down from 2.8%. I have yet to make sure that everything else works but so far everything appears to be the same.
The luajit site claims up to 5x speed increase through the interpreter and 120x improvement through the compiler vs the standard lua5.1.Screen Shot 2020-07-05 at 23.10.02.png
My initial interest was from being able to access some ffi libraries to handle video streams...
PS: Wow it is pretty impressive under load... browsing through ALTUI which used to cause spikes of CPU utilization from 2.8% to 4.8% now only go from 2.3% to 2.6%. It almost looks like noise. I am running it on a pretty fast x64 thread so it may not be that significant but this could make a big difference on ARM.
-
A little while back the contents of the App Store in openLuup show that there are no plugins in the store and the date is shown as"
Alt App Store (as of 1970-01-01 10:00:00)In the log I see this:
2021-02-07 11:34:06.509 openLuup.wsapi.cgi:: /console : loading app database... 2021-02-07 11:34:06.550 openLuup.client:: WGET error status: -1, request: https://raw.githubusercontent.com/akbooer/AltAppStore/data/J_AltAppStore.json 2021-02-07 11:34:06.550 openLuup.wsapi.cgi:: /console : JSON decode error @[5 of 107, line: 1] unexpected data after valid JSON string 'tlsv <<<HERE>>> 1 alert protocol vers' 2021-02-07 11:34:06.569 openLuup.server:: request completed (8645 bytes, 0 chunks, 61 ms) tcp{client}: 0x34e2f68In AltUI, the store shows OK but I don't see a call to GitHub so it may be getting its info from a cached value or an xml file?
-
I was toying with the idea to write a simple openLuup plug-in to execute any external plug-in (ie written in nodejs, puthon or even bash or .NET) via an openLuup plug-in, with access to luup's variables and/or the ability to execute actions against an external executable.
The general idea is to get an existing library (ie: the one controlling LG TV, or SwitchBot) that's written in another language and write a simple (and generic) bridge to represent a device, getting variables from a command line bash script (or nodejs app or whatever) and leverage someone else's work, instead of playing catch-up and try to port it over to LUA.
I did it by myself in my own fork of the MQTT2Luup bridge I released and it's working very well for me. I was able to implement support for Alexa, busylights, lgtv, netgear routers, switchbot and much more, all using established or official node packages, with a simple library to send command to the node lib (simulating a console in) and getting response from them (reading the console out). So my logic is still in the luup/openLuup engine and I could mix and match (ie: getting my TV volume to know if I want to raise up/down the thermostat temperature based on occupancy, or treat switchbots as normal light switch - and control them via Alexa and so on).
So, instead of doing it all by myself, I'm wondering it this could interesting as a generic openLuup capability, or as a general and "standardized" effort. I know it sounds like MultiSystem Reactor, but it's not, since the primary purpose is to be specific to openLuup devices and leave the logic to the user (this could be of course Reactor, the upcoming MSReactor or whatever you want). Am I the only one mixing things together and with such a need?
-
I'm a fan of the SendConfig call action in a couple of scene...
Did you implement something like GetConfig ?
I have a couple of scene that I would need to do a GetConfig to do something based on the value...
-
I'm working on a very slow migration from DataYours to Historian and am wondering if there is a list of cache devices that can be modified to include some that are missing, specifically several voltage variable monitors in service EnergyMetering1.
Just checked again and a couple showed up. It could be that these populate slowly after a Vera reboot?
I would also like to modify the storage-aggergation, it is possible to edit that .conf file directly and reboot openLuup?
-
-
Hello - the new pi has arrived with uzb. As an installation shortcut is there a way of 'factory resetting' openluup if I cloned the working image on my other pi ... or is that a really bad idea?
-
Do you think it could be possible to have a custom device for "dimmer" that instead of having the slider from 0 to 99 will give us Off/Low/Medium/High and will send 0,30,60,90 ?
-
I was trying to change the ID of a couple of scenes and came to the conclusion you can't do this without stopping openLuup, hacking user_data.json and restarting openLuup, which is a pain. (May be this could be added to openLuup ie be able change any scene ID to a non used one.)
So I figured I would try and clone some of the scenes with the idea that I could then manually swap their contents around. Why would I want to do this? Just to make my scene management a bit more simple as all my scenes call the one pile of Lua code. I also wanted to make use of unused scene IDs sprinkled through the scene ID list.
My understanding was the clone would occupy the first unused scene ID. Using AltUI, it just adds the clone on to the end of the list of scene IDs. In openLuup using the console page it failed to create the clone. Hits the URL OK:
http://openLuup:3480/console?action=clone&scene=14Says this in the log:
GET /console?action=clone&scene=14 HTTP/1.1 tcp{client}: 0x2c05008Searched high and low and no clones to be found.
I see that AltUI does a create when it clones:
openLuup.server:: GET /data_request?id=scene&action=create&json=WITH_ALL_THE_SCENE_INFO_HEREAny ideas?
-
I woke up to one of the lights in the hallway dimming up and down constantly.. when i tried to open reactor logic summary, there was something weird with the GUI?
The "Tools" tab resizes so i can't reach the logic summary button:
24f6b3f7-cfca-45ba-b568-7c6f5a31ddd7-image.pngThe Reactor instance in Altui pages was also empty, no buttons or text on them, only the icon..
I have a virtual switch to turn on all lights using reactor, and that one worked from the tablet in the kitchen, so reactor was functioning OK..
I reloaded luup and hard refreshed the browser, and all but the "Tools" page is now back to normal.. @toggledbits ?
EDIT: Theres supposed to be some text in the headers on this page, isn't it?
70159d9d-85fc-4606-b38b-49f2909dce72-image.png -
Windows Subsystem for Linux (WSL) is a compatibility layer for running Linux binary executables natively on Windows 10.
This is one way to run openLuup under Windows without having to worry whether any of your plugins require a Unix/Linux environment – this way, they actually get one.
Many flavours of Linux are available for WSL from the Microsoft Store – my favourite, to date, is Alpine WSL, which is a tiny (~8 Mb) and lightweight WSL distro based on musl, uses busybox, and just contains the most important things to be functional.
Here's a rough guide to getting openLuup going under Alpine WSL
Enable WSL on via the Windows control panel Install the Alpine WSL app from the Microsoft Store Start the Alpine application Install Lua and some libraries:Alpine comes with a really full set of Lua libraries available for install. You need to be su to install them:
# apk add curl # apk add lua5.1 # apk add lua5.1-md5 # apk add lua5.1-cjson # apk add lua5.1-filesystem # apk add lua5.1-bitop # apk add lua5.1-sec You need to make the file system permanent: $ cd /mnt/c/ $ mkdir cmh-ludl $ cd cmh-ludl Now get and install openLuup and AltUI: $ wget https://github.com/akbooer/openLuup/raw/master/Utilities/openLuup_install.lua $ lua5.1 openLuup_install.luaWhen finished (it won't yet return to the command prompt)
access openLuup via the URL: IP:3480/openLuup Update to latest version (Plugins page, type development in Update box) Install VeraBridge (Device Table > Create D_VeraBridge.xml / I_VeraBridge.xml) Add IP of Vera to VeraBridge attributes Reload VeraBridge device > Actions > GetVeraFiles (wait ~2 minutes) ReloadSimple!
-
Evening, all. Hope you're all well.
Did the logging line count / rotation challenge ever get sorted? I'm needing to look back at some historical events and my oldest log is barely 3 hours ago. (Not that I can recall how to try and change the line numbers etc)
Cheers!
C
Converting RulesEngine to openLuup...
-
I'm using RulesEngine plugin for a while, couple of years, and of course, the plugin is not getting any update as @vosmont stop to update/upgrade this plugin!
I attached one rule, if, by any chance, I would like to convert all my rules to something "native" in openLuup...
is it something possible ?
In the PDF you can see what a rule looks...ALTUI.pdf -
Reactor seems, now, to be the go-to plugin for scenes. I don’t believe that automatic conversion is possible.
-
@akbooer , but if I want to take the road of "no-plugin", is it something possible directly in openLuup ?
-
Well, I’ve always found Lua scene code entirely adequate.
-
@DesT I have 100% code, no additional logic engine in place.
Easy to do, harder to maintain if you're not a coder. -
I'm an "old" coder, just need to go back in "coding mode", but I would need a little bit of help to start..
So based on my PDF, what will be your approach ?
-
@DesT scenes will mostly do it. Recently I've transitioned to more luup.watch, but I'm not sure if that's a good way
-
@DesT said in Converting RulesEngine to openLuup...:
So based on my PDF, what will be your approach ?
Really hard to read. Is there a better format available from RulesEngine?
-
@akbooer I got the XML file that contain ALL the rules...
-
What does a rule look like in that?
-
-
@therealdb Are you coding directly without creating scene?
-
I like the full control I get from native code but it is certainly not for everyone. I also got tired of trying to maintain all the code located in all the different scenes. Although rigpapa's Lua View can help a lot in that regard.
So I have all of my code in the start up file and scenes only contain a call to the start up code or a call to Vera (been running openLuup for years - thanks again ak). Like so:
return myLua.executeSceneNumber(3)
luup.inet.wget "http://Vera_IP_address/port_3480/data_request?id=action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=3"
I had a look at the xml file - a lot of stuff in there - about 8354 lines. Biggest problem from my point of view is that it all seems to be in French.
-
I have the same approach as the one described by @a-lurker
Lately, as I said, I stopped using scenes (I left the ones I already created in place, of course) and started to use watch in code. So it's like I'm coding a giant plugin.
But I think a normal approach will be to use reactor. It's top notch and Patrick is committed to support luup and openluup for the time being, since it's not interested at all in the new eZlo engine. Plus, it's open source, so easily fixable anyway.
-
@therealdb ,@a-lurker but if I want to use the approach of no plugin, no scene, anyone can tell me how/where to start with a single task so I can put my brain in coding mode
I want to get ride of all my Rules Engines scene that I used for more complex stuff that a scene can't handle like:
If
time is between 8pm and 5am
AND
house mode = 1
AND
motion sensor 1,2, 3 are idle for more than 5 mins
AND
motion sensor 4,5,6 are idle for more than 10 mins
then
do something -
No scenes and no plugin only leaves you with loading code from the startup lua. You can write your functions in module lua files and load them from the startup lua and then setup triggers/variable watches to call these functions from there too.
Anything can be written in lua... -
@DesT said in Converting RulesEngine to openLuup...:
more complex stuff that a scene can't handle like:
...would this be in a scene which runs, say, every 5 minutes, or so?
If that’s the case, then it’s pretty easy to code this up.
-
@akbooer The problem with a scene that runs every 5 mins, it's that if the motion sensor just stop detecting something it will be "true", that mean I will never be able to put a real "stop detecting motion since..." ?
@rafale77 Got this part, so I understand that @therealdb and @a-lurker are doing that ?
The problem with Rules Engine, I think, it's it add a kind of delay, it's not responding as fast I think openLuup should respond..
90% of all my "scenes" are in Rules Engine since 2 years, and I can't live without it now. So if tomorrow, Rules Engine broke 'cause of something else in openLuup/ALTUI as it happen back in time, I will have a complete broken system, that's the main reason to "code" everything directly in openLuup...
RulesEngine bring to openLuup an "advanced" scene creation with some more complex trigger.