Zie ook de specifieke pagina over Verwarming Sturingen
Nu mijn radiatoren uitgerust zijn met de Danfoss LC-13, moeten deze ook aangestuurd worden door de Home Center 2. Eerst heb ik de standaard functionaliteit van de Home Center 2 (het “Heating Panel”) bekeken, maar naar mijn gevoel is dit toch te beperkend of te ingewikkeld om aan te passen naar mijn wens.
De bedoeling was om per kamer de aansturing van de thermostatische radiatorkop op de verwarming te laten afhangen van een aantal globale omgevingsvariabelen en sensorwaarden. Het concept dat ik hierrond bedacht heb gaat uit van
- een (scene) regeling per kamer, die de juiste temperatuurinstelling van de kop bepaalt, afhankelijk van die variabelen en sensoren die daar nodig zijn, en die instelling doorstuurt naar het device indien nodig
- een centrale scene die om de 10 minuten alle verschillende kamer-regelingen aanroept om indien nodig de instellingen aan te passen. Verder wordt deze ook geactiveerd door veranderingen in de (globale) variabelen
De centrale scene
Deze ziet er als volgt uit: (in basisversie)
--[[
%% autostart
%% properties
%% events
%% globals
--]]
local heatsetids={30}
while true do
fibaro:debug("Running scene at: "..os.date())
for i=1,#heatsetids do
fibaro:startScene(heatsetids[i])
end
fibaro:sleep(10*60*1000)
end
Een scene per kamer
(hier badkamer)
--[[
%% properties
%% events
%% globals
--]]
local iemandthuis=tonumber(fibaro:getGlobalValue("G_IemandThuis"))
local tempbuiten=tonumber(fibaro:getGlobalValue("G_TempBuiten"))
local heaterid=98 --id van de thermostaatkop
local buitenwarmtemp=16 --temperatuur buiten zonder verwarming
local errortemp=18
--per "soort" een scrn : vanuut,vanminuut,totuur,totminuut,setvalue
-- voor een normale weekdag
local thuisweekdag={
{0,0,6,0,18},
{6,1,8,30,21},
{8,31,15,30,18},
{15,31,17,00,20},
{17,01,18,30,21},
{18,31,23,00,20},
{23,01,23,59,18}
}
local thuisweekenddag={
{0,0,6,0,18},
{6,1,8,30,21},
{8,31,17,30,20},
{17,31,18,30,21},
{18,31,23,00,20},
{23,01,23,59,18}
}
local nietthuis={
{0,0,17,30,18},
{17,31,20,30,19},
{20,31,23,0,20},
{23,01,23,59,18}
}
local buitenwarm={
{0,0,23,59,16}
}
local parsetemp=nietthuis
local schemaName="nietthuis"
if (tempbuiten>=buitenwarmtemp) then
parsetemp=buitenwarm
schemaName="buitenwarm"
elseif (iemandthuis==0) then
parsetemp=nietthuis
schemaName="nietthuis"
elseif ((tonumber(os.date("%w"))~=0) and (tonumber(os.date("%w"))~=6)) then
parsetemp=thuisweekdag
schemaName="thuisweekdag"
else
parsetemp=thuisweekenddag
schemaName="thuisweekenddag"
end
fibaro:debug("Selected Schema: "..schemaName)
local time=tonumber(os.date("%H"))*60+tonumber(os.date("%M"))
local setlevel=errortemp
local levelttl=0
for i=1,#parsetemp do
local mintime=parsetemp[i][1]*60+parsetemp[i][2]
local maxtime=parsetemp[i][3]*60+parsetemp[i][4]
if ((time>=mintime) and (time<maxtime)) then
setlevel=parsetemp[i][5]
levelttl=(maxtime-time-1)
end
end
fibaro:debug("Selected Temp: "..setlevel.." for: "..levelttl.." minutes")
local currentlevel=tonumber(fibaro:getValue(heaterid,"value"))
if (currentlevel~=setlevel) then
fibaro:call(heaterid,"setTargetLevel",setlevel)
fibaro:call(75, "setProperty", "ui.Label1.value", "HeatSteering")
fibaro:call(75, "setProperty", "ui.Label2.value", "Updating Heater "..fibaro:getName(heaterid).." Time: "..os.date().." to: "..setlevel)
fibaro:call(75, "setProperty", "ui.Label3.value", "INFORMATIONAL")
fibaro:call(75, "pressButton", "3")
fibaro:sleep(100)
fibaro:debug("Current setLevel: "..currentlevel.." new level: "..setlevel)
fibaro:call(heaterid,"setTime",tonumber(os.time(t))+levelttl*60)
end