Ingen rörelse aktiv inom 1800 sek skicka push

Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Hej

Försöker få till en scen där jag vill att om ingen rörelse har indikerats inom 30min så skall det skickas ett push till mig.
Men nu verkar det som om scenen körs varje 1800 sek och just då vid detta tillfället så skickar den push om ingen rörelse är aktiverad, men jag vill att push skall skickas om rörelse ej ha upptäckts inaom 30 min. om ni för står hur jag menar =P

Variabel dag , sen kolla är huset larmat ? om ej larmat gå igenom alla rörelse i huset för se om det finns folk i huset , kolla rörelse inom en tid 30 min , har ingen rörelse upptäckts inom 30 min skicka push.


--[[
%% autostart
%% properties
187 power
37 tamper
153 tamper
172 tamper
%% globals
Rorelsekoll
--]]

local delayedCheck0 = false;
if ( tonumber(fibaro:getValue(187, "power")) < 1 ) then
delayedCheck0 = true;
end
setTimeout(function()
local delayedCheck1 = false;
local tempDeviceState1, deviceLastModification1 = fibaro:get(37, "tamper");
if (( tonumber(fibaro:getValue(37, "tamper")) == 0 ) and (os.time() - deviceLastModification1) >= 1800) then
delayedCheck1 = true;
end
local delayedCheck2 = false;
local tempDeviceState2, deviceLastModification2 = fibaro:get(153, "tamper");
if (( tonumber(fibaro:getValue(153, "tamper")) == 0 ) and (os.time() - deviceLastModification2) >= 1800) then
delayedCheck2 = true;
end
local delayedCheck3 = false;
local tempDeviceState3, deviceLastModification3 = fibaro:get(172, "tamper");
if (( tonumber(fibaro:getValue(172, "tamper")) == 0 ) and (os.time() - deviceLastModification3) >= 1800) then
delayedCheck3 = true;
end

local startSource = fibaro:getSourceTrigger();
if (
( fibaro:getGlobalValue("Rorelsekoll") == "Dag" )
and
( delayedCheck0 == true )
and
( delayedCheck1 == true and delayedCheck2 == true and delayedCheck3 == true )
or
startSource["type"] == "other"
)
then
fibaro:call(36, "sendDefinedPushNotification", "166");
end
end, 1800000)
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Ovan kod funkar ej , men se om jag eller om någon kan hjälpa mig få till denna kod gjord av jompa , men jag vill ha till lite extra detaljer i denna kod ,

Vill att den bara skall köras när variabel dag är satt

Sen om larmet är på eller av
tonumber(fibaro:getValue(187, "power")) < 1 )

Vill om den ej upptäckt någon rörelse inom tiden skall push skickas

--[[
%% autostart
%% properties
37 value
153 value
172 value
%% globals
LastSeenSensor
--]]

--kill any extra instances of the same scene
if (fibaro:countScenes() > 1) then fibaro:abort() end;

--Loop
while true do

--Settings
local ExecuteTimer = 30; -- Execute Every N-th second
local AbsenceTime = 40; -- 40 minutes


--Setup local variables
local CurrentDate = os.date("*t");

--Announce start
fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))

-- LastSeenXXXXXXXX
if tonumber(fibaro:getValue(37, "value")) > 0 or tonumber(fibaro:getValue(153, "value")) > 0 or tonumber(fibaro:getValue(172, "value")) > 0 then
fibaro:setGlobal("LastSeenSensor",os.time())
end
local LastSeenSensor = 0+fibaro:getGlobal("LastSeenSensor");
fibaro:debug(" -|- LastSeenSensor: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenSensor));

-- Home, anyone ?
AbsenceTime = os.time() - (AbsenceTime * 60);
fibaro:debug(" -|- AbsenceTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceTime));
if tonumber(LastSeenSensor) < AbsenceTime then
fibaro:debug(" -|- Home: Nobody is Home!");
-- lägg in släck kod här!

else
fibaro:debug(" -|- Home: Someone is at home!");
end
--Announce end
fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))

--Sleep XX seconds
fibaro:sleep(ExecuteTimer*1000);

end
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

--[[
%% autostart
%% properties
37 value
153 value
172 value
%% globals
LastSeenSensor
--]]

--kill any extra instances of the same scene
if (fibaro:countScenes() > 1) then fibaro:abort() end;

--Loop
while true do

--Settings
local ExecuteTimer = 30; -- Execute Every N-th second
local AbsenceTime = 40; -- 40 minutes


--Setup local variables
local CurrentDate = os.date("*t");
if ( fibaro:getGlobalValue("Rorelsekoll") == "Dag" )
and ( fibaro:getValue(187, "power")) < 1

--Announce start
fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))

-- LastSeenXXXXXXXX
if tonumber(fibaro:getValue(37, "value")) > 0 or tonumber(fibaro:getValue(153, "value")) > 0 or tonumber(fibaro:getValue(172, "value")) > 0 then
fibaro:setGlobal("LastSeenSensor",os.time())
end
local LastSeenSensor = 0+fibaro:getGlobal("LastSeenSensor");
fibaro:debug(" -|- LastSeenSensor: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenSensor));

-- Home, anyone ?
AbsenceTime = os.time() - (AbsenceTime * 60);
fibaro:debug(" -|- AbsenceTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceTime));
if tonumber(LastSeenSensor) < AbsenceTime then
fibaro:debug(" -|- Home: Nobody is Home!");
then
fibaro:call(36, "sendDefinedPushNotification", "166");

else
fibaro:debug(" -|- Home: Someone is at home!");
end
--Announce end
fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))

--Sleep XX seconds
fibaro:sleep(ExecuteTimer*1000);

end



Och givetvis funkar inte denna , och jag har som sagt bara chansat och lagt in , variabel dag och power och push :P

[ERROR] 10:55:46: line 28: 'then' expected near 'fibaro'
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Varje gång nån av rörelserna upptäcker rörelse får jag det larmet

[ERROR] 11:00:09: line 28: 'then' expected near 'fibaro'
[ERROR] 11:00:47: line 28: 'then' expected near 'fibaro'
[ERROR] 11:00:49: line 28: 'then' expected near 'fibaro'
[ERROR] 11:01:34: line 28: 'then' expected near 'fibaro'
[ERROR] 11:01:36: line 28: 'then' expected near 'fibaro'
[ERROR] 11:02:02: line 28: 'then' expected near 'fibaro'
[ERROR] 11:02:04: line 28: 'then' expected near 'fibaro'
SirMaggot
Medlem
Posts: 441
Joined: 18 Aug 2013, 10:36
10

Om rad 28 är

Code: Select all

fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time())) 
Testa att -- ut den
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Du menar -- framför den raden ?

Då får jag detta larm =/

[ERROR] 12:07:56: line 31: 'then' expected near 'if'
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

MIn första variant på ditt script, ändrat lite här och där (det fattas en "then" och sedan en "then" på helt fel plats):

Code: Select all

--[[
%% autostart
%% properties
37 value
153 value
172 value
%% globals
LastSeenSensor
--]]

--kill any extra instances of the same scene
if (fibaro:countScenes() > 1) then fibaro:abort() end;

--Loop
while true do

--Settings
local ExecuteTimer = 30; -- Execute Every N-th second
local AbsenceTime = 40; -- 40 minutes


--Setup local variables
local CurrentDate = os.date("*t");
if ( fibaro:getGlobalValue("Rorelsekoll") == "Dag" )
and ( fibaro:getValue(187, "power")) < 1 then
--Announce start
	fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
-- LastSeenXXXXXXXX
	if tonumber(fibaro:getValue(37, "value")) > 0 or tonumber(fibaro:getValue(153, "value")) > 0 or tonumber(fibaro:getValue(172, "value")) > 0 then
		fibaro:setGlobal("LastSeenSensor",os.time())
	end
	local LastSeenSensor = 0+fibaro:getGlobal("LastSeenSensor");
	fibaro:debug(" -|- LastSeenSensor: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenSensor));
-- Home, anyone ?
	AbsenceTime = os.time() - (AbsenceTime * 60);
	fibaro:debug(" -|- AbsenceTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceTime));
	if tonumber(LastSeenSensor) < AbsenceTime then
		fibaro:debug(" -|- Home: Nobody is Home!");
		fibaro:call(36, "sendDefinedPushNotification", "166");
	else
		fibaro:debug(" -|- Home: Someone is at home!");
	end
--Announce end
	fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))

--Sleep XX seconds
	fibaro:sleep(ExecuteTimer*1000);

end

Men sedan tittade jag på koden, och då slutade det med att det ser ut såhär:

Code: Select all

--[[
%% autostart
%% properties
37 value
153 value
172 value
%% globals
LastSeenSensor
--]]

-- Kill any extra instances of the same scene
if (fibaro:countScenes() > 1) then fibaro:abort() end;

-- Loop
while true do

-- Settings
	local ExecuteTimer = 30; -- Execute Every N-th second
	local AbsenceTime = 40; -- 40 minutes


-- Setup local variables
	local CurrentDate = os.date("*t");
	if ( fibaro:getGlobalValue("Rorelsekoll") == "Dag" )
	and ( fibaro:getValue(187, "power")) < 1 
	then
-- Announce start
		fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
-- LastSeenXXXXXXXX
		if tonumber(fibaro:getValue(37, "value")) > 0 
		or tonumber(fibaro:getValue(153, "value")) > 0 
		or tonumber(fibaro:getValue(172, "value")) > 0 
		then
			fibaro:setGlobal("LastSeenSensor",os.time())
		end
		local LastSeenSensor = 0+fibaro:getGlobal("LastSeenSensor");
		fibaro:debug(" -|- LastSeenSensor: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenSensor));
-- Home, anyone ?
		AbsenceTime = os.time() - (AbsenceTime * 60);
		fibaro:debug(" -|- AbsenceTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceTime));
		if tonumber(LastSeenSensor) < AbsenceTime then
			fibaro:debug(" -|- Home: Nobody is Home!");
			fibaro:call(36, "sendDefinedPushNotification", "166");
		else
			fibaro:debug(" -|- Home: Someone is at home!");
		end
-- Announce end
		fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
	end

-- Sleep XX seconds
	fibaro:sleep(ExecuteTimer*1000);

end
Men jag förstår inte varför du väljer att trigga på globala variabeln, för varje gång du sätter den i scenen så kommer det att kicka igång en identisk scen som iofs kommer att dö direkt eftersom du börjar med att testa om denna scen redan körs - men?

Sedan har jag lite flera funderingar, men jag måste testa lite först...
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Tanken är att bara scenen skall gå när den variabeln är att på dag

När variabeln är satt på natt så behövs inte scenen köras eftersom man då ligger i sängen och då rör man sig inte =)
Menar så jag slipper få massa push notiser när jag sover. Eller är jag helt ute och cyklar =P
sen den andra variabeln vet jag ej vad den är till för den låg i koden som jag kopierat =P

nu när jag kör koden så får jag notiser var 30 sec att ingen är i huset
[DEBUG] 14:52:01: -|- Start: 2015-07-10 14:52:01
[DEBUG] 14:52:01: -|- LastSeenSensor: 1970-01-01 01:00:00
[DEBUG] 14:52:01: -|- AbsenceTime: 2015-07-10 14:12:01
[DEBUG] 14:52:01: -|- Home: Nobody is Home!
[DEBUG] 14:52:01: -|- End: 2015-07-10 14:52:01
[DEBUG] 14:52:31: -|- Start: 2015-07-10 14:52:31
[DEBUG] 14:52:31: -|- LastSeenSensor: 1970-01-01 01:00:00
[DEBUG] 14:52:31: -|- AbsenceTime: 2015-07-10 14:12:31
[DEBUG] 14:52:31: -|- Home: Nobody is Home!
[DEBUG] 14:52:31: -|- End: 2015-07-10 14:52:31
[DEBUG] 14:53:01: -|- Start: 2015-07-10 14:53:01
[DEBUG] 14:53:01: -|- LastSeenSensor: 1970-01-01 01:00:00
[DEBUG] 14:53:01: -|- AbsenceTime: 2015-07-10 14:13:01
[DEBUG] 14:53:01: -|- Home: Nobody is Home!
[DEBUG] 14:53:01: -|- End: 2015-07-10 14:53:01

kopplar jag på rad 25 så får jag detta fel

[ERROR] 15:05:05: line 25: attempt to compare string with number

tackar för hjälp
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Vad är rad 25?

Jag skulle rekommendera att du plockar bort trigger på globala variabeln, och sätter in en if struktur i koden istället - du vill bara att den skall vara aktiv alltså dagtid? Men varje ändring av "LastSeenSensor" skapar ett nytt anrop till scenen - men det är inte det du vill som jag förstår det hela.

Att du får utskrift vart 30e sekund är för att du väntar i 30*1000 i slutet på scriptet för övrigt - men det vet du om eller hur?
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

25 är fibaro puck som vet om huset är larmat eller ej.

Nja alltså jag är rätt ny på detta här så det jag gör är mest chansning =D

Jo det vet jag men , det vill jag den ska göra för vad jag förstår så körs scenen var 30 sec ?
För att kolla om nån rörelse är aktiverad inom 40 min ? och är det inte det så skall den skicka push ?
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Och vad är 37, 153, 172 - är det rörelse sensorer?

Jag förstår inte varför du både tillåter att scenen skall triggas vid rörelse (under förutsättning av ovanstående 3 IDn är rörelse sensorer) och den globala variabeln, när du ändå loopar heeeeela tiden - ta bort allt det och behåll loopen. Se till att scenen autostartar när du starar din HC2, och se till att scenen inte dör ;-)

I själva scenen så får du sedan hålla reda på de förutsättningar du kräver och så vidare. Men att göra både och som du gör nu, det är inte optimalt.
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Du kan ju prova denna kod, men det finns ingen möjlighet för mig att varesig supporta eller testköra detta, det är bara skrivet i luften så att säga...

Code: Select all

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

-- Kill any extra instances of the same scene
if (fibaro:countScenes() > 1) then fibaro:abort() end

-- Settings
local ExecuteTimer = 30; -- Execute Every N-th second
local AbsenceTime = 40; -- 40 minutes
local LastSeenSensor = fibaro:getGlobal("LastSeenSensor")

-- Loop
while true do

-- Setup local variables
	local CurrentDate = os.date("*t");
	if ( fibaro:getGlobalValue("Rorelsekoll") == "Dag"
	     and tonumber(fibaro:getValue(187, "power")) < 1 )
	then
-- Announce start
		fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
-- LastSeenSensor
		if ( tonumber(fibaro:getValue(37, "value")) > 0
		   or tonumber(fibaro:getValue(153, "value")) > 0
		   or tonumber(fibaro:getValue(172, "value")) > 0 )
		then
			fibaro:setGlobal("LastSeenSensor",os.time())
			local LastSeenSensor = os.time()
		end
		fibaro:debug(" -|- LastSeenSensor: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenSensor))
-- Home, anyone ?
		local AbsenceCompTime = os.time() - (AbsenceTime * 60)
		fibaro:debug(" -|- AbsenceCompTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceTime))
		if LastSeenSensor < AbsenceCompTime then
			fibaro:debug(" -|- Home: Nobody is Home!")
			fibaro:call(36, "sendDefinedPushNotification", "166")
		else
			fibaro:debug(" -|- Home: Someone is at home!")
		end
-- Announce end
		fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
	end

-- Sleep XX seconds
	fibaro:sleep(ExecuteTimer*1000)

end
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Okey låter komplicerat men ska se om jag lyckas :P
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Tack ska testa det du skrivit =)

Men i den kod som du har skrivit så ska jag fortfarande ha variabel LastSeenSensor ?
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Kör jag den så får jag detta

[DEBUG] 17:43:18: -|- Start: 2015-07-10 17:43:18
[DEBUG] 17:43:18: -|- LastSeenSensor: 1970-01-01 01:00:01
[DEBUG] 17:43:18: -|- AbsenceCompTime: 1970-01-01 01:00:10
[ERROR] 17:43:18: line 37: attempt to compare string with number

rad 37 = if LastSeenSensor < AbsenceCompTime then
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jag har säkert skrivit fel någonstans - men jag hinner inte titta på det just nu. Jag tror att denna scen kommer från jompa68 - kolla om han kan bistå i den tråden som han skapade det hela i?
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

Jag tror det är jag som gör fel. nu ser det ut såhär

[DEBUG] 18:22:41: -|- Start: 2015-07-10 18:22:41
[DEBUG] 18:22:41: -|- LastSeenSensor: 2015-07-10 18:16:52
[DEBUG] 18:22:41: -|- AbsenceCompTime: 1970-01-01 01:00:10
[ERROR] 18:22:41: line 37: attempt to compare string with number

Nu ha jag fått till det att LastseenSensor funkar med variabel , hade ju tydligen tagit bort den
men AbsenceCompTime ska jag göra nått med den ? ha testat föra en variabel med detta namn men de verka ej funka

Eller är det inte så att LastseenSenor måste va en variabel ?
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jag har ändrat två detaljer, det har att göra med konvertering mellan strängar och nummeriska värden, som inte alltid lirar sådär jättebra i HC2 dessvärre.

Code: Select all

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

    -- Kill any extra instances of the same scene
    if (fibaro:countScenes() > 1) then fibaro:abort() end

    -- Settings
    local ExecuteTimer = 30; -- Execute Every N-th second
    local AbsenceTime = 40; -- 40 minutes
    local LastSeenSensor = fibaro:getGlobal("LastSeenSensor")

    -- Loop
    while true do

    -- Setup local variables
       local CurrentDate = os.date("*t");
       if ( fibaro:getGlobalValue("Rorelsekoll") == "Dag"
            and tonumber(fibaro:getValue(187, "power")) < 1 )
       then
    -- Announce start
          fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
    -- LastSeenSensor
          if ( tonumber(fibaro:getValue(37, "value")) > 0
             or tonumber(fibaro:getValue(153, "value")) > 0
             or tonumber(fibaro:getValue(172, "value")) > 0 )
          then
             fibaro:setGlobal("LastSeenSensor",os.time())
             local LastSeenSensor = 0+os.time()
          end
          fibaro:debug(" -|- LastSeenSensor: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenSensor))
    -- Home, anyone ?
          local AbsenceCompTime = os.time() - (AbsenceTime * 60)
          fibaro:debug(" -|- AbsenceCompTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceCompTime))
          if LastSeenSensor < AbsenceCompTime then
             fibaro:debug(" -|- Home: Nobody is Home!")
             fibaro:call(36, "sendDefinedPushNotification", "166")
          else
             fibaro:debug(" -|- Home: Someone is at home!")
          end
    -- Announce end
          fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time()))
       end

    -- Sleep XX seconds
       fibaro:sleep(ExecuteTimer*1000)

    end
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
Kajsas
Medlem
Posts: 82
Joined: 25 Dec 2014, 11:50
9

fortfarande fel på rad 37

[DEBUG] 20:20:11: -|- Start: 2015-07-10 20:20:11
[DEBUG] 20:20:11: -|- LastSeenSensor: 2015-07-10 20:20:11
[DEBUG] 20:20:11: -|- AbsenceCompTime: 2015-07-10 20:18:11
[ERROR] 20:20:11: line 37: attempt to compare nil with number


if LastSeenSensor < AbsenceCompTime then
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Du får fel på raden där du jämför tiden?

Code: Select all

if LastSeenSensor < AbsenceCompTime then
Hur ser bägge dessa ut om du kör en debug på dom?
Post Reply