Hierbij de code die ik voor elk van de verwarmingen apart heb aangegeven. Per kamer heb je zo een scene nodig om de radiatoren van die kamer juist aan te sturen.
--[[
%% properties
%% events
%% globals
--]]
local heaterid=133 --id of the thermostatic valve
local heaterfloor="gelijkvloers" -- for logging
local heaterroom="living" -- for logginh
local extopen1=56 --id of the external door/window sensor
local extopen2=189 --id of the external door/window sensor
local extopen3=0 --id of the external door/window sensor
local exttemp=196 --id of the external temperature sensor
local extmotion=149 --id of the external motion detector
local extmanplus=37 --id of the external heat switch +1 degrees
local buitenwarmtemp=19 --temperatuur outside with heating off
local errortemp=18
local iemandthuis=tonumber(fibaro:getGlobalValue("G_IemandThuis"))
local tempbuiten=tonumber(fibaro:getGlobalValue("G_TempBuiten"))
--per "soort" een scrn : vanuut,vanminuut,totuur,totminuut,setvalue
-- voor een normale weekdag
local thuisweekdag={
{0,0,6,0,18},
{6,1,20,0,20},
{20,1,22,0,21},
{22,1,23,0,20},
{23,1,23,59,18}
}
local thuisweekenddag={
{0,0,6,0,18},
{6,1,23,0,20},
{23,1,23,59,18}
}
local nietthuis={
{0,0,17,0,18},
{17,1,18,0,19},
{18,1,19,00,20},
{19,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
if (extopen1~=0) then
if (tonumber(fibaro:getValue(extopen1,"value"))==1) then
parsetemp=buitenwarm
schemaName="verluchtingopen"
end
end
if (extopen2~=0) then
if (tonumber(fibaro:getValue(extopen2,"value"))==1) then
parsetemp=buitenwarm
schemaName="verluchtingopen"
end
end
fibaro:debug("T ext.:"..tempbuiten.."; Selected Schema: "..schemaName)
local time=tonumber(os.date("%H"))*60+tonumber(os.date("%M"))
local setlevel=errortemp
local levelttl=0
local logtotime="--:--"
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 (timetonumber(fibaro:getValue(exttemp,"ui.curtemp.value"))) then
fibaro:setGlobal("G_KetelWarmte",1)
fibaro:debug("Demanding Boiler Heat: "..setlevel.." requested "..fibaro:getValue(exttemp,"ui.curtemp.value").." measured")
end
end
fibaro:debug("Selected Temp: "..setlevel.." for: "..levelttl.." minutes until "..logtotime)
local currentlevel=tonumber(fibaro:getValue(heaterid,"value"))
if (currentlevel~=setlevel) then
fibaro:call(heaterid,"setTargetLevel",setlevel)
fibaro:debug("SETTING - Current setLevel: "..currentlevel.." new level: "..setlevel)
fibaro:call(heaterid,"setTime",tonumber(os.time(t))+levelttl*60)
end
ik vraag me af of dit niet makkelijker kan. Ik heb ook fibaro, temperatuursensoren in de kamers en een aantal van die gekoppelde thermostaatknoppen. Nog niet aan elkaar gekoppeld want pas geïnstalleerd, maar is daarvoor echt zoveel code nodig?
Als je de basis functionaliteit voor verwarming wil, kan je de Heating panels van Fibaro inderdaad gebruiken zonder te coden.
Ondertussen heb ik schema’s waarbij de temperatuur afhankelijk is van ramen of deuren die open staan, verluchtingen die actief werken, bewegingsdetectoren die controleren of er iemand in huis is etc. Dit kan niet met de basisschema’s en dan ben je aangewezen op programmeren in LUA…