Brauche dringend Hilfe!
Ich habe ein Programm zur Lichtsteuerung geschrieben.
Dieses soll von morgens bis abends eine Deckenlampe schalten aber nachts eine kleine Lampe die durch einen Fibaro Wall Plug ausgelöst wird ansteuern.
Ich habe viel Aufwand in dieses Programm gesteckt und möchte unbedingt, dass es funktioniert…
Ich hoffe einer von euch findet den Fehler den ich übersehe…
Im Debug gibt er normal die Werte aus wenn ich start drücke, aber er löst die szene nicht aus, wenn ich mich im Raum befinde.
Gruß
MT
--[[
%% properties
32 value
34 value
180 value
182 value
146 value
%% globals
TimeOfDay
]]--
--Motion-Sensoren
local motion1 = 32;
local motion2 = 180;
--Lux-Sensoren
local lux1 = fibaro:getValue(34,"value");
local lux2 = fibaro:getValue(182,"value");
--Licht
local licht1 = 146;
local licht2 = 16;
--Lux-Werte für die Tageszeiten
local luxmor = 180; --Morning
local luxday = 200; --Day
local luxeve = 180; --Evening
local luxnight = 180; --Night
--Andere Variablien
local timer = 300;
local zw = (lux1 + lux2)/2;
local TimeOfDay = fibaro:getGlobal("TimeOfDay");
local startSource = fibaro:getSourceTrigger();
--Ab hier nichts Verändern!
if (fibaro:countScenes()>1) then
fibaro:abort();
fibaro:debug("Scene Gelöscht");
end
local debugs = function()
fibaro:debug(TimeOfDay);
fibaro:debug(zw);
end
if TimeOfDay == Morning and zw < luxmor and (fibaro:getValue(motion1,"value") > 0) and (fibaro:getValue(motion2,"value") > 0) or
startSource["type"] == "other" then --Morning
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht an!Morning");
debugs();
end
if TimeOfDay == Day and zw < luxday and (fibaro:getValue(motion1,"value") > 0) and (fibaro:getValue(motion2,"value") > 0) or
startSource["type"] == "other" then --Day
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht an!Day");
debugs();
end
if TimeOfDay == Evening and zw < luxeve and (fibaro:getValue(motion1,"value") > 0) and (fibaro:getValue(motion2,"value") > 0) or
startSource["type"] == "other" then --Evening
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht an!Evening");
debugs();
end
if TimeOfDay == Night and zw < luxnight and (fibaro:getValue(motion1,"value") > 0) and (fibaro:getValue(motion2,"value") > 0) or
startSource["type"] == "other" then -- Night
fibaro:call(licht2,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht2,"turnOff");
fibaro:debug("Licht an!Night");
debugs();
end
soll die Szene durch all die im Header angegeben Module getriggert werden?
Sollen die Lampe bei Bewegung geschaltet werden (“von morgens bis abends”)?
Oder bei einem bestimmten Lux-wert?
Das Script soll ausgelöst werden wenn einer der beiden Motion Sensoren auslöst und der Durchschnittsluxwert und den vordefinierten Werten liegt.
Dazu soll noch eine Zeitabfrage laufen mit einer globalen Variable damit man verschiedene Lichter anschalten kann.
LG MT
ok also ich hab das programm jetzt fertig und es funktioniert gut!
--[[
%% properties
32 value
180 value
%% globals
]]--
--Lux-Sensoren
local lux1 = fibaro:getValue(34,"value");
local lux2 = fibaro:getValue(182,"value");
--Licht
local licht1 = 146;
local licht2 = 16;
--Lux-Werte für die Tageszeiten
local luxmor = 180; --Morning
local luxday = 200; --Day
local luxeve = 180; --Evening
local luxnight = 180; --Night
--Andere Variablien
local timer = 70*1000;
local zw = (lux1 + lux2)/2;
local TimeOfDay = fibaro:getGlobal("TimeOfDay");
--Ab hier nichts Verändern!
if (fibaro:countScenes()>1) then
fibaro:abort();
fibaro:debug("Scene Gelöscht");
end
local debugs = function()
fibaro:debug(TimeOfDay);
fibaro:debug(zw);
end
if(fibaro:getValue(licht1,"value") == 1) then
fibaro:abort();
elseif TimeOfDay == "Morning" and zw < luxmor then --Morning
fibaro:debug("Licht an!Morning");
debugs();
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht aus!Morning");
elseif TimeOfDay == "Day" and zw < luxday then --Day
fibaro:debug("Licht an!Day");
debugs();
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht aus!Day");
elseif TimeOfDay == "Evening" and zw < luxeve then --Evening
fibaro:debug("Licht an!Evening");
debugs();
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht aus!Evening");
elseif TimeOfDay == "Night" and zw < luxnight then -- Night
fibaro:debug("Licht an!Night");
debugs();
fibaro:call(licht2,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht2,"turnOff");
fibaro:debug("Licht aus!Night");
else
print("Fehler");
end
Nun habe ich versucht das Programm auf einen anderen Raum zu übertragen mit nur einem Motion sensoren! Aber es klappt irgendwie nicht…
Ich bekomme keinerlei debug und habe schon mehrmals vergeblich versucht das Programm neu zu verändern… Ich übersehe etwas, aber weiß nicht was
Bitte Hilfe!
--[[
%% properties
22 value
%% globals
]]--
--Licht
local licht1 = 138;
local licht2 = 14;
--Lux-Werte für die Tageszeiten
local luxmor = 300; --Morning
local luxday = 300; --Day
local luxeve = 300; --Evening
local luxnight = 300; --Night
--Andere Variablien
local timer = 70*1000;
local zw = fibaro:getValue(24,"value");
local TimeOfDay = fibaro:getGlobal("TimeOfDay");
--Ab hier nichts Verändern!
if (fibaro:countScenes()>1) then
fibaro:abort();
fibaro:debug("Scene Gelöscht");
end
local debugs = function()
fibaro:debug(TimeOfDay);
fibaro:debug(zw);
end
if(fibaro:getValue(licht1,"value") == 1) then
fibaro:abort();
elseif TimeOfDay == "Morning" and zw < luxmor then --Morning
fibaro:debug("Licht an!Morning");
debugs();
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht aus!Morning");
elseif TimeOfDay == "Day" and zw < luxday then --Day
fibaro:debug("Licht an!Day");
debugs();
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht aus!Day");
elseif TimeOfDay == "Evening" and zw < luxeve then --Evening
fibaro:debug("Licht an!Evening");
debugs();
fibaro:call(licht1,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht1,"turnOff");
fibaro:debug("Licht aus!Evening");
elseif TimeOfDay == "Night" and zw < luxnight then -- Night
fibaro:debug("Licht an!Night");
debugs();
fibaro:call(licht2,"turnOn");
fibaro:sleep(timer);
fibaro:call(licht2,"turnOff");
fibaro:debug("Licht aus!Night");
else
print("Fehler");
end
Nach langer Zeit endlich ein Debug.
Aber leider ein eher unerwarteter:
[DEBUG] 19:51:38: line 46: attempt to compare string with number
Zeile 46 sieht wie folgt aus ( da ich ein paar Anmerkungen herausgenommen habe… elseif TimeOfDay == "Day" and zw < luxday then --Day
Ich verstehe nicht warum es nicht funktioniert.