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?
Hemma/inte hemma
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 ..
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 ..
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]
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
Nybörjare sedan 2014
-
- Ny medlem
- Posts: 21
- Joined: 10 May 2016, 05:19
- 8
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
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
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
https://forum.fibaro.com/index.php?/top ... ment-64834
-
- Ny medlem
- Posts: 21
- Joined: 10 May 2016, 05:19
- 8
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