Код, который вы опубликовали, действителен. Существует не так много причин, по которым это не получится из-за большего количества записей в вашей таблице.
os.execute
Выполнить команду оболочки операционной системы. Это похоже на функцию C system (). Системно-зависимый код состояния возвращается.
Запуск os.execute
запустит арпинг и вернет код выхода. Тогда вы сравниваете это statuscheckIP == 0
a lastcheckIP == 256
. Если раньше, является избыточным. Если true, вы отправляете свое сообщение и продолжаете.
После проработки всех записей вы устанавливаете lastcheckIP в statusCheckIP, и это, вероятно, ваша ошибка. Это должно быть до последнего, если и внутри вашего цикла. Но даже тогда не имеет смысла, если 0
является единственным правильным кодом возврата. Если для lastcheckIP установлено любое другое значение, то оба параметра if никогда больше не будут выполняться.
Либо ваша последняя строка lastcheckIP = statuscheckIP
неверно размещена, lastcheckIP
никогда не инициализировалась равной 256, либо вам следует переосмыслить всю программу.
РЕДАКТИРОВАТЬ:
После понимания намерения предоставленной программы я создал, вероятно, рабочий пример. Это должно показать вам, как легко использовать таблицы в Lua в качестве структур. Я не смог протестировать следующий код.
local WAIT_TIME = 10
local STATUS_CODE_CONNECTED = 0
local STATUS_CODE_NOT_CONNECT = 256 -- not sure about this (return code from arping for failure)
local device_table =
{
["device_name1"] =
{
ip = "<ip address>",
status_code = STATUS_CODE_NOT_CONNECT
},
["device_name1"] =
{
ip = "<ip address>",
status_code = STATUS_CODE_NOT_CONNECT
}
-- , ...
}
while true do
-- check for changed return codes
for device_name, device in pairs(device_table) do
local temp_status_code = os.execute("arping -f -w 3 " .. device.ip)
-- status code changed
if temp_status_code ~= device.status_code then
-- device connected
if temp_status_code == STATUS_CODE_CONNECTED then
local subject = "" .. device_name .. " , ( IP Address " .. device.ip .. ") Connected"
local message = "Connection Alert\nThe device named " .. device_name .. ", with the IP address " .. device.ip .. " has just connected to the WiFi network"
--send email notification
luup.call_action(
"urn:upnp-org:serviceId:SmtpNotification1",
"SendEmail",
{
Recipient_Name = "SomeOne",
Recipient_eMail = "someone@somewhere.com",
Subject = subject,
Message = message
}, 24)
luup.call_action(
"urn:upnporg:serviceId:SmtpNotification1",
"ResetCount",
{ }, 24)
end
-- update last device status_code if changed
device.status_code = temp_status_code
end
end
os.execute("sleep " .. tonumber(WAIT_TIME)) -- wait some time for next check
end
Если я вас неправильно понял, и вы либо не хотите, чтобы эта программа работала постоянно, либо не хотите, чтобы все адреса были в таблице, вам следует спросить еще раз или где-то еще, потому что это не по теме .