Blog Licht an solange Bewegung

Hi,

geht das Licht sofort wieder aus oder soll es nach dem Ein über den Schalter gar nicht durch die Szene beendet werden?

Viele Grüße Hoggle

Hi Hoggle,

das Licht geht direkt aus wenn der Bewegungsmelder die Bewegung registriert. (Wenn es vorher an war). Wenn ich jetzt den Bewegungsensor nicht auslöse, dann geht das Licht ganz normal nach 30s wieder aus, auch wenn es durch den Schalter angemacht wurde. Diese Funktionalität habe ich noch nicht probiert, im reinen Flurbereich erscheint mir das unnötig ein Dauer-An zu haben, das führt nur dazu das das Licht dann doch wieder die ganze Zeit an ist. Habe 1 Frau und 2 Töchter, bei denen gibt es nur Licht an und Tür auf, Licht aus und Tür zu sind irgendwie nicht machbar.

Edit Schande über mein Haupt, im Double Switch war noch im Parameter 10 die “Auto Off” Function eingestellt. Die hatte ich eingestellt bevor ich den Bewegungsmelder hatte. Habe auf “Normal Mode” gestellt und nun tuts wie gewünscht. Entschuldigt bitte.

Gruß, Jens

Mal ne zusätzliche Frage, wie könnte ich denn den Nachstart und das Nachtende auf jeweils eine Std. vor bzw. nach Sonnenauf- bzw. -untergang setzen?

Habe schon gesehen das man die Zeiten per fibaro:getValue(1,‘sunriseHour’)) und sunSetHour abfragen kann, aber wie bekomme ich die jetzt in die nachtstart und nachtende variablen?
Und wie addiere bzw. subtrahiere ich die Stunde.

Habe mir schon dieses Script von criss angeschaut:

https://www.siio.de/lichtsteuerung-teil-2-fibaro-tageszeiten-variable-via-lua-setzen/

steige aber nicht durch, wie das Ganze auf meine Anwendung umzustricken ist.

Gruß, Jens

Hi,

Erstell Dir mal eine Blockszene mit dieser Bedingung und wandele das dann in LUA. Dann hast du alles, was du wissen willst…

Viele Grüße Hoggle

Hi Hoggle,

diese Idee hatte ich auch schon gehabt, aber so wie ich das gerne hätte geht das ja gar nicht (zumindest wüsste ich nicht wie) Ich habe jetzt einfach eine Blockszene erstellt die 1h vor Sonnenaufgang etwas schalten soll. Der vergleicht ja jetzt die IST-Zeit (+60min) mit der Sonnenaufgangszeit und wenn die beiden übereinstimmen macht er was. Zudem macht er noch einige Sachen, die ich nicht so recht nachvollziehen kann.

Hier mal die in LUA übersetzte Blockszene:

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 2) and os.date("%H:%M", os.time()+60*60) == fibaro:getValue(1, "sunriseHour")) )
)
then
	fibaro:call(30, "turnOn");
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
	fibaro:call(30, "turnOn");
end

end

Warum rechnet der os.time*60 (die +60 sind klar), bzw. ich schätze der rechnet das insgesamt in Minuten um, aber müsste er das dann nicht auch mit SunRiseHour machen?

Ich möchte aber ja das er den Wert SunRiseHour und den Wert SunSetHour jedes Mal abfragt wenn das Script getriggert wird (durch die Bewegungssensoren) und den Wert -60min bzw. +60min in die Variablen Nachtstart und Nachtende einsetzt. D.h. eine Umrechnung in Minuten (wenn ich das richtig verstanden habe) wie im Script oben geht dann nicht oder?

Hab nochmal gegrübelt, schätze mal ich kann einfach bei

local nachtstart = fibaro:getValue(1,‘sunriseHour’-60)
local nachtende = fibaro:getValue(1,‘sunsetHour’+60)

einsetzen? Habe ich das richtig verstanden?

Hmne, ich habe das zum testen oben in eine Scene eingesetzt und noch

print(nachtstart)
print(nachtende)

ergänzt, bekomme ich im Debug Fenster die Meldung

“attempt to perform arithmetic on a string value”

wenn ich die +60 und -60 weglasse, dann bekomme ich die Uhrzeit für die jeweiligen Ereignisse im Format “hh:mm” angezeigt, wie bekomme ich das A) in das “hhmm” Format und B) kann ich dort dann einfach 60min hinzufügen bzw. abziehen?

Hi,

erstelle Dir eine Blockszene mit der Zeitverschiebung als Bedingung und wandele dass dann in LUA…
Schau Dir danndas If an.

VG Hoggle

Ah - ein aktuelles Beispiel zu deiner Frage findest Du hier:
https://www.siio.de/board/thema/settimeofday-mein-versionsvorschlag/

Hi Hoggle,

danke für deine Tipps, leider habe ich immer noch Probleme, schau mal hier:

oder ist das “egal” das print das nicht ausgibt, das Script kanns lesen?

Test.jpg

Hi,

Nee, Print geht hier schon.
Aber in Zeile 11, 12 definierst du ein Array, deswegen das table im Debug.
So kommt das aber nicht aus der Blockszene…

Viele Grüße Hoggle

nein, das stammt aus dem aktuellen Beispiel das du verlinkt hast.

Hatte das glaube ich falsch verstanden, ich dachte die Tables dienen der Berechnung, die werden aber weiter unten dann wohl erst ausgelesen und weiterverrechnet.

Was die Blockszene ausspuckt hatte ich ja oben in meinem Post angegeben. Da bin ich mir nicht sicher ob mir das weiterhilft, da hier nicht die sunrisehour angepasst wird sondern die os.time und ich verstehe nach wie vor nicht, wieso da +60*60 gerechnet wird (+60 verstehe ich, denke ich)

Ich würde das gerne so lösen, daß ich am Ende die Variablen nachtstart und nachtende mit der Sonnenauf/ - untergangszeit ± X füttere, im Format hh:mm, wie im ursprünglichen Script vorgesehen.

Okay, aber aus den verlinkten Beispiel hast Du dann nur einen kleinen Teil kopiert.
Ich habe Dir jetzt mal die Parts aus meinem Script kopiert…


local vorher = 20 		 -- 20 Minuten vor Sonnenuntergang angehen

local SunSet = fibaro:getValue(1, "sunsetHour")
--fibaro:debug('Sonne geht unter: ' ..SunSet);
local Sunrise = fibaro:getValue(1, "sunriseHour")
--fibaro:debug('Sonne geht auf: ' ..Sunrise);

local ostime = os.date("%H:%M", os.time());
local Date = os.date("%d.%m.%Y", os.time())

if os.date("%H:%M", os.time()+vorher*60) == SunSet   -- 20 Minuten vor Sonnenuntergang
    then 
	loca

Hi Hoggle,

ja das war das was ich mir zum Testen aus dem Script als Lösung für mein Problem herausgezogen hatte. So wie du es gemacht hast wollte ich es auch gerade probieren. Anscheinend kann man im Gegensatz zu “os.date” nicht bestimmen in welchem Format sunrisehour ausgegeben wird oder?

Entsprechend muss ich in dem ursprünglichen Script “Licht an wenn Bewegung” dann halt den Bereich anpassen in dem die aktuelle Zeit mit der Sonnenaufgangszeit verglichen wird (oder halt Sonnenuntergang).

Würde das mit den “Brocken” aus den Scripts jetzt glaube ich hinbekommen, würde aber gerne noch besser verstehen wie das genau funktioniert.

Habe bei fibaro und auch im LUA Reference Manual nach os.time und os.date geschaut und auch mal probiert was os.time ausspuckt, eine längere Zahl. Diese scheint ja irgendwie für die Verrechnung verwendet zu werden. Lt. den Infos die ich gefunden habe ist os.time ein Wert in Sekunden der ab einem bestimmten Zeitpunkt gerechnet ist.

Ist es dann so das durch die Zeile 12 in deinem Script zu dieser Zahl 20*60s hinzugefügt und dann diese Zahl im Format %H%M ausgespuckt wird? Wenn das so ist, weisst du auf welchen Zeitpunkt sich os.time bezieht?

Kann ich Dir nicht sagen.
Hilft das:
http://www.gammon.com.au/scripts/doc.php?lua=os.time

Ahja, super, danke dir!

Hier nochmal das Script mit der Abhängigkeit von Sonnenauf- und untergang. Bin mir noch nicht 100% sicher das es funktioniert. Ich habe auch die Abhängigkeit vom Lichtwert rausgeschmissen, da ich das sowieso nicht nutze.

--[[
%% properties
76 value
%% globals
--]]
 
-- Configuration of variables (id of motion sensor must be entered under %% properties above---------------------------------------------------------------------------------------------------------------------
local scene = 12 -- ID of this scene
local motion = 76 -- ID motion sensor
local switch = 112 -- ID of lamp
local switch2 = 152 -- ID of 2nd lamp
 
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")
local sunrise = fibaro:getValue(1, "sunriseHour")

fibaro:debug("start1")
if (fibaro:countScenes()>1) then
	fibaro:debug("stop scene");
	fibaro:abort();
end
 
-- SWITCH LIGHT ON/OFF (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"
 	fibaro:debug("ausgelöst");
	--Turn Light(s) on
	fibaro:call(switch, "turnOn");
    fibaro:call(switch2, "turnOn");
	-- timer start und configure
	timer = os.time();
	while os.time() - timer < starttimer do
		fibaro:sleep(1000);
		-- set timer to zero if another motion is detected during delay (set in starttimer)
		if (tonumber(fibaro:getValue(motion, "value"))) > 0 then
			timer = os.time();
		end
end
	-- turn off Light(s) once timer countdown reaches zero
  	fibaro:call(switch, "turnOff");
    fibaro:call(switch2, "turnOff");
end
fibaro:debug("ende1");
fibaro:killScenes(scene);

hallo zusammen,
ich habe jetzt nach 2 Jahren HCL endlich eine HC2. Habe auch hier ein Script gefunden mit dem ich meine LED Stripes in der Küche bei Bewegung schalte.
Im Original läuft es zeitgesteuert , bei mir von 19:00 - 01.00 Uhr. Ich möchte aber das es jeden Tag eine Stunde nach sonnenuntergang startet. Leider habe ich noch keine Erfahrung mit LUA. Könnte mir jemand dieses Script so “umbauen” wie oben beschrieben?

Danke DickerDad

–[[
%% properties
32 value
%% globals
–]]

– VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus

local scene = 7 – ID dieser Szene
local motion = 32 – ID des Bewegungssensors
local licht = 34 – ID Lichtsensor
local switch = 15 – ID der Lampe

local nachtstart = 1900 --22:00 = 2200
local nachtende = 0100 – 07:00 = 0700
local starttimer = 10 – licht an zeit (+ zeit des bewegungssensors - par. 6)
local lichtwert = 10 – grenze zum nachtmodus (nur ausführen, wenn licht größer als)


---------------------Script-----------------
fibaro:debug(“start1”)
if (fibaro:countScenes()>1) then
fibaro:debug(“stop scene”);
fibaro:abort();
end

– SCHALTE LICHT EIN & AUS (wenn nicht nacht)
if (tonumber(fibaro:getValue(motion, “value”)) > 0 ) and tonumber(fibaro:getValue(licht, “value”)) > lichtwert and (tonumber(os.date("%H%M")) >= nachtstart or tonumber(os.date("%H%M")) <= nachtende) then – hier fehlt noch “und schalter aus”
fibaro:debug(“ausgelöst”);
–led auf wert einstellen
fibaro:call(switch, “turnOn”);
– timer start und einstellen
timer = os.time();
while os.time() - timer < starttimer do
fibaro:sleep(1000);
– 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);

Hi Dicker Dad,

du musst dann im Prinzip nur das Script wie in meinem Post über deinem kopieren und in Zeile 3, 8, 9 und 10 die IDs anpassen.
Da du ja nur 1 Lampe hast, musst du die Zeilen 11, 33 und 45 auskommentieren (einfach 2 Bindestriche davor) “–” so wie in Zeile 7

Und dann würde das 1h vor Sonnenuntergang starten und 1h nach Sonnenaufgang beendet werden.

Achso, brauchst du diese Abhängigkeit von der Helligkeit?, die habe ich in meiner Version herausgenommen. Da der Lichtwert teilweise sehr selten aktualisiert wird, macht das irgendwie wenig Sinn, finde ich.

Gruß, Jens

Hallo Jens,

Danke für deine schnelle Antwort, ich werde es testen und berichten.

Grüße DickerDad

Hallo zusammen,

kann mir jemand sagen, warum das Script nicht funktioniert? Ich finde den Fehler nicht, vielleicht kann mir jemand helfen?

Kann man ggfs. auch anstelle des Switches einen Dimmer so mit 25 % ansteuern? Wenn ja, wie kriege ich das hin?

Danke Euch
Dirk

–[[
%% properties
690 value
%% globals
–]]

– VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus

local scene = 264 – ID dieser Szene
local motion = 690 – ID des Bewegungssensors
local licht = 692 – ID Lichtsensor
local switch = 1744 – ID der Lampe

local nachtstart = 1700 – 22:00 = 2200
local nachtende = 0100 – 07:00 = 0700
local starttimer = 10 – licht an zeit (+ zeit des bewegungssensors - par. 6)
local lichtwert = 5 – grenze zum nachtmodus (nur ausführen, wenn licht größer als)


---------------------Script-----------------
fibaro:debug(“start1”)
if (fibaro:countScenes()>1) then
fibaro:debug(“stop scene”);
fibaro:abort();
end

– SCHALTE LICHT EIN & AUS (wenn nicht nacht)
if (tonumber(fibaro:getValue(motion, “value”)) > 0 ) and tonumber(fibaro:getValue(licht, “value”)) > lichtwert and (tonumber(os.date("%H%M")) >= nachtstart or tonumber(os.date("%H%M")) <= nachtende) then – hier fehlt noch “und schalter aus”
fibaro:debug(“ausgelöst”);
–led auf wert einstellen
fibaro:call(switch, “turnOn”);
– timer start und einstellen
timer = os.time();
while os.time() - timer < starttimer do
fibaro:sleep(1000);
– 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);

Hi Dirk,

  1. Mit “funktioniert nicht” können wir hier wenig anfangen. Kannst Du uns vielleicht eine Fehlermeldung aus dem Debug Fenster zukommen lassen?
  2. Und bitte das Script hier in Code Blöcke fassen, ansonsten ist es fast unmöglich zu debuggen, da die Anführungszeichen/Apostroph und andere Zeichen im Text falsch dargestellt werden. Außerdem geht die Formatierung flöten.