Hallo Leute,
ich würde gern folgendes realisieren.
Wenn ich in mein Arbeitszimmer komme soll der Motionsensor einen Wallplug anschalten. Des Weiteren möchte ich, dass wenn mein Mac im Ruhezustand ist und ein Wert von 40 Watt erreicht ist, der Wallplug ausgeschaltet wird.
Dazu habe ich folgendes Script erstellt und hoffe, das es so geht. Aber sicher kann ein alter Lua Hase mir da noch einen Tipp geben, wie ich es besser machen kann.
Bin immer dankbar für Hilfen
Euch allen ein schönes Wochenende
Gruß
--[[
%% properties
149 value
%% weather
%% events
%% globals
--]]
local scene = 83 -- ID dieser Szene
local motion = 149 -- ID des Bewegungssensors
local switch = 102 -- ID des Wallplug
local phone = 14 --ID Handy
if (fibaro:countScenes()>1) then
fibaro:abort();
end
-- SCHALTE Steckdose bei erkannter Bewegung ein
if (tonumber(fibaro:getValue(motion, "value")) > 0 )
and (tonumber(fibaro:getValue(switch, "value"))) < 1
then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Steckdose ein");
end
fibaro:sleep(600000) -- wallplug soll min 10 min anbleiben
--schalte aus wenn unter 40 Watt
if (( tonumber(fibaro:getValue(switch, "power")) < 40 ))
then
fibaro:call(switch, "turnOff")
fibaro:call(phone, 'sendPush', "Studio ausgeschaltet")
end
Das Skript prüft einmalig nach der sleep-Time ob der Wert 40 Watt unterschritten ist. Ist dieser Wert nicht unterschritten, dann passiert danach nichts mehr. Soll das so? Laut deiner Beschreibung nicht.
Hi,
eigentlich nicht. Aber ich wusste nicht wie ich es beschreiben sollte.
Ich denke dass ich es über irgendeine Schleife hinbekommen könnte. Aber Schleifen kann ich nur richtig an meinen Schuhen.
Irgendwie dachte ich, das so lange wie ich arbeite ja der Wert über 40 Watt ist und er dementsprechend an ist. Und wenn ich fertig bin, dann geht er nach 10 Minuten aus. Aber was ist wenn ich innerhalb der 10 Minuten wieder ins Büro gehe, bleibt er dann an?
Hi Hoggle,
genau dieses Script habe ich als erste ausprobiert und es funktioniert super. Nun wollte ich aber, das nach dem anschalten nicht nur die Bewegung wichtig ist, sondern auch der Stromverbrauch. Dazu hatte ich dann Zeile 41 gegen Zeile 42 ersetzt. Aber das geht auch nicht, die Steckdose geht nicht aus. Sicherlich sitz die Prüfung der Watt Zahl nicht richtig.
--[[
%% properties
149 value
102 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 85 -- ID dieser Szene
local motion = 149 -- ID des Bewegungssensors
local switch = 102 -- ID der Steckdose
local phone = 14 -- ID des Handy
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
-- SCHALTE Steckdose ein und aus
if (tonumber(fibaro:getValue(motion, "value")) > 0 ) and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Steckdose ein");
end
-- Verzögerung in Sekunden nach der letzten erkannten Bewegung, bevor die Steckdose ausgeschaltet wird
if (tonumber(fibaro:getValue(switch, "value"))) > 0 then
local starttimer = 600;
local timer = (starttimer);
fibaro:debug("Starte Timer");
repeat
fibaro:sleep(1000);
-- Schalte Steckdose 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
(tonumber(fibaro:getValue(switch, "power"))) < 40
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:call(phone, 'sendPush', "Timer abgelaufen/Schalte Mac aus")
fibaro:killScenes(scene);
end
1.) Starten bei Statusänderung des MS
2.) Switch anschalten, wenn MS erkannt und Switch aus
3.) 10 min warten
4.) Switch ausschalten, wenn kleiner 40 W
5.) Ende
Wie du richtig erkannt hast, musst du mit einer Schleife arbeiten, die zum einen die Wartezeit von 10 min garantiert und zum anderen den Stromverbrauch prüft.
Grundsätzlich schon, aber er geht in die Schleife und macht dann erst mal eine Stunde Pause. Nach 60 min prüft er das while erneut.
Mach statt den 60.000 lieber 1.000
OK, hab ich gemacht.
setze ich dann den Befehl fibaro:call(switch, ‘turnOff’) außerhalb der Schleife? also wenn die <40 erreicht, dann verläßt er die Schleife und würde dann das turnOff ausführen?
Dann hast du aber keine Zeit mehr mit drin. Würde dann sofort ausgehen, wenn die 40 Watt unterschritten werden. Schau dir mal folgendes Skript an, da findest du alles was du brauchst:
Es wäre übrigens auch cool, deine Skripte einfach mal selbstständig zu testen. Dort erfährst du meistens, wie sich das Skript verhält. Ist einfacher als immer einen neuen Beitrag zu erstellen.
hi boomx,
Du kannst mir glauben, dass ich meine als Neuling erstellten Scripte teste. Nur leider ist es so das man als Anfänger die Scripte nicht immer versteht. Ich dachte, das man hier als Neuling seine Fragen loswerden kann. Und ganz oft ist es auch nicht hilfreich, wenn Du nur auf irgendein Script hinweist.
Aber wenn Dir meine Fragen zu simpel sind, dann lies Sie doch einfach nicht. Manchmal findet sich ja auch ein anderer, dem es in seinen Anfangszeiten so ging wie mir.
gruß
Wie ich ja bereits ausführte, kann man ein unkommentiertes fertiges Script als Anfänger nicht zwingend verstehen.
Ich möchte gar nicht deine Bemühungen schmälern, aber es wäre sicherlich hilfreicher, wenn die eine oder andere Erklärung im Script stehen würde. Denn auch wenn man sich bemüht sind am Anfang Schleifen, Funktionen und ähnliches nicht gleich zu verarbeiten.
also in dem von mir gepostetem Thread gibt es 3 Seiten an Fragen und Antworten. Da seh ich kein unkommentiertes Skript, was irgendwo ohne jeglichen Support gepostet wurde. Hast du dir alles durchgelesen?
Hallo boomx,
ja ich lese mir immer alles durch, weil ich ja versuche zu lernen.
Aber wir sollten aufhören damit, ich werde jetzt nicht jede Thread zu analysieren, ob es gut oder schlecht war.
Ich bin ja froh, dass Du solch ein Forum am Leben hälst. Aber manchmal ist ein kleiner Hinweis, (wie nimm nicht das device als trigger, sondern mach das) besser als den link zur Erklärung. Ich denke jeder der anfängt gibt sich Mühe es zu verstehen, aber wenn man mal hängt, dann ist ein link mit dem Hinweis “lies das” nicht unbedingt zielführend.
So jatzt aber genug, lass uns wieder zum eigentlichen Thema übergehen.
gruß