Hallo,
ich habe folgendes Problem.
ich habe einen Kamin in meiner Wohnung wenn dieser an=heiß ist (Temperaturüberwachung, Sensor B03KaminTemp >30°C) soll eine bestimmte Szene (Szene 1 = alle Lüfter aus) gestartet werden. Diese schaltet dann meine WC-Ablüfter so aus das sie manuell nicht mehr eingeschaltet werden können. Das stellt kein Problem dar.
Das Problem ist nun folgendes. Ich möchte durch eine Schleife dauernd (alle 5 min) die Temperatur (B03KaminTemp <30°C) prüfen damit irgendwann wieder die Lüfter einzuschalten sind (Szene 2 alles an). Innerhalb dieser Schleife sollen noch zwei weitere Oder-Funktionen geprüft werden.
- Wurde ein zweiter Kamintemperaturwächter (B01KW = off bzw. = heiß) geschaltet dann Szene 1 starten
- Wurde der Kamin manuell heiß geschaltet (Variable: B03KaminManu = heiß) dann Szene 1 starten
Die Abbruchfunktion wäre dann wenn der Sensor B03KaminTemp <30°C ist und der zweite Kamintemperaturwächter (B01KW = on bzw. = kalt) ist. Dann Starte die Szene 2 (alle Lüfter an).
Die beiden Szenen dürfen nie gleichzeitig laufen.
Ich habe das bis jetzt mit sehr vielen grafischen Szenen umgesetzt, dabei verliert man aber leider sehr schnell den Überblick und es funktioniert mal und mal nicht.
Daher will ich alle grafischen Szenen löschen und eine saubere LUA Szene schreiben.
Leider fehlt mir das nötige Programmierwissen oder meine LUA Skripte die ich schon aus den Forum habe sind nicht adaptierbar. Habt Ihr vielleicht einen kleinen Hinweis für mich wie die Struktur der if Schleifen sein muss?
Ich hoffe das ich dann den Rest von alleine hinbekomme.
Anbei noch ein Programmablaufplan wie ich mir die Sache vorstelle.
Die große Frage dabei ist wie ich nach dem Start der Szenen die einzelnen if Schleifen wiederholen kann oder überhaupt muss?
Vielen Dank für jede Hilfe!
Hier noch mein LUA Versuch:
--[[
%% properties
300 value
463 value
458 value
%% weather
%% events
%% globals
--]]
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(300, "value")) <= 30) --Kamintemp = B03KT--
and
( tonumber(fibaro:getValue(463, "value")) > 0 ) --Kaminwächter B01 = B01KW--
or
startSource["type"] == "other"
)
then
fibaro:startScene(109); --Szene2 == Kamin_aus_neu = kalt --
fibaro:debug("withe",'Der Kamin B03/B01 ist kalt!');
elseif (
( tonumber(fibaro:getValue(300, "value")) >= 30) --Kamintemp = B03KT--
or
( tonumber(fibaro:getValue(463, "value")) == 0 ) --Kaminwächter B01 = B01KW--
or
( tonumber(fibaro:getValue(458, "value")) > 0 ) )--Kaminschalter manuell an = B03_Kamin_manu--
then
fibaro:startScene(108); --Szene1 == Kamin_an_neu = heiß --
--fibaro:debug("red",'Der Kamin B03/B01 ist an! Schalte alle Lüfter ab !');
)
end