Fibaro Heizungssteuerung mit Fensterkontakt LUA

Hallo zusammen,

ich bin gerade frisch vom HCL zum HC2 umgestiegen und wollte mich nun mal mit dem Thema Heizplan bzw. dessen Pausieren bei Fenster auf beschäftigen. (Ging ja aufgrund fehlender lua Möglichkeit beim HCL nie).
Ich nutze das auf Heizplan pausieren
vorgestellte Skript. (Vielen Dank für die tolle Arbeit und Hilfestellung hier)

Nach Anpassen der entsprechenden IDs funktioniert dieses auch problemlos, Fenster auf wird erkannt, die Wunsch-Temperatur im Away Mode hinterlegt. Nur am Thermostat bzw. In der Module Übersicht tut sich nichts, gleiches gilt bei Änderungswünschen im Heizplan auch in Räumen, in denen das Skript gar nicht aktiv ist. Es werden die soll werte aus dem Heizplan einfach nicht “geschrieben”. Gilt noch zu erwähnen, dass ich den Heizplan mit dem neuen HC2 noch nicht in Betrieb hatte, daher lässt sich der Fehler für mich schwer eingrenzen.
Räume sind den Heizzonen zugeordnet, sowie die Thermostate den entsprechenden Räumen.
HC Version ist die 4.090.

Hat jemand eine Idee oder habe ich etwas übersehen?

Vielen Dank vorab, ich freue mich auf Eure Antworten!

Grüße
Michl

Hallo,

Das Script von Daniel “Fibaro Heizung aus bei Fenster auf – so sparst du bares Geld!” läuft einwandfrei…
Danke für die Info crissxcross :wink:

Habe einen großen Wohnbereich mit 3 Fenstersensoren und 3 Heizkörper. Im Heizplan ist das 1 Raum.
Bei öffnen eines Fensters soll die Temperatur an allen 3 Heizkörpern abgesenkt werden.
Kann ich in dem Script auch alle 3 Fenstersensoren abfragen, oder muss ich für jeden Fenstersensor eine neue Szene anlegen ?

Gruß Rene

Hallo zusammen,

bei mir funktioniert die Abwesenheit nicht. Ich habe die PresentState Variabel angelegt aber es reagiert nicht wenn sich der Status von Home auf Away ändert.

Weiß jemand was ich falsch mache?

--[[
%% properties
183 value
%% globals
PresentState
--]]
         
--------------- Absenk-Temperatur bei Fenster-Öffnung-------------
local schedule = {
id = 4, --ID des Raumes im Heiz-Panel
idleTemp = 5 --Temperatur, die bei Fenster-Öffnung gesetzt werden soll
}
--------------- Absenk-Temperatur bei Abwesenheit ----------------
local scheduleAway = {
id = 4, --ID des Raumes im Heiz-Panel
idleTemp = 18 --Temperatur, die bei Abwesenheit gesetzt werden soll
}
     
sensorID = 183 --ID des Tür-/Fenstersensor
           
-- 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) 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) 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)) then
        local sensor = fibaro:getValue(sensorID, '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

pres.jpg

Hi,

Änderungen am Variablenpanel gelten nicht als Trigger, wodurch die Szene nicht ausgelöst wird. Die Variable muss über eine Szene oder ein VD geändert werden. Erst dann gilt es als Trigger.

Gruß

Hallo, wie soll die Szene geändert werden, damit ich direkt am Thermostat die Temperatur kurzfristig verändern kann?

Mahlzeit zusammen…ich habe das Script dankend nutzen können! Jetzt würde ich es gerne erweitert haben, habe selber aber keine Ahnung von “LUA”. Wenn ich ein Fenster geöffnet habe, würde ich noch gerne nach einer Zeit (z.B. 10 Minuten) per Push daran erinnert werden…kann mir da einer helfen?

Ich benutze das Script mit einem Fenster, aber auch mit zwei Fenster und auch mit zwei Fenster und zwei Heizkörpern

Vielen Dank