Logic Machine Forum
HelvarNet - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: HelvarNet (/showthread.php?tid=2598)



HelvarNet - victor.back - 17.04.2020

Hi

Is there a script that can get status out of a Helvar routersystem with HelvarNet?

.pdf   HelvarNet.pdf (Size: 1010.73 KB / Downloads: 61)



RE: HelvarNet - admin - 21.04.2020

Try this script to check communication to HelvarNet. It will send query command every 3 seconds. If this works then status map to group address can be implemented.
Resident script, sleep time = 0. Change 192.168.1.1 to HelvarNet router IP. Change 1.1.2.15 to the address of the device you want to query. You will get raw and parsed replies in Logs tab.

Code:
if not sock then
  ip = '192.168.1.1'

  sock = require('socket').udp()
  sock:setsockname('*', 60001)
  sock:settimeout(1)

  ptime = os.time()

  function parseitem(res, item)
    if item:sub(1, 1) == '@' then
      if item:find('=') then
        local addr, val = unpack(item:split('='))
        res.addr = addr:sub(2)
        res.val = val
      end
    elseif item:find(':') then
      local key, val = unpack(item:split(':'))
      res[ key ] = val
    end
  end

  function parse(data)
    local res = {}

    if not data:find('#') then
      return
    end

    res.type = data:sub(1, 1)
    data = data:sub(2, -2)

    local items = data:split(',')

    for _, item in ipairs(items) do
      parseitem(res, item)
    end

    log(res)
  end
end

data = sock:receive()
if data then
  log(data)
  parse(data)
end

ctime = os.time()
if (ctime - ptime) >= 3 then
  ptime = ctime
  sock:sendto('>V:1,C:152,@1.1.2.15#', ip, 50001)
end



RE: HelvarNet - victor.back - 07.05.2020

(21.04.2020, 14:59)admin Wrote: Try this script to check communication to HelvarNet. It will send query command every 3 seconds. If this works then status map to group address can be implemented.
Resident script, sleep time = 0. Change 192.168.1.1 to HelvarNet router IP. Change 1.1.2.15 to the address of the device you want to query. You will get raw and parsed replies in Logs tab.

Code:
if not sock then
  ip = '192.168.1.1'

  sock = require('socket').udp()
  sock:setsockname('*', 60001)
  sock:settimeout(1)

  ptime = os.time()

  function parseitem(res, item)
    if item:sub(1, 1) == '@' then
      if item:find('=') then
        local addr, val = unpack(item:split('='))
        res.addr = addr:sub(2)
        res.val = val
      end
    elseif item:find(':') then
      local key, val = unpack(item:split(':'))
      res[ key ] = val
    end
  end

  function parse(data)
    local res = {}

    if not data:find('#') then
      return
    end

    res.type = data:sub(1, 1)
    data = data:sub(2, -2)

    local items = data:split(',')

    for _, item in ipairs(items) do
      parseitem(res, item)
    end

    log(res)
  end
end

data = sock:receive()
if data then
  log(data)
  parse(data)
end

ctime = os.time()
if (ctime - ptime) >= 3 then
  ptime = ctime
  sock:sendto('>V:1,C:152,@1.1.2.15#', ip, 50001)
end
First thanks for help. 
Tried changed the IP and device address as followed but doesnt get any in log or error log. ? 
I checked the push message in Helvar designer is set to True.
Code:
if not sock then
  ip = '192.168.1.14'

  sock = require('socket').udp()
  sock:setsockname('*', 60001)
  sock:settimeout(1)

  ptime = os.time()

  function parseitem(res, item)
    if item:sub(1, 1) == '@' then
      if item:find('=') then
        local addr, val = unpack(item:split('='))
        res.addr = addr:sub(2)
        res.val = val
      end
    elseif item:find(':') then
      local key, val = unpack(item:split(':'))
      res[ key ] = val
    end
  end

  function parse(data)
    local res = {}

    if not data:find('#') then
      return
    end

    res.type = data:sub(1, 1)
    data = data:sub(2, -2)

    local items = data:split(',')

    for _, item in ipairs(items) do
      parseitem(res, item)
    end

    log(res)
  end
end

data = sock:receive()
if data then
  log(data)
  parse(data)
end

ctime = os.time()
if (ctime - ptime) >= 3 then
  ptime = ctime
  sock:sendto('>V:1,C:152,@1.14.1.61#', ip, 50001)
end



RE: HelvarNet - admin - 07.05.2020

Try changing local port from 60001 to 50001. If it still does not work then the example should be modified to use TCP instead of UDP.


RE: HelvarNet - victor.back - 07.05.2020

Great! changed the port 50001, and now I get information in log.


RE: HelvarNet - djaval - 16.02.2024

Hi!

This story with Helvar, did you got some results or working solution?
Interested to use LM instead of Helvar BACNET gateway.