Skip to content

Instantly share code, notes, and snippets.

@tsjk
Last active April 16, 2024 11:02
Show Gist options
  • Save tsjk/8a4329a2029615895611648fea9e2007 to your computer and use it in GitHub Desktop.
Save tsjk/8a4329a2029615895611648fea9e2007 to your computer and use it in GitHub Desktop.
Telldus Lua program for power cycling
-- File: PowerCycle.lua
-- Call with (e.g.): curl -s -X GET 'http://<ip_address>/api/lua/call?script=PowerCycle&function=powerCycle&deviceName=<device_name>&initialDelaySec=<seconds>&delaySec=<seconds>' -H 'Authorization: Bearer <access_token>'
-- File: PowerCycle.lua
local ON = 1
local OFF = 2
local deviceManager = require "telldus.DeviceManager"
local nRetries = 3
local retryDelayMs = 1000
local deviceToPowerCycle = nil
local nameOfDeviceToPowerCycle = nil
local defaultPowerCycleInitialDelaySec = 0
local defaultPowerCycleDelaySec = 10
local powerCycleInitialDelayMs = defaultPowerCycleDelaySec * 1000
local powerCycleDelayMs = defaultPowerCycleDelaySec * 1000
function powerCycle(args)
nameOfDeviceToPowerCycle = args["deviceName"]
if (nameOfDeviceToPowerCycle == nil) then
return
end
deviceToPowerCycle = deviceManager:findByName(nameOfDeviceToPowerCycle)
if (deviceToPowerCycle == nil) then
return
end
local powerCycleInitialDelaySec = args["initialDelaySec"]
if (powerCycleInitialDelaySec ~= nil) then
powerCycleInitialDelayMs = (powerCycleInitialDelaySec * 1000)
end
local powerCycleDelaySec = args["delaySec"]
if (powerCycleDelaySec ~= nil) then
powerCycleDelayMs = (powerCycleDelaySec * 1000) - (nRetries*retryDelayMs)
end
if (powerCycleDelayMs < 0) then
powerCycleDelayMs = 2000;
end
if (powerCycleInitialDelayMs > 0) then
sleep(powerCycleInitialDelayMs)
end
print("Power cycling device %s (id: %s)...", nameOfDeviceToPowerCycle, deviceToPowerCycle:id())
if (deviceToPowerCycle:state() == OFF) then
print(" Turning on device %s (id: %s)...", nameOfDeviceToPowerCycle, deviceToPowerCycle:id())
for i=1,nRetries do
deviceToPowerCycle:command("turnon", nil, "PowerCycle.lua")
sleep(retryDelayMs)
end
print(" Sleeping for %d milliseconds...", powerCycleDelayMs)
sleep(powerCycleDelayMs)
print(" Turning off device %s (id: %s)...", nameOfDeviceToPowerCycle, deviceToPowerCycle:id())
for i=1,nRetries do
deviceToPowerCycle:command("turnoff", nil, "PowerCycle.lua")
sleep(retryDelayMs)
end
elseif (deviceToPowerCycle:state() == ON) then
print(" Turning off device %s (id: %s)...", nameOfDeviceToPowerCycle, deviceToPowerCycle:id())
for i=1,nRetries do
deviceToPowerCycle:command("turnoff", nil, "PowerCycle.lua")
sleep(retryDelayMs)
end
print(" Sleeping for %d milliseconds...", powerCycleDelayMs)
sleep(powerCycleDelayMs)
print(" Turning on device %s (id: %s)...", nameOfDeviceToPowerCycle, deviceToPowerCycle:id())
for i=1,nRetries do
deviceToPowerCycle:command("turnon", nil, "PowerCycle.lua")
sleep(retryDelayMs)
end
end
print("Power cycling of device %s (id: %s) completed.", nameOfDeviceToPowerCycle, deviceToPowerCycle:id())
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment