Scripts for scenes
Line 110: | Line 110: | ||
Add this code in the Luup Code section: | Add this code in the Luup Code section: | ||
− | <source lang="lua">local startTime = " | + | <source lang="lua">local startTime = "22:30" |
− | local endTime = " | + | local endTime = "05:30" |
− | local hour = tonumber(startTime:sub( | + | local hour = tonumber( startTime:sub( startTime:find("%d+") ) ) |
− | local minute = tonumber(startTime:sub( | + | local minute = tonumber(startTime:sub(-2)) |
if hour and minute then | if hour and minute then | ||
Line 123: | Line 123: | ||
end | end | ||
− | hour = tonumber(endTime:sub( | + | hour = tonumber( endTime:sub( endTime:find("%d+") ) ) |
− | minute = tonumber(endTime:sub( | + | minute = tonumber(endTime:sub(-2)) |
if hour and minute then | if hour and minute then | ||
Line 137: | Line 137: | ||
luup.log("startTime = " .. startTime .. "; currentTime = " .. currentTime .. "; endTime = " .. endTime) | luup.log("startTime = " .. startTime .. "; currentTime = " .. currentTime .. "; endTime = " .. endTime) | ||
− | if startTime <= currentTime and currentTime <= endTime then | + | |
− | + | if startTime <= endTime then | |
+ | if startTime <= currentTime and currentTime <= endTime then | ||
+ | return true | ||
+ | end | ||
else | else | ||
− | return | + | if not (endTime < currentTime and currentTime < startTime) then |
− | end</source> | + | return true |
+ | end | ||
+ | end | ||
+ | |||
+ | return false</source> | ||
− | This code allows the scene to run only between | + | This code allows the scene to run only between 22:30 and 5:30. |
[[Category:User_Instructions]] | [[Category:User_Instructions]] |
Revision as of 08:02, 31 March 2011
Contents |
Scene that runs only if a security sensor hasn't been tripped in a set period of time
1. Create a new scene. In that scene:
2. Create a timer and set it to run every minute.
3. In the Luup Code section put the following code:
local deviceNo = 22 local period = 15 local SS_SID = "urn:micasaverde-com:serviceId:SecuritySensor1" local armed = luup.variable_get(SS_SID, "Armed", deviceNo) if armed == "1" then local lastTrip = luup.variable_get(SS_SID, "LastTrip", deviceNo) or os.time() lastTrip = tonumber(lastTrip) if (os.difftime(os.time(), lastTrip) / 60) >= period then return true end end return false
deviceNo is the sensor's device number, which you can get by going into its Toolbox, in the Advanced tab.
period is the time (in minutes) the sensor hasn't been tripped before running the scene.
Note: The sensor must be armed for this to work, but this can be easily changed.
Scene that runs only if a security sensor has been tripped for a set period of time
1. Create a new scene. In that scene:
2. Create a timer and set it to run every minute.
3. In the Luup Code section put the following code:
local deviceNo = 22 local period = 15 local SS_SID = "urn:micasaverde-com:serviceId:SecuritySensor1" local armed = luup.variable_get(SS_SID, "Armed", deviceNo) or "0" if armed == "1" then local tripped = luup.variable_get(SS_SID, "Tripped", deviceNo) or "0" if tripped == "0" then luup.variable_set(SS_SID, "TripPeriod", "0", deviceNo) else local tripPeriod = luup.variable_get(SS_SID, "TripPeriod", deviceNo) or 0 tripPeriod = tonumber(tripPeriod) tripPeriod = tripPeriod + 1 luup.variable_set(SS_SID, "TripPeriod", tripPeriod, deviceNo) if tripPeriod == period then return true end end end return false
deviceNo is the sensor's device number, which you can get by going into its Toolbox, in the Advanced tab.
period is the time (in minutes) the sensor has been tripped before running the scene.
Note: The sensor must be armed for this to work, but this can be easily changed
Scene that runs once at dawn and once at dusk
1. Create a new scene. In that scene:
2. Create a timer and set it to run every hour (set a different time interval depending on the desired accuracy).
3. In the Luup Code section put the following code:
local LOW_LEVEL = 20 -- the light level threshold for night local HIGH_LEVEL = 40 -- the light level threshold for day local DEVICE_NO = 13 -- the light sensor device number local LS_SID = "urn:micasaverde-com:serviceId:LightSensor1" -- the LightSensor service ID local currentLevel = luup.variable_get (LS_SID, "CurrentLevel", DEVICE_NO) or 0 currentLevel = tonumber(currentLevel) if currentLevel <= LOW_LEVEL then local timeOfDay = luup.variable_get (LS_SID, "TimeOfDay", DEVICE_NO) or "Day" if timeOfDay == "Night" then -- It's night, so the scene has run once. return false else -- It's sunset, run the scene. luup.variable_set (LS_SID, "TimeOfDay", "Night", DEVICE_NO) return true end elseif currentLevel >= HIGH_LEVEL then local timeOfDay = luup.variable_get (LS_SID, "TimeOfDay", DEVICE_NO) or "Night" if timeOfDay == "Day" then -- It's day, so the scene has run once. return false else -- It's morning, run the scene. luup.variable_set (LS_SID, "TimeOfDay", "Day", DEVICE_NO) return true end end
Scene that runs only in a user set time interval
Add this code in the Luup Code section:
local startTime = "22:30" local endTime = "05:30" local hour = tonumber( startTime:sub( startTime:find("%d+") ) ) local minute = tonumber(startTime:sub(-2)) if hour and minute then startTime = hour * 100 + minute else luup.log("ERROR: invalid start time") return false end hour = tonumber( endTime:sub( endTime:find("%d+") ) ) minute = tonumber(endTime:sub(-2)) if hour and minute then endTime = hour * 100 + minute else luup.log("ERROR: invalid end time") return false end local currentTime = os.date("*t") currentTime = currentTime.hour * 100 + currentTime.min luup.log("startTime = " .. startTime .. "; currentTime = " .. currentTime .. "; endTime = " .. endTime) if startTime <= endTime then if startTime <= currentTime and currentTime <= endTime then return true end else if not (endTime < currentTime and currentTime < startTime) then return true end end return false
This code allows the scene to run only between 22:30 and 5:30.