ich bin kompletter Lua Anfänger und komme deshalb bei meinem Vorhaben leider nicht weiter.
Mein Ziel ist es, durch einen Motion Sensor der bei uns im Flur hängt, eine Hue Lampe im Bad mit dem Plugin an und aus zu schalten.
In unserer Küche habe ich schon eine Lichtsteuerung auf Bewegung mit einem Motion Sensor und einer Hue Lampe erfolgreich laufen.
Da unser Bad räumlich echt schwierig aufgebaut ist, würde ich gerne eine “simple an / aus” Schaltung haben.
Motion Sensor im Flur erfasst Bewegung, Lampe im Bad geht an und bleibt an, ohne auf Bewegung zu achten.
Komme ich wieder aus dem Bad raus und der Motion Sensor im Flur wird ausgelöst, dann soll das Licht im Bad aus gehen.
Also im Prinzip soll der Motion Sensor wie ein “Lichtschalter” funktionieren.
Mit einem Wallplug und einer Stehlampe habe ich das Ganze mit einem “else” Befehl schon hinbekommen.
Nur die Hue Lampen sollen in der normalen Lichtfassung oben im Bad hängen, also ohne Stehlampe und Wallplug.
Was habe ich bis jetzt versucht:
die Hue Lampe mit einem else Befehl zu schalten… da passiert leider überhaupt nichts, kein an, kein aus
zwei Szenen und eine Variable erstellt, welche beim auslösen des Motion Sensors die Variable ändert und dadurch eigentlich “angeben soll” ob an oder ausgeschaltet wird… da bei beiden Szenen der Motion Sensor als trigger dient, bekomme ich beim auslösen direkt zu viele Instanzen angezeigt und das Licht geht kurz an und dann wieder aus, da sich die Szenen wohl gegenseitig direkt triggern
Hat jemand eine Idee wie ich das ohne massives programmieren hinbekomme? Mir vielleicht einen Denkanstoß geben?
--[[
%% properties
386 value
%% events
%% globals
--]]
local sensors = {386}
local delay = 0
local debug = false
local hueID = 415
function actionsMotion()
fibaro:debug('Führe Aktionen bei Bewegungserkennung aus')
fibaro:call(hueID, "changeBrightness", 1)
fibaro:call(hueID, "changeHue", 8418)
fibaro:call(hueID, "changeSaturation", 140)
fibaro:call(hueID, "turnOn")
end
function actionsNoMotion()
fibaro:debug('Führe Aktionen nach Ende Bewegung aus')
fibaro:call(hueID, "turnOff")
end
local instances = tonumber(fibaro:countScenes());
function getSensorStatus()
for i,n in ipairs(sensors) do
if (tonumber(fibaro:getValue(n, "value")) > 0) then
return 1;
end
end
return 0;
end
function getLastBreach()
local breach = 0;
for i,n in ipairs(sensors) do
local nBreach = tonumber(fibaro:getValue(n, "lastBreached"));
if(nBreach > breach) then
breach = nBreach;
end
end
return breach;
end
function checkMotion()
lastBreached = getLastBreach();
time = os.time();
if (debug) then fibaro:debug("Zuletzt ausgelöst: Vor "..(time-lastBreached).." Sekunden"); end
if (getSensorStatus() == 1) then
return true;
end
if ((time-lastBreached)>=delay) then
return false;
end
return true;
end
local lastBreached = getLastBreach()
if (fibaro:getSourceTriggerType() == 'property' and getSensorStatus() == 1) then
if (instances > 1) then fibaro:abort(); end
fibaro:debug('Bewegung im Raum erkannt - Starte Timer')
actionsMotion()
while (checkMotion()) do
fibaro:sleep(5000);
end
if (debug) then fibaro:debug("Keine Bewegung mehr erkannt."); end
actionsNoMotion()
end
Ja, stimmt.
Aber was machst Du, wenn Bewegung erkannt wird und Du im Bad bist und jemand anders geht über den Flur, während Du noch im Bad bist? Dann sitzt Du im Dunkeln.
Kannst Du die Fälle ausschließen?
Warum setzt Du den Bewegungsmelder nicht ins Bad?
Naja hoffe es kommt nicht vor ^^ , versuche den Bewegungsmelder so anzubringen, dass er wirklich nur reagiert wenn man ins Bad geht. Muss ich aber noch genau testen.
Problem ist dass unser Bad sehr schmal und sehr lang ist. Habe da mal etwas getestet und entweder erfasst er nicht den ganzen Raum oder erkennt zu spät dass jemand das Bad betritt. Müsste also einen zweiten dann kaufen damit alles abgedeckt ist.
ms = ausgelöst
then
if hue = on then hue off
if hue = off then hue on
end
So in etwas ? Kann leider erst heute Abend testen.
Muss aber gestehen dass ich gerade am überlegen bin mir einen zweiten Bewegungsmelder zu holen und das ganze vielleicht doch mit Bewegungsprüfung aufzubauen (oben dein Skript).
sieht aber gut aus denke ich. Hatte das aber mal mit dem “else” probiert und da ging gar nichts. Als würde er den Zustand der Hue Lampen nicht abfragen.
Du Zustand der HUE-Lampen kannst du nicht über die Value abfragen, sondern musst die Daten des Plugins nutzen. Wenn du eine LUA-Szene erstellt hast, dann kannst du Links über das Menü alle notwendigen Werte finden.
Hi boomx, ok vielen Dank, das erklärt (für mich) einniges vom verständnis her.
Habe mir eben noch einen zweiten Motion Sensor bestellt und werde mit den zwei Motion Sensoren das “kleine fibaro lua scripe teil 5” dann doch versuchen umszusetzen.
Werde aber bis der zweite eintrifft trotzdem versuchen, mein Anliegen hier aus dem Post hinzubekommen, damit ich es verstanden habe und was gelernt habe
“musst du die Daten des Plugins nutzen” … ist das bei jedem Plugin so oder ganz speziell bei den Hue Leuchten?
Du musst nur deine IDs anpassen… Einmal im Trigger (Zeile 3) und die locals in Zeile 7 und 8.
--[[
%% properties
XX value
%% globals
--]]
local motion = XX;
local hue = YY;
local HUElight = tonumber(fibaro:getValue(hue, "ui.onOff.value"))
if tonumber(fibaro:getValue(motion, "value")) > 0 then
if (HUElight ~= 0) then
fibaro:call(hue, "turnOff");
fibaro:debug("Beleuchtung aus");
else
fibaro:call(hue, "turnOn");
fibaro:debug("Beleuchtung an");
end
end
vielen Dank nevv, werde das Skript mal heute Abend testen und Rückmeldung geben
Auch dir Danke Hoggel, habe mir das VD mal gespeichert. Werde es aber nicht direkt verwenden, wären dann auf einmal zu viele Baustellen auf einmal für mich als Anfänger.
boomx, dir nochmal Danke für gestern den Tipp, dass bei einer Lua Szene die Befehle angezeigt werden können rechts in der Zeile. Das ist sehr interessant und bietet super Möglichkeiten
nevv: gerade dein Skript getestet! Läuft 1A. Vielen vielen Dank
Einzige was ich noch versucht habe, ist eine zweite Lampe in dem Skript anzugeben bei “local”. Wollte aber irgendwie nicht klappen.
Habe die Szene einfach kopiert und dort dann die zweite Lampe eingetragen.