I found the gateway example for HDL Buspro product.https://openrb.com/example-hdl-integrati...rough-lm2/
I am not sure if LM5 can use this script as a tool to connect the HDL product "HDL-MHRCU.433".
Or some modifications need to be taken for this script?
And I can't find out related "Add the following script in Scripting -> Tools -> User function library"
More details about this product" HDL-MHRCU.433 ", please refer to the PDF attachment .
I have tested the script for several times, but still no response from HDL side.
I am not sure if I put the script at the right way and right place---"Add the following script in Scripting -> Tools -> User function library", more details, please refer to picture.
I use HDL buspro tool to search or scan devices, but I can't find the Device ID for LM5 is 254. ID 254 is default for LM5?
I tried again to use LM5 to send switch on/off signal to HDL IP unit (IP Add.=192.168.1.37, Subnet=1 Device=0).
The HDL device (Subnet=1 Device=61) is 8 channels switch module, which also connects to HDL IP unit.
The script user.hdl is copied from example(openrb.com) , and "require('crc16')" is replaced by "crc16 = require('encdec').crc16"
The event-based script also set up according to example(openrb.com) .
14/0/220 is created to test the script.
When I turn on 14/0/220, the following error happens User library hdl:30: bad argument #1 to 'pdecode' (expected 1 argument) stack traceback: [C]: in function 'pdecode' User library hdl:30: in function 'init' User library hdl:99: in function 'encode' User library hdl:137: in function 'chanreg'
I don't know what is the root cause and how to slove this problem.
-- split ip address into chunks
chunks = info.eth0.inetaddr:split('.')
-- add ip address chunks
for i = 1, 4 do
chunk = tonumber(chunks[ i ])
HDL.iphdr = HDL.iphdr .. string.char(chunk)
end
end
HDL.decode = function(packet)
local len, data, src, crc
-- primary header
if packet:sub(5, 14) ~= HDL.magic then
return nil, 'magic'
end
-- leading code
if packet:sub(15, 16) ~= HDL.lcode then
return nil, 'lcode'
end
-- get data length and check against
len = packet:byte(17)
if len and len + 16 ~= packet:len() then
return nil, 'len'
end
-- get packet data and check crc
data = packet:sub(17, len + 14)
crc = packet:byte(len + 15) * 0x100 + packet:byte(len + 16)
if crc16(data) ~= crc then
return nil, 'crc'
end