Fibaro Heizungssteuerung mit Fensterkontakt LUA

Ist für 2 Fensterkontakte und 2 Thermostate geschrieben.
Falls irgendwas nicht passt, kurze info.

Ich habe zwar nur einen Thermostat im WZ!

Reicht es, wenn ich die Zeilen für den zweiten Thermostat einfach nur raus lösche?

Überall im Script wo Thermo2 drin steht einfach löschen.
Wie das Downgrade geht schreib ich dir beim Thema V4.018 beta rein.

Scheint zu laufen!

Das schreibt mir die Szene in das untere Fenster:

[DEBUG] 15:48:11: offen 2
[DEBUG] 15:48:21: offen 3
[DEBUG] 15:48:31: geschlossen 2
[DEBUG] 15:48:41: geschlossen 3
[DEBUG] 15:48:51: geschlossen 4
[DEBUG] 15:49:01: geschlossen 5
[DEBUG] 15:49:11: geschlossen 6
[DEBUG] 15:49:21: geschlossen 7
[DEBUG] 15:49:31: geschlossen 8
[DEBUG] 15:49:41: geschlossen 9
[DEBUG] 15:49:51: geschlossen 10
[DEBUG] 15:50:01: Keine Veränderung des Status

ola,
vielen Dank nochmal Alex. ich habs mal versucht korrekt zu formatieren - hoffe jetzt passt es. Alternativ greift auf die *.rtf zurück welche Alex angefügt hat.

Folgend noch das neue Script mit mehreren Fensterkontakten von Alex

–[[
%% autostart
%% properties
16 value
13 value
%% globals
–]]
– Wohnzimmer –

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK1 = 16; – ID des Fensterkontaktes
local FensterK2 = 13;
local Thermo1 = 8; – ID des HeizkörperThermostat
local Thermo2 = 9;
local Global = "WohnzimmerHeizung" – 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 FensterOffenStatus2 = (tonumber(fibaro:getValue(FensterK2, "value")) > 0);
local FensterZuStatus1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
local FensterZuStatus2 = (tonumber(fibaro:getValue(FensterK2, "value")) == 0);

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

   -- Überprüfe Status Fenster   --

if (FensterOffenStatus1 or FensterOffenStatus2)
then
bewegungauf = true;
elseif (FensterZuStatus1 and FensterZuStatus2)
then
bewegungzu = true;
end
– Zähler 60 sek –

repeat
local CountOffen1 = (tonumber(fibaro:getValue(FensterK1, "value")) > 0);
local CountOffen2 = (tonumber(fibaro:getValue(FensterK2, "value")) > 0);

local CountZu1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
local CountZu2 = (tonumber(fibaro:getValue(FensterK2, "value")) == 0);

if (CountOffen1 or CountOffen2)
  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 FensterOffen2 = (tonumber(fibaro:getValue(FensterK2, "value")) > 0);

local FensterZu1 = (tonumber(fibaro:getValue(FensterK1, "value")) == 0);
local FensterZu2 = (tonumber(fibaro:getValue(FensterK2, "value")) == 0);

 if (FensterOffen1 or FensterOffen2 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:call(Thermo2, "setTargetLevel", "4");
   fibaro:call(Thermo2, "setTime", tonumber(os.time(t)) + 360*60); 
   fibaro:debug(TempWertS.. '° auf 4°' );

   -- Fenster geschlossen          --

 elseif (FensterZu1 and FensterZu2 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:call(Thermo2, "setTargetLevel", TempWertL);
   fibaro:call(Thermo2, "setTime", tonumber(os.time(t)) + 10*60); 
   fibaro:debug('4° auf ' .. TempWertL .. '°');
    
  else
    fibaro:debug('Keine Veränderung des Status');
  end

end

Hallo zusammen!

Ich konnte das Problem lokalisieren, bzw. zumindest einwenig eingrenzen. Ich habe nach und nach die verschiedenen Heizungs-Szenen gelöscht und siehe da,…sie hängt sich nicht mehr aus. :slight_smile:

Welche Szene jetzt den Fehler verursacht hat, weiß ich leider nicht. Ich hatte nur das Script von AlexM soweit angepasst, als das ich entweder mehr Fensterkontakte oder Türkontakte eingefügt habe und den zweiten Thermostat gelöscht habe.
Den Namen der “globalen Variablen” hatte ich dabei nicht verändert und in allen Szenen ihn so gelassen wie er in der Vorlage hieß. Kann das damit zusammenhängen, bzw. kann ich den Namen frei wählen?

Viele Grüße

Christian

P.S. Hier in SH sind es gerade 21,8 Grad und sonnig! :stuck_out_tongue_winking_eye:

Huhu Chriss,

an den Scripten kann es nicht liegen, benutze selber die Script und habe keine Probleme damit.
Für verschiedene Räume solltest du auch verschiedene Globale Variablen anlegen damit der Wert für jeden Raum separat gespeichert wird.

Kann das sein da du irgendwo einen Bug eingebaut hast und die Szenen das System in die Knie zwingen?? Eigentlich waren sie so aufgebaut das beim Triggern der Kontakte erst der Start erfolgte und anschließend, wenn durchgelaufen, ende.

Fibaro Treffen hört sich gut an :slight_smile:

Moin Alex!

Kannst ja mal gucken! Ich hänge es als rtf hier mit dran. Störe Dich bitte nicht an den IDs für die Kontakte. Die rtf dient nur als Formatvorlage und die IDs werden bei jeder neuen Szene angepasst.

Kann ich die “globale Variable” denn frei benennen und muß ich das nur hier:

– Intelligentes Heizen mit Fensterkontakt V2.1 –

          -- User Settings __

local FensterK1 = 86; – ID des Fensterkontaktes
local FensterK2 = 117;
local FensterK3 = 118;
local Thermo1 = 136; – ID des HeizkörperThermostat
local Global = “WohnzimmerHeizung” – Globale Variable

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

Eine weitere Änderung im Script ist scheinbar nicht notwendig, oder?

Viele Grüße und einen schönen Wochenstart!

Christian

Hallo Christian,

kannst aus “WohnzimmerHeizung” auch “KücheHeizung” machen, musst nur eine globale Variable erstellen damit der Wert gespeichert werden kann.

Script sieht auf den ersten Blick normal aus.

Keine Ahnung was da los ist, bei mir laufen die Szenen in 4 Räumen ohne Probleme.

Hallo Alex!

Das bedeutet, ich muß ÜBERHAUPT eine erstellen. Sprich dem Kind einen Namen geben. Oder wie meinst Du das? Es geht nur um das, was ich in die Szene reinschreibe?! Richtig? An anderer Stelle muß ich nichts eintragen was z.B. “KuecheHeizung” heißt, oder? Nur hier:

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

Und die kann ich frei benennen um mich selber einfacher zurecht zu finden?!

Viele Grüße

Christian

Moin Christian,

hab das ganz mal verschoben also nicht wundern :wink:

—————————————————-
local FensterK = 85; — ID des Fensterkontaktes
local Thermo = 52; — ID des HeizkörperThermostat
local Global = “KuecheHeizung” — Globale Variable (Die kannst du frei benennen, je nach Raum)
—————————————————–

Mußt natürlich unter der Variablen Steuerung dementsprechend eine Globale Variable erstellen wo der Wert gespeichert oder gelesen werden kann.

Screeny-Shot-04.11.2014-08.50.12.png

Moin Alex!

Kein Problem! :wink: Bin noch nicht so Foren-erfahren, als dass ich das gemerkt hätte, dass ich ständig in den falschen “Bereich” poste! :smiley:

So langsam kommt Licht ins Dunkel! Ich denke, aufgrund der Tatsache, dass ich weder die globalen Variablen im Text verändert habe, noch irgendwelche unter “Steuerung” hinzugefügt habe, hat sich mein HC2 immer weggehängt.

Danke danke danke für Eure Hilfe Jungs! daumenhoch

Ohne Euch, hätte ich den Kram längst gegen die Wand geschmissen!

Viele Grüße

Christian

Eine Frage hätte ich noch!

Wenn ich eine Heizungssteuerung programmiert habe, kollidiert das mit den Werten, die ich in der “variablen Steuerung” hinterlegt habe?

Nööö, das Script überprüft nur ob das Fenster auf/zu oder nur kurz auf/zu gemacht wurde. Erkennt sie Ausgangssituation und agiert danach. Deine Heuzubgststeuerung wird dadur nicht beeinflusst.

Bsp: Deine Heizungssteuerung schickt den Wert 20 Grad an dein Thermostat und du machst anschließend das Fenster auf. Das Script ließt den Wert aus speichert diesen in der Variablen und senkt die Temperatur auf 4 Grad. Nun machst du das Fenster wieder zu und der gespeicherte Wert wird ausgelesen und an dein Thermostat geschickt und auf 30min eingestellt. Exakt der Wert der vorher von der Heizungsteuerung zugewiesen wurde. Nach 30min läuft das Heizungsprogramm ganz normal weiter.

PS: In der Standort version erkennt das Script wie lange das Fenster auf ist und ob überhaupt eine Änderung des Fenster Staus stattgefunden hat. Dadurch wird der Traffic verringert. Fenster nur kurz auf und zu keine Änderung und auch kein Signal.

Hoffe könnte dir weiterhelfen :wink:

Gruß Alex

Guten Morgen Alex!

Ja, das tust Du und es wird immer besser! :slight_smile:

Wenn ich Dich richtig verstanden habe und davon gehe ich jetzt einfach mal aus, hat mein Heizplan Priorität. MUß ich dann zwingend Werte in der “Variablen Steuerung” eintragen? Oder ist das quasi nur der Verweis auf die Programmzeile in der jeweiligen Szene?

Du meintest im letzten Absatz bestimmt, “Standard”, oder? :wink:

So, Kinder,…ich wünsche Euch allen einen schönen Start in den Tag! :smiley:

Viele Grüße

Christian

Huhu Christian,

brauchst in die “Variable Steuerung” garnierst eintragen, dort werden die Werte der Danfoss Thermostate reingeschrieben und von dort auch gelesen :slight_smile:

Kurzes Bsp: Hast grade schöne 20°C im Wohnzimmer und möchtest durchlüften. Fenster auf und der Wert des Thermostates wird ausgelesen und in der “Variablen Steuerung” gespeichert, WohnzimmerHeizung = 20°C uns Thermostat wir auf 4°C gesetzt, anschließend nach dem durchlüften, Fenster zu. Jetzt werden die 20°C aus der “Variablen Steuerung” ausgelesen und an das Thermostat geschickt.

Das wars :wink:

Moin Alex!

Ich habe nach wie vor das Problem, dass sich mein HC2 mit dem Script weghängt. Dachte, es hängt mit der Firmware zusammen. Aber nach dem Löschen der Szenen läuft das Center problemlos und mußte seit dem auch nicht neu gestartet werden.

Kann ich denn eine Fenster auf - Heizung aus- Szene auch mit dem graphischen Tool bauen? Und muß ich dann eine Gradzahl in die grünen Felder und eine Zeit in die roten Felder eintragen?

Heizungsszene.png

Und hier der zweite Teil…
Bild 1
Bild 2

Heizung-einschalten.png

Moin Moin,

sehr mysteriös. Habe das Script in mehreren Räumen laufen und das ohne Probleme.
Schade das es bei dir nicht läuft :frowning:

Kann die Bilder leider nicht sehen aber hört sich gut an, grün = Temp und rot = Zeit.
Bin morgen erst wieder am Rechner.

Gruß

Hi chriss1873

ich hab mir mal erlaubt in dein Kommentar die Bildnis anzuzeigen. tiff Format kann das Forum leider nicht, daher sieht AlexM die Bilder auch nicht.

Zum Script. Kontrolliere nochmal ob du die Variablen angelegt und korrekt benannt hast. Heißen diese im Script auch so?
@ Alex, kann man Debüt Zeilen in das Script bauen? Vielleicht hilft uns das bei der Fehler suche weiter.