Rörelse sensor aktiverad, tänd lampa ** Ny version **

jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Ny version av scene för rörelse sensor. En scene som jag hittat på fibaros forum som jag modifierat lite för att passa mig.

Code: Select all

--[[ 
%% properties 
76 value 
%% globals 
--]] 

--76 = PIR for movement detection 

--Scene purpose 
--IF PIR detects movement then turn on dimmer and turn it off 5 minutes. 
-- If new movement detected during the 5 minute period set the timer for 5 minutes 

local sceneId = 59 --ID of this scene, used to detect number of instances run 
local timerEndTime = 2 --Minutes to keep the lamp turned on after PIR detects movement 
local timer = "timer" --Name of global variabel to control the timer 
local timerValue = fibaro:getGlobalValue(timer) --Current value of global variabel for timer 
local triggerValue = fibaro:getValue(76, "value") --Get PIR value that activated this scene 

local lights = 5 --light to be controlled by this scene 
--local dimmerValue = "20" --Ljusstyrka 

fibaro:debug("start, timer = " .. timerValue .. " lights = " .. fibaro:getValue(lights, "value") .. " ,triggerValue = " .. triggerValue) 
if (fibaro:getValue(lights, "value") == "0" and triggerValue == "1") then 
    --If starts if lights off and PIR detected movement 
    fibaro:call(lights, "turnOn") --Turn lights on 
    fibaro:setGlobal(timer, timerEndTime) --Set global variabel for timer 
    while (fibaro:getGlobalValue(timer) ~= "0") do 
      --Loop used to control timer, each loop 1 minute and continues 
      --as long as timer variabel isn't 0 
      timerValue = tonumber(fibaro:getGlobalValue(timer)) --Get current value of global variabel timer 
      fibaro:setGlobal(timer, timerValue-1) --Decrease global variabel for timer with 1 minute 
      fibaro:debug("Loop - timer = " .. fibaro:getGlobalValue(timer))    
      fibaro:sleep(60*1000) --Wait 1 minute 
    end 
    fibaro:call(lights, "turnOff") --Turn lights off 
elseif fibaro:countScenes(sceneId) > 1 then 
    --if scene is already running the set timer to 2 minutes 
  fibaro:setGlobal(timer, timerEndTime) --set global variabel for timer to 2 minutes 
  fibaro:debug("New instance, totalt = " .. fibaro:countScenes(sceneId)) 
end 
fibaro:debug("End, instances = " .. fibaro:countScenes(sceneId)) 
Last edited by jompa68 on 26 Apr 2013, 14:16, edited 3 times in total.
hek
Medlem
Posts: 152
Joined: 02 Jan 2013, 16:22
11
Location: Bjärred
Contact:

Och vad händer om lampan redan är på när rörelse sker på natten :)
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Den kommer sätta variabel timer till 60.


Sent from my iPhone using Tapatalk
hek
Medlem
Posts: 152
Joined: 02 Jan 2013, 16:22
11
Location: Bjärred
Contact:

Det ser ut som den kommer släcka lampan efter 60 sekunder också.. Men jag kanske missuppfattar koden...
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

hek wrote:Det ser ut som den kommer släcka lampan efter 60 sekunder också.. Men jag kanske missuppfattar koden...
Vad händer vid rörelse framför sensor?
Timer sätts till 60 och sen börjar den räkna ner genom att varje sekund sätta variabel Timer till föregåndevärde -1 (60-1, 59-1 osv). Om man rör sig igen inom dessa 60 sekunder så börjar timer om från 60. När ingen rörelse har registrerats inom dessa 60 sekunder så släcks lampan och variableran sensor och timer sätts till 0.
När Night variabeln har värdet 0 så händer inget lampan fastän sensor registrerar rörelse.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Går givetvis att bygga hur avancerat som helst, detta är bara en "komma igång" guide.


Sent from my iPhone using Tapatalk
hek
Medlem
Posts: 152
Joined: 02 Jan 2013, 16:22
11
Location: Bjärred
Contact:

Man kan lägga in en if-sats till som kollar att lampan inte är igång innan man påbörjar nedräkning/släckning.
Eftersom man troligtvis inte vill att lampan skall släckas om den var redan var tänd när "Night" påbörjats.

Men som du säger.. det går att göra hur avancerat som helst. Huvudsaken är att det är logiskt beteende för användarna (d.v.s. resten av familjen :) )
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Grymt, man tackar!

Hur skulle man implementera Hek's tillägg i scriptet? Vore ju toppen!
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Tillägg: Om lampan är släckt, kör resten.

Code: Select all

--[[
%% properties 
59 value
5 value
%% autostart
%% globals 
--]]
local irSensor = 59; -- ir sensor 
local lamp = 5; -- controlled lamp
local lampTimeout = 60; -- sec before lights out 
if fibaro:getValue(lamp, "value") == 0 then
if tonumber(fibaro:getValue(irSensor, "value")) > 0
and tonumber(fibaro:getGlobalValue("Night")) == 1 then
    fibaro:setGlobal("timer", lampTimeout);
    if tonumber(fibaro:getGlobalValue("sensor")) == 0 then
        fibaro:call(lamp, "turnOn");
        fibaro:setGlobal("sensor", 1);
    end
end
end
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
12

Vilken modell av sensor använder du?
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Aeon 4in1


Sent from my iPhone using Tapatalk
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
12

Har labbat lite med ditt exempel men får inte till det riktigt
(har tagit bort Night)
Första delen verkar funka med sensor sätts till 1 och timer till 60 och lampa tänds men sedan räknar ej timern ner

Vad kan jag missat?

Code: Select all

--[[ 
%% properties 
%% autostart
%% globals  
WCSensor 
--]] 
local lamp = 35; -- controlled lamp 
if tonumber(fibaro:getGlobalValue("WCSensor")) == 1 then
    while tonumber(fibaro:getGlobalValue("WCTimer")) ~= 0 do
        fibaro:sleep(1000);
        timer = tonumber(fibaro:getGlobalValue("WCTimer"));
        fibaro:setGlobal("WCTimer", timer-1);
    end
    fibaro:call(lamp, "turnOff"); 
     fibaro:setGlobal("WCSensor", 0);
end
Edit:
Problemet verkar vara att scenen inte startas automatiskt kör jag igång den manuellt så räknar den ner.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Ser rätt ut. Enkel fråga, har du "Aktiv scen" i bockad på första sidan på din scen?
Skärmavbild 2013-04-24 kl. 06.37.49.png
Skärmavbild 2013-04-24 kl. 06.37.49.png (36.5 KiB) Viewed 30860 times
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Jag har faktiskt samma problem som Maxxar, måste köra scenen manuellt, annars startar den ej.
Scenen är aktiv
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
12

Verkar även som att den räknar ner till noll och sedan fortsätter den vidare -1 -> -2 osv. dvs den stannar aldrig

Edit: Problemet ovan måste varit tillfälligt när jag testade runt.
Verkar fått det funka nu, tog bort följande %% autostart
Denna står med i code texten men är inte med på bilden
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
12

Var nog lite snabb med att skriva att det funkar, det funkar så långt som att lampan tänds och timer aktiveras och räknar ner. Dock så återaktiveras den ej vid rörelse med ny tid.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
12
Location: Hofors

Kikade lite snabbt på mina scener på lunchen, dom fungerar inte heller...nåt måste ha blivit förändrat efter uppgradering av program versionen. Fungerade till 100% när jag körde betan. Ska kika vidare ikväll om jag hinner. Återkommer så fort jag hittat felet.


Sent from my iPhone using Tapatalk
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
12

Den nya versionen verkar funka bra, gjorde om den till sekunder istället för att kunna trimma det mer optimalt.
Dock har jag problem med sensorn Everspring SP812 som inte stöds fullt ut i HC2 än.
Den funkar om jag går in och den känner av rörelsen och sedan måste jag stå still i 20sek (sensorn blinkar då till grönt) då startar scenen om som den ska. Och tiden förlängs med tid som man valt.
Men rör jag hela tiden så funkar inte scenen eftersom sensorn aldrig återgår till av, väldigt irriterande.

Hoppas fibaro löser detta, finns iaf en ticket på inställningarna i sensorn i bugtrackern
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

En riktigt bra scen, kul att den utvecklats vidare! Fortsätt komma med liknande exempel på scener, det uppskattas otroligt mycket!

En eloge till jompa68!!
maxxar
Medlem
Posts: 126
Joined: 06 Sep 2012, 13:30
12

Har lite problem med scenen efter jag bytt min SP812 till en Aeon 4-1 Multisensor
Har bytt ID i scenen till det nya värdet på Aeon Sensorn
Detta kommer upp när sensorn känner rörelse

[DEBUG] 22:32:29: start, timer = 0 lights = 0 ,triggerValue = 0
[DEBUG] 22:32:29: End, instances = 1
[DEBUG] 22:32:39: start, timer = 0 lights = 0 ,triggerValue = 255
[DEBUG] 22:32:39: End, instances = 1
[DEBUG] 22:32:44: start, timer = 0 lights = 0 ,triggerValue = 0
[DEBUG] 22:32:44: End, instances = 1
[DEBUG] 22:32:55: start, timer = 0 lights = 0 ,triggerValue = 255
[DEBUG] 22:32:55: End, instances = 1

Tycker det borde gå att byta rakt av, eller måste några parametrar ändras? (har ändrat en del enligt rekommendation från Fibaro forumet)
Allt ser ut att funka den reagerar på rörelse och de andra värdena stämmer.
Post Reply