Logic Machine Forum
write on modbus - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Gateway (https://forum.logicmachine.net/forumdisplay.php?fid=10)
+--- Thread: write on modbus (/showthread.php?tid=4353)



write on modbus - CristianAgata - 06.11.2022

Hi,
I realized this script (resident 10 sec) to read data from Daikin Altherma. It seems works fine in reading mode. 
Now I need to add a cmd that writes on the 0 register 'on' when the thermostat it is 'on' and 'off' in the other case.
Best regards Cristian  
Code:
require('luamodbus')

--funzioni
function convert(data)
  --log(data)
  if data == 1 then
    value = "auto"
    else if data == 2 then
      value = "Cooling"
      else if data == 3 then
        value = "Heating"
        end
      end
    end
  return(value)
end

function convert_2(data)
  --log(data)
  if data > 200 then
    value = 0
    else
    voltage = grp.getvalue('Tensione_FTV')
      return(((data / 10) * voltage)/1000)
    end
  return(value)
end

--Programma

mb = luamodbus.rtu()
mb:open('/dev/ttyUSB0', 19200, 'E', 8, 1, 'H')
mb:connect()
mb:setslave(1)
local powerFull = grp.getvalue('Altherma - Powerfull')
local cmd_riscaldamento = grp.getvalue('Altherma - cmd_risc')
--log(cmd_riscaldamento)

local value_1 = mb:readregisters(0)
    if value_1 then        
        grp.update('Altherma - ON-OFF', value_1)
  end

local value_2 = mb:readregisters(1)
    if value_2 then
        grp.checkupdate('Altherma - Setpoint', value_2 / 10,0.5)
  end
--local value_3 = mb:readregisters(3)
--    if value_3 then
--        grp.update('Altherma - Modi', convert(value_3))
--  end
local value_4 = mb:readregisters(48)
    if value_4 then
      grp.checkupdate('Altherma - Temp Serbatoio', value_4 / 10, 0.5)
  end
local value_5 = mb:readregisters(45)
    if value_5 then
      grp.checkupdate('Altherma - Assorbimento', convert_2(value_5),0.01)
  end
local value_6 = mb:readregisters(9)
    if value_6 then
      grp.update('Altherma - Unit status ACS', value_6)
  end
local value_7 = mb:readregisters(10)
    if value_7 then
    grp.update('Altherma - Status Power ACS', value_7)
  end
local value_8 = mb:readregisters(11)
    if value_8 then
      grp.checkupdate('Altherma - Setpoint Water', value_8 / 10,1)
  end
local value_9 = mb:readregisters(12)
    if value_9 then
      grp.checkupdate('Altherma - Setpoint ACS', value_9 / 10,1)
  end
local value_10 = mb:readregisters(35)
    if value_10 then
      grp.checkupdate('Altherma - Temperatura Esterna', value_10 / 10, 1)
  end
--local value_11 = mb:readregisters(49)
    --if value_11 then
      --grp.checkupdate('Altherma - Temp Acqua Uscita ICP', value_11 / 10,0.5)
  --end
local value_12 = mb:readregisters(50)
    if value_12 then
      grp.checkupdate('Altherma - Temp Refrigerante', value_12 / 10,0.5)
  end
local value_13 = mb:readregisters(51)
    if value_13 then
      grp.checkupdate('Altherma - Flusso Acqua', value_13 / 10, 1)
  end
local value_14 = mb:readregisters(52)
    if value_14 then
      grp.checkupdate('Altherma - Pressione Acqua', value_14 / 10, 0.1)
  end
local value_15 = mb:readregisters(46)
    if value_15 then
      grp.checkupdate('Altherma - Temp Acqua Uscita', value_15 / 10, 0.5)
  end
local value_16 = mb:readregisters(47)
    if value_16 then
      grp.checkupdate('Altherma - Temp Acqua Ingresso', value_16 / 10, 0.5)
  end
local value_17 = mb:readregisters(36)
    if value_17 then
      grp.checkupdate('Altherma - Temperatura Ritorno', value_17 / 10,0.5)
  end

mb:close()



RE: write on modbus - admin - 07.11.2022

If you don't want to use a profile then simply add a write before reading the new values. But using a profile is a better approach as there won't be a delay between the object change and write. Also be careful with USB adapters as some of them are not very reliable.


RE: write on modbus - CristianAgata - 07.11.2022

(07.11.2022, 09:04)admin Wrote: If you don't want to use a profile then simply add a write before reading the new values. But using a profile is a better approach as there won't be a delay between the object change and write. Also be careful with USB adapters as some of them are not very reliable.

Thanks admin,
But this time it was a must......
BR Cristian