Fibaro Heizungssteuerung mit Fensterkontakt LUA

Hallo crissxcross,
diverse Debüt Zeilen sind als Debug Debütanten eingebaut :slight_smile:
Sorry das musste sein…hihi…

Ein paar könnten noch eingebaut werden, die Anweisungen sind bereits mit Debug ausgestattet.

@chris1873: Kannst du das Debug Fenster mal Posten?

Gruß Alex

so ich hab es geschafft zumindest im Schlafzimmer mal das Danfoss und zwei Fensterkontakte zu installieren.
Zunächst einmal - Script läuft top!! Vielen Dank für die Arbeit @Alex.

Was mir aufgefallen ist:
Ich habe um 21:30 uhr im Zeitplan eine Temperaturerhöhung von 17 auf 18,5 Grad.
Ich habe um 21:30 das Fenster geöffnet - er zieht die 17 Grad in die Variable. Wenn ich das Fenster 10 min später schließe, wird die Temperatur aus dem Heizplan, also die 18 Grad von dem Script überschrieben, mit den 17 Grad aus der Variable :wink:

Ich seh das mal nicht als Bug, eher als Feature - aber nervig ist es schon …

Könnte man die Temperatur vor / beim schließen in eine Variable schreiben und mit der “alten” Variable vergleichen?
Macht das Sinn ? Würde man daraus ableiten können, das zwischenzeitlich ein anderer Wert gesetzt wurde?

MFG

Vielen Dank für das Feedback :slight_smile:

Was du machen kannst ist die Zeit im Script runter setzen, dann wird der gelesene Wert nur kurzfristig aktiv und die Temperatur wird anschließend wieder von Heizplan zugewiesen.

Man kann das ganze auch anders aufziehen, ohne Variable in dem man sich nach dem Heizplan orientiert oder den Heizplan auf Urlaubsmodus setzt.
Gibt verschiedene Wege die man gehen kann um so etwas zu realisieren. Logik macht bei mir aber nicht immer Sinn :slight_smile: Versuche so das Prog. mit LUA zu lernen.
Nach und nach merkt man dann das es andere Wege gibt die einfacher oder auch Logischer sind.

Wenn ich mal wieder Zeit habe werde ich das ganze überarbeiten aber die nächste Zeit wird das leider nichts.

Gruß

Moin,
ich habe gerade mal versucht das Script zu benutzen, leider passiert irgendwie nichts ???
Im Fenster steht nur

[DEBUG] 14:10:56: geschlossen 2
[DEBUG] 14:11:06: offen 2
[DEBUG] 14:11:16: offen 3
[DEBUG] 14:11:26: offen 4
[DEBUG] 14:11:36: offen 5
[DEBUG] 14:11:46: offen 6
[DEBUG] 14:11:56: offen 7
[DEBUG] 14:12:06: offen 8
[DEBUG] 14:12:16: offen 9
[DEBUG] 14:12:26: offen 10

aber geschehen zu nichts, also die Temp bleibt unverändert ??? Könnt ihr vielleicht einmal schauen ob das alles richtig ist? :slight_smile:

–[[
%% autostart
%% properties
6 value
23 value
%% globals
–]]
– Wohnzimmer –

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK1 = 6; – ID des Fensterkontaktes
local Thermo1 = 23; – 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 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);

local CountZu1 = (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 (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 (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

Hier nochmals die Szenen als Graphik.

Heizung-einschalten-Kopie.jpg

Heizungsszene-Kopie.jpg

Ah Ok, muss ich die Szene als LUA und Grafik erstellen ? Oder brauche ich das LUA dann nicht?

Hi nein,
du musst NUR die LUA Szene anlegen.
Beachte, das du die Variablen unter “Steuerung” > “Variablen Steuerung” anlegen musst.
Siehe einige Kommentare weiter vorn…
So wie du deine Variable benennst, musst du diese entsprechend in das Script einfügen.

heizungsvariable-fibaro-lua.png

Guten Morgen aus dem schönen Schleswig Holstein!

Ich glaube, ich habe den Fehler in der Heizungsszene, sprich dem LUA-Script gefunden.

In der Zeile: local Global = Gaestewcheizung – Globale Variable stand das Wort, hier gleich: Gaestewcheizung in “-” (Anführungszeichen)! Das hat bei mir immer einen Fehler verursacht. Ich checke mein System damit mal auf Stabilität und berichte dann weiter.

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

Viele Grüße

Christian

Funktioniert bei mir leider nicht,
zeigt keine Fehler an, aber das Thermostat bleibt konstant auf der Temperatur der Steuerung.

Hab den Code per Strg C + Strg V kopiert und eingefügt, die entsprechenden ID`s geändert.

Funktioniert dieser bei anderen Usern?

Danke für Eure Hilfe

Hallo niluya,

bekommst du Fehlermeldung im unteren Fenster angezeigt?

Gruß

Hi

beachte das du unter Steuerung > Variabeln Steuerung eine Variable anlegen musst.
Diese musst du im Script eintragen an dieser Stelle:

local Global = "BadHeizung" — Globale Variable

Verwende das Script ebenfalls erfolgreich.

Danke für den Tipp,

hatte keine Variable erstellt.
Dies hab ich jetzt nachgeholt, Wert auf 1 gesetzt.

Fehler werden keine Angezeigt.
Aber auch keine wenn ich irgendein Müll reinschreibe :frowning:

So schauen meine ersten Zeilen aus:

–[[
%% autostart
%% properties
10 value
%% globals
–]]
– Billard –

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK = 13; – ID des Fensterkontaktes
local Thermo = 9; – ID des HeizkörperThermostat
local Global = “BillardHeizung” – Globale Variable

Hi

im Kopf deinierst du die Variable als ID 10, weiter unten sagst du aber dein Fensterkontakt hat die Varaible 13.
Prüf mal welche ID dein Fensterkontakt hat. Das muss dann im Kopf bei value rein sowie bei den local FenerstK = XX

–[[
%% autostart
%% properties
10 value
%% globals
–]]

und hier

local FensterK = 13; — ID des Fensterkontaktes

Moin Niyula!

Ich bilde mal meine Szene ab (geschrieben von AlexM) Vielleicht hilft Dir das ja. Hatte am Anfang nämlich auch Probleme… Wie ich weiter oben schrieb, mußte ich bei mir die Anführungszeichen bei der Globalen Variablen im Script entfernen

local Global = KuecheHeizung – Globale Variable Und dann habe ich in dem Menüpunkt ´Variablen´ Eine sogenannte globale Variable mit dem Namen: KuecheHeizung und dem Wert 4 angelegt. Damit hat es bei mir funktioniert.

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

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK = 85; – ID des Fensterkontaktes
local Thermo = 52; – 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('offen ' ..offen);
  else
   zu = zu + 1;
   offen = 1;
   fibaro:debug('geschlossen ' ..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('Fenster auf, Heizung senken');
   local TempWertS = fibaro:getValue(Thermo, "value");
   fibaro:setGlobal(Global, TempWertS);  
   fibaro:sleep(5000);
   fibaro:call(Thermo, "setTargetLevel", "4");
   fibaro:call(Thermo, "setTime", tonumber(os.time(t)) + 360*60); 
   fibaro:debug(TempWertS.. '° auf 4°' );

   -- Fenster geschlossen          --

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

end

Hallo und guten Abend,

danke für den Hinweis crissxcross und auch Dir criss1871

manchmal ist man echt geistig Umnachtet :wink:
Hab den “Value Wert” im Kopf des Scripts völlig missachtet, hatte dessen Sinn noch nicht
kapiert, habe immer nur die ID`s geändert.

Hab mir heut nen LUA Editor geholt und werde mich mit den Basic`s mal beschäftigen.

JETZT FUNZT ES PRIMA :))))))

DANKE

Ich nochmal,

wie verhält sich es mit der Heizung nach Ablauf der 6h?
wenn man z.B.: über das WE wegfährt aber das Fenster noch angekippt ist?
Und dann auch noch ein Temperatursturz auf Minusgrade stattfindet?

Danke schon mal im voraus und

VG aus Thüringen

Ich bekomme das Script nicht ans laufen. Variablen angelegt, Globale ebenfalls. Aber es passiert nichts. Leider bekomme ich auch keine Fehlermeldung. Sehe nur im Dashboard, dass wenn ich auf Start klicke, diese direkt wieder auf Stop springt. Irgendeine Idee?

Poste mal ein Screensjot von deinem Script, sowie den Variablen.
Irgendwo muss der Fehler ja stecken :wink:

Alles klar. Läuft jetzt. Musste, warum auch immer, einen Neustart machen. Danke

@chriss1873
Ich musste die Anführungszeichen bei der Globalen Variablen im Script drin lassen damit es läuft. Komisch

Kurz zur Info, die Anführungszeichen müssen stehen bleiben da es sich um ein String handelt.
Wie gesagt habe das Script in allen Räumen laufen und keinerlei Probleme.

Wenn man die Globale Variable anlegt ist es egal welchen Wert man einträgt, dies ist nur der zwischen Speicher für die Werte die vom Thermostat geschrieben/gelesen werden.

@Chris1873: Bei dir ist irgendwo der Wurm drin, bist du sicher das es 100% läuft?
@niluya: Nach Ablauf der 6 Std. greift der Heizplan wieder, egal ob Fenster auf. Um das zu vermeiden kann man sich ein weiteres Script basteln was den Status der Fenster überprüft. Alles in einen unterzubringen ist schwierig.