09.04.2026, 12:19
Yes, it is. But you need to remove the while loop from the code for it to works correctly. Check the Logs tabs, you will see 5 minutes between logs from this script.
Code:
local estados = {}
for i = 1, 27 do
estados[i] = '2/0/' .. (175 + i) -- 176 → 202
end
-- Direcciones de temperatura individuales
local direcciones_temp = {
'0/0/11','0/0/27','0/0/43','0/0/59','0/0/75','0/0/91','0/0/107',
'0/0/123','0/0/139','0/0/155','0/0/171','0/0/187','0/0/203',
'0/0/219','0/0/235','0/0/251',
'0/1/11','0/1/27','0/1/43','0/1/59','0/1/75','0/1/91','0/1/107',
'0/1/123','0/1/139','0/1/155','0/1/171'
}
-- Dirección donde guardar la temperatura media
local destino1 = '2/0/164'
-- Rango válido de temperaturas
local min_temp = -20
local max_temp = 60
-- ============================================================
-- BUCLE PRINCIPAL (TU MISMO CÓDIGO, REPITIÉNDOSE PARA SIEMPRE)
-- ============================================================
local suma = 0
local contador = 0
-- Recorrer las 27 viviendas
for i = 1, 27 do
local estado = grp.getvalue(estados[i])
local valor = grp.getvalue(direcciones_temp[i])
-- Solo usar temperatura si la vivienda está alquilada
if estado == 1 then
if valor ~= nil and type(valor) == "number" then
if valor >= min_temp and valor <= max_temp then
suma = suma + valor
contador = contador + 1
else
log("Temperatura fuera de rango en " .. direcciones_temp[i] .. ": " .. tostring(valor))
end
else
log("Valor de temperatura inválido o nulo en " .. direcciones_temp[i])
end
end
end
-- Guardar la media si hay datos válidos
if contador > 0 then
local media = suma / contador
grp.write(destino1, media)
log("Temperatura media (solo alquilados) actualizada en " .. destino1 .. ": " .. media)
else
log("No hay viviendas alquiladas con temperatura válida para calcular la media")
end