Modifikation Fenster auf, Heizung aus für 2 Fensterkontskte

Hallo zusammen,

ich würde gerne nachfolgend verlinkts LUA Script für meine Fensterkontakte und Heizung verwenden.

Fenster auf, Heizung aus… M

  1. Bei mir im Haus habe ich jedoch einige Räume die zwei Fenster haben. Somit müsste ich das Script so modifizieren, dass zwei Fenstersensoren abgefragt werden. Leider bin ich damit total überfordert. Hat jemand eine Idee wie daa geht?

  2. Anstatt die eingestellte Temperatur des Thermostat bei geöffneten Fenster auf z. B. 5Grad abzusenken würde ich es lieber abschalten. Geht das? Es ist das Eurotronics Spirit 2 mit Flirs.

Wie ihr merkt bin ich in Sachen LUA nicht wirklich fit.
Daher verzeit folgende Anfängerfrage: Warum kann ich nicht ein total einfaches script nehmen a la “wenn Fensterkontakt ausgelöst dann schalte Thermostat ab. Wenn Fensterkontakt nicht mehr ausgelöst schalte wieder ein”? Ließe sich das nicht mit einer leichten "if“ Verknüpfung realisieren? Inwieweit fuscht das Heizprogramm dazwischen?

Vielen Dank für eure Hilfe

Christopher

Ok ich antworte mir mal selber. Habe übersehen, dass im Script auch eine Lösung für 2 Kontakte beschrieben ist.

Also ist Frage 2 und 3 noch offen ?

Hallo,

kann mir jemand sagen wie der Code aussieht wenn ich 5 fenster in einem Raum habe?
Einfach die Id hinzugfügen habe ich Probiert, ohne Erfolg.

Am einfachsten erscheint mir:

sensorID = 710 --ID des Tür-/Fenstersensor1
sensorID2 = 712 --ID des Tür-/Fenstersensor2

durch:

if (trigger['type']=='property') then
   sensorID=trigger['deviceID']
endif

zu ersetzen.

Dann noch alle Trigger im Kopfbereich definieren und es sollte gehen.
Man kann zwar das ganze Script noch aufräumen und optimieren, aber wenn alle Fenster gleichwertig behandelt werden sollen würde diese Änderung den Zweck erfüllen.

Hallo danke für deine Hilfe.
Leider funktioniert das nicht.

Hier kommt folgende Debug meldung:
[DEBUG] 18:53:38: 2019-02-28 18:53:38.589218 [ fatal] Unknown exception: /opt/fibaro/scenes/20.lua:24: ‘]’ expected near ‘,’
[DEBUG] 18:53:41: 2019-02-28 18:53:41.516898 [ fatal] Unknown exception: /opt/fibaro/scenes/20.lua:24: ‘]’ expected near ‘,’

–[[
%% 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`

--[[
%% 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 = 28 --Temperatur, die bei Abwesenheit gesetzt werden soll
}

if (trigger['type']=='property') then
   sensorID=trigger['deviceID']
end if
     
-- 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

Hi,

habe mal versucht es so hinzubiegen wie ich denke dass es funktionieren müsste. Aber testen konnte ich es nicht. Nur dass beim Start keine Fehlermeldungen mehr erscheinen. Aber ich denke da ist noch viel Raum für Optimierungen.


--[[
%% properties
5 value
14 value
19 value
99 value
28 value
60 value
%% globals
PresentState
--]]
-- Version : 0.0.3     
--------------- 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 = 28 --Temperatur, die bei Abwesenheit gesetzt werden soll
}
 
     
-- 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
  sensorID=trigger['deviceID']
  --print(sensorID)
  --if (tonumber(trigger['deviceID'])==tonumber(sensorID) or tonumber(trigger['deviceID'])==tonumber(sensorID2)) then
  if sensorID ~= nil then
    local sensor = fibaro:getValue(sensorID, 'value')
    --local sensor2 = fibaro:getValue(sensorID2, 'value')
    if tonumber(sensor) == 1 then
       Debug("yellow", 'Fenster geöffnet.')
       counter = 0
       while ((tonumber(fibaro:getValue(sensorID, 'value')) == 1 ) and counter < 60) do
         counter = counter + 1
         fibaro:sleep(1*1000)
       end
       if tonumber(fibaro:getValue(sensorID, '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

Hallo Jeep,

cool, reinkopiert und funktioniert…hab es mit 5 Sensoren probiert.

Vielen Dank!

[DEBUG] 13:11:29: Fenster geöffnet.
[DEBUG] 13:12:30: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
[DEBUG] 13:12:30: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:12:30: Setze Temperatur auf 5 C
[DEBUG] 13:12:30: Änderung wurde vorgenommen.
[DEBUG] 13:12:44: Fenster geschlossen.
[DEBUG] 13:12:44: Fenster ist wieder zu. Schalte Heizplan wieder ein.
[DEBUG] 13:12:44: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:12:44: Setze Heizplan wieder fort.
[DEBUG] 13:12:44: Änderung wurde vorgenommen.
[DEBUG] 13:12:57: Fenster geöffnet.
[DEBUG] 13:13:57: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
[DEBUG] 13:13:57: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:13:57: Setze Temperatur auf 5 C
[DEBUG] 13:13:58: Änderung wurde vorgenommen.
[DEBUG] 13:14:33: Fenster geschlossen.
[DEBUG] 13:14:33: Fenster ist wieder zu. Schalte Heizplan wieder ein.
[DEBUG] 13:14:33: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:14:33: Setze Heizplan wieder fort.
[DEBUG] 13:14:33: Änderung wurde vorgenommen.
[DEBUG] 13:14:47: Fenster geöffnet.
[DEBUG] 13:15:47: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
[DEBUG] 13:15:47: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:15:47: Setze Temperatur auf 5 C
[DEBUG] 13:15:47: Änderung wurde vorgenommen.
[DEBUG] 13:16:31: Fenster geschlossen.
[DEBUG] 13:16:31: Fenster ist wieder zu. Schalte Heizplan wieder ein.
[DEBUG] 13:16:31: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:16:31: Setze Heizplan wieder fort.
[DEBUG] 13:16:31: Änderung wurde vorgenommen.
[DEBUG] 13:16:58: Fenster geöffnet.
[DEBUG] 13:17:58: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
[DEBUG] 13:17:58: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:17:58: Setze Temperatur auf 5 C
[DEBUG] 13:17:58: Änderung wurde vorgenommen.
[DEBUG] 13:18:06: Fenster geschlossen.
[DEBUG] 13:18:06: Fenster ist wieder zu. Schalte Heizplan wieder ein.
[DEBUG] 13:18:06: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:18:07: Setze Heizplan wieder fort.
[DEBUG] 13:18:07: Änderung wurde vorgenommen.
[DEBUG] 13:18:25: Fenster geöffnet.
[DEBUG] 13:19:26: Fenster ist immer noch auf, es wird gelüftet. Fahre Heizung runter.
[DEBUG] 13:19:26: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:19:26: Setze Temperatur auf 5 C
[DEBUG] 13:19:26: Änderung wurde vorgenommen.
[DEBUG] 13:19:41: Fenster geschlossen.
[DEBUG] 13:19:41: Fenster ist wieder zu. Schalte Heizplan wieder ein.
[DEBUG] 13:19:41: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 13:19:41: Setze Heizplan wieder fort.
[DEBUG] 13:19:41: Änderung wurde vorgenommen.

OK, schön das es funktioniert, aber das war nur die halbe Miete. PresenState (Home und Away) wurde noch nicht richtig ausgewertet.
Habe das jetzt auch angepasst. Wie schon von @mdietinger erwähnt, dies nur wenn alle Fenster gleichwertigt behandelt werden.


--[[
%% properties
5 value
14 value
19 value
99 value
28 value
60 value
%% globals
PresentState
--]]
-- Version : 0.0.4    

--------------- 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 = 28 }--Temperatur, die bei Abwesenheit gesetzt werden soll

devices = {5,14,19,99,28,60} -- Tuer & Fenster Sensoren

-- AB HIER NICHTS MEHR ÄNDERN

local function getDeviceStatus()  
  for i,n in pairs(devices) do
      if  (tonumber(fibaro:getValue(n, "value")) > 0) then
          return 1;
      end
  end
  return 0;
end 

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();
local devstatus = getDeviceStatus()     
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
    if devstatus == 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
    if devstatus == 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
  sensorID=trigger['deviceID']
  --print(sensorID)
  --if (tonumber(trigger['deviceID'])==tonumber(sensorID) or tonumber(trigger['deviceID'])==tonumber(sensorID2)) then
  if sensorID ~= nil then
    local sensor = fibaro:getValue(sensorID, 'value')
    --local sensor2 = fibaro:getValue(sensorID2, 'value')
    if tonumber(sensor) == 1 then
       Debug("yellow", 'Fenster geöffnet.')
       counter = 0
       while ((tonumber(fibaro:getValue(sensorID, 'value')) == 1 ) and counter < 60) do
         counter = counter + 1
         fibaro:sleep(1*1000)
       end
       if tonumber(fibaro:getValue(sensorID, '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

Vieln Dank Jeep funktioniert Top.