Script HILFE! Licht-Steuerung

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

P.S Wenn ich den Timer auf 300*1000 setze läuft die Szene gar nicht mehr…

Hi,

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?

VG Hoggle

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

Ich brauch das Skript noch nicht mal testen, um zu sehen, dass es nicht das macht, was du beschreibst.

1.) Trigger sind völlig falsch gesetzt:

http://www.siio.de/fibaro-homecenter-einsteigerguide-teil-2-getriggerte-szenen/

2.) Licht geht nur an, wenn beide MS ausgelöst sind

3.) if/elseif nutzen

Gruß

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 :frowning:
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

Hi,

die ID ist richtig? Was bekommst du denn für einen Debug, wenn du manuell startest?

Gruß

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.

Gruß
MT

zw ist ein String und soll mit einem Integer verglichen werden. Das geht nicht. Musst die tonumber()-Funktion nutzen.

Gruß