Scripts for scenes

From MiOS
(Difference between revisions)
Jump to: navigation, search
m
Line 81: Line 81:
 
local LS_SID    = "urn:micasaverde-com:serviceId:LightSensor1" -- the LightSensor service ID
 
local LS_SID    = "urn:micasaverde-com:serviceId:LightSensor1" -- the LightSensor service ID
  
local currentLevel = luup.variable_get (LS_SID, "CurrentLevel", deviceNo) or 0
+
local currentLevel = luup.variable_get (LS_SID, "CurrentLevel", DEVICE_NO) or 0
 
currentLevel = tonumber(currentLevel)
 
currentLevel = tonumber(currentLevel)
  
if currentLevel <= lowLevel then
+
if currentLevel <= LOW_LEVEL then
     local timeOfDay = luup.variable_get (LS_SID, "TimeOfDay", deviceNo) or "Day"
+
     local timeOfDay = luup.variable_get (LS_SID, "TimeOfDay", DEVICE_NO) or "Day"
 
     if timeOfDay == "Night" then
 
     if timeOfDay == "Night" then
 
         -- It's night, so the scene has run once.
 
         -- It's night, so the scene has run once.
Line 91: Line 91:
 
     else
 
     else
 
         -- It's sunset, run the scene.
 
         -- It's sunset, run the scene.
         luup.variable_set (LS_SID, "TimeOfDay", "Night", deviceNo)
+
         luup.variable_set (LS_SID, "TimeOfDay", "Night", DEVICE_NO)
 
         return true
 
         return true
 
     end
 
     end
elseif currentLevel >= highLevel then
+
elseif currentLevel >= HIGH_LEVEL then
     local timeOfDay = luup.variable_get (LS_SID, "TimeOfDay", deviceNo) or "Night"
+
     local timeOfDay = luup.variable_get (LS_SID, "TimeOfDay", DEVICE_NO) or "Night"
 
     if timeOfDay == "Day" then
 
     if timeOfDay == "Day" then
 
         -- It's day, so the scene has run once.
 
         -- It's day, so the scene has run once.
Line 101: Line 101:
 
     else
 
     else
 
         -- It's morning, run the scene.
 
         -- It's morning, run the scene.
         luup.variable_set (LS_SID, "TimeOfDay", "Day", deviceNo)
+
         luup.variable_set (LS_SID, "TimeOfDay", "Day", DEVICE_NO)
 
         return true
 
         return true
 
     end
 
     end

Revision as of 09:57, 21 February 2011

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
Personal tools