186
30.
mb:setregisters(id - 1, value)
31.
end
32.
end
33.
end
34.
35.
-- coil write callback
36.
function mbwritecoils(coil, value)
37.
local addr = coils[ coil + 1 ]
38.
if addr then
39.
grp.write(addr, value, dt.bool)
40.
end
41.
end
42.
43.
-- register write callback
44.
function mbwriteregisters(register, value)
45.
local addr = registers[ register + 1 ]
46.
if addr then
47.
grp.write(addr, value, regdt[ register + 1])
48.
end
49.
end
50.
51.
-- knx group monitor, handles group writes
52.
knxclient = eibdgm:new({ timeout = 0.1 })
53.
knxclient:sethandler('groupwrite', knxgroupwrite)
54.
55.
-- modbus slave, listen on all interfaces and default port 502
56.
mb = luamodbus.tcp()
57.
mb:open('0.0.0.0', 502)
58.
59.
-- setting slave id is optional
60.
-- mb:setslave(1)
61.
62.
mb:setreceivetimeout(0.1)
63.
mb:setmapping(#coils, 0, #registers, 0)
64.
65.
-- init coils
66.
for id, addr in ipairs(coils) do
67.
value = grp.getvalue(addr)
68.
mb:setcoils(id - 1, value)
69.
end
70.
71.
-- init registers
72.
for id, addr in ipairs(registers) do
73.
value = grp.getvalue(addr)
74.
mb:setregisters(id - 1, value)
75.
end
76.
77.
-- set callbacks for coil and register write
78.
mb:setwritecoilcb(mbwritecoils)
79.
mb:setwriteregistercb(mbwriteregisters)