Blog Licht an solange Bewegung

Hallo Felix

Deine Szene Läuft immer, wenn dein Motion Sensor mit der Variable 68 eine Bewegung erkennt. Dies hast du unter “properties” so drin.

Wenn ich dies richtig sehe, kommst du bei jeder Detektion des Bewegungsmelder in den"Repeat" Loop rein und bleibst dort für deine Zeit t (in deinem Fall 1800sek) hängen. Da kann die Day/Night Funktion machen was sie will, die Lampe bleibt an bis die 30 Minuten (deine “until” Bedingung) und die letzte Detektion wie auch die Bedingung “Evening” vorbei sind.

Du könntest z.B. deinen ganzen Code zwischen Zeile 7 und 65 in eine if (fibaro:getGlobalValue("TimeOfDay") == "Evening") then Bedingung einfügen.

Was sich mir nicht erschliesst, was deine Leuchten machen sollen bei Wechsel von Abend auf Nacht oder allgemein ausserhalb von Abend.

Habe ich hier was nicht verstanden?

(licht, “value”)) > lichtwert

muss der Lichtwert nicht kleiner sein, als der licht “value”?
wenn es doch dunkel ist, ist der licht value = z.B. 5 (lux) und ich muss den Lichtwert definieren unter welchem lichtwert (z.B. 20 lux) er sein soll, oder?
Und wenn der Wert kleiner ist als Licht wert geht er auf true, oder nicht? Habe ich einen Denkfehler???

local lichtwert = 20
(licht, “value”)) < lichtwert

Hallo, jetzt versuche ich mich schon einige Zeit daran.
Bekomme aber wenn ich es im Editor laufen lasse, beim Debuggen den Fehler in Zeile 22.
Das ist aber sicherlich da der Editor die Fibarofunktion nicht kennt, das das HC weiß wann Sunset und Sunrise ist.

--[[
%% properties
338 value
%% globals
--]]

-- VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 71 -- ID dieser Szene
local motion = 338 -- ID des Bewegungssensors
local licht = 340 -- ID Lichtsensor
local switch = 335 -- ID der Lampe

 
local corrSunset = 60 -- 60 = 1h before sunset lights will turn on ( -60 = 1h after sunset)
local corrSunrise = 60 -- 60 = until 1h after sunrise lights will turn on ( -60 = 1h before sunrise)
local starttimer = 30 -- time in s, the lights stay on (+ time set in motion sensor - par. 6)
-----------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------
---------------------Script-----------------
---------------------------------------------------------------------------
local sunset = fibaro:getValue(1, "sunsetHour")
--fibaro:debug('Sonne geht unter: ' ..SunSet);
local sunrise = fibaro:getValue(1, "sunriseHour")
--fibaro:debug('Sonne geht auf: ' ..Sunrise);
---------------------------------------------------------------------------

fibaro:debug("start1")
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
	fibaro:debug("stop scene");
	fibaro:abort();
end
 
-- SCHALTE LICHT EIN & AUS (if not day)
if (tonumber(fibaro:getValue(motion, "value")) > 0 ) and os.date("%H:%M", os.time()+corrSunset*60) >= sunset or os.date("%H:%M", os.time()-corrSunrise*60) <= sunrise then -- hier fehlt noch "und schalter aus"
-- SCHALTE LICHT EIN
	fibaro:call(switch, "turnOn");
   	fibaro:debug("Schalte Licht ein");
	-- timer start und configure
	timer = os.time();
	while os.time() - timer < starttimer do
		fibaro:sleep(1000);
    
fibaro:sleep(1000); 
-- Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 10 Sekunden, um ein 
-- versehentliches (erneutes) Aktivieren der Szene zu verhindern
if (tonumber(fibaro:getValue(switch, "value"))) < 1 then
    timer=1; 
    fibaro:call(switch, "turnOff"); 
    fibaro:sleep(10000); 
    break 
    end
    timer=timer-1; 
		-- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
		if (tonumber(fibaro:getValue(motion, "value"))) > 0 then
			timer = os.time();
		end
end
-- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
  	fibaro:call(switch, "turnOff");
end
fibaro:debug("ende1");
fibaro:killScenes(scene);

Gestern Abend hatte ich noch das Problem das das Licht nicht ausgegangen ist. Das lag sicher dran, weil nach Zeile 36 das Turn off noch fehlte.
Daraufhin habe ich Zeile 46 bis 52 eingefügt, da ich event. auch noch einen Schalter integrieren wollte um bei Bedarf die Gartenbeleuchtung auch mal vorzeitig ausschalten zu können.
Im HC zeigt er mir auch nichts weiter an, lediglich den Debug:
[DEBUG] start1
[DEBUG] ende1
Könnte das so klappen?

So klappt es an sich. Mir fehlt nun nur noch die Schleife wie lange das Licht an bleibt. Derzeit geht es nach ca. 30 sec wieder aus und sofort mit der nächsten Bewegung wieder an. Und… Nach Mitternacht bleibt es aus. Wie es morgens ist, habe ich noch nicht sehen können, aber ich denke es geht erst wieder ab nächsten Sonnenuntergang…

Ich suche auch schon länger nach einer Lösung, werde wohl den Steinel True Presence testen und diesen in mein System zu integrieren - ein richtiger Presenzmelder scheint die Lösung, aber im Z-Wave Markt scheint es sowas nicht zu geben, nun versuche ich es halt über Walli Taster und den Steinel True Presence zu lösen

Hallo,

so das ist meine Scene die ich mir hier zusammen geklaut habe.
Vielen Dank an alle für euere Hilfe und die Zeit.

cu
karlk

–[[
%% properties
253 value
250 value
%% globals
–]]
– VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 16 – ID dieser Szene
local motion = 253 – ID des Bewegungssensors
local switch = 250 – ID des Relay Switches

debug = function ( color, message )
fibaro:debug(string.format(’<%s style=„color:%s;“>%s’, „span“, color, message, „span“))
end
– Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
debug(‚salmon‘,„lösche doppelte Scene!“)
fibaro:abort();
end
– SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(motion, „value“)) > 0 ) and (tonumber(fibaro:getValue(switch, „value“))) < 1 then
fibaro:call(switch, „turnOn“);
debug(‚steelblue‘,„Schalte Licht ein“);
end
– Verzögerung in Sekunden nach der letzten erkannten Bewegung, bevor das Licht ausgeschaltet wird
if (tonumber(fibaro:getValue(switch, „value“))) > 0 then
local starttimer = 180;
local timer = (starttimer);
debug(‚gold‘,„Starte Timer“);
repeat
fibaro:sleep(1000);
– Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 10 Sekunden, um ein
– versehentliches (erneutes) Aktivieren der Szene zu verhindern
if (tonumber(fibaro:getValue(switch, „value“))) < 1 then
timer=1;
fibaro:call(switch, „turnOff“);
debug(‚red‘,„Licht manuell ausgeschaltet“);
fibaro:sleep(10000);
break
end
timer=timer-1;
– Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit bzw. Motionsensor sendet noch nicht (vgl. Parameter 6)
if (tonumber(fibaro:getValue(motion, „value“))) > 0 then
timer=starttimer;
fibaro:debug(„Resete Time, Bewegung erkannt“);
end
until (timer<1)
– Schalte Licht aus, wenn Timer vollständig abgelaufen ist
fibaro:call(switch, „turnOff“);
debug(‚red‘,„Timer abgelaufen/Schalte Licht aus“);
fibaro:killScenes(scene);
end

Ich war ein wenig betriebsblind. Die 30 sec waren ja auch so beim Starttimer hinterlegt. So läuft es nun aber mit dem Sonnenauf- und Untergang.

--[[
%% properties
338 value
%% globals
--]]

-- VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 71 -- ID dieser Szene
local motion = 338 -- ID des Bewegungssensors
local licht = 340 -- ID Lichtsensor
local switch = 335 -- ID der Lampe

 
local corrSunset = 5 -- 60 = 1h before sunset lights will turn on ( -60 = 1h after sunset)
local corrSunrise = 5 -- 60 = until 1h after sunrise lights will turn on ( -60 = 1h before sunrise)
local starttimer = 120 -- time in s, the lights stay on (+ time set in motion sensor - par. 6)
-----------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------
---------------------Script-----------------
---------------------------------------------------------------------------
local sunset = fibaro:getValue(1, "sunsetHour")
--fibaro:debug('Sonne geht unter: ' ..SunSet);
local sunrise = fibaro:getValue(1, "sunriseHour")
--fibaro:debug('Sonne geht auf: ' ..Sunrise);
---------------------------------------------------------------------------

fibaro:debug("start1")
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
	fibaro:debug("stop scene");
	fibaro:abort();
end
 
-- SCHALTE LICHT EIN & AUS (if not day)
if (tonumber(fibaro:getValue(motion, "value")) > 0 ) and os.date("%H:%M", os.time()+corrSunset*60) >= sunset or os.date("%H:%M", os.time()-corrSunrise*60) <= sunrise then -- hier fehlt noch "und schalter aus"
-- SCHALTE LICHT EIN
	fibaro:call(switch, "turnOn");
   	fibaro:debug("Schalte Licht ein");
	-- timer start und configure
	timer = os.time();
	while os.time() - timer < starttimer do
		fibaro:sleep(1000);
    
fibaro:sleep(1000); 
-- Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 10 Sekunden, um ein 
-- versehentliches (erneutes) Aktivieren der Szene zu verhindern
if (tonumber(fibaro:getValue(switch, "value"))) < 1 then
    timer=1; 
    fibaro:call(switch, "turnOff"); 
    fibaro:sleep(10000); 
    break 
    end
    timer=timer-1; 
		-- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
		if (tonumber(fibaro:getValue(motion, "value"))) > 0 then
			timer = os.time();
		end
end
-- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
  	fibaro:call(switch, "turnOff");
end
fibaro:debug("ende1");
fibaro:killScenes(scene);