Hallo alle,
ich habe folgende Szene die noch einer kleinen Erweiterung bedarf. Ich weiss nur nicht wie.
Ich habe einen Bewegungsmelder, der meinen Switch schaltet (0/1)
Sobald der Bewegungsmelder aktiv ist und es eine bestimmte Tageszeit ist, sollen verschiedene Lichtkreise zugeschaltet werden. Es handelt sich um eine Große offene Halle mit 40 Neonröhren, die in 3 Stufen , je nach Dunkelheit, zugeschaltet werden.
Bitte schlagt nicht die Hände Überm Kopf zusammen wenn ihr mein Script lest. Ich bastel mir das immer aus anderen Szenen zusammen.
Das Script funktioniert auch soweit, außer wenn der Bewegungsmelder durchgehend getriggert wird, also ständig auf 1 bleibt. Dann wird die Szene nämlich nicht mehr erneut getriggert und es schaltet sich nur der erste Lampenschalter zu.
Ich hatte jetzt die Idee zusätliche noch einen zeitgesteuerten Trigger dazu zu packen (Var Time: Abenddämmerung, Sonnenuntergang, dunkelheit) aber das klappt leider nie bei mir. Wichtig ist halt, dass der Bewegungsmelder auf jedenfall ein Trigger sein muss.
Vielleicht habt ihr ja ne ganz andere bessere Idee.
Liebe Grüße
Christoph
--[[
%% properties
458 value
%% globals
--]]
fibaro:debug('Erstmalig gestartet')
--local sourceTrigger = fibaro:getSourceTrigger();
local version = '1.1';
fibaro:debug('Gr. Reithalle (Ver.' .. version .. ')');
local meldervalue = tonumber(fibaro:getValue(458,"value")) --Reithalle
--function varTime()
local morning = {7,30}; -- HH:MM für Lichter An morgens in der früh
local morgendaemmerung = 30
local night = {22, 00}; -- HH:MM für Lichter Aus in der Nacht
local abenddaemmerung = 30
local sundaynight = {16, 00}; -- HH:MM für Lichter Aus an Sonntagen
local nachher = 30 -- 20 Minuten Verzögerung nach Sonnenaufgang zum ausgehen
local vorher = 1 -- 20 Minuten vor Sonnenuntergang angehen
local nachher = 30 -- 20 Minuten Verzögerung nach Sonnenaufgang zum ausgehen
local melder = 458
local switchesabends = {459,465,466}
local schalter1 = 459
local schalter2 = 465
local schalter3 = 466
---------------------------------------------------------------------------
local SunSet = fibaro:getValue(1, "sunsetHour") --or {17,00};
fibaro:debug('Sonne geht unter: ' ..SunSet);
local Sunrise = fibaro:getValue(1, "sunriseHour")
fibaro:debug('Sonne geht auf: ' ..Sunrise);
---------------------------------------------------------------------------
local Handychristoph = tonumber(fibaro:getGlobalValue("HandyIDChris"))
local HandyNici = tonumber(fibaro:getGlobalValue("HandyIDNici"))
local Nadinehandy = tonumber(fibaro:getGlobalValue("HandyIDNadine"))
---------------------------------------------------------------------------
if fibaro:countScenes() > 3 then
fibaro:debug("stop scene");
fibaro:abort();
end
local morning = os.date("%H:%M", -3600+ morning[1]*60*60 + morning[2]*60);
local night = os.date("%H:%M", -3600+ night[1]*60*60 + night[2]*60);
local sundaynight = os.date("%H:%M", -3600+ sundaynight[1]*60*60 + sundaynight[2]*60);
local ostime = os.date("%H:%M", os.time());
fibaro:debug('Funktion gestartet')
--------------------------Licht AN -----------------------------------------
---------------------------Morgendämmerung-------------------------------------------
if tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
and ostime == morning and os.date("%H:%M", os.time()-morgendaemmerung*60) < Sunrise
then fibaro:call(schalter1,"turnOn")
fibaro:debug("morgens Licht AN");
fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Licht morgendämmerung an"));
-----------------------------------------------------------------------------
--------------------------Licht AN -----------------------------------------
---------------------------Abenddämmerung-------------------------------------------
elseif fibaro:getGlobal("Feiertag_heute") == '0'
and tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
and os.date("%H:%M", os.time()+abenddaemmerung*60) > SunSet
then fibaro:call(schalter1,"turnOn")
fibaro:debug("abenddämmerung Licht AN");
fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Licht abenddämmerung an"));
-----------------------------------------------------------------------------
--------------------------Licht AN -----------------------------------------
---------------------------Sonnenuntergang-------------------------------------------
elseif fibaro:getGlobal("Feiertag_heute") == '0'
and meldervalue > 0 -- Wenn der Bewegungsmelder aktiv wird--
and ostime == SunSet
then fibaro:call(schalter1,"turnOn")
fibaro:call(schalter2,"turnOn")
fibaro:debug("Sonnenuntergang Licht AN");
fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Lichter sonnenuntergang an"));
-----------------------------------------------------------------------------
--------------------------Licht AN -----------------------------------------
---------------------------Dunkelheit-------------------------------------------
elseif fibaro:getGlobal("Feiertag_heute") == '0'
and tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
and os.date("%H:%M", os.time()-abenddaemmerung*60) > SunSet
then fibaro:call(schalter1,"turnOn")
fibaro:call(schalter2,"turnOn")
fibaro:call(schalter3,"turnOn")
fibaro:debug("Abends Licht AN");
fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Alle Lichter in Halle an"));
--------------------------Licht an, an Feiertagen----------------------------
---------------------------------Abends--------------------------------------
elseif fibaro:getGlobal("Feiertag_heute") == '1'
and SunSet < sundaynight
and ostime == SunSet
then
fibaro:call(schalter1,"turnOn")
fibaro:call(schalter2,"turnOn")
fibaro:call(schalter3,"turnOn")
fibaro:debug("Feiertag Licht AN");
fibaro:call(Handychristoph, "sendPush", " Trotz Feiertag Licht Gr Halle AN");
-----------------------------------------------------------------------------
-----------------Licht AUS ---- bei Sonnaufgang------------------------------
elseif os.date("%H:%M", os.time()-nachher*60) == Sunrise -- 30 Minuten vor Sonnenuntergang
then
local Count = 0
for Index, Value in pairs( switchesabends ) do
Count = Count + 1
fibaro:debug("Aktuelle Dev ID: "..switchesabends[Count])
fibaro:call(switchesabends[Count], "turnOff")
end
--fibaro:call(Handychristoph, "sendPush", "morgens Licht AUS");
fibaro:debug("Licht morgens aus.......");
-----------------------------------------------------------------------------
--------------------------Licht AUS -----------------------------------------
---------------------------Nachts--------------------------------------------
elseif ostime == night then
local Count = 0
for Index, Value in pairs( switchesabends ) do
Count = Count + 1
fibaro:debug("Aktuelle Dev ID: "..switchesabends[Count])
fibaro:call(switchesabends[Count], "turnOff")
end
--fibaro:call(Handychristoph, "sendPush", "Abendbeleuchtung AUS");
fibaro:debug("Licht in der Nacht aus.......");
--------------------------Licht AUS -----------------------------------------
---------------------------wenn keine Bewegung--------------------------------------------
elseif tonumber (fibaro:getValue(melder,"value")) < 1 -- Wenn der Bewegungsmelder inaktiv wird--
then fibaro:call(schalter1,"turnOff")
fibaro:call(schalter2,"turnOff")
fibaro:call(schalter3,"turnOff")
fibaro:debug("keine Bewegung - Licht AUS");
--fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Alle Lichter in Halle an"));
-----------------------------------------------------------------------------
--[[
--------------------------Test Licht AN -----------------------------------------
---------------------------Test-------------------------------------------
elseif fibaro:getGlobal("Feiertag_heute") == '0'
and tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
and os.date("%H:%M", os.time()+abenddaemmerung*60) < SunSet
then fibaro:call(schalter1,"turnOn")
fibaro:debug("TEST Licht AN");
fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." TEST Licht an"));
-----------------------------------------------------------------------------
]]
else
fibaro:debug("No action");
end
--setTimeout(varTime, 60*1000)
--end
-----------------------------------------------------------------------------
ohne die Szene genauer gelesen zu haben ein Vorschlag:
das schrittweise Einschalten der weiteren Beleuchtung in eine zweite Szene packen;
sie prüft z.B. alle 5 Minuten die Helligkeit, um ggf. die zweite oder dritte Beleuchtung einzuschalten;
wenn ausgeschaltet werden soll, diese Szene vorsichthalber „killen“
NB
-
um Parameter nicht mehrfach eingeben zu müssen:
local schalter1 = 459
local schalter2 = 465
local schalter3 = 466
local switchesabends = {schalter1, schalter2, schalter3} -
für Interesse an LUA
Programmieren in LUA von R. Ierusalimschy (ISBN 978-3-95539-020-4)
natürlich sehr ausführlich, aber viele Sachen, die man gut verwenden kann
Viel Erfolg!