Motionsensor und Wallplug vernünftig einsetzen

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

Hi,

so wird es nicht gehen :wink:

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.

Gruß

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?

Irgendwie fehlt mir da was.
Gruß

Hi,

scahu Dir ggf mal dies an
http://siio.de/lichtschatten/fibaro-szene-licht-solange-bewegung/

oder
http://siio.de/board/thema/energieverbrauch-check-verbraucher-nach-bestimmter-zeit-aus/

VG Hoggle

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

Gruß secundani

Dein Skript macht folgendes:

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.

https://www.lua.org/pil/4.3.2.html

Gruß

Hi,
ist so mein erster Versuch ! würde das gehen?

while tonumber(fibaro:getValue(WallPlugID, “power”)) < 40 do
fibaro:sleep(600000)
end

Gruß

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?

Gruß

Die while-Schleife legt das gesamte Script so lange still, bis es da raus kommt.

Wenn du es den off-Befehl in die while legst, macht er das Licht jede Sekunde aus…

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:

https://www.siio.de/board/thema/script-waschmaschine/

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.

Gruß

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ß

Warum ist es nicht hilfreich, wenn ich dir ein fertiges Skript präsentiere?

Natürlich kannst du hier als Neuling deine Fragen loswerden, es wird aber eine gewisse Mitarbeit des Users (zumindest von mir) erwartet.

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.

Gruß

Hi,

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?

Gruß

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ß