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
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.
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
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?
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
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
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.
--[[
%% 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
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…
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.