mirror of
https://github.com/gSpotx2f/luci-app-internet-detector.git
synced 2025-12-13 15:06:50 +03:00
mod_led_control: LED actions
This commit is contained in:
@@ -11,12 +11,15 @@ local Module = {
|
||||
runInterval = 5,
|
||||
sysLedsDir = "/sys/class/leds",
|
||||
ledName = nil,
|
||||
ledAction1 = 2,
|
||||
ledAction2 = 1,
|
||||
status = nil,
|
||||
_enabled = false,
|
||||
_ledDir = nil,
|
||||
_ledMaxBrightnessFile = nil,
|
||||
_ledBrightnessFile = nil,
|
||||
_ledMaxBrightness = nil,
|
||||
_ledTriggerFile = nil,
|
||||
_counter = 0,
|
||||
}
|
||||
|
||||
@@ -38,12 +41,17 @@ function Module:init(t)
|
||||
if not self.ledName then
|
||||
return
|
||||
end
|
||||
self.ledAction1 = tonumber(t.led_action_1)
|
||||
self.ledAction2 = tonumber(t.led_action_2)
|
||||
self._ledDir = string.format("%s/%s", self.sysLedsDir, self.ledName)
|
||||
self._ledMaxBrightnessFile = string.format("%s/max_brightness", self._ledDir)
|
||||
self._ledBrightnessFile = string.format("%s/brightness", self._ledDir)
|
||||
self._ledMaxBrightness = self.readValue(self._ledMaxBrightnessFile) or 1
|
||||
self._ledTriggerFile = string.format("%s/trigger", self._ledDir)
|
||||
|
||||
if (not unistd.access(self._ledDir, "r") or
|
||||
not unistd.access(self._ledBrightnessFile, "rw")) then
|
||||
not unistd.access(self._ledBrightnessFile, "rw") or
|
||||
not unistd.access(self._ledTriggerFile, "rw")) then
|
||||
self._enabled = false
|
||||
self.syslog("warning", string.format(
|
||||
"%s: LED '%s' is not available", self.name, self.ledName))
|
||||
@@ -54,6 +62,31 @@ function Module:init(t)
|
||||
end
|
||||
end
|
||||
|
||||
function Module:SetTriggerTimer()
|
||||
self.writeValue(self._ledTriggerFile, "timer")
|
||||
end
|
||||
|
||||
function Module:SetTriggerNone()
|
||||
self.writeValue(self._ledTriggerFile, "none")
|
||||
end
|
||||
|
||||
function Module:getCurrentTrigger()
|
||||
local trigger = self.readValue(self._ledTriggerFile)
|
||||
if trigger and trigger:match("%[timer%]") then
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
function Module:on()
|
||||
self:SetTriggerNone()
|
||||
self.writeValue(self._ledBrightnessFile, self._ledMaxBrightness)
|
||||
end
|
||||
|
||||
function Module:off()
|
||||
self:SetTriggerNone()
|
||||
self.writeValue(self._ledBrightnessFile, 0)
|
||||
end
|
||||
|
||||
function Module:getCurrentState()
|
||||
local state = self.readValue(self._ledBrightnessFile)
|
||||
if state and tonumber(state) > 0 then
|
||||
@@ -61,33 +94,42 @@ function Module:getCurrentState()
|
||||
end
|
||||
end
|
||||
|
||||
function Module:on()
|
||||
self.writeValue(self._ledBrightnessFile, self._ledMaxBrightness)
|
||||
end
|
||||
|
||||
function Module:off()
|
||||
self.writeValue(self._ledBrightnessFile, 0)
|
||||
end
|
||||
|
||||
function Module:run(currentStatus, lastStatus, timeDiff)
|
||||
if not self._enabled then
|
||||
return
|
||||
end
|
||||
if self._counter == 0 or self._counter >= self.runInterval or currentStatus ~= lastStatus then
|
||||
|
||||
if currentStatus == 0 then
|
||||
if not self:getCurrentState() then
|
||||
self:on()
|
||||
if self.ledAction1 == 1 then
|
||||
if self:getCurrentState() or self:getCurrentTrigger() then
|
||||
self:off()
|
||||
end
|
||||
elseif self.ledAction1 == 2 then
|
||||
if not self:getCurrentState() or self:getCurrentTrigger() then
|
||||
self:on()
|
||||
end
|
||||
elseif self.ledAction1 == 3 then
|
||||
if not self:getCurrentTrigger() then
|
||||
self:SetTriggerTimer()
|
||||
end
|
||||
end
|
||||
else
|
||||
if self:getCurrentState() then
|
||||
self:off()
|
||||
if self.ledAction2 == 1 then
|
||||
if self:getCurrentState() or self:getCurrentTrigger() then
|
||||
self:off()
|
||||
end
|
||||
elseif self.ledAction2 == 2 then
|
||||
if not self:getCurrentState() or self:getCurrentTrigger() then
|
||||
self:on()
|
||||
end
|
||||
elseif self.ledAction2 == 3 then
|
||||
if not self:getCurrentTrigger() then
|
||||
self:SetTriggerTimer()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self._counter = 0
|
||||
end
|
||||
|
||||
self._counter = self._counter + timeDiff
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user