Heizungssteuerung Bad Fenster auf

Warum nicht auch mal Duschen oder Lüften ist ja auch mal angebracht :slight_smile:

Die Heizungssteuerung läuft bei mir über das Heating Panel was im großen und ganzen schon richtig gut ist, allerdings erkennt dieses nicht ob ein Fenster auf ist.
Natürlich hat keiner Lust vor dem Duschen sein Smartphone in die Hand zu nehmen und die Temperatur runter zu regeln und anschließend wieder hoch zu regeln.
Die Steuerung soll soviel wie möglich selber machen/erkennen, nur so wird der Wohnkomfort erhöht und dem Haus wird ein bisschen KI eingeflößt :slight_smile:

Aufgrund dessen hab ich an dem Bsp. Bad einen kleines Script gebastelt was erkennt ob das Fenster offen ist und anschließend das Thermostat im Bad runter regelt oder nachdem das Fenster geschlossen wurde den gespeicherten Wert ausließt und an das Thermostat schickt.
Somit befindet sich die Steuerung wieder im Bereich des Heating Panels nur mit der Unterbrechung des offenen Fensters.

<code>--[[
%% autostart
%% properties
175 value
%% globals
--]]

FensterK = 175; -- ID des Fensterkontakte
Thermo = 82;    -- ID des HeizkörperThermostat

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger[&quot;type&quot;] == &quot;property&quot;)
   then 
   while true do
   fibaro:debug(&#039;Loop läuft&#039;);
   
    local tempDeviceState0, ausloesung = fibaro:get(FensterK, &quot;value&quot;);

     if (( tonumber(fibaro:getValue(FensterK, &quot;value&quot;)) &gt; 0 ) and (os.time() - ausloesung) &gt;= 60)
     then
       fibaro:debug(&#039;Fenster auf, Heizung senken&#039;);
       local TempWertBadS = fibaro:getValue(Thermo, &quot;value&quot;);
       fibaro:setGlobal(&quot;BadHeizung&quot;, TempWertBadS);  -- BadHeizung Variable speichern
       fibaro:sleep(5000);
       fibaro:call(Thermo, &quot;setTargetLevel&quot;, &quot;4&quot;);
       fibaro:call(Thermo, &quot;setTime&quot;, tonumber(os.time(t)) + 240*60); -- 4Std 4°
       fibaro:debug(TempWertBadS.. &#039;° auf 4°&#039; );
       break;
     
    
     elseif (( tonumber(fibaro:getValue(FensterK, &quot;value&quot;)) == 0 ) and (os.time() - ausloesung) &gt;= 60)
     then 
       fibaro:debug(&#039;Fenster zu, Heizung heben&#039;);
       local TempWertBadL = fibaro:getGlobal(&quot;BadHeizung&quot;);  -- BadHeizung Variable lesen
       fibaro:sleep(5000);
       fibaro:call(Thermo, &quot;setTargetLevel&quot;, TempWertBadL);
       fibaro:call(Thermo, &quot;setTime&quot;, tonumber(os.time(t)) + 60*60);  -- 1Std
       fibaro:debug(&#039;4° auf &#039; .. TempWertBadL .. &#039;°&#039;);
       break;
     end 
    fibaro:sleep(30000);
    end    
end
</code>

Es muss lediglich die Variable “BadHeizung” angelegt werden (Steuerung/VariablenSteuerung)
Die ID anpassen und schon sollte das ganze laufen. :slight_smile:

Gruß Alex

PS: Hoffen wir das das mit dem Heizen noch dauert bis es soweit ist :wink:

ah, du bist mir zuvor gekommen :slight_smile:
Thomas hatte mir ein ähnliches Script gesendet,welches ich im Blog die Tage mal posten wollte. Aber vielen lieben Dank für dein Script! Werde es die Tage bei mir mal ausprobieren. Thermostate liegen schon hier, müsste ich mal anbauen.

Kannst du mir folgendes vielleicht beantworten?
Die Thermostate sind Batterie betrieben und gehen daher gemäß Z-Wave Technologie in einen “Schlafzustand”. Aller 15 min wachen Sie auf um nach neuen Kommandos vom Gateway zu schauen.
Heißt Wenn ich das Fenster öffne und das Thermostat hatte gerade beim Gateway nachgefragt- so habe ich im schlechtesten Fall 14min in der die Heizung weiterläuft bis er die neue Temperatur bekommt. Ist das so?

Ja leider ist das so, wenn die wakeup Prozedur grade ausgeführt wurde dauert der Zyklus bis zum nächsten mal ca 900 sek. Aber habe letzten Winter mit einen ähnlichen Ablauf die Thermostate gesteuert und die Wahrscheinlichkeit genau diesen Punkt zu treffen ist recht klein. Notfalls einfach die Bestätigungstaste in der Mitte drücken und das Thermostat wacht auf und übernimmt den neuen Wert.

Leider ist ein kleiner Bug im Script, wenn das Fenster kurz auf und gleich wieder zu gemacht wird dann wird der letzte gespeicherte Wert aus der Variablen übernommen. Das System denkt das das Fenster grade geschlossen wurde und ließt den Wert aus, obwohl im Vorfeld keiner gespeichert wurde.

Wenn man die Werte anpasst kann dieser, fast, ausradiert werden :wink:

Bin gespannt auf das Script von Thomas, interessiert mich brennend wie er das gelöst hat :slight_smile:

Hi @ all

also mein script is viel simpler hab ich auf Arbeit mal geschrieben.

kurze Erklärung…

ich habe im Wohnzimmer 3 Thermostat wo ich auch mal noch ein zwei Fragen hätte Alex.

also ich habe ja einen Heizplan und wenn ich jetzt mein Fenster ID96 öffne gehen meine 3x Danfoss für 960min (wert könnt ihr ja anpsassen) auf 16° auch das könnt ihr ja ändern z.b. 4° und wenn ich es wieder schließe auch auf 16° aber mit Zeitwert 0min und das bedeutet das umgehend der Heizplan wieder greift. :slight_smile: (script unten)

so mal zur Frage woher weiß das Danfoss was 22° oder 24° im Raum sind und wie weit er den Stift rein oder raus drehen muss`??? habe in der Anleitung was von einer Woche Anlernphase gelesen kann das sein ?

–[[
%% properties
96 value
%% globals
–]]

local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(96, “value”)) > 0 )
or
startSource[“type”] == “other”
)
then
fibaro:call(115, “setTargetLevel”, “16”);
fibaro:call(115, “setTime”, tonumber(os.time(t)) + 96060);
fibaro:call(99, “setTargetLevel”, “16”);
fibaro:call(99, “setTime”, tonumber(os.time(t)) + 960
60);
fibaro:call(117, “setTargetLevel”, “16”);
fibaro:call(117, “setTime”, tonumber(os.time(t)) + 960*60);

else if (

( tonumber(fibaro:getValue(96, “value”)) == 0 )
or
startSource[“type”] == “other”
)
then
fibaro:call(99, “setTargetLevel”, “16”);
fibaro:call(99, “setTime”, tonumber(os.time(t)) + 060);
fibaro:call(115, “setTargetLevel”, “16”);
fibaro:call(115, “setTime”, tonumber(os.time(t)) + 0
60);
fibaro:call(117, “setTargetLevel”, “16”);
fibaro:call(117, “setTime”, tonumber(os.time(t)) + 0*60);
end
end

So geht es natürlich auch :slight_smile:
Versuche mit meinen Script das System so Intelligent wie möglich zu machen, es soll erkennen welche Temperatur grade eingestellt wurde, ob das Fenster nur kurz auf und wieder zu gemacht wurde, ob grade gelüftet wird usw. ist mir noch nicht ganz gelungen aber arbeite dran :wink:

Die Danfoss Thermostat haben 2 Temperaturfühler integriert, 1x hinter dem Display und 1x beim Ventil. Damit soll es möglich sein die Temperatur zu berechnen die 20cm vor dem Thermostat herrscht. Leider kann man diese nicht auslesen und überprüfen…

In der ersten Woche zu später Stunde kalibriert sich das Thermostat durch öffnen und schließen des Ventils, so ermittelt es den genauen Öffnungspunkt. Des Weiteren findet in der ersten Woche noch die Intelligente Reglung statt, damit soll erreicht werden das die richtige Temperatur zum richtigen Zeitpunkt herrscht.

Gruß Alex

Hi Alex

ich habe ein Danfoss wo ich der Meinung bin das passt mit auf und zu aber zwei andere selbst bei 28° tun irgendwie nicht viel. ich höre den motor zwar kurz aber er scheint nicht genug aufzumachen das die heizung läuft was auch daran liegen kann das ich die erst heute installiert hab und die bis zu ner woche brauchen…also als tipp sowas lieber nicht im winter machen sonder lieber jetzt…mal sehen ob sich alles einpegelt…

Thomas

grrrrrr, da soll bald die 3.9.x kommen und ich mach mir so eine mühe mit der Fenstersteuerung :frowning:
Falls noch irgendjemand bedarf hat an meinen Script hat, ist nochmals überarbeitet, einfach melden. Bis dahin werde ich weinen… :wink:

Ich! nehme es gern :slight_smile: Bitte poste es mal.
Ich befürchte, das Fibaro in der 3.9.x nicht alle Fehler im Heizplan ausgebaut bekommen hat…

Gerne, mein Tag ist gerettet :slight_smile:

Ist noch nicht ganz fertig, fehlt noch das der zustand, vorher und nachher, festgestellt wird.

Für ein Badezimmer Fenster vielleicht ein bisschen viel aber ist direkt nehmen meinen Arbeitszimmer und eignet sich perfekt zum testen :slight_smile:

Würde mich freuen deine Meinung dazu zu hören, positiv sowie negativ.

Gruß Alex

--[[
%% autostart
%% properties
175 value
%% globals
--]]

----------------------------------------------------
local FensterK = 175; -- ID des Fensterkontaktes
local Thermo = 82;    -- ID des HeizkörperThermostat
local Szene = 135;    -- ID der Szene des Scripts
-----------------------------------------------------

     ------------------------------------------------- 
     -- Intelligentes Heizen mit Fensterkontakt V1.0--
     -------------------------------------------------

local sourceTrigger = fibaro:getSourceTrigger();
local counter = 1;
if (sourceTrigger["type"] == "property")
   then 
   while true do
   fibaro:debug('Loop läuft');
   fibaro:sleep(10000);
   local tempDeviceState0, ausloesung = fibaro:get(FensterK, "value");
        
     if (fibaro:countScenes() > 1)
     then
      fibaro:debug('Szene läuft mehrfach, Abbruch.');
      fibaro:abort();      
      end
           
     -------------------------------- 
     -- Fenster geöffnet, > 30 Sek --
     ----------------------- --------

     if (( tonumber(fibaro:getValue(FensterK, "value")) > 0 ) and (os.time() - ausloesung) >= 30)
     then
       fibaro:debug('Fenster auf, Heizung senken');
       local TempWertBadS = fibaro:getValue(Thermo, "value");
       fibaro:setGlobal("BadHeizung", TempWertBadS);  -- BadHeizung Variable speichern
       fibaro:sleep(5000);
       fibaro:call(Thermo, "setTargetLevel", "4");
       fibaro:call(Thermo, "setTime", tonumber(os.time(t)) + 240*60); -- 4Std 4°
       fibaro:debug(TempWertBadS.. '° auf 4°' );
       break;
   
     ----------------------------------- 
     -- Fenster geschlossen, > 30 Sek --
     -------------------------- --------
    
     elseif (( tonumber(fibaro:getValue(FensterK, "value")) == 0 ) and (os.time() - ausloesung) >= 30)
     then 
       fibaro:debug('Fenster zu, Heizung heben');
       local TempWertBadL = fibaro:getGlobal("BadHeizung");  -- BadHeizung Variable lesen
       fibaro:sleep(5000);
       fibaro:call(Thermo, "setTargetLevel", TempWertBadL);
       fibaro:call(Thermo, "setTime", tonumber(os.time(t)) + 30*60);  -- 0,5 Std
       fibaro:debug('4° auf ' .. TempWertBadL .. '°');
       break;
     end 
       
    end    
end


hey Alex

habs mal überflogen.
Erster Eindruck. Du bist wahnsinnig :slight_smile: … GUT!
Wenn ich es jetzt beim überfliegen richtig gesehen habe, speicherst du den aktuellen Soll Wert der Heizung und senkst auf 4 Grad ab, sobald das Fenster geöffnet wird.

Wenn das Fenster geschlossen wird, und länger als 30 Sekunden zu ist, dann holst du den gespeicherten Wert wieder?

Klingt super! Hoffe ich schaffe es diese Woche noch vielleicht 1 oder 2 Thermostate gegen die Danfoss zu tauschen. Dann teste ich sofort!

Großartig. Vielen Dank für deine Arbeit Alex!

:slight_smile:

Hab das ganze fertig gestellt und ein neues Thema eröffnet:

Freue mich schon auf das Feedback :slight_smile:

mhhh, irgendwie klappt das mit den Link nicht, evtl so:
http://siio.de/board/thema/heizungssteuerung-mit-fensterkontakt-lua/