LogicMachine Forum
HelvarNet - Printable Version

+- LogicMachine 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: 63)



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.