–[[
%% properties
5 value
14 value
19 value
99 value
28 value
60 value
%% globals
PresentState
–]]
--------------- Absenk-Temperatur bei Fenster-Öffnung-------------
local schedule = {
id = 1, --ID des Raumes / Zone im Heiz-Panel
idleTemp = 5 --Temperatur, die bei Fenster-Öffnung gesetzt werden soll
}
--------------- Absenk-Temperatur bei Abwesenheit ----------------
local scheduleAway = {
id = 1, --ID des Raumes im Heiz-Panel
idleTemp = 22 --Temperatur, die bei Abwesenheit gesetzt werden soll
}
if (trigger[‘type’]==‘property’) then
sensorID=trigger[‘deviceID’]
endif
– AB HIER NICHTS MEHR ÄNDERN
function Debug( color, message )
fibaro:debug(string.format(’<%s style=“color:%s;”>%s<!–%s–>’, “span”, color, message, “span”));
end
local function getMethod(requestUrl, successCallback, errorCallback)
local http = net.HTTPClient()
http:request(requestUrl, {
options = {
method = ‘GET’
},
success = successCallback,
error = errorCallback
})
end
local function putMethod(requestUrl, data, successCallback, errorCallback)
local http = net.HTTPClient()
http:request(requestUrl, {
options = {
method = ‘PUT’,
data = json.encode(data)
},
success = successCallback,
error = errorCallback
})
end
local function setVactionModeTrue(subjectToChange)
local url = ‘http://127.0.0.1:11111/api/panels/heating/’ … subjectToChange.id
getMethod(url, function(resp)
if resp.status == 200 then
print('Verbindung zum Heizpanel erfolgreich, Status ’ … resp.status)
local panel = json.decode(resp.data)
if panel.properties.vacationTemperature ~= nil then
panel.properties.vacationTemperature = subjectToChange.idleTemp
print(‘Setze Temperatur auf ’ … subjectToChange.idleTemp … ’ C’)
putMethod(url, panel, function(resp)
if resp.status == 200 then
print(‘Änderung wurde vorgenommen.’)
end
end,
function(err)
print('Error ’ … err)
end
)
else
print(‘Panel nicht gefunden’)
end
else
print('Verbindung konnte nicht hergestellt werden, Status ’ … resp.status)
end
end,
function(err)
print('error ’ … err)
end
)
end
local function setVactionModeFalse(subjectToChange)
local url = ‘http://127.0.0.1:11111/api/panels/heating/’ … subjectToChange.id
getMethod(url, function(resp)
if resp.status == 200 then
print('Verbindung zum Heizpanel erfolgreich, Status ’ … resp.status)
local panel = json.decode(resp.data)
if panel.properties.vacationTemperature ~= nil then
panel.properties.vacationTemperature = 0
print(‘Setze Heizplan wieder fort.’)
putMethod(url, panel, function(resp)
if resp.status == 200 then
print(‘Änderung wurde vorgenommen.’)
end
end,
function(err)
print('Error ’ … err)
end
)
else
print(‘Panel nicht gefunden’)
end
else
print('Verbindung konnte nicht hergestellt werden, Status ’ … resp.status)
end
end,
function(err)
print('error ’ … err)
end
)
end
local trigger = fibaro:getSourceTrigger();
if (trigger[‘type’]==‘global’) then
if (fibaro:getGlobalValue(“PresentState”) == “Away”) then
if (tonumber(fibaro:getValue(sensorID, ‘value’)) == 0 and tonumber(fibaro:getValue(sensorID2, ‘value’)) == 0) then
setVactionModeTrue(scheduleAway)
Debug(“blue”,‘Abwesend, niemand Zuhause, Fahre Heizung runter.’)
else
Debug(“white”,‘Abwesend, niemand Zuhause, Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.’)
end
elseif (fibaro:getGlobalValue(“PresentState”) == “Home”) then
if (tonumber(fibaro:getValue(sensorID, ‘value’)) == 0 and tonumber(fibaro:getValue(sensorID2, ‘value’)) == 0) then
setVactionModeFalse(schedule)
Debug(“red”, ‘Anwesend, jemand ist wieder Zuhause. Schalte Heizplan wieder ein.’)
else
Debug(“white”,‘Anwesend, jemand ist wieder Zuhause. Fenster ist noch geöffnet. Es bleibt bei der festgelegten Temperatur.’)
end
end
elseif (trigger[‘type’]==‘property’) then
if (tonumber(trigger[‘deviceID’])==tonumber(sensorID) or tonumber(trigger[‘deviceID’])==tonumber(sensorID2)) then
local sensor = fibaro:getValue(sensorID, ‘value’)
local sensor2 = fibaro:getValue(sensorID2, ‘value’)
if (tonumber(sensor) == 1 or tonumber(sensor2) == 1) then
Debug(“yellow”, ‘Fenster geöffnet.’)
counter = 0
while ((tonumber(fibaro:getValue(sensorID, ‘value’)) == 1 or tonumber(fibaro:getValue(sensorID2, ‘value’)) == 1 ) and counter < 60) do
counter = counter + 1
fibaro:sleep(1*1000)
end
if (tonumber(fibaro:getValue(sensorID, ‘value’)) == 1 or tonumber(fibaro:getValue(sensorID2, ‘value’)) == 1 ) then
Debug(“blue”,‘Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.’)
setVactionModeTrue(schedule)
else
Debug(“yellow”, ‘Fenster wurde innerhalb einer Minute wieder geschlossen.’)
end
else
fibaro:debug(‘Fenster geschlossen.’)
Debug(“red”, ‘Fenster ist wieder zu. Schalte Heizplan wieder ein.’)
setVactionModeFalse(schedule)
end
end
end`