Motion Sensor löst ständig aus

Hallo zusammen,

ich bin neu hier und habe mich mal an einem “simplen” Script versucht.
Was möchte ich: Der Bewegungsmelder soll jede Stunde prüfen ob eine Bewegung stattfindet, wenn ja soll ich eine Push- Nachricht erhalten.
Problem: Aktuell bekomme ich bei jeder Bewegung, also auch schon nach einer Minute eine Push Nachricht.

Kann mir jemand helfen?

Vielen Dank vorab an die super Community hier.

Grüße Daniel

--[[
%% autostart
%% properties
8 value
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "00")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "20", "00"))) and (math.floor(os.time()/60)-math.floor(1471287600/60))%60 == 0 )
and
 ( tonumber(fibaro:getValue(8, "value")) > 0 )
)
then
	fibaro:call(32, "sendDefinedPushNotification", "10");
end

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

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "00")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "20", "00"))) )
and
 ( tonumber(fibaro:getValue(8, "value")) > 0 )
or
startSource["type"] == "other"
)
then
	fibaro:call(32, "sendDefinedPushNotification", "10");
end

end

Hi,

wenn Du Code postest, nutze bitte den Button “Code”, fügst den Code ein und drückst erneut den “Code”-Button.

Deine Szene wird derzeit durch jede Bewegung getriggert - im Header das “8 value”.
Mit setTimeout(tempFunc, 60*1000) wird nur 60 Sekunden pausiert, nicht aber eine Stunde, also nicht 3600 Sekunden.

VG Hoggle

Hi Hoggle,

danke für die Antwort, wäre es dann so richtig? Jetzt bekomme ich aber keine Push-Nachricht mehr…

--[[
%% autostart
%% properties
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "00")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "20", "00"))) and (math.floor(os.time()/60)-math.floor(1471287600/60))%60 == 0 )
and
 ( tonumber(fibaro:getValue(8, "value")) > 0 )
)
then
	fibaro:call(32, "sendDefinedPushNotification", "10");
end

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

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "00")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "20", "00"))) )
and
 ( tonumber(fibaro:getValue(8, "value")) > 0 )
or
startSource["type"] == "other"
)
then
	fibaro:call(32, "sendDefinedPushNotification", "10");
end

end


Grüße
Daniel

Hallo zusammen,

kann mit hier jemand helfen? Jetzt löst mein Bewegungsmelder gar nicht mehr aus. Im Prinzip möchte ich dass der Bewegungsmelder in diversen Abständen schaut ob eine Bewegung erkannt wird und wenn es der Fall ist, ich über Push informiert werde…Wo ist der Fehler?

Grüße

Du Triggerst den Bewegungsmelder nicht mehr.


--[[
%% autostart
%% properties
8 value
%% events
%% globals
--]]
 

%%autostart bitte aus den Triggern entfernen. Wird nicht benötigt. ^^

http://www.siio.de/fibaro-homecenter-einsteigerguide-teil-2-getriggerte-szenen/

Gruß

Hallo,

Deine Szene sendet nun keine Push-Nachricht, wenn innerhalb der Stunde Bewegung war, sondern nur wenn genau in dem Moment Bewegung registriert wird, wenn der Timeout abläuft. Ist das so gewollt?

Hi, ja ich möchte dass zum Beispiel jede 15 Min. geschaut wird ob dann eine Bewegung stattfindet, wenn ja, soll eine Push an mich gehen. Ich habe das Skript jetzt mal so eingebaut, aber leider bekomme ich jetzt bei jeder Bewegung eine Push. Ich finde den Fehler aber nicht…
Grüße


--[[
%% properties
8 value
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getValue(8, "value")) > 0  and  (math.floor(os.time()/60)-math.floor(1471946400/60))%15 == 0 )
)
then
	fibaro:call(32, "sendDefinedPushNotification", "10");
end

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

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getValue(8, "value")) > 0  and  true )
or
startSource["type"] == "other"
)
then
	fibaro:call(32, "sendDefinedPushNotification", "10");
end

end


Hi,

Du hast jetzt eine Szene erstellt die alle x Minuten guckt, ob der Motion Sensor ausgelöst ist. Es gibt also kein Zeitfenster von 20 Sekunden in denen auf Bewegung reagiert wird, sondern nur wenn der Sensor zur Laufzeit (nach der Pause) schon ausgelöst ist.

Vielleicht wäre es eine Idee die Szene so aufzubauen, dass Du nicht nur einmal alle X Minuten guckst ob ausgelöst wurde, sondern mehrfach mit jeweils ein paar Sekunden Pause dazwischen.

Beziehungsweise wenn ich bei einer Bewegung informiert werden möchte, dann aber die darauf folgende Stunde nicht mehr über Bewegungen informiert werden möchte, könnte ich das doch noch einfacher machen indem ich Bewegung=ausgelöst, dann Push an mich, und das Device dann auf sleep setzen oder brauche ich da eine Art Schleife, dass er nach der Stunde immer wieder von vorne anfängt?
Grüße

Hi,

mal als Frage nebenbei: Für welches Szenario möchtest Du die Szene denn verwenden? Villeicht gibt es eine andere Herangehensweise.

Hi,

also das Thema zieht auf Alarm/Sicherheit ab. Ich möchte informiert werden, sobald eine Bewegung stattfinden und am besten die Alarmanlage schafr geschalten ist. Der Bewegungssensor soll aber nicht als Auslöser für einen Alarm fungieren, weshabl ich ihn aus dem Alarmsystem genommen habe. Das Problem könnte ich ja lösen indem ich ein Fenster als Sensor nehmen und dies in Abhängigkeit mit dem Bewegungsmelder stelle, also wenn Fenster scharf, dann Aktion Bewegungsmelder. Jetzt ist es aber ja auch so, dass ich zum Beispiel den Alarm eingeschaltet habe und zuhause bin… Dann will ich natürlich nicht alle 8 Sekunden eine Nachricht bekommen, dass eine Bewegung stattgefunden hat. Somit hätte ich das gerne so gelöst, dass wenn eine Bewegung erkannt wird, schicke eine Push und ignoriere die darauf folgenden Bewegungen für X Minuten.
Leider bekomme ich es über ein Script nicht allein hin, sodass ich auf eure Hilfe angewiesen bin.

Grüße

Hi,

dafür hab ich was fertiges. Müsstest nur noch eine Variable einbauen, das die Nachricht nicht dauerhaft versendet wird. Poste es später.

Gruß

--[[
%% properties
293 value
%% globals
--]]
local sensors = {293} --MotionSensor

local delay = 0
local debug = false

function actionsMotion()
 fibaro:debug('Führe Aktionen bei Bewegungserkennung aus')
 if (fibaro:getGlobal('PresentState') == 'Away') then
   fibaro:debug('ACHTUNG! Alarm aktiviert, Bewegung auf Balkon!')
   fibaro:call(62, 'sendPush', 'ACHTUNG! Alarm aktiviert, Bewegung auf Balkon!', 'motion')
 else
   fibaro:call(114, "setColor", "0","0","150","0")
 end   
end

function actionsNoMotion()
 fibaro:debug('Führe Aktionen nach Ende Bewegung aus')
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 auf dem Balkon erkannt - Starte Timer')
  actionsMotion()
 while (checkMotion()) do
  fibaro:sleep(5000);
 end
if (debug) then fibaro:debug("Keine Bewegung mehr erkannt."); end
 actionsNoMotion()
end

Hi,

vielen Dank für das Script, aber ich glaube das ist mehr wie ich will;-) Im Prinzip muss ich nur wissen, wie ich in LUA programierne kann, dass jede 15 Minuten der Bewegungsmelder aktiv ist und bei Bewegung dann eine Push an mich schickt. Wenn keine Bewegung, dann auch keine Push…
Blicks grad echt nicht…

Grüße

Der MotionSensor ist nicht jede 15 min aktiv, sondern reagiert auf Bewegung. Du könntest alle 15 min den Status des MS abfragen, was aber meiner Meinung nach keinen Sinn macht. In dem geposteten Skript kannst du dir eine Push bei Bewegungserkennung und Abwesenheit zu schicken…Also genau das was du wolltest.

Gruß

Hi, ok aber eine Frage noch welche Auswirkung hat Away? GPS oder Alarm an ? etc?

Grüße

Ist eine Variable, wenn keiner zu Hause ist. Also vergleichbar mit Alarm an. Müsste man ein wenig anpassen :wink:

Gruß