Hemma/inte hemma

Post Reply
ChristofferG
Ny medlem
Posts: 21
Joined: 10 May 2016, 05:19
7

Jag har ett antal automatiska scener jag vill köra med villkor att jag är hemma alternativt inte hemma.
Än så länge har jag bara ändrat min globala variabel PresentState manuellt mellan home och away.

Jag tänker mig att jag kan använda mig av mina röreselsensorer, dörrsensorer och energimätning men behöver nog lite inspiration för att komma igång :)

Hur har nu löst automatiseringen av PresentState?
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jag kollar om någon av våra mobiler är uppkopplade på WiFi nätet hemma. Finns några trådar skapade av mig i det ämnet...
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
alexndr
Medlem
Posts: 420
Joined: 14 Jul 2016, 14:38
7

Jag har kopplat HC2 till vårt Verisure-larm. Är larmet av är vi hemma.

Jag antar att man skulle kunna jobba med mobilernas GPS- position också? Synd bara att positioneringen suger ur batteriet ur telefonen på två röda. Eller det gjorde det i alla fall för mig när jag testade senast ..
csabe
Medlem
Posts: 58
Joined: 17 Dec 2014, 15:22
9

Nu kör jag Bamsefars Wifi lösning med att känna av telefon på wifiet – tack vare just honom :-)

Men innan det så hjälpte han mig ta fram en kod som känner av vilken väg jag är på väg. Om jag är på väg att öppna dörren eller inte. Detta med min dörrsensor och rörelsesensor. Sedan har jag pillrat lite med det så att man pausar och känner av om det blir rörelse i någon annan rörelsesensor. För att då döda den pågående scenen om att man är på väg ut och ska släcka ner lägenheten (eller liknande)
Detta kanske inte är så optimalt om det är stort hus osv. Men kanske kan hjälpa lite.

Är dock ingen programerare så mitt pill kanske gjort det lite "smutsigt"
Och jag kommer nog inte kunna hjälpa till att felsöka :-)

Code: Select all

[code]
--[[
%% properties
363 value
20 value
146 value
233 value
%% globals
AwayState
PresentState
--]]

-- 363 är sensor ytterdörr
-- 20 är rörelsesensor i hall
-- 233 är rörelsesensor i sovrum
-- 146 är rörelsesensor i kök

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

-- Get modification times

door = fibaro:getValue(363, "value")
door_time = fibaro:getModificationTime(363, "value")

motion = fibaro:getValue(20, "value")
motion_time = fibaro:getModificationTime(20, "value")

local hall_lastModified = fibaro:getModificationTime(20, 'value')
--fibaro:debug("Hall ModificationTime: "..os.date("%c", hall_lastModified))

local kitch_lastModified = fibaro:getModificationTime(146, 'value')
--fibaro:debug("Kök ModificationTime: "..os.date("%c", kitch_lastModified))

local sov_lastModified = fibaro:getModificationTime(233, 'value')
--fibaro:debug("Sovrum ModificationTime: "..os.date("%c", sov_lastModified))

-- fibaro:debug("Hall ModificationTime: "..os.date("%Y-%m-%d %H:%M:%S", fibaro:getModificationTime(20, "value")))  --hall
-- fibaro:debug("Kök ModificationTime: "..os.date("%Y-%m-%d %H:%M:%S", fibaro:getModificationTime(146, "value")))	-- kök
-- fibaro:debug("Sovrum ModificationTime: "..os.date("%Y-%m-%d %H:%M:%S", fibaro:getModificationTime(233, "value")))	-- sovrum


--------



-- fibaro:debug("Dörr Value: "..door)
-- fibaro:debug("Dörr ModificationTime: "..door_time)

--fibaro:debug("Dörr ModificationTime: "..os.date("%Y-%m-%d %H:%M:%S", fibaro:getModificationTime(52, "value")))

-- fibaro:debug("Rörelse Value: "..motion)
-- fibaro:debug("Rörelse ModificationTime: "..motion_time)

--fibaro:debug("Rörelse ModificationTime: "..os.date("%Y-%m-%d %H:%M:%S", fibaro:getModificationTime(20, "value")))

if tonumber(door) == 1 and tonumber(motion_time) < tonumber(door_time) and fibaro:getGlobalValue("AwayState") ~= "AtHome"
then
   if tonumber(motion) == 1 
   then 
    fibaro:debug("På väg ut")  
    fibaro:debug("-------")  
    fibaro:debug("Vänta 5 min")
    fibaro:setGlobal("PresentState", "Door")
	fibaro:sleep(5*60000) 	-- Wait 5 min sleep
    fibaro:debug("5 min har passerat")
    
    fibaro:debug("-------")  

-- Registrerar senaste rörelserna
    
	local hall_lastModified = fibaro:getModificationTime(20, 'value')
	fibaro:debug("Hall ModificationTime: "..os.date("%c", hall_lastModified))

	local kitch_lastModified = fibaro:getModificationTime(146, 'value')
	fibaro:debug("Kök ModificationTime: "..os.date("%c", kitch_lastModified))

	local sov_lastModified = fibaro:getModificationTime(233, 'value')
	fibaro:debug("Sovrum ModificationTime: "..os.date("%c", sov_lastModified))
    fibaro:debug("-------")  

    
 
      if
      ((os.time() - hall_lastModified) >= 240)  and -- No motion detected for 4 min
      ((os.time() - kitch_lastModified) >= 240)  and -- No motion detected for 4 min
      ((os.time() - sov_lastModified) >= 240) -- No motion detected for 4 min
      
      
   --  tonumber(fibaro:getValue(146, "value")) == 0 and
    -- tonumber(fibaro:getValue(233, "value")) == 0 and
    -- tonumber(fibaro:getValue(20, "value")) == 0
      then
     	-- Om scenen triggats och ingen rörelse i sensorerna så kommer vi hit
      	fibaro:startScene(19)  -- All off
     	fibaro:setGlobal("PresentState", "Away")
	  	fibaro:call(257, "sendDefinedPushNotification", "187")      	-- Skicka push info 

      	fibaro:debug("Har gått ut")
      	fibaro:debug("------")
	else
      -- Om scenen triggats och det är rörelse i en av sensorerna så kommer vi hit
      fibaro:setGlobal("PresentState", "Home")
      fibaro:debug("Rörelse - Är kvar hemma ")
      fibaro:debug("------")
	end
  
     
   else
    fibaro:debug("På väg in")
    fibaro:setGlobal("PresentState", "Home")
    fibaro:debug("-------")  

   end
end

[/code]
Nybörjare sedan 2014
ChristofferG
Ny medlem
Posts: 21
Joined: 10 May 2016, 05:19
7

Tack för alla tips.

Jag sliter mitt hår och försöker få ut info om kopplade enheter till mina Unifi-accesspunkter utan lycka.
Jag har Unifi-controller installerat på windowsburk och det verkar vara linux som gäller för att kunna köra deras api.

Men med fibaro:getModificationTime som csabe tipsade om kan jag köra nedräkningar och timers baserat på tiden på dygnet.
Så att jag kan få en basic funktion igång medan jag jobbar vidare på accesspunkt-spåret :)
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
11

Jag använder mig av GPS lösningen med Geofency den suger ej ur batteriet som fibaro appen gör

https://forum.fibaro.com/index.php?/top ... ment-64834
ChristofferG
Ny medlem
Posts: 21
Joined: 10 May 2016, 05:19
7

Så här blev min kod som håller koll på om någon är hemma.

Code: Select all

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

while true do
  
local delayShort = 100
local delayLong = 540
local usage = 70 --watt

local a1 = fibaro:getModificationTime(7,'value') --rörelse hall
local a2 = fibaro:getModificationTime(60,'value') --rörelse hall
local a3 = fibaro:getModificationTime(66,'value') --taklampa vardagsrum
local a4 = fibaro:getModificationTime(88,'value') --taklampa sovrum nv
local a5 = fibaro:getModificationTime(100,'value') --taklampa adam
local a6 = fibaro:getModificationTime(104,'value') --rörelse badrum nv
local a7 = fibaro:getModificationTime(110,'value') --rörelse badrum öv
local a8 = fibaro:getModificationTime(117,'value') --lampa köksbord
local a9 = fibaro:getModificationTime(123,'value') --taklampa hilma
local a10 = fibaro:getModificationTime(128,'value') --ytterdörr




local w1 = fibaro:getValue(22, "power") --datorer öv
local w2 = fibaro:getValue(32, "power") --adam tv
local w3 = fibaro:getValue(125, "power") --vardagsrum tv



--fibaro:debug(os.date("%H:%M",a1))
--fibaro:debug(os.date("%H:%M",a2))
--fibaro:debug(os.date("%H:%M",a3))
--fibaro:debug(os.date("%H:%M",a4))
--fibaro:debug(os.date("%H:%M",a5))
--fibaro:debug(os.date("%H:%M",a6))
--fibaro:debug(os.date("%H:%M",a7))
--fibaro:debug(os.date("%H:%M",a8))
--fibaro:debug(os.date("%H:%M",a9))
--fibaro:debug(os.date("%H:%M",a10))

if
  (fibaro:getGlobalValue("TimeOfDay") == "Day")
    then
    	if
  			(os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) >= (delayShort * 60)) and ((w1+w2+w3) < usage)
  			then --borta
    			if
      			(fibaro:getGlobalValue("PresentState") == "Home")
      			then
  				fibaro:debug("Borta")
    			fibaro:setGlobal("PresentState", "Away");
  				else
      			fibaro:debug("Borta")
      			fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)))/ 60) .." min")
      			end
  			else --fortfarande hemma
    			if
      			(fibaro:getGlobalValue("PresentState") == "Away")
      			then
  				fibaro:debug("Hemma")
      			fibaro:setGlobal("PresentState", "Home");
      			else
 				fibaro:debug("Hemma")
    			fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)))/ 60) .." min")
     			end
      	end
	else
      	if
  			(os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) >= (delayLong * 60)) and ((w1+w2+w3) < usage)
  			then --borta
    			if
      			(fibaro:getGlobalValue("PresentState") == "Home")
      			then
  				fibaro:debug("Borta")
    			fibaro:setGlobal("PresentState", "Away");
  				else
      			fibaro:debug("Borta")
      			fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)))/ 60) .." min")
      			end
  			else --fortfarande hemma
    			if
      			(fibaro:getGlobalValue("PresentState") == "Away")
      			then
  				fibaro:debug("Hemma")
      			fibaro:setGlobal("PresentState", "Home");
      			else
 				fibaro:debug("Hemma")
    			fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)))/ 60) .." min")
       			end
		end
end
fibaro:sleep(20000);
  
end
Post Reply