Code:
local thermostatCount = 18 -- Number of thermostats
local heating_cooling_sources = '12/1/211'
--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local script_lock = '12/1/210'
local holidays = '6/1/3' -- Thermostat Mode
local S4_ON_OFF = {} -- AUTO / OFF
local S4_ON_OFF_FB = {} -- AUTO/OFF feedback
local overheat = {} -- Overheat status
local climate_status = {} -- Thermostat heating status
local Force_heat = {} -- FORCED POS
local PIDBLOCK = {} -- PID block
local thermostat_block = {} -- Thermostat block
local blocking_Fb = {} -- blocking FB
local frost_heat_FB = {} -- Termostato Frost/Heat protection Feedback
-- Initialize thermostat addresses and other variables
for i = 1, thermostatCount do
S4_ON_OFF[i] = '12/1/' .. i
S4_ON_OFF_FB[i + 100] = '12/1/' .. (i + 100)
overheat[i] = '2/4/' .. i
climate_status[i] = '3/6/' .. i
Force_heat[i] = '3/1/' .. i
PIDBLOCK[i] = '3/5/' .. i
thermostat_block[i + 100] = '3/5/' .. (i + 100)
blocking_Fb[i] = '12/0/' .. i
frost_heat_FB[i] = '3/4/' .. i
end
for i = 1, thermostatCount do
os.sleep(0.2)
if grp.getvalue(overheat[i]) or grp.getvalue(holidays) == 3 or not grp.getvalue(S4_ON_OFF[i]) or not grp.getvalue(climate_status[i]) then
grp.checkwrite(PIDBLOCK[i], true)
else
grp.checkwrite(PIDBLOCK[i], false)
end
end
if grp.getvalue(heating_cooling_sources) == 1 then
for i = 1, thermostatCount do
local index2 = i + 100
if grp.getvalue(overheat[i]) then
grp.checkwrite(Force_heat[i], true)
--grp.checkwrite(PIDBLOCK[i], true)
grp.checkwrite(thermostat_block[index2], true)
-- Log thermostat block action
log('Termostat block enabled for thermostat ' .. i)
else
grp.checkwrite(Force_heat[i], false)
-- grp.checkwrite(PIDBLOCK[i], false)
grp.checkwrite(thermostat_block[index2], false)
-- Log thermostat block disabled action
log('Termostat block disabled for thermostat ' .. i)
end
end
end
if grp.getvalue(heating_cooling_sources) == 2 then
-- Šildymo vožtuvų ir termostaų blokavimas
for i = 1, thermostatCount do
os.sleep(0.2)
if grp.getvalue(overheat[i]) then
grp.checkwrite(Force_heat[i], true)
--grp.checkwrite(PIDBLOCK[i], true)
-- Log vožtuvo block action
log('Vožtuvas block enabled for thermostat ' .. i)
else
grp.checkwrite(Force_heat[i], false)
--grp.checkwrite(PIDBLOCK[i], false)
-- Log vožtuvo block disabled action
log('Vožtuvas block disabled for thermostat ' .. i)
end
end
end
for i = 1, thermostatCount do
os.sleep(0.2)
if grp.getvalue(overheat[i]) then
-- if grp.getvalue(S4_ON_OFF[i]) then
grp.checkwrite(blocking_Fb[i], true)
-- Log visualization block action
log('Visualization block enabled for thermostat ' .. i)
else
if not grp.getvalue(overheat[i]) then
-- if grp.getvalue(S4_ON_OFF[i]) then
grp.checkwrite(blocking_Fb[i], false)
-- Log visualization block disabled action
log('Visualization block disabled for thermostat ' .. i)
-- end
-- end
end
end
end
for i = 1, thermostatCount do
os.sleep(0.2)
local index = i + 100 -- Calculate the corresponding index for S4_ON_OFF_FB
if grp.getvalue(frost_heat_FB[i]) or grp.getvalue(holidays) ~= 1 or not grp.getvalue(S4_ON_OFF[i]) or grp.getvalue(thermostat_block[index]) then
grp.checkwrite(S4_ON_OFF_FB[index], false)
else
if not grp.getvalue(frost_heat_FB[i]) and grp.getvalue(holidays) == 1 and grp.getvalue(S4_ON_OFF[i]) and not grp.getvalue(thermostat_block[index]) then
grp.checkwrite(S4_ON_OFF_FB[index], true)
end
end
end
My goal is to employ a single script to control all the thermostats, given that they are identical. This approach would enhance the scalability of the script and facilitate error correction. In other words, the same script would be applicable to all thermostats, and any changes made would immediately apply to all thermostats. This eliminates the need to modify 18 tags individually.
How I can lower processor load?