Logic Machine Forum
Tulikivi sauna heater relay board - 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: Tulikivi sauna heater relay board (/showthread.php?tid=3417)



Tulikivi sauna heater relay board - MikeBrignate - 10.06.2021

Hello

Could somebody help me with Tulikivi relay board for the sauna heater, trying to read sauna temperature with CMD 11, but the result always 0. When I connecting my touch panel, then pannel starts asking for data from the relay board and a log is showing some values. So the connection is established, but the request is wrong.
Code:
require('serial')
port, err = serial.open('/dev/RS485', {
  baudrate = 9600,
  databits = 8,
  stopbits = 1,
  parity = 'none',
  duplex = 'half'
})
port:flush()

port:write(0xB)

data = port:read(2,3)

byte = string.byte(data)

log(string.format("%o, %x, %d", byte,byte,byte))

port:close()

protocol attached

Thank you


RE: Tulikivi sauna heater relay board - admin - 11.06.2021

Try this:
Code:
require('serial')
port, err = serial.open('/dev/RS485', {
  baudrate = 9600,
  databits = 8,
  stopbits = 1,
  parity = 'none',
  duplex = 'half'
})

function send(cmd, data)
  local msg, res, err, b1, b2

  data = data or 0

  msg = string.char(
    bit.band(cmd, 0xFF),
    bit.band(bit.rshift(data, 8), 0xFF),
    bit.band(data, 0xFF)
  )

  port:flush()
  port:write(msg)

  res, err = port:read(2, 3)
  if type(res) == 'string' then
    if #res == 2 then
      b1, b2 = res:byte(1, 2)
      return bit.bor(bit.lshift(b1, 8), b2)
    else
      return nil, 'invalid reply'
    end
  else
    return nil, err
  end
end

-- turn on
res, err = send(1, 1)
log(res, err)

-- turn off
res, err = send(1, 0)
log(res, err)

-- read current temperature
res, err = send(15)
log(res, err)