Blog Licht an solange Bewegung

Hi Leute

brauche mal eure hilfe

es gibt einen schönen Blogeintrag

http://siio.de/lichtschatten/fibaro-szene-licht-solange-bewegung/

wo eine Szene beschrieben ist die durch Bewegung einen Switch schaltet und dieser erst aus geht wenn keine Bewegung mehr festgestell wurde.
Läuft 1A und ist soweit so gut ganz praktisch aber jetzt bräuchte ich zwei Modifikationen die ich nicht hin bekomme (bin leider kein Programmierer)
und zwar möchte ich anstatt “einen” switch hätte ich gern zwei geschalten und dazu kommt noch das dies nur in einem bestimmten Zeitfenster passiert z.B. von 19.00Uhr - 6.30Uhr

könnt ihr mir helfen und hier ein verändertes script posten?

VG T.

Hier mal der Code für die Zeitregel. http://pastebin.com/qG3bemy1
Wenn du mehr switches willst, kannst du diese im code duplizieren. Wenn du möchtest, schreibe ich dafür auch noch ein codeschnipsel.

Grüße

Moin Daniel!

Wie mache ich das denn, wenn ich eine Abhängigkeit von der Helligkeit einbauen möchte?

Viele Grüße

Christian

Hier mit Zeit und mit Lichtwerten. Ich denke, es ist weitestgehend selbsterklärend, ansonsten fragen :wink:

gruß daniel

--[[
%% properties
49 value
%% globals
--]]

-- VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 10-- ID dieser Szene
local motion = 49 -- ID des Bewegungssensors 
local licht = 51 -- ID Lichtsensor
local switch = 6 -- 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);

Hallo Daniel!

Hammer, wie schnell! :slight_smile: Vielen lieben Dank!

Ich nehme mal an, dass das der Lux-Wert ist, den ich variieren kann, oder?

local lichtwert = 5 – grenze zum nachtmodus (nur ausführen, wenn licht größer als)

Und hier kann ich die Zeit anpassen, oder?

local nachtstart = 1700 --22:00 = 2200
local nachtende = 0100 – 07:00 = 0700

Gibt es eigentlich “VHS”-Kurse, die man belegen kann, um das Programmieren zu lernen? ;-)))

Viele Grüße

Christian

Hallo Chris,

ja, wie du es beschrieben hast. Der Lux Wert wird ja in den devices angezeigt, damit musst du experimentieren. Bei -1 wird die Szene immer ausgelöst (logisch,denn der lux wert kann nicht unter 0 sinken.)
Zu LUA Script gibt es sicher genug Tutorials. Man sollte es einfach am Anfang nicht überschätzen. Ein bisschen experimentieren und man steckt da sehr schnell drinnen. Wir haben in der 10 klasse unsere Taschenrechner mit ähnlichem Syntax programmiert, nicht jeder ist gleich Informatiker geworden :wink: Fibaro dokumentiert ansonsten auch jede der eigenen Funktionen.

Ich hoffe, ich konnte helfen!

Gruß Daniel

Hallo Daniel!

Vielen Dank! Allerdings habe ich noch eine kleine Herausforderung. Ich bekomme immer eine Fehlermeldung:

[ERROR] 11:17:04: line 6: unexpected symbol near ‘�’

Exemplarisch hänge ich mal ein Dokument an…

Und was meinst Du in Zeile in Zeile 28 mit: – hier fehlt noch “und schalter aus”

Vielen Dank schon mal vorab für Deine Hilfe.

Gruß

Christian

Hab´s gefunden! :smiley: Es war nur ein Leerzeichen! :smiley: :smiley:

So! Nach dem Löschen diverser Leerzeichen läuft´s jetzt problemlos und ist der Hammer!

Hier die Vorlage von Daniel:

--[[
%% properties
154 value
%% globals
--]]

-- VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 26 -- ID dieser Szene
local motion = 154 -- ID des Bewegungssensors
local licht = 156 -- ID Lichtsensor
local switch = 43 -- 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);

Vielen Dank nochmals Daniel! :smiley:

Eine Frage habe ich allerdings noch. Wenn man z.B. nachts mal für kleine Mädchen muß, dann wird man ja von dem Licht völlig erschlagen.

Kann ich es auch SO steuern, das die Scene z.B. von 17.00 Uhr bis 00.00 Uhr auf Bewegung reagiert und von null, bis sagen wir mal vier Uhr nicht?

Viele Grüße

Christian

P.S. in den zeilen, in denen Du die Zeit definierst,…warum steht da z.B. bei nachtende " = 0100 --"? Ist das ein LUA-Code, oder hast Du Dich da nur vertippt und es müßte da 2200 stehen( um das Zeitfenster zu definieren)?

local nachtstart = 1700 --22:00 = 2200
local nachtende = 0100 – 07:00 = 0700

Hey,
cool das es geht! Und schade, dass es sich nicht richtig kopieren ließ :frowning:
Zu meiner Notiz: 1. habe ich sie einfach vergessen zu löschen, aber 2. meine ich damit wirklich etwas: Die Szene darf eigentlich nicht ausgeführt werden, wenn das licht schon an ist. Wenn du per Wandschalter das licht einschaltest und dann das script per Bewegung startest, geht das licht nach dem timeout aus.
An sich kein Thema, denn schalterstatus abfragen geht via getValue. Aktuell gibt es aber einen bug in meiner fibaro firmware und der schalter bringt immer 0.

Grüße

Daniel

Hi Daniel,
Weißt du ob man über die Table Funktion mehrere Sensoren in einer variablen unterbringen kann?
Local Sensoren {id1, id2}
Habe die Befürchtung das nicht unterschieden werden kann welcher Sensor ausgelöst hat und welcher nicht.
Hatte schon diverse Sachen ausprobiert aber entweder bekommen ich eine Fehlermeldung oder es passiert nichts.

Hallo Leute,

Mich würde ebenfalls die Steuerung unter der Bedingung von Luxwerten interessieren. ich kenne mich mit programmieren gar nicht aus. Gibt es auch die Möglichkeit das Ganze über die grafische Darstellung mit dem HC2 einzurichten?
Vielen Dank bereits im Voraus!
Marco

Hallo,
mit der Grafischen Oberfläche kenne ich mich nicht aus. Vielleicht hat crissxcross da eine Idee.
Zum Problem von Alex: fibaro stellt die Funktion getsourcetrigger zur Verfügung. Diese ließt aus, welcher trigger das script gestartet hat.
In die properties müssen dann alle Bewegungssensoren

in den kopf irgendwo dann in etwa so

local trigger = fibaro:getSourceTrigger() --source trigger variable beschreiben
local motion = tonumber(trigger['deviceID']) --motion wird mit dem jeweiligen sensor versehen

wenn noch andere trigger außer Bewegungssensoren im spiel sind, wird es natürlich nicht mehr auf diesem Weg gehen. (machbar wäre es trotzdem)

Hey MB-ONE,

Grafisch sollte das so klappen, siehe Bild.
Den Licht Sensor auswählen und im grünen Feld den gewünschten LUX Wert eintragen, anschließend das Licht o.ä. auswählen.

Gruß Alex

Screeny-Shot-15.11.2014-16.22.28.png

Hallo Alex,
vielen Dank. Manchmal kann es so simpel sein…
Grüße Marco

Daniel hatte mir mal ein Script geschrieben um mein LED Stripe hinter dem Treppengeländer bei Bewegung, solange Bewegung einzuschalten.
das coole ist, er speichert die Farbe welche der LED Stripe vor der Szene hatte, führt die Szene aus und setzt eine definierte Farbe und Helligkeit. Danach setzt er die Farbe des LED Stripe wieder zurück.

Hier das Script:

--[[
%% properties
222 value
%% globals
--]]
 
-- VARIABLEN Konfiguration (Bewegungsmelder muss oben unter %% properties aufgeführt sein) löst die szene aus
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 192-- ID dieser Szene
local motion = 222 -- ID des Bewegungssensors
local licht = 224 -- ID Lichtsensor
local switch = 155 -- ID der LED Leiste
 
local nachtstart = 2100 --22:00 = 2200
local nachtende = 0700 -- 07:00 = 0700
local starttimer = 10 -- licht an zeit
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")
 
  --sichern der Usereinstellung der LEDs
  local colorSet = fibaro:getValue(switch, "lastColorSet");
  local RGBWTable= {};
  local i = 1;
  for value in string.gmatch(colorSet,"(%d+)") do      
    RGBWTable[i] = value;
        i = i + 1;
  end
 
  --led auf wert einstellen
  fibaro:call(switch, "setColor", "25", "15", "1", "0")
 
  -- timer start und einstellen
  timer = starttimer
        repeat
                fibaro:sleep(1000)
                timer=timer-1
                -- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
                if (tonumber(fibaro:getValue(motion, "value"))) > 0 then
                        timer=starttimer
                end
        until (timer < 1)
 
        -- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
  fibaro:call(switch, "turnOff")
  fibaro:sleep(2000)
  fibaro:call(switch, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
  fibaro:call(switch, "turnOff")
  fibaro:debug("Timer abgelaufen/Schalte Licht aus")
end
fibaro:debug("ende1")
fibaro:killScenes(scene)

Hallo,

ich hoffe Ihr könnt mir helfen.

Könnt ihr mir sagen, ob das soweit richtig eingetragen ist?
Die ID meines Bewegungsmelders ist 336
Die ID des Lichtes ist 7
Die ID des Szene ist 24

Zudem habe ich auch immer noch diesen Fehler: line 7: unexpected Symbol near :<

Hoffe auf schnelle Hilfe, denn das Licht spielt verrückt.

Danke!!!

Fibaro.png

Hallo,

kopiere bitte vollständig dieses Script hier LINK
und erstetze es mit deinen Variablen.
Das Script im Blog ist noch falsch formatiert - ergo hast du es falsch übernommen.
Btte wie gesagt das von hier aus dem Forum 1:1 übernehmen und Variablen ersetzen - die hattest du soweit korrekt eingetragen

Hier nochmal das Script auf dem Blog

--[[
%% properties
30 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 1 -- ID dieser Szene
local motion = 30 -- ID des Bewegungssensors
local switch = 9 -- ID des Relay Switches
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
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");
fibaro:debug("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 = 900;
local timer = (starttimer);
fibaro:debug("Starte Timer");
&nbsp;&nbsp;
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");
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=starttimer;
fibaro:debug("Resete Time, Bewegung erkannt bzw. Motionsensor sendet noch nicht (vgl. Parameter 6)");
end
until (timer<1)
-- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
fibaro:call(switch, "turnOff");
fibaro:debug("Timer abgelaufen/Schalte Licht aus");
fibaro:killScenes(scene);
end

Guten Abend,

habe es soweit übertragen, allerdings habe ich jetzt einen Fehler in Linie 24 bei &…
Folglich funktioniert das Ganze noch nicht. Danke für die Hilfe.

Einen schönen Abend.