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
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
Gruß Alex
PS: Ich brauch nen Bier
<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('offen ' ..offen);
else
zu = zu + 1;
offen = 1;
fibaro:debug('geschlossen ' ..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('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)) + 240*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