Jump to content
  • 0

LUA help - triggering scenes


Question

Hi All

 

Following on from posts elsewhere about my issue I am convinced the problem lies with the block/lua conversion. However as a newbie I do not know enough to decipher the flow of the code.

Primarily I need to understand how this scene is triggered when %%autostart is not used. I get that a manual start will set things going by the first 4 lines but how does the scene trigger otherwise?

If someone could add some comments to the offending code below for me it would be most useful!

 

--[[
%% properties
172 value
%% weather
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if(startSource["type"] == "other") then
 fibaro:call(64, "turnOff");
 fibaro:call(66, "turnOff");
else
if (( tonumber(fibaro:getValue(172, "value")) == 0 )) then
setTimeout(function()
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(172, "value");
if (( tonumber(fibaro:getValue(172, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 200) then
 delayedCheck0 = true;
end

local startSource = fibaro:getSourceTrigger();
if (
 ( delayedCheck0 == true )
or
startSource["type"] == "other"
)
then
 fibaro:call(64, "turnOff");
 fibaro:call(66, "turnOff");
end
end, 200000)
end
end

   

Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 1

yes the scene as it is will start at any change of the value of the motion sensor ID 172. When it is breached (0) or when it is safe (1).  You have to check also how many instances of this scene are set in the main scene window. I think you need to have 4 or more at the maximum running instances as the scene will start a different instance every time the sensor changes state to safe.  

 

Please mind that the scope is to limit the number of running instances of any scene, as the more there are , the bigger impact will be on the system, resulting even in delays or partial freezes if more scenes like this are run at the same time.

Link to post
Share on other sites
  • 0

It triggers whenever the device with ID 172 changes the value parameter.  I guess that is a motion sensor and the scene checks for the motion sensor to be safe for more than 200 seconds then turns some switches off.

Link to post
Share on other sites
  • 0

Correct @Momos  the motion sensor should turn the lights off, but it does not work.  Am I to understand the HC2 is constantly looking for the state of sensor 172  via this scene?

 

 

Link to post
Share on other sites
  • 0

Thanks @Momos for the info. It is helping me understand the code and I will check it out the insyances.  

Could you enlighten me regard the timings? If 200000 is the timeout, i.e. the 200 seconds time during which the "off" timer will be reset. What is the mumber 200 used for after deviceLastModification?   Thanks in advance.

Link to post
Share on other sites
  • 0

the 200 from deviceLastModification is seconds. The 200000 is 200 seconds (200*1000). So you have a timeout of 200 seconds and a check for 200 seconds also.

Link to post
Share on other sites
  • 0

Ok @Momos I am getting it slowly!  

I have increased the instances and things seem to be working better, however I am little confused as if a new instance is triggered every time the sensor sees motion surely over a period of say an hour there could be hundreds of such changes of state, and in which case how I limit these?

 

Thanks again.

Edited by 15green
typo
Link to post
Share on other sites
  • 0

well i have a different approach to such scenes. I have one scene for all the lights and that scene runs on a loop every 10 mins.

 

for you it would be something like:

 

--[[
%% autostart
%% properties

%% globals
--]]

local startSource = fibaro:getSourceTrigger();

function tempFunc()
  
if fibaro:countScenes() > 1 then
   scenes = fibaro:countScenes()
   fibaro:debug(os.date("%d %b").."    Scenes active  "..scenes)
   fibaro:abort();
end

local MotionState = tonumber(fibaro:getValue(172, "value")) 
local Time = os.time() - fibaro:getModificationTime(172, 'value')

if ( MotionState == 0 and Time >= 200) then
	fibaro:call(64, "turnOff");
  fibaro:call(66, "turnOff");
end

setTimeout(tempFunc, 200*1000)
end

if (startSource["type"] == "autostart") then
   tempFunc()
end

This way i make sure there is only one instance of the scene running and it takes care of all the lights. Granted the lights can be switched off anywhere between 200 and 400 seconds in this case. Try it see how it is.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...