Fibaro Heizungssteuerung mit Fensterkontakt LUA

Was muss ich in dem Script abändern, damit ich mit einem Türsensor zwei Heizungen steuern kann?

Daniel hat mir vorhin das Script mal umgebaut für 1 Fensterkontakt und 1 Heizkörper.
Die Variablen sind alle im Kopf Global definiert und müssen auch wieder nur dort geändert werden.

--[[
%% autostart
%% properties
300 value
 
%% globals
--]]
              -- Wohnzimmer --
   --------------------------------------------------
   -- Intelligentes Heizen mit Fensterkontakt V2.1 --
   --------------------------------------------------
              -- User Settings __
----------------------------------------------------
local FensterK1 = 300; -- ID des Fensterkontaktes
local Thermo1 = 296;    -- ID des HeizkörperThermostat
local Global = "HeizungWohnzimmer"  -- Globale Variable
-----------------------------------------------------
 
    -------------------------------------------------
    --      Achtung Script, nicht ändern           --
    -------------------------------------------------
 
local sourceTrigger = fibaro:getSourceTrigger();
 
local offen = 1;
local zu = 1;
local bewegungauf = false;
local bewegungzu = false;
local FensterOffenStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
local FensterZuStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
 
 
if (sourceTrigger["type"] == "property")
   then
     if (fibaro:countScenes() > 1)
        then
        fibaro:abort();  
     end
 
       -- Überprüfe Status Fenster   --
   
if  (FensterOffenStatus1)
    then
    bewegungauf = true;
    elseif (FensterZuStatus1)
    then
    bewegungzu = true;
end
          -- Zähler 60 sek --
   
 repeat
 local CountOffen1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
   
    if (CountOffen1)
      then
       offen = offen + 1;
       zu = 1;
       fibaro:debug('offen ' ..offen);
      else
       zu = zu + 1;
       offen = 1;
       fibaro:debug('geschlossen ' ..zu);
     end
     fibaro:sleep(10000);
   until ((offen == 10) or (zu == 10))
 
       -- Fenster geöffnet           --
   
 local FensterOffen1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
 local FensterZu1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
   
     if (FensterOffen1 and (bewegungauf == true))
     then
       fibaro:debug('Fenster auf, Heizung senken');
       local TempWertS = fibaro:getValue(Thermo1, "value");
       fibaro:setGlobal(Global, TempWertS);
       fibaro:sleep(5000);
       fibaro:call(Thermo1, "setTargetLevel", "4");
       fibaro:call(Thermo1, "setTime", tonumber(os.time(t)) + 360*60);
       fibaro:debug(TempWertS.. '° auf 4°' );
 
       -- Fenster geschlossen          --
     
     elseif (FensterZu1 and (bewegungzu == true))
       then
       fibaro:debug('Fenster zu, Heizung heben');
       local TempWertL = fibaro:getGlobal(Global);
       fibaro:sleep(5000);
       fibaro:call(Thermo1, "setTargetLevel", TempWertL);
       fibaro:call(Thermo1, "setTime", tonumber(os.time(t)) + 10*60);
       fibaro:debug('4° auf ' .. TempWertL .. '°');
         
      else
        fibaro:debug('Keine Veränderung des Status');
      end
end

Moin,
habe das letzte Script so übernommen und nach Änderung der Variablen + Globale Variable erfolgreich getestet.

Danke für eure Mühe.
Grüße aus Hamburg

Ich habe das Script jetzt lange im Einsatz und bin sehr zufrieden. Allerdings habe jetzt ich gemerkt, dass nach 6 Stunden die Heizung wieder heizt obwohl das Fenster noch offen ist. Kann ich das hier irgendwo in dem Script einstellen?

Das 6 Stunden Problem hat mich auch total genervt und habe mich mal eine Stunde nach der Arbeit hingesetzt.
Viel spaß beim ausprobieren :slight_smile:

--[[
%% autostart
%% properties
123 value
 
%% globals
--]]
              -- Badezimmer --
   --------------------------------------------------
   -- Intelligentes Heizen mit Fensterkontakt V2.1 --
   --------------------------------------------------
              -- User Settings __
----------------------------------------------------
local FensterK1 = 123; -- ID des Fensterkontaktes
local Thermo1 = 110;    -- ID des HeizkörperThermostat
local Global = "Heater_Bath"  -- Globale Variable
local Global1 = "Heater_Bath_Sleep"
local Global2 = fibaro:getGlobalValue('Heater_Bath_Sleep')
-----------------------------------------------------
 
    -------------------------------------------------
    --      Achtung Script, nicht ändern           --
    -------------------------------------------------
 
local sourceTrigger = fibaro:getSourceTrigger();
local offen = 1;
local zu = 1;
local dontstop = 0;
local bewegungauf = false;
local bewegungzu = false;
local FensterOffenStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
local FensterZuStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
 
 
if (sourceTrigger["type"] == "property")
   then
     if (fibaro:countScenes() > 2)
        then
        fibaro:abort();  
     end
 
       -- Überprüfe Status Fenster   --
   
if  (FensterOffenStatus1)
    then
    bewegungauf = true;
    elseif (FensterZuStatus1)
    then
    bewegungzu = true;
end
          -- Zähler 20 sek --
   
   repeat
 	local CountOffen1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
   
    if (CountOffen1)
      then
       dontstop = 1
       offen = offen + 1;
       zu = 1;
       fibaro:debug('offen ' ..offen);
      else

      	if (Global2 == '0' and (dontstop == 0)) then
  			fibaro:abort();
		end
        
       zu = zu + 1;
       offen = 1;
       fibaro:debug('geschlossen ' ..zu);
     end
     fibaro:sleep(2*1000);
   until ((offen == 10) or (zu == 10))
 
       -- Fenster geöffnet           --
   
 local FensterOffen1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
 local FensterZu1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
   
     if (FensterOffen1 and (bewegungauf == true))
     then
       fibaro:debug('Fenster auf, Heizung senken');
       local TempWertS = fibaro:getValue(Thermo1, "value");
       fibaro:setGlobal(Global, TempWertS);
       fibaro:sleep(5000);
       
    		local Countsleep = 0;
    		repeat
      		fibaro:call(Thermo1, "setTargetLevel", "4");
       		fibaro:call(Thermo1, "setTime", tonumber(os.time(t)) + 360*60);
      		Countsleep = Countsleep + 1;
      		fibaro:debug(TempWertS.. '° auf 4° zum ' .. Countsleep .. ' mal');
      		local SleepOn = 1;
       		fibaro:setGlobal(Global1, SleepOn);
      		fibaro:sleep(1*60*1000);
    		local SleepOff = 0;
       		fibaro:setGlobal(Global1, SleepOff);
      		local FensterOffenStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
			local FensterZuStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
      		if  (FensterOffenStatus1)
   				then
    			bewegungauf = true;
    			elseif (FensterZuStatus1)
    			then
    			bewegungzu = true;
			end
      		local FensterOffen1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
 			local FensterZu1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
      		until (FensterZu1 and (bewegungzu == true))
 
       -- Fenster geschlossen          --
     
     elseif (FensterZu1 and (bewegungzu == true))
       then
       fibaro:debug('Fenster zu, Heizung heben');
       local TempWertL = fibaro:getGlobal(Global);
       fibaro:sleep(5000);
       fibaro:call(Thermo1, "setTargetLevel", TempWertL);
       fibaro:call(Thermo1, "setTime", tonumber(os.time(t)) + 10*60);
       fibaro:debug('4° auf ' .. TempWertL .. '°');
         
      else
        fibaro:debug('Keine Veränderung des Status');
      end
end

Vielen Dank.
Werde ich sofort ausprobieren.

Hallo,

ich hoffe mir kann jemand helfen…ich habe das Script probiert und habe das Problem:

[DEBUG] 14:38:37: Fenster zu, Heizung heben
[DEBUG] 14:38:42: line 91: attempt to concatenate local ‘TempWertL’ (a nil value)

das dieser Fehler im debugger kommt und die Temp nich wieder angehoben wird.
Anscheinend wird nichts in die variable geschrieben oder?
Weiß jemand eine Lösung?

Vielen Dank im Voraus! :slight_smile:

Hey atf82,
hast du oben bei “local Global = “Heater_Bath” – Globale Variable” im kopf auch deine globale variable richtig eingetragen. ich vermute dort liegt der fehler und deshalb wird in zeile 87 die variable für die textausgabe nicht beschrieben.

grüße

Hi danielboe,
vielen Dank erstmal…ich schick dir mal den Kopf:

–[[
%% autostart
%% properties
50 value

%% globals
–]]
– Wohnzimmer –

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK1 = 50; – ID des Fensterkontaktes
local Thermo1 = 24; – ID des HeizkörperThermostat
local Global = “HeizungWohnzimmer” – Globale Variable

ich denke mal dass das alles korrekt ist oder?

Die Heizung wird auch nach unten geregelt…nur nicht wieder hoch…dann kommt der Fehler.

Ich muss doch auch nicht eine bestimmte Zeit warten zwischen Fenster auf oder Fenster zu? oder?

Vielen Dank im Voraus schon mal :slight_smile:

Gibt es die Variable denn in dem Variablen-Panel?

Wie? Wo eingetragen? :smiley:

Sorry ich muss da erst noch rein kommen…vlt kannst du mir sagen wo genau das stehen muss?

Ich versteh nich wenn er mir das runter regelt wieso nicht wieder hoch?

Weil das Skript dort einen Temporären Wert in eine Variable schreiben will, die es nicht gibt.

Schau mal unter Panels und dann Variablenpanel. Dort musst du die eintragen. :wink:

Weltklasse Danke dir!! Funktioniert :slight_smile:

Nach dem ich auf Englisch umgesgtellt habe, hab ich auch den Ort “Panels” gefunden :smiley:

Vielen Dank!!!

Was genau muss ich denn da eintragen?

image.png

Den Namen der globalen Variablen.

Und welchen Wert? Nutze dein Script

Einen Wert brauchst Du in dem Fall nicht.
Der soll durch das Script gesetzt werden.

Habe das Script der Seite 2 genutzt und angepasst… bekomme aber keine Debugausgabe… weiß nun gar nicht, ob es funktionieren würde… oder gibt es inzwischen eine bessere lösung im jahre 2016? :wink:

Hi, jo Daniel hat das Script von AlexM nochmal aufgegriffen und nutzt jetzt die offizielle API von Fibaro. Das läuft smoother. Schau mal hier
http://www.siio.de/heizenenergiesparen/bares-geld-sparen-fibaro-heizung-aus-bei-fenster-auf/

auf welche temperatur senkt er ab sobald das fenster offen ist ? Und die globale variable die erstellt wird, wir darin die alte temperatur gespeichert oder ist das die soll temperatur wenn “AUF” ? DANKE !!!