Fibaro Heizungssteuerung mit Fensterkontakt LUA

Hallo zusammen,

mein Script ist fertig und würde mich freuen wenn ihr es testen würdet und anschließend berichtet.

Hintergrund des Scriptes ist das Steuern des Thermostates am Heizkörper mit einem Fensterkontakt. Solltet ihr das Fenster auf…zu…auf…zu…auf…zu…auf…machen,… jetzt habe ich vergessen wie der Zustand sein sollte, egal das Script weiß es :slight_smile:

Somit weiß das System genau welcher Zustand war und grade ist und steuert danach das Thermostat und speichert den vorherigen Wert in einer Globalen Variablen und ließt diesen anschließend wieder aus und gibt ihn an das Thermostat. Sollte der Zustand nach…auf…zu…auf…zu…auf…zu der gleiche sein passiert nicht.

Es muss lediglich eine Globale Variable erstellt werden, egal was ihr euch das ausdenkt, bei mir ist es “BadHeizung” und anschließend die “User Settings” anpassen und das war es.

Warum das ganze: z.b Terrasen Tür die innerhalb eines kurzen Zeitraumes öfter geöffnet und geschlossen wird oder ihr habt Kinder die ganz gerne das Fenster hin un her schwenken.

Viel Spaß damit, freue mich über Feedbacks :slight_smile:

Gruß Alex

PS: Ich brauch nen Bier :wink:
<pre class=“brush: applescript; gutter: true; first-line: 1; highlight: []; html-script: false”>
–[[
%% autostart
%% properties
175 value
%% globals
–]]


– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK = 175; – ID des Fensterkontaktes
local Thermo = 82; – ID des HeizkörperThermostat
local Global = "BadHeizung" – Globale Variable

-------------------------------------------------
--      Achtung Script, nicht ändern           --
-------------------------------------------------

local sourceTrigger = fibaro:getSourceTrigger();

local offen = 1;
local zu = 1;
local bewegungauf = false;
local bewegungzu = false;
local FensterOffenStatus = (tonumber(fibaro:getValue(FensterK, "value")) > 0);
local FensterZuStatus = (tonumber(fibaro:getValue(FensterK, "value")) == 0);

if (sourceTrigger["type"] == "property")
then
if (fibaro:countScenes() > 1)
then
fibaro:abort();
end

   -- Überprüfe Status Fenster   --

if (FensterOffenStatus)
then
bewegungauf = true;
elseif (FensterZuStatus)
then
bewegungzu = true;
end
– Zähler 60 sek –

repeat
local CountOffen = (tonumber(fibaro:getValue(FensterK, "value")) > 0);
local CountZu = (tonumber(fibaro:getValue(FensterK, "value")) == 0);

if (CountOffen)
  then
   offen = offen + 1;
   zu = 1;
   fibaro:debug(&#039;offen &#039; ..offen);
  else
   zu = zu + 1;
   offen = 1;
   fibaro:debug(&#039;geschlossen &#039; ..zu);
 end 
 fibaro:sleep(10000);

until ((offen == 7) or (zu == 7))

   -- Fenster geöffnet           --

local FensterOffen = (tonumber(fibaro:getValue(FensterK, "value")) > 0);
local FensterZu = (tonumber(fibaro:getValue(FensterK, "value")) == 0);

 if (FensterOffen and (bewegungauf == true))
 then
   fibaro:debug(&#039;Fenster auf, Heizung senken&#039;);
   local TempWertS = fibaro:getValue(Thermo, &quot;value&quot;);
   fibaro:setGlobal(Global, TempWertS);  
   fibaro:sleep(5000);
   fibaro:call(Thermo, &quot;setTargetLevel&quot;, &quot;4&quot;);
   fibaro:call(Thermo, &quot;setTime&quot;, tonumber(os.time(t)) + 240*60); 
   fibaro:debug(TempWertS.. &#039;° auf 4°&#039; );

   -- Fenster geschlossen          --

 elseif (FensterZu and (bewegungzu == true))
   then 
   fibaro:debug(&#039;Fenster zu, Heizung heben&#039;);
   local TempWertL = fibaro:getGlobal(Global);  
   fibaro:sleep(5000);
   fibaro:call(Thermo, &quot;setTargetLevel&quot;, TempWertL);
   fibaro:call(Thermo, &quot;setTime&quot;, tonumber(os.time(t)) + 30*60);  
   fibaro:debug(&#039;4° auf &#039; .. TempWertL .. &#039;°&#039;);
    
  else
    fibaro:debug(&#039;Keine Veränderung des Status&#039;);
  end

end

Hey Alex,
perfekt - super kommentiert. i like!
Ich muss uuuunbedingt meine Heizkörperthermostate und Fensterkontakte anbringen :slight_smile:

An welcher Stelle im Script müsste ich ansetzen, wenn ich in einem Raum zwei Dachfenster habe?
Das Thermostat müsste in diesem Fall schließen, egal welches Fenster geöffnet ist…

Hallo AlexM ,

ich wollte Deinen Script probieren und bekomme folgende Fehlermeldung schon beim Speichern der Szene:

[ERROR] 19:44:11 line 28: ‘)’ expected near ‘&’

Was mache ich falsch ?
U.S

Sehe ich jetzt erst, da ist was falsch gelaufen beim einfügen des Skripts in der Codierung.

Musst alle Einträge > durch > ersetzen.

Versuch das mal bitte, mehr finde ich auf die schnelle nicht. Falls es
nicht funktionieren sollte, bitte kurze Info. Schaue dann nach sobald ich wieder zuhause bin.

Gruß

Sehr lustig versuche das mal so zu schreiben das wordpress das nicht gleich wieder ändert “>” muss durch > ersetzt werden.

Hihi… nächster Versuch & g t ; ersetzen.

Geht doch :slight_smile:

Hallo AlexM

sehe dir bitte mal den Anhang an.

U:S

szene.png

Hallo ,
ich hab den Fehler gefunden .Ich hatte die falsche ID bei FensterK zugeordnet.
Somit hatte die Variable den falschen Typ. Jetzt bekomme ich erst mal keine Fehlermeldung mehr.

U.S

Hallo AlexM ,

Dein Programm funktioniert gut. Manchmal ist es auch gut wenn “copy und paste” nicht gleich funktioniert ,denn man lernt unheimlich viel.

U.S

Das hört man gerne, danke fürs Feedback :slight_smile:

Moin AlexM!

Da ich noch relativ neu (was diese Programmierungen angeht) bin, fällt es mir nicht so leicht, Euern “Hyroglyphen” zu folgen! :wink:

Welche Symbole müssen explizit durch welche ersetzt werden? (Vielleicht als Pic im Anhang?)

Danke schon mal für die Hilfe!

Gruß

Christian

Hey Alex,

erstmal ein dickes Lob! GREAT JOB!
Füg das Script doch bitte noch einmal ein. Ich habe ein neues Tool installiert mit welchem du das Script besser formatieren kannst. Du findest es direkt im Antwort Editor. Formatiere die Scripte am besten als “Appel Script”.
Dann fallen die Probleme weg welche durch die Formatierung entstehen.

script-editor.jpg

–[[
%% autostart
%% properties
10 value
%% globals
–]]
– Küche –

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK = 10; – ID des Fensterkontaktes
local Thermo = 7; – ID des HeizkörperThermostat
local Global = "KuecheHeizung" – Globale Variable

-------------------------------------------------
--      Achtung Script, nicht ändern           --
-------------------------------------------------

local sourceTrigger = fibaro:getSourceTrigger();

local offen = 1;
local zu = 1;
local bewegungauf = false;
local bewegungzu = false;
local FensterOffenStatus = (tonumber(fibaro:getValue(FensterK, "value")) > 0);
local FensterZuStatus = (tonumber(fibaro:getValue(FensterK, "value")) == 0);

if (sourceTrigger["type"] == "property")
then
if (fibaro:countScenes() > 1)
then
fibaro:abort();
end

   -- Überprüfe Status Fenster   --

if (FensterOffenStatus)
then
bewegungauf = true;
elseif (FensterZuStatus)
then
bewegungzu = true;
end
– Zähler 60 sek –

repeat
local CountOffen = (tonumber(fibaro:getValue(FensterK, "value")) > 0);
local CountZu = (tonumber(fibaro:getValue(FensterK, "value")) == 0);

if (CountOffen)
  then
   offen = offen + 1;
   zu = 1;
   fibaro:debug(&#039;offen &#039; ..offen);
  else
   zu = zu + 1;
   offen = 1;
   fibaro:debug(&#039;geschlossen &#039; ..zu);
 end 
 fibaro:sleep(10000);

until ((offen == 5) or (zu == 5))

   -- Fenster geöffnet           --

local FensterOffen = (tonumber(fibaro:getValue(FensterK, "value")) > 0);
local FensterZu = (tonumber(fibaro:getValue(FensterK, "value")) == 0);

 if (FensterOffen and (bewegungauf == true))
 then
   fibaro:debug(&#039;Fenster auf, Heizung senken&#039;);
   local TempWertS = fibaro:getValue(Thermo, &quot;value&quot;);
   fibaro:setGlobal(Global, TempWertS);  
   fibaro:sleep(5000);
   fibaro:call(Thermo, &quot;setTargetLevel&quot;, &quot;4&quot;);
   fibaro:call(Thermo, &quot;setTime&quot;, tonumber(os.time(t)) + 360*60); 
   fibaro:debug(TempWertS.. &#039;° auf 4°&#039; );

   -- Fenster geschlossen          --

 elseif (FensterZu and (bewegungzu == true))
   then 
   fibaro:debug(&#039;Fenster zu, Heizung heben&#039;);
   local TempWertL = fibaro:getGlobal(Global);  
   fibaro:sleep(5000);
   fibaro:call(Thermo, &quot;setTargetLevel&quot;, TempWertL);
   fibaro:call(Thermo, &quot;setTime&quot;, tonumber(os.time(t)) + 30*60);  
   fibaro:debug(&#039;4° auf &#039; .. TempWertL .. &#039;°&#039;);
    
  else
    fibaro:debug(&#039;Keine Veränderung des Status&#039;);
  end

end

Sieht gut aus, danke Chriss :slight_smile:

Hallo AlexM!

Vielen Dank für die schnelle Antwort! :slight_smile:

Wenn ich den Code bei mir einfüge, kommt nach den Anpassungen der IDs folgende Fehlermeldung!

[ERROR] 13:56:19: line 1: unexpected symbol near char(226)

Was mache ich denn falsch?

Ich freue mich, von Euch zu lernen! :slight_smile:

Viele Grüße und einen schönen Sonntag, Christian

Irgendwas funktioniert von der Codierung nicht so wie es soll :frowning:
Habe das Script als Text Datei mit beigefügt, probier das mal.

Gruß

Perfekt!

Jetzt haut´s hin! :slight_smile:

Vielen Dank.

Wenn ich jetzt beliebig viele Fensterkontakte einfügen möchte, reicht´s da aus, die Zeile “13” zu kopieren und mit der jeweiligen Kontakt-ID darunter einzufügen?

Ich hoffe, ich nerve nicht…duck

Viele Grüße

Christian

Sehr schön :slight_smile:

So einfach ist es leider nicht, bin grade dabei ein Script mit 2 Fenster Kontakten zu testen.
Falls du das ausprobieren möchtest sag bescheid dann packe ich das in den Anhang :wink:

Immer her damit! :smiley: Ich bin für jede Schandtat bereit! :wink:

Apropos Schandtat! Hättest Du noch nen kurzen Tip, was das Downgrade auf 3.590 angeht? Ich benötige die FW und eine kurze Beschreibung wie ich´s durchführe.
Pfiffig bin ich,…denke ich.grins