Last active
April 16, 2024 11:02
-
-
Save tsjk/8a4329a2029615895611648fea9e2007 to your computer and use it in GitHub Desktop.
Telldus Lua program for power cycling
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- 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