Navigation

    Discussion Forum to share and further the development of home control and automation, independent of platforms.

    SmartHome Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    (Last Updated: December 31, 2020)
    For those who registered but didn't received the confirmation email, please send an email to support@smarthome.community with the email you used
    • New pi - clone existing image?

      P

      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?

      openLuup
    • FAN dimmer device

      DesT

      @akbooer

      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 ?

      openLuup
    • call_action SendConfig

      DesT

      @akbooer

      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...

      openLuup
    • Cloning scenes in openLuup and AltUI

      A

      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=14

      Says this in the log:

      GET /console?action=clone&scene=14 HTTP/1.1 tcp{client}: 0x2c05008

      Searched 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_HERE

      Any ideas?

      openLuup
    • AltUI/Reactor issue?

      PerH

      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.png

      The 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

      openLuup
    • luaJIT

      rafale77

      @akbooer,

      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.

      Screen Shot 2020-07-05 at 23.11.47.png

      openLuup
    • openLuup: Windows Subsystem for Linux (WSL)

      akbooer

      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.lua

      When 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) Reload

      Simple!

      openLuup
    • openLuup: Version Log

      akbooer

      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 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

      openLuup
    • Logging lines

      C

      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

      openLuup
    • Breakdown?

      PerH

      I've been fiddling with the zigate plugin, as the dongle arrived.. I installed the app from appstore, and saw that the plugin files were not installed properly.
      Downloaded the zip files and put all luup files in the cmh_ludl folder. Reloaded luup, and it was in and looking ok
      I then entered the IP for it to communicate with the dongle, and reloaded luup.

      Now the openluup service is running, but i can't get into either altUI or openluup console.

      I tried rebooting, stopping and starting the service, no effect.

      the logs doesnt seem to be updated either. Now what?

      openLuup
    • Playing sounds on the Zooz Siren ZSE19

      C

      I'm trying to do this now that I have migrated the siren to Zway. Here's the thread from the Vera forums on how to do it with a Vera: https://community.getvera.com/t/playing-sounds-on-the-zooz-siren-zse19/211318

      I'm guessing something needs to change in the code since previously it was calling out the vera specifically.

      Here's what shows up in the logs when I tried to use Reactor for the SendData. Zway plugin is device 18. And my siren is device number 95 in my Zway network.

      2020-12-01 15:37:27.052 openLuup.server:: POST /data_request HTTP/1.1 tcp{client}: 0x56194138c448 2020-12-01 15:37:27.052 luup.call_action:: 18.urn:micasaverde-com:serviceId:ZWaveNetwork1.SendData 2020-12-01 15:37:27.053 openLuup.server:: request completed (151 bytes, 1 chunks, 0 ms) tcp{client}: 0x56194138c448 2020-12-01 15:37:27.079 luup_log:18: ZWay: http://127.0.0.1:8083/ZWaveAPI/Run/SendData(95,x79 8 35) 2020-12-01 15:37:27.079 luup_log:18: ZWay: SyntaxError: Unexpected number 2020-12-01 15:37:27.184 openLuup.server:: request completed (8606 bytes, 1 chunks, 5939 ms) tcp{client}: 0x561941d02fe8
      openLuup
    • Imperihome - missing devices

      PerH

      While i wait for a replacement app for my local UI devices, i want to use imperihome as long as I can.. But i'm missing a lot of devices!

      All Z-Way bridge devices, all security/smoke and motion sensors (local RFXtrx child devices)..

      Found the "include vera bridge" in imperihome.lua, what else could cause this?

      openLuup
    • LUA School

      PerH

      I downloaded ZeroBrane Studio to see if I could make sense of this lua language. @akbooer mentioned that this is what he uses for development, and i thought i could learn alot from seeing how openluup runs.

      How do I proceed in order to run openluup in zerobrane? I guess i need to do that to see how scripts like the imperihome ISS script works?

      I installed on a windows machine, will I have to run it in linux for it to work?

      openLuup
    • Imperihome - question

      K

      Hi @mrFarmer,

      I also have a question about ImperiHome:
      I'm trying to configure imperihome with openluup.
      Imperihome recognizes the new system, with all devices, status feedback is perfect.
      If I turn on something on imperihome, it will seem to be temporarily turned on and then turn off. Device does not actually change.
      Can you help me with what could be the problem?
      Thanks.
      Krisztian

      openLuup
    • Delay in luup requests

      Elcid

      Hi,

      I have a couple of luup request, one is a request to VeraAlexa pluging to make alexa speak, the other updating a variable in reactor. They all seem to have a 10-20 second delay
      example request
      http://192.168.1.134:3480/data_request?id=action&DeviceNum=44&serviceId=urn:toggledbits-com:serviceId:ReactorSensor&action=SetVariable&VariableName=A_home&NewValue=1

      I can not figure out what is causing the delay, does anyone have any ideas?

      openLuup
    • [openLuup] Multiple lines in variables

      therealdb

      Hey @akboer I'm working on a new feature for the virtual HTTP device plug-in and I noticed that variables are cut in UI if very long and multi-line values are not supported.

      Plus, RGB are missing a dedicated way to set color and temperature.

      openLuup
    • Push notifications

      R

      Hi guys,

      I was wondering what you guys use for push notifications on openluup. I still use VeraAlerts on my vera, but am searching for an alternative that runs on openluup.

      Thanks!

      openLuup
    • Converting RulesEngine to openLuup...

      DesT

      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

      openLuup
    • "attempt to call a string value" error on Vera luup engine

      therealdb

      I have some code failing on Vera from time to time. All I got is:

      attempt to call a string value

      and usually a luup.reload will fix it. It should be something related to startup and scene collision.

      Is there a way to really trace lua calls? I'm a DIY regarding LUA and I'm sure there should be a better way to trace and debug errors.

      I'll try to code something in order to detect this situation and reload luup, because it's blocking my scenes.

      Yes, I know I should migrate all my logic to openLuup, but I can't at the moment.

      openLuup
    • Geolocation

      R

      Hi guys,

      I’m researching the move away from Vera and z-way has the most chance at this point. However, I came across the geolocation aspect of my setup.

      I now use Vera Proximity. It works, but is not the most ideal solution. This won’t be an option anymore after I’ve migrated, so I was wondering what you guys use for geolocation.

      openLuup

    call_action SendConfig

    openLuup
    3
    29
    124
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • DesT
      DesT last edited by

      @akbooer

      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...

      1 Reply Last reply Reply Quote 0
      • akbooer
        akbooer last edited by

        Sorry, not familiar with this service call. Which device type are we talking about?

        1 Reply Last reply Reply Quote 0
        • DesT
          DesT last edited by

          In our last coding with @rafale77 when we work all together to handle zway in openLuup, I asked to be able to send some data directly to the zwave device to change some "parameters" and you made the SendConfig like that

          luup.call_action("urn:micasaverde-com:serviceId:HaDevice1","SendConfig",{parameter=6, command=0, size = 0}, ID["D-Bathroom0"])

          and now, I would need to be able to do the opposite, "GET" the value from the device instead of SEND

          rafale77 1 Reply Last reply Reply Quote 0
          • rafale77
            rafale77 @DesT last edited by rafale77

            @dest, @akbooer

            It is this function at line 521 of the z-way bridge

            SendConfig = function (d,args)
                  local cc = 112
                  local par,cmd,sz = args.parameter, args.command, args.size or 0
                  local data = "Set(%s,%s,%s)"
                  data = data: format(par,cmd,sz)
                  local altid = luup.devices[d].id
                  local id, inst = altid: match (NIaltid)
                  Z.zwcommand(id, inst, cc, data)
                end,
            

            We can add a get function but will have to create a variable to store the return...

            GetConfig = function (d,args)
                local cc = 112
                local par = args.parameter
                local data = "Get(%s)"
                data = data: format(par)
                local altid = luup.devices[d].id
                local id, inst = altid: match (NIaltid)
                status, response = Z.zwcommand(id, inst, cc, data)
                luup.variable_set(SRV.HaDevice, "config", response, d) 
              end,
            
            DesT 1 Reply Last reply Reply Quote 0
            • DesT
              DesT @rafale77 last edited by

              @rafale77

              yeah can do something like

              myValue = luup.call_action("urn:micasaverde-com:serviceId:HaDevice1","GetConfig",{parameter=6}, ID["D-Bathroom0"])

              rafale77 1 Reply Last reply Reply Quote 0
              • rafale77
                rafale77 last edited by rafale77

                Not quite, My code proposal above creates a “config” variable which you would have to watch or get within the lua code.
                As far as I know the luup.call_action does not return a variable unfortunately. It returns a status Boolean.

                1 Reply Last reply Reply Quote 0
                • akbooer
                  akbooer last edited by

                  In fact, action calls can, and do, return associated variable values. You just have to make sure that the service file is written correctly.

                  1 Reply Last reply Reply Quote 0
                  • rafale77
                    rafale77 last edited by rafale77

                    Interesting... I did not know that. I submitted a pull request on github though I have not tested it. Take a look.

                    Edit: I am able to get z-way to send a get parameter command but it doesn't appear to return the correct value. It seems to always be returning 0.

                    akbooer 1 Reply Last reply Reply Quote 0
                    • rafale77
                      rafale77 @DesT last edited by

                      @dest

                      Try the updated plugin file below. I can't figure out how to make a luup.call_action return any value other than 0 but... I created 2 new functions:
                      -GetConfig which will get z-way to poll the parameter value from the device.
                      -UpdateConfig which gets the value from z-way-server to openLuup and saves it to a device variable

                      The way to use them is for your example

                      luup.call_action("urn:micasaverde-com:serviceId:HaDevice1","GetConfig",{parameter=6}, ID["D-Bathroom0"])
                      luup.call_action("urn:micasaverde-com:serviceId:HaDevice1","UpdateConfig",{parameter=6}, ID["D-Bathroom0"])
                      

                      Which will create and update a variable called Config(6) which will have the value you are looking for.

                      L_ZWay2.lua.zip

                      akbooer 1 Reply Last reply Reply Quote 0
                      • akbooer
                        akbooer @rafale77 last edited by

                        @rafale77 said in call_action SendConfig:

                        Interesting... I did not know that.

                        Yes, indeed. Standard behaviour for luup.call_action() as documented here:

                        Luup Lua extensions - MiCasaVerde

                        The fourth return parameter is a table of named return arguments.

                        1 Reply Last reply Reply Quote 0
                        • akbooer
                          akbooer @rafale77 last edited by

                          @rafale77 said in call_action SendConfig:

                          Try the updated plugin file below.

                          A few problems here:

                          GetConfig()

                                data2 = data2: format(par)
                          

                          ...this variable is completely undefined, and this line should cause an error.

                          UpdateConfig()

                                response = Z.zwcommand(id, inst, cc, data)
                          

                          this should really be a local:

                                local response = Z.zwcommand(id, inst, cc, data)
                          

                          However, I'd prefer an implementation which used the luup.call_action() return parameter. I'll provide a version a bit later.

                          1 Reply Last reply Reply Quote 0
                          • akbooer
                            akbooer last edited by akbooer

                            Here's a skeleton for the code that you need:

                                
                                GetConfig = {
                                  run = function() 
                                    -- do whatever you need to get the status into ZWay_ZWaveCONFIG
                                    ZWay_ZWaveCONFIG = 42 
                                  end,
                                  extra_returns = {Config = function () return ZWay_ZWaveCONFIG end}
                                },
                            

                            I'm unable to work out from your posted code exactly what you need to do to get the value you want, but just provided a dummy line which sets a global to 42.

                            Running this from Lua Test on my machine:

                            local d = 23
                            local sid = "urn:micasaverde-com:serviceId:HaDevice1"
                            
                            local e,m,j,a = luup.call_action(sid, "GetConfig", {}, d)
                            
                            print(pretty {e,m,j,a})
                            

                            gives the output:

                            {0,"",0,{Config = 42}}
                            
                            rafale77 1 Reply Last reply Reply Quote 1
                            • rafale77
                              rafale77 @akbooer last edited by rafale77

                              @akbooer

                              Thank you. This is what the code should look like:

                              GetConfig = {
                                run = function() 
                                local cc = 112
                                local par = args.parameter
                                local data = "Get(%s)"
                                data = data: format(par)
                                local data2 = "data[%s].val.value"
                                data2 = data2: format(par)
                                local altid = luup.devices[d].id
                                local id, inst = altid: match (NIaltid)
                                Z.zwcommand(id, inst, cc, data)
                                extra_returns = {Config = function () return Z.zwcommand(id, inst, cc, data) 
                                end}
                              },
                              

                              Note, there might need to be a small delay between the two zwcommand executions to allow time for away to get the parameter from the device which is why I had the idea of splitting out the two actions.
                              Note that I also modified the zwcommand function for it to return a variable.

                              1 Reply Last reply Reply Quote 0
                              • akbooer
                                akbooer last edited by akbooer

                                That has a syntax error... you are missing an end.

                                Should be:

                                GetConfig = {
                                  run = function() 
                                    local cc = 112
                                    local par = args.parameter
                                    local data = "Get(%s)"
                                    data = data: format(par)
                                    local data2 = "data[%s].val.value"
                                    data2 = data2: format(par)
                                    local altid = luup.devices[d].id
                                    local id, inst = altid: match (NIaltid)
                                    Z.zwcommand(id, inst, cc, data)
                                  end,
                                  extra_returns = {Config = function () return Z.zwcommand(id, inst, cc, data) end}
                                }
                                
                                1 Reply Last reply Reply Quote 1
                                • rafale77
                                  rafale77 last edited by rafale77

                                  another error on my part...

                                  the extra return command should use data2

                                  GetConfig = {
                                    run = function() 
                                      local cc = 112
                                      local par = args.parameter
                                      local data = "Get(%s)"
                                      data = data: format(par)
                                      local data2 = "data[%s].val.value"
                                      data2 = data2: format(par)
                                      local altid = luup.devices[d].id
                                      local id, inst = altid: match (NIaltid)
                                      Z.zwcommand(id, inst, cc, data)
                                    end,
                                    extra_returns = {Config = function () return Z.zwcommand(id, inst, cc, data2) end}
                                  }
                                  

                                  Edit: don't the variables need to be global to be reused in another function? Do they need to be redefined in the extra_returns function?

                                  akbooer 1 Reply Last reply Reply Quote 0
                                  • akbooer
                                    akbooer @rafale77 last edited by

                                    @rafale77 said in call_action SendConfig:

                                    don't the variables need to be global to be reused in another function?

                                    Yes, that's true. It's why in my original example I used a global for the single return parameter. You could simply do that here by including the second call at the end of the main GetConfig() function.

                                    1 Reply Last reply Reply Quote 0
                                    • rafale77
                                      rafale77 last edited by

                                      huhhh very tempted to add a luup.sleep() here to put a delay between the two commands... It would be so much more convenient than a luup.delay and having to define another function.

                                      1 Reply Last reply Reply Quote 0
                                      • DesT
                                        DesT last edited by

                                        @rafale77 Should I use the same file you uploaded or you have another version ? Will probably try that later today!

                                        1 Reply Last reply Reply Quote 0
                                        • rafale77
                                          rafale77 last edited by rafale77

                                          obviously it is work in progress. The way I implemented it works in spite of the typos but it's not ideal. With AK's help, I think we can get something better.

                                          @akbooer if I run the command as part of the main run command, the return is a function... not a variable as I was expecting. It is pretty strange since I get the variable if I take that return and do a luup.variable_set() with it.

                                          akbooer 1 Reply Last reply Reply Quote 0
                                          • DesT
                                            DesT last edited by

                                            I'm playing with the SendConfig a lot since couple of days and I can tell you that I need to put some delay between a couple of SendConfig as something it's not working all the time mixed with some "usual" zwave command!

                                            For example, at night, I turn off a couple of zwave dimmer/switch and sending a couple of SendConfig and the SendConfig are not working 100% of the time!

                                            Maybe zwave stack is handling on/off command differently from "SendConfig" in the queue!

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB | Contributors
                                            Hosted freely by PointPub Media Communications Inc. | Contact us