Fixed mod_public_ip

This commit is contained in:
gSpot
2025-03-23 17:56:17 +03:00
parent 55802f750f
commit 5b669fe718
11 changed files with 151 additions and 78 deletions

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=internet-detector
PKG_VERSION:=1.4.3
PKG_VERSION:=1.4.4
PKG_RELEASE:=1
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/luci-app-internet-detector>

View File

@@ -28,7 +28,9 @@ config instance 'internet'
option mod_public_ip_provider 'opendns1'
option mod_public_ip_qtype '0'
option mod_public_ip_interval '600'
option mod_public_ip_timeout '3'
option mod_public_ip_interval_failed '60'
option mod_public_ip_request_attempts '2'
option mod_public_ip_timeout '2'
option mod_public_ip_enable_ip_script '0'
option mod_email_enabled '0'
option mod_email_mode '0'

View File

@@ -76,11 +76,11 @@ function Module:init(t)
end
end
function Module:SetTriggerTimer(t)
function Module:setTriggerTimer(t)
self.writeValue(t.ledTriggerFile, "timer")
end
function Module:SetTriggerNone(t)
function Module:setTriggerNone(t)
self.writeValue(t.ledTriggerFile, "none")
end
@@ -92,12 +92,12 @@ function Module:getCurrentTrigger(t)
end
function Module:on(t)
self:SetTriggerNone(t)
self:setTriggerNone(t)
self.writeValue(t.ledBrightnessFile, t.ledMaxBrightness)
end
function Module:off(t)
self:SetTriggerNone(t)
self:setTriggerNone(t)
self.writeValue(t.ledBrightnessFile, 0)
end
@@ -120,7 +120,7 @@ function Module:ledRunFunc(t, currentStatus)
end
elseif t.ledAction1 == 3 then
if not self:getCurrentTrigger(t) then
self:SetTriggerTimer(t)
self:setTriggerTimer(t)
end
end
else
@@ -134,7 +134,7 @@ function Module:ledRunFunc(t, currentStatus)
end
elseif t.ledAction2 == 3 then
if not self:getCurrentTrigger(t) then
self:SetTriggerTimer(t)
self:setTriggerTimer(t)
end
end
end

View File

@@ -4,23 +4,25 @@ local stdlib = require("posix.stdlib")
local unistd = require("posix.unistd")
local Module = {
name = "mod_public_ip",
runPrio = 50,
config = {
noModules = false,
debug = false,
name = "mod_public_ip",
runPrio = 50,
config = {
noModules = false,
debug = false,
serviceConfig = {
iface = nil,
},
},
syslog = function(level, msg) return true end,
writeValue = function(filePath, str) return false end,
readValue = function(filePath) return nil end,
port = 53,
runInterval = 600,
runIntervalFailed = 60,
timeout = 3,
providers = {
syslog = function(level, msg) return true end,
writeValue = function(filePath, str) return false end,
readValue = function(filePath) return nil end,
port = 53,
runInterval = 600,
runIntervalFailed = 60,
runIntervalDNSFailed = 1,
requestAttempts = 2,
timeout = 3,
providers = {
opendns1 = {
name = "opendns1", host = "myip.opendns.com",
server = "208.67.222.222", server6 = "2620:119:35::35",
@@ -52,16 +54,18 @@ local Module = {
port = 53, queryType = "TXT", queryType6 = "TXT",
},
},
ipScript = "",
enableIpScript = false,
status = nil,
_provider = nil,
_qtype = false,
_currentIp = nil,
_enabled = false,
_counter = 0,
_interval = 600,
_DNSPacket = nil,
ipScript = "",
enableIpScript = false,
status = nil,
_provider = nil,
_qtype = false,
_currentIp = nil,
_lastResolvedIp = nil,
_enabled = false,
_counter = 0,
_DNSFalseCounter = 0,
_interval = 600,
_DNSPacket = nil,
}
function Module:runIpScript()
@@ -306,7 +310,7 @@ function Module:decodeMessage(message)
return retTable
end
function Module:resolveIP()
function Module:requestIP()
local res
local qtype = self._qtype and self._provider.queryType6 or self._provider.queryType
local server = self._qtype and self._provider.server6 or self._provider.server
@@ -324,7 +328,7 @@ function Module:resolveIP()
end
else
self.syslog("warning", string.format(
"%s: DNS error when requesting an IP address", self.name))
"%s: UDP error when requesting an IP address", self.name))
end
return res
@@ -334,6 +338,12 @@ function Module:init(t)
if t.interval ~= nil then
self.runInterval = tonumber(t.interval)
end
if t.interval_failed ~= nil then
self.runIntervalFailed = tonumber(t.interval_failed)
end
if t.request_attempts ~= nil then
self.requestAttempts = tonumber(t.request_attempts)
end
if t.timeout ~= nil then
self.timeout = tonumber(t.timeout)
end
@@ -352,10 +362,12 @@ function Module:init(t)
if t.qtype ~= nil then
self._qtype = (tonumber(t.qtype) ~= 0)
end
self._currentIp = nil
self._DNSPacket = nil
self._interval = self.runInterval
self._enabled = true
self._currentIp = nil
self._lastResolvedIp = nil
self._DNSPacket = nil
self._interval = self.runInterval
self._DNSFalseCounter = 0
self._enabled = true
end
function Module:run(currentStatus, lastStatus, timeDiff, timeNow, inetChecked)
@@ -365,33 +377,44 @@ function Module:run(currentStatus, lastStatus, timeDiff, timeNow, inetChecked)
if currentStatus == 0 then
if self._counter == 0 or self._counter >= self._interval or currentStatus ~= lastStatus then
local ip = self:resolveIP()
local ip = self:requestIP()
if not ip then
ip = ""
self._interval = self.runIntervalFailed
ip = ""
self._DNSFalseCounter = self._DNSFalseCounter + 1
if self._DNSFalseCounter >= self.requestAttempts then
self._interval = self.runIntervalFailed
self._DNSFalseCounter = 0
else
self._interval = self.runIntervalDNSFailed
end
else
self._interval = self.runInterval
self._interval = self.runInterval
self._DNSFalseCounter = 0
end
if ip ~= self._currentIp then
self.status = ip
self.syslog(
"notice",
string.format("%s: public IP address %s", self.name, (ip == "") and "Undefined" or ip)
)
if self._counter > 0 then
self:runIpScript()
if ip ~= "" then
if self._counter > 0 and ip ~= self._lastResolvedIp then
self.syslog(
"notice",
string.format("%s: public IP address changed to %s", self.name, ip)
)
self:runIpScript()
end
self._lastResolvedIp = ip
end
end
self._currentIp = ip
self._counter = 0
end
else
self._currentIp = nil
self.status = self._currentIp
self._counter = 0
self._interval = self.runInterval
self._currentIp = nil
self.status = self._currentIp
self._DNSFalseCounter = 0
self._counter = 0
self._interval = self.runInterval
end
self._counter = self._counter + timeDiff
end