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
    • Unsolved
    (Last Updated: July 12, 2021)
    • Status of SMARTHOME and SwitchLinc products

      D

      Is the Smarthome company still existent? If so, are SwitchLinc switched still available?

      General Discussion
    • Smart door lock

      D

      Hi! I want to install a smart lock on my front door, but I don't know which one to choose. There are many different models available on the market. Do you have a reliable model to recommend?

      General Discussion
    • Lua - Code to encrypt / decrypt with AES 128 CBC

      parkerc

      Hi

      I’m looking to rework some code I found online so I can use it on Vera, and while I’ve managed to translate / convert a number of things, I’ve got stuck on a few things it does, around encryption/decryption etc.

      All the original Lua code is here - > (https://forum.logicmachine.net/showthread.php?tid=232&pid=16580#pid16580 )

      Plus there looks to be a python version too here - > (https://github.com/florianholzapfel/panasonic-viera/issues/9#issuecomment-476919658)

      Here’s an extract of the code where AES 128 CBC is required?

      function encrypt_soap_payload(data, key, hmac_key, iv) payload = '000000000000' n = #data payload = payload .. string.char(bit.band(bit.rshift(n, 24), 0xFF)) payload = payload .. string.char(bit.band(bit.rshift(n, 16), 0xFF)) payload = payload .. string.char(bit.band(bit.rshift(n, 8), 0xFF)) payload = payload .. string.char(bit.band(n, 0xFF)) payload = payload .. data aes_cbc, err = aes:new(key, nil, aes.cipher(128, 'cbc'), { iv = iv }, nil, 1) ciphertext = aes_cbc:encrypt(payload) sig = encdec.hmacsha256(ciphertext, hmac_key, true) encrypted_payload = encdec.base64enc(ciphertext .. sig) return encrypted_payload end function decrypt_soap_payload(data, key, hmac_key, iv) aes_cbc, err = aes:new(key, nil, aes.cipher(128, 'cbc'), { iv = iv }, nil, 0) decrypted = aes_cbc:decrypt(encdec.base64dec(data)) decrypted = string.gsub(string.sub(lmcore.strtohex(decrypted), 33), '%x%x', function(value) return string.char(tonumber(value, 16)) end) return decrypted end

      I can get to the point where I can create the parameters for the payload encrypt request (example below), it’s just the encryption/decryption I cant do..

      data="1234" key="\\S„ßÍ}/Ìa5!" hmac_key="¹jz¹2¸F\r}òcžÎ„ 臧.ª˜¹=¤µæŸ" iv=" {¬£áæ‚2žâ3ÐÞË€ú "

      I’ve found this aes.lua (https://github.com/openresty/lua-resty-string/blob/master/lib/resty/aes.lua ) module online, but that requires loads of others modules too, most notably ffi.lua. Which I’d ideally like to avoid.

      I also came across this aes128.lua (https://github.com/somesocks/lua-lockbox/blob/master/lockbox/cipher/aes128.lua ) but i’m not sure how that handles all the other parameters e.g specify the cbc aspect etc.

      Finally there’s this aes256ecb.lua script (https://github.com/idiomic/Lua_AES/blob/master/AES.lua) , could that be converted to aes 128 cbc and then used in the above?

      Any help/advice on this would be appreciated..

      General Discussion
    • Seeking experts for implementing Modbus TCP

      Crille

      I just upgraded the firmware for the inverter for my solar panels and that made it possible to enable Modbus TCP.
      At a glance that would be perfect for live production data fed into my home automation environment but my lack of knowledge about the protocol and how to put the data where I want it failed me.

      What I have:

      MSR
      openLuup
      Vera Secure
      Ezlo Plus
      Mosquitto
      Homebridge
      Windows Server
      Ubuntu Server
      Quite decent PowerShell skills
      Enough Lua knowledge to write my own functions and handlers
      The inverters Modbus interface definitions

      What I want to achive:

      Something that can be run by systemd och anything else monitoring the status and keeping the Modbus connection alive.
      Publish readings over MQTT or whatever fits my setup, the goal is to feed the data into openLuup in someway so Historian can log the data for Grafana and display current production to HomeKit (as a mqttthing light sensor, since there is no other accessory suitable at the moment).

      Anyone implemented Modbus TCP in similar projects or have any guidance on how to reach my goal?

      Open for alternative solutions as well, all suggestions are appreciated!

      General Discussion
    • http relay activate with username and password authentication

      D

      Hi to all,
      I am user of vera controller. I have a dahua door intercom with relay. Relay activates with username and password authentication. I can activate the relay http://admin:a1234567@192.168.1.111/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote

      As you can see intercom username admin and password is a1234567 I build a scene with luup code luup.inet.wget( "http://admin:a1234567@192.168.1.111/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote" ) But can not activate relay. Is there any idea?

      General Discussion
    • Vera Secure usage without mios

      D

      Hi to all, I have a bricked vera secure that is replaced with new one. Old vera secure serial numbers are deleted from vera servers so I cannot use it. Vera secure's are orginally Sercomm's NA502 model devices. Recently I install openwrt to the old vera secure unit without problem. Is there any way to use it any automation system with internal z-wave. I install domoticz but I cannot setup internal z-wave unit, it only accept usb zwave radios. Is there any ideas?

      General Discussion
    • An electricians or wiring experts here?

      cw-kid

      I ordered a Fibaro Dimmer 2 and Bypass device for my upstairs landing / hallway lights.

      I have 2 light switches one at the bottom of the stairs and another one upstairs on the landing.

      But I am struggling to make sense of my current wiring, more details / photos on the Vera forum.

      Jan 27 Anyone good at electrical wiring for light switches? Anyone good at electrical wiring for light switches?

      Hi I ordered a Fibaro Dimmer 2 and Bypass device for my upstairs landing / hallway lights. I have 2 light switches one at the bottom of the stairs and another one upstairs on the landing. I have no neutral wires in the house behind the light switches. These are photos of the light switch...

      Thanks

      General Discussion
    • Looking for ideas on how to implement an automation.

      R

      Hello,
      Looking to all the dev's and tinkerers on this community for ideas on how to implement a solution to my problem. Kind of a long intro, sorry.

      Problem statement:
      I have a geothermal heat pump that has a loop that is slightly undersized. During the cold weather months in the Pacific Northwest (one or two months of the year), the loop can get below 32 degrees. If it goes on for a few days, it can generate significant frost heaving in my yard and under the flagstone deck, Actually fixing the issue is cost prohibitive.

      Current mitigation:
      I have DS18B20 tied into Home Assistant and monitoring the temp of the fluid coming out of the loop and if it drops below 35 degrees, MSR triggers a Fibaro Implant to add a resister into the external temp circuit and fool the Venstar to think the outside temp is below 32 degrees and issue a Heat Pump lockout and switch to AUX heat. While this is working fine and the AUX heat is only coming on once or twice a day, I would like to simplify the setup so it runs on something other than HA and MSR. I think they are overkill for my issue. Also want this to be independent of anything else in the house so it can stay behind if I am not around to maintain.

      I only have two inputs and one output:
      Inputs: Loop temp, Furnace running
      Outputs: Switch relay to drop resistance to external thermostat connection on thermostat.
      Logic is super simple:
      If temp is below 36 degrees and furnace is running, turn on relay
      If furnace stops, turn off relay.
      I am sure even I can figure that out on Python.

      Trying to determine the best platform for a set it and forget it black box that works with as close to zero maintenance as possible.

      Options I have thought of are:

      Pi zero with a GPIO controlled relay ESPHome (Not very knowledgeable about that platform, but willing to explore) Arduino Anything anyone else suggests

      Any ideas are appreciated.

      General Discussion
    • Is Hubitat to HA Bridge possible?

      D

      Greetings,

      I’m researching a migration from Vera+ to Hubitat C7 and want to know if anyone has successfully connected the Hubitat to the “HA Bridge” for local Alexia calls.
      The HA Bridge does not callout Hubitat natively from what I see.

      Thanks for your assistance.

      General Discussion
    • New Developer - What I should know/do ? (Vera/OpenLuup)

      parkerc

      Hi all

      Having some time off i’ve been able to invest a chunk in creating some plug-ins for Vera/OpenLuup, and will do what I can to post them in GitHub and add links on the Vera Community and here, for anyone who is interested.

      But, being knew to any of this, I wanted to ask for any guidance on how and when I should share stuff ? How best do I share it ? Am I liable for anything I share? Is GitHub the best place ? What licenses should I associate with them ?

      The latter is a strange one, as I don’t see how I can have any claim over the content/code itself, as I’ve learnt and leveraged so much from others..

      To get the ball rolling I posted this on the ezlo/Vera site..

      Jan 4 Luup Plugin - Energenie PMS LAN Switch Luup Plugin - Energenie PMS LAN Switch

      Hi To ensure I give back to this community, which has been educating me in all things Lua and Luup over the years (12+) I wanted to share some of the plugins I’ve built recently to see if any are of use/interest to others. The first one is for the Energenie PMS LAN Switch where I have built two...

      General Discussion
    • New to Smart Home

      M

      Hey guys,

      I just registered here in the forum and honestly… I’m new to the whole topic. I‘m a web developer, so I‘ve quite a bit experience with java, js, sql and so on. But that may not help a lot in this new field.

      I‘m looking forward to develop my own smart home device and I‘m looking for starting point. In General the specs are like:

      The device should work with WiFi, I want to integrate it into my network I want to write an own app to control it, it may find the device in my network I want the device to be offline usable, if possible (without internet connection) I want the device to broadcast information in my network like „water is empty“, so I can use push messaging in the App it should be ready to as well work with Alexa or Apple Home Kit or Google Assistant as I Plan to develop a skill for them.

      Can someone provide me with some information I could start with? Like - are there microcontrollers I could go with or is it to complex and I need a raspy? Which frameworks / languages / libs could I use? I know how to do the things on the app side but not on the device side.

      General Discussion
    • Amazon Alexa hosts

      CatmanV2

      Vainly trying to get to the bottom of the 10 - 15 second delay for TTS with the Alexa plugin (still) anyone have a list of the possible Alexa hosts? Just wonder if the one I have (layla.amazon.co.uk) could just be slow.

      Any thoughts?

      C

      General Discussion
    • Merry Christmas/Happy Holidays

      toggledbits

      Just wanted to wish everyone a very Merry Christmas (or Happy Holidays, if that's your preferred salutation, or...?), and also a very happy, healthy and prosperous New Year 2022.

      General Discussion
    • Very newbie man looking for help

      P

      Hello. First, excuse my english, please. I bought a Vera Edge looking for some way to make a digital ambient thermostat that I could manage remotely without a phone home from the device side. I am very disappointed with that device because all the "official" help of the brand goes in the way of to sign in an account and work with their cloud. I have some computer, network and linux knowledge but all my tests with the hub and a Qubino Flush 1D Relay has been unsuccessful. I connected both and I got to make some basic functions but I see myself very far to get my target. This is my last try to get something before I log in an account in getvera.com and look if I can make some progress in my project following that way.

      Can somebody tell me some place where I can learn the basic concepts of this system? Guides, books, videos... Whatever it can help me in my project.

      Thank you.

      General Discussion
    • Help please with Node-Red "Lost connection to server"

      cw-kid

      Node-Red on my Linux Debian box seems to be having issues now. It keeps saying repeatedly "Lost connection to server, reconnecting..." in the web browser.

      I recently updated nodejs for MSR, I wonder if that might be related:

      "Bump recommended nodejs version to 16.13.0; versions 14 and 15 will continue to be supported through March 31, 2022"

      Nodejs version = v16.13.1

      I have tried updating Node-Red that is now version v2.1.4

      I also updated npm to version v8.2.0

      I am not sure how or where to look at the log file for node red?

      This is the contents of the nodered.service file in this directory:
      /etc/systemd/system/multi-user.target.wants

      # systemd service file to start Node-RED [Unit] Description=Node-RED graphical event wiring tool Wants=network.target Documentation=http://nodered.org/docs/hardware/raspberrypi.html [Service] Type=simple # Run as normal pi user - change to the user name you wish to run Node-RED as User=stuart Group=stuart WorkingDirectory=/home/stuart Environment="NODE_OPTIONS=--max_old_space_size=1024" # uncomment and edit next line if you need an http proxy #Environment="HTTP_PROXY=my.httpproxy.server.address" # uncomment the next line for a more verbose log output #Environment="NODE_RED_OPTIONS=-v" # uncomment next line if you need to wait for time sync before starting #ExecStartPre=/bin/bash -c '/bin/journalctl -b -u systemd-timesyncd | /bin/grep -q "systemd-timesyncd.* Synchronized to time server"' ExecStart=/usr/bin/env node-red-pi $NODE_OPTIONS $NODE_RED_OPTIONS #ExecStart=/usr/bin/env node $NODE_OPTIONS red.js $NODE_RED_OPTIONS # Use SIGINT to stop KillSignal=SIGINT # Auto restart on crash Restart=on-failure RestartSec=20 # Tag things in the log SyslogIdentifier=Node-RED #StandardOutput=syslog [Install] WantedBy=multi-user.target

      Thanks

      General Discussion
    • Goodbye Brothers in crime!

      S

      Hi @ll, last days I migrated my last zwave device from Vera to zwave js in homeassistant. Out of 150 devices 1 did not go well initially but reinterviewing did it directly. Most work was to find the ex and inclusion procedure, 3 times, click, clack, whatever. I must admit that Vera is Lighting fast!!!!! With only 3 devices left, those were my under the floor switches I had to do last.

      Now I am totally gone from Vera, altui, luup, etc. There's nothing more left for me on this forum. And since it was one of my "routine sites" reading I will save a few minutes a day skipping it.

      I thank you all for all the kind help, warm words and laughter about the ezlo flop :-).

      I hooe you all will be safe and healthy and whish you all the best!

      I will stay on the homeassistant forum.

      Goodbye!

      General Discussion
    • Re-number on OpenLuup

      CatmanV2

      Morning all. Hope all are well. Been a bit of a trying time here, but nothing we can't deal with....
      .....apart from this!

      My coffee grinder went punk yesterday (wasn't even being used) and took out the main breakers. Once it was isolated I got everything back on line, except on TKB smart plug which was in the same double socket as the grinder.

      OpenLuup claims it's failed. Z-wave server can't see it but it responds to the button pushes physically as I'd expect. (i.e. the socket turns on and off, and the LED flashes to indicate it's in inclusion / exclusion mode)

      My plan is to see if I can exclude it then re-include it in z-wave server. If that doesn't work then I'll bin it, but if it does work can I then re-number it to match the original device ID and not have to trawl through my reactors? Any chance?
      TIA

      C

      General Discussion
    • Would you use a self-hosted geofencing solution?

      toggledbits

      Some of you may know that I took at shot at building an alternate geofencing solution for Vera. The core of it was system agnostic, using the OwnTracks application and AWS lambdas to track devices and keep a central data, then disseminate that to the Vera via a websocket-based plugin. It worked with other apps as well, including Tasker and GPSLogger, but of the dozen people that were testing it, most used OwnTracks.

      A lot was learned in the process, not the least of which is that the success of any such solution is highly dependent on the phone and its settings. Phone manufacturers love to set things up for the longest battery life, of course, but that's usually very anti-geofencing behavior. In the case of at least one brand, it was unusable and the settings could not be modified. It was also cost-prohibitive to maintain on Amazon, as AWS grabs a dime here and a dollar there and before you know it, it added $100/month to my AWS bill, which my wife deducted from my Scotch budget. Unacceptable.

      But it's quite reasonable to use OwnTracks to a local endpoint, and I could pretty easily replicate the functionality as a local application, or maybe even as an additional endpoint built into MSR's API (still separate port and process, but in the package).

      So the question really is... would you do it, or would you be too concerned about the security risks associated (e.g., dynamic DNS and NAT mapping in the firewall necessary for the phone to contact the service when not on LAN)?

      General Discussion
    For those who registered but didn't received the confirmation email, please send an email to support@smarthome.community with the email you used

    SNMP - Is anyone leveraging info via the Simple Network Management Protocol ?

    General Discussion
    2
    18
    280
    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.
    • parkerc
      parkerc last edited by

      Hi

      In my ongoing quest to try and retrieve as much information as I can about the amount of energy I’m using , I found out that I could use SNMP to see how much power (watts) my UPS is handling .

      To do this, I installed snmpd/snmp on my Vera linked Raspberry Pi, and then ran the following command.

      local command = io.popen("ssh -i /etc/dropbear/dropbear_rsa_host_key pi@192.168.102.37 'snmpwalk -Os -c public -v 1 10.10.10.103' 2>&1")
      local response = command:read("*a")
      print(response)
      

      Which returned a huge amount of information, which prompted me to ask the community here if there anything on Vera/OpenLuup that people have that can process this sort of information into a new devices and associated variables to then monitor/track going forward ?

      iso.3.6.1.2.1.1.1.0 = STRING: "Eaton 5P 1150"
      iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.705.1
      iso.3.6.1.2.1.1.3.0 = Timeticks: (51435090) 5 days, 22:52:30.90
      iso.3.6.1.2.1.1.4.0 = STRING: "Computer Room Manager"
      iso.3.6.1.2.1.1.5.0 = STRING: "ups239"
      iso.3.6.1.2.1.1.6.0 = STRING: "Computer Room"
      iso.3.6.1.2.1.1.7.0 = INTEGER: 72
      iso.3.6.1.2.1.1.8.0 = Timeticks: (0) 0:00:00.00
      iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.1
      iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.10.3.1.1
      iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.11.3.1.1
      iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.15.2.1.1
      iso.3.6.1.2.1.1.9.1.2.5 = OID: iso.3.6.1.6.3.16.2.1.1
      iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The MIB Module from SNMPv2 entities"
      iso.3.6.1.2.1.1.9.1.3.2 = STRING: "SNMP Management Architecture MIB"
      iso.3.6.1.2.1.1.9.1.3.3 = STRING: "Message Processing and Dispatching MIB"
      iso.3.6.1.2.1.1.9.1.3.4 = STRING: "USM User MIB"
      iso.3.6.1.2.1.1.9.1.3.5 = STRING: "VACM MIB"
      iso.3.6.1.2.1.1.9.1.4.1 = Timeticks: (0) 0:00:00.00
      iso.3.6.1.2.1.1.9.1.4.2 = Timeticks: (0) 0:00:00.00
      iso.3.6.1.2.1.1.9.1.4.3 = Timeticks: (0) 0:00:00.00
      iso.3.6.1.2.1.1.9.1.4.4 = Timeticks: (0) 0:00:00.00
      iso.3.6.1.2.1.1.9.1.4.5 = Timeticks: (0) 0:00:00.00
      iso.3.6.1.2.1.2.1.0 = INTEGER: 2
      iso.3.6.1.2.1.2.2.1.1.1 = INTEGER: 1
      iso.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2
      iso.3.6.1.2.1.2.2.1.2.1 = STRING: "LOOPBACK"
      iso.3.6.1.2.1.2.2.1.2.2 = STRING: "eth0"
      iso.3.6.1.2.1.2.2.1.3.1 = INTEGER: 24
      iso.3.6.1.2.1.2.2.1.3.2 = INTEGER: 6
      iso.3.6.1.2.1.2.2.1.4.1 = INTEGER: 1500
      iso.3.6.1.2.1.2.2.1.4.2 = INTEGER: 1500
      etc....
      
      1 Reply Last reply Reply Quote 0
      • parkerc
        parkerc last edited by

        Oh, and if I just want to pull one of the items I just specify the iso number with the snmpget command. E.g

        local command = io.popen("ssh -i /etc/dropbear/dropbear_rsa_host_key pi@192.168.102.37 'snmpget -v1 -c public 10.10.10.103 iso.3.6.1.2.1.1.1.0' 2>&1")
        local response = command:read("*a")
        print(response)
        

        which in this case will just return the first one.

        iso.3.6.1.2.1.1.1.0 = STRING: "Eaton 5P 1150"
        
        1 Reply Last reply Reply Quote 2
        • prophead
          prophead last edited by

          I use a lua scene to read snmp network usage from my switches. Working great for a couple of years now.

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

            Hi @prophead - can you share more details on the Scene, is it with Lua/luup code ?

            prophead 2 Replies Last reply Reply Quote 0
            • prophead
              prophead @parkerc last edited by prophead

              @parkerc Yes, I have 3 lua scenes, one for each switch for LAN monitoring and one for my Edgerouter for WAN monitoring. Each uses the same basic snmp framework with device specific tweaks and then saves results to an empty device and then I graph those device variables. I'm happy to share my code below:

              1 Reply Last reply Reply Quote 0
              • prophead
                prophead @parkerc last edited by

                @parkerc this is the Dlink 8 port SNMP switch lua:

                -- SNMP 8 port BWmon
                -- read stored in/out values
                local lines = ""
                local Din = {}
                local Dout = {}
                local Oin = {}
                local Oout = {}
                local Nin = {}
                local Nout = {}
                local T = {}
                local i,j
                
                --check for switch
                local ping = os.execute("ping -c 1 192.168.1.11")
                if ping ~= 0 then
                  luup.log("Dlink 8: Switch down. Aborted.")
                  do return end
                end
                
                for i = 1,8 do
                -- read stored values
                   local f = io.open("/tmp/8"..i.."I.txt")
                   if f then
                   for line in f:lines() do
                     lines = line
                   end -- for each line
                  f:close()
                  else os.execute("touch /tmp/8"..i.."I.txt")
                  end
                
                  if not lines then lines = "0" end
                  Oin[i] = lines
                  --print (Oin[i])
                  
                   local f = io.open("/tmp/8"..i.."O.txt")
                   if f then
                     for line in f:lines() do
                       lines = line
                     end -- for each line
                   f:close()
                   else os.execute("touch /tmp/8"..i.."O.txt")
                   end
                
                  if not lines then lines = "0" end
                  Oout[i] = lines
                  --print (Oout[i])
                
                end -- for each port read
                
                -- parse values
                for j = 1,8 do
                
                Oin[j] = string.match(Oin[j], ".*Counter32: (%d+)")
                if Oin[j] == "" or Oin[j] == nil then Oin[j] = 0 end
                Oout[j] = string.match(Oout[j], ".*Counter32: (%d+)")
                if Oout[j] == "" or Oout[j] == nil then Oout[j] = 0 end
                
                -- read snmp
                lines = ""
                os.execute("/usr/bin/snmpget -r 1 -v1 -c PASSWORD 192.168.1.11 iso.3.6.1.2.1.2.2.1.10."..j.." >/tmp/8"..j.."I.txt")
                local f = io.open("/tmp/8"..j.."I.txt")
                   if not f then return end  
                   for line in f:lines() do
                      lines = line
                   end
                f:close()
                Nin[j] = lines
                --print (Nin[j])
                
                lines = ""
                os.execute("/usr/bin/snmpget -r 1 -v1 -c PASSWORD 192.168.1.11 iso.3.6.1.2.1.2.2.1.16."..j.." >/tmp/8"..j.."O.txt")
                local f = io.open("/tmp/8"..j.."O.txt")
                   if not f then return end  
                   for line in f:lines() do
                      lines = line
                   end
                f:close()
                Nout[j] = lines
                --print (Nout[j])
                
                --parse
                Nin[j] = string.match(Nin[j], ".*Counter32: (%d+)")
                if Nin[j] == "" or Nin[j] == nil then Nin[j] = 0 end
                Nout[j] = string.match(Nout[j], ".*Counter32: (%d+)")
                if Nout[j] == "" or Nout[j] == nil then Nout[j] = 0 end
                
                --print (Nin[j])
                --print (Nout[j])
                
                --deltas
                Din[j] = Nin[j] - Oin[j]
                Dout[j] = Nout[j] - Oout[j]
                
                local max32 = 4294967295
                --local max32 = 4294966864
                
                -- handle rotation
                if Nin[j] < Oin[j] then Din[j] = max32 - Oin[j] + Nin[j] end
                if Nout[j] < Oout[j] then Dout[j] = max32 - Oout[j] + Nout[j] end
                if Din[j] > max32 or Din[j]<0 then Din[j] = 0 end --math.max(Oin[j],Nin[j]) end
                if Dout[j] > max32 or Dout[j]<0 then Dout[j] = 0 end --math.max(Oout[j],Nout[j]) end
                
                end -- end for each port write
                
                -- add real time interval tracking
                -- read old time
                lines = ""
                local ot = ""
                local f = io.open("/tmp/lastDlink8run.txt")
                    if not f then os.execute("touch /tmp/lastDlink8run.txt") return end
                    for line in f:lines() do
                        ot = line
                    end
                f:close()
                if not ot then ot = "300" end -- default to five minutes
                
                -- write new time
                local nt = tonumber(os.time())
                local t = assert(io.open("/tmp/lastDlink8run.txt", "w"), "Failed to open lastDlink8run.txt")
                t:write(nt)
                io.close(t)
                
                -- delta seconds
                local nds = nt - ot
                
                -- bounds
                if nds < 24 then nds = 24 end
                if nds > 900 then nds = 900 end
                
                -- debugging
                local t = assert(io.open("/tmp/Dlink8nds.txt", "w"), "Failed to open Dlink8nds.txt")
                t:write(nds)
                io.close(t)
                
                -- maths
                for k = 1,8 do
                Din[k] = ((Din[k]/nds)/1024)
                if Din[k] > 1500000 then Din[k] = 0 end
                Dout[k] = ((Dout[k]/nds)/1024)
                if Dout[k] > 1500000 then Dout[k] = 0 end
                T[k] = Din[k]+Dout[k]
                end -- end for each K conversion
                
                -- set luup device variables for device 12, LAN
                luup.variable_set("urn:upnp-org:serviceId:altui1", "DoorBirdINKBps", Din[1] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "DoorBirdOUTKBps", Dout[1] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "DoorBirdKBps", T[1] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "RoomHubINKBps", Din[2] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "RoomHubOUTKBps", Dout[2] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "RoomHubKBps", T[2] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "BedroomINKBps", Din[3] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "BedroomOUTKBps", Dout[3] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "BedroomKBps", T[3] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "DownstairsINKBps", Din[4] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "DownstairsOUTKBps", Dout[4] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "DownstairsKBps", T[4] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "LivingRoomINKBps", Din[5] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "LivingRoomOUTKBps", Dout[5] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "LivingRoomKBps", T[5] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "KitchenINKBps", Din[6] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "KitchenOUTKBps", Dout[6] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "KitchenKBps", T[6] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "UpstairsINKBps", Din[7] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "UpstairsOUTKBps", Dout[7] , 12)
                luup.variable_set("urn:upnp-org:serviceId:altui1", "UpstairsKBps", T[7] , 12)
                
                1 Reply Last reply Reply Quote 0
                • parkerc
                  parkerc last edited by

                  Many thanks for sharing @prophead

                  QQ - How did you get smtpget installed on your Vera ? (I don’t have smtpget listed in usr/bin ?)

                  prophead 3 Replies Last reply Reply Quote 0
                  • prophead
                    prophead last edited by

                    Altui on a pi

                    1 Reply Last reply Reply Quote 0
                    • prophead
                      prophead @parkerc last edited by

                      @parkerc then I use grafana to graph
                      F6CFFAB5-D8A7-42D2-A1B2-2C5299DC5CB6.jpeg

                      1 Reply Last reply Reply Quote 0
                      • prophead
                        prophead @parkerc last edited by

                        @parkerc I’m going to point you here:

                        jertel/vuegraf

                        jertel/vuegraf

                        Populate metrics from your Emporia Vue energy monitoring devices into an InfluxDB - jertel/vuegraf

                        For more energy centric metrics then snmp. I love the vue devices and the grafana integration with this link is stellar for really understanding your energy use.

                        1 Reply Last reply Reply Quote 0
                        • prophead
                          prophead @parkerc last edited by

                          @parkerc
                          FC4656C3-8DD1-4493-9E74-5DC71923C335.jpeg F2329C8D-3B50-4C93-914B-8BA3FF49656C.jpeg

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

                            Impressive stuff, thanks for sharing @prophead ..

                            Earlier you mentioned ‘ Edgerouter’ , does that mean you have a Ubiquiti router ? If so would you be able to share the scene Lua for that, as I have a Unfi set up so would love to test that out..

                            prophead 2 Replies Last reply Reply Quote 0
                            • prophead
                              prophead @parkerc last edited by

                              @parkerc

                              -- SNMP BWmon
                              -- read stored in/out values
                              local files = ""
                              local f = io.open("/tmp/INO.txt")
                              if not f then os.execute("touch /tmp/INO.txt") end
                                 for line in f:lines() do
                                    files = line
                                 end
                              f:close()
                              
                              local OINO = files
                              
                              local f = io.open("/tmp/OUTO.txt")
                              if not f then os.execute("touch /tmp/OUTO.txt") end
                                 for line in f:lines() do
                                    files = line
                                 end
                              f:close()
                              if not files then files = "Counter32: (0)" end
                              local OOUTO = files
                              
                              -- parse values
                              local ROINO = string.match(OINO, ".*Counter32: (%d+)")
                              local ROOUTO = string.match(OOUTO, ".*Counter32: (%d+)")
                              
                              -- read snmp
                              os.execute("/usr/bin/snmpget -r 1 -v1 -c PASSWORD 172.16.0.1 iso.3.6.1.2.1.2.2.1.10.4 >/tmp/INO.txt")
                              local f = io.open("/tmp/INO.txt")
                                 if not f then return end  
                                 for line in f:lines() do
                                    files = line
                                 end
                              f:close()
                              local INO = files
                              
                              --print (INO)
                              
                              files = ""  
                               os.execute("/usr/bin/snmpget -r 1 -v1 -c PASSWORD 172.16.0.1 iso.3.6.1.2.1.2.2.1.16.4 >/tmp/OUTO.txt")
                               local f = io.open("/tmp/OUTO.txt")
                                  if not f then return end
                                  for line in f:lines() do
                                      files = line
                                  end
                              f:close()
                              local OUTO = files
                              
                              --print (OUTO)
                              
                              --parse
                              local RINO = 0 
                              RINO = string.match(INO, ".*Counter32: (%d+)")
                              local ROUTO = 0
                              ROUTO = string.match(OUTO, ".*Counter32: (%d+)")
                              
                              --print (RINO)
                              --print (ROUTO)
                              
                              --maths
                              local RINB = 0
                              RINB = RINO --* 8
                              local ROINB = 0
                              ROINB = ROINO --* 8
                              local ROUTB = 0
                              ROUTB = ROUTO --* 8
                              local ROOUTB = 0
                              ROOUTB = ROOUTO --* 8
                              
                              --deltas
                              local INt = 0
                              INt = RINB - ROINB
                              local OUTt = 0
                              OUTt = ROUTB - ROOUTB
                              
                              local max32 = 4294966864
                              
                              --debug
                              --luup.log ('RINB ='..RINB..', ROINB ='..ROINB)
                              --luup.log ('ROUTB ='..ROUTB..', ROOUTB ='..ROOUTB)
                              
                              -- handle rotation
                              if RINB < ROINB then INt = max32 - ROINB + RINB end
                              if ROUTB < ROOUTB then OUTt = max32 - ROOUTB + ROUTB end
                              if INt > max32 or INt<0 then INt = max(RINB,ROINB) end
                              if OUTt > max32 or OUTt<0 then OUTt = max(ROUTB,ROOUTB) end
                              
                              --luup.log ('INt ='..INt..', OUTt ='..OUTt)
                              
                              -- 60 is 1 min interval and 1024 makes kBps
                              local kbpsINt = ((INt/60)/1024)
                              local kbpsOUTt = ((OUTt/60)/1024)
                              local total = kbpsINt + kbpsOUTt
                              
                              luup.variable_set("urn:upnp-org:serviceId:altui1", "ComcastKBps", total, 11)
                              luup.variable_set("urn:upnp-org:serviceId:altui1", "ComcastInKBps", kbpsINt, 11)
                              luup.variable_set("urn:upnp-org:serviceId:altui1", "ComcastOutKBps", kbpsOUTt, 11)
                              
                              1 Reply Last reply Reply Quote 0
                              • prophead
                                prophead @parkerc last edited by

                                @parkerc as you can see it's virtually same because SNMP is pretty standardized. Yes, this is the ubiquity edgerouter, a great $60 piece of kit. I use it for ISP failover and firewall.

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

                                  Many thanks @prophead - I’m going to try and use this with my UniFi Switch this morning..

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

                                    Quick observation, if I try the following against my UniFi (USG) Router

                                    local command = io.popen("ssh -y -i /etc/dropbear/dropbear_rsa_host_key pi@192.168.102.144 'snmpget -r 1 -v1 -c public 192.168.102.1 iso.3.6.1.2.1.2.2.1.10.4' 2>&1")
                                    local response = command:read("*a")
                                    print(response)
                                    

                                    it times out..

                                    Timeout: No Response from 192.168.102.1.
                                    

                                    Yet if I try this against a UniFi Switch,

                                    local command = io.popen("ssh -y -i /etc/dropbear/dropbear_rsa_host_key pi@192.168.102.144 'snmpget -r 1 -v1 -c public 192.168.102.7 iso.3.6.1.2.1.2.2.1.10.4' 2>&1")
                                    local response = command:read("*a")
                                    print(response)
                                    

                                    it works fine.

                                    iso.3.6.1.2.1.2.2.1.10.4 = Counter32: 29157590
                                    

                                    Hummm..

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

                                      I tried an snmpwalk on the UniFi (USG) Router too,

                                      'snmpwalk -Os -c public -v 1 192.168.102.1' 2>&1
                                      

                                      and that timed out..

                                      More digging is needed later, as all seem to have SNMP enabled..

                                      prophead 1 Reply Last reply Reply Quote 0
                                      • prophead
                                        prophead @parkerc last edited by

                                        @parkerc sounds like a permissions issue. Debug on command line before trying to script. I would also avoid use of the public access to snmp as it’s a potential security issue. I always setup private domain the proceedure differs by manufacturers. You can use snmpwalk for debugging then move to snmpget once you’re ready to drill down. Good luck.

                                        1 Reply Last reply Reply Quote 0
                                        • First post
                                          Last post

                                        Welcome. If you’d like to participate in the discussion, rather than just read, then you can join the forum. As a member, you can interact with others here to share your experience and ask the questions you need answered.

                                        Powered by NodeBB | Contributors
                                        Hosted freely by PointPub Media Communications Inc. | Contact us