Radiator LUA code

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

2 reacties op “Radiator LUA code”

  1. 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?

    1. 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…

Een reactie achterlaten

Je e-mailadres zal niet getoond worden. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Translate »