This script checks the IP status (in this case ip-25) every 60 seconds (POLLPERIOD) and if it finds it DOWN twice, it will restart the USB modem (in this case DSL-1).
--@author Ion Buraga
--version 1.4
----------------------------------
local abilis = require "abilis"
-- Poll period in seconds
local POLLPERIOD = 60
local Ipres = "ip-25"
local lowres = "DSL-1"
local ClientN = "Customer"
local Sede = "site 1"
local mailuser = "tem@antek.it"
function get_abilis_prompt()
local Success = false
local Error = "NO ERROR"
local StateString = "UNKNOWN"
local CpStream = abilis.cp.open()
if CpStream == nil then
print("CP stream cannot be opened !!!")
Error "ERROR - CP STREAM CANNOT BE OPENED"
return Success, Error, StateString
end
local LineCounter = 0
if CpStream:write("d d "..Ipres.." | state") then
local CpResponse = CpStream:read("l")
while CpResponse do
LineCounter = LineCounter + 1
print(CpResponse)
local First, Last = string.find(CpResponse, "STATE:")
if First ~= nil and Last ~= nil then
local First_2, Last_2 = string.find(CpResponse, "LINK")
if First_2 ~= nil and Last_2 ~= nil then
Success = true
StateString = string.sub(CpResponse, Last + 1, First_2 - 1)
CpStream:close()
return Success, Error, StateString
end
end
CpResponse = CpStream:read("l")
end
Error = "ERROR - PROMPT NOT FOUND"
else
Error = "ERROR - WRITING 'D D IP-X' FAILED"
end
CpStream:close()
return Success, Error, StateString
end
function cp(cmd) -- start of function 'cp'
local s = abilis.cp.open() -- opening of CP stream channel
if s then -- if successfully opened...
if s:write(cmd) then -- ...write a command there
local asw = s:read("l") -- read the line of the result of the written command
while asw do -- repeat until the end of listing is reached
print(asw) -- print line
asw = s:read("l") -- read another line
end
end
s:close() -- close CP stream channel
end
end -- end of function 'cplist'
local function log_cp_command(LogFile, CpCommand)
local CpStream = abilis.cp.open()
if CpStream == nil then
print("CP stream cannot be opened !!!")
return
end
if CpStream:write(CpCommand) then
local CpResp = CpStream:read("l")
while CpResp do
LogFile:write(CpResp,"\r\n")
CpResp = CpStream:read("l")
end
else
end
CpStream:close()
end
local function get_status()
local Success, Error, StateString = get_abilis_prompt()
if Success then
print("State of "..Ipres.." is "..StateString)
State2 = StateString
else
print("Abilis prompt loading failed ! Error: ".. Error)
end
end
local function verify_state()
get_status()
if string.find(State2, "DOWN") then
abilis.cpx.sleep(60)
get_status()
if string.find(State2, "DOWN") then
dt = os.date("*t")
local AbilisLogFile =
"Abilis_Log_"
..dt.year..dt.month..dt.day..
"_"..dt.hour..dt.min..dt.sec..".txt"
local file = io.open(AbilisLogFile, "wb")
if file == nil then
print("File "..AbilisLogFile.." not found !!!")
return
end
log_cp_command(file, "d usbdev" )
log_cp_command(file, "d d "..Ipres.."" )
log_cp_command(file, "d dse "..lowres.."" )
file:close()
-- abilis.cpx.sendmail(<from>, <to>, <subject>, <message>)
mail_retval = abilis.cpx.sendmail(
""..mailuser..""
,""..mailuser..""
,""..ClientN..""..Sede.." report mail"
,""..Ipres.." down"
,AbilisLogFile
)
cp("debug res:"..lowres.." lsn:254")
if mail_retval == 0 then
print("*")
print("* Mail with LOG SENT SUCCESFULLY (retval:"..mail_retval..")")
-- delete the file to don't consume space on system disk
os.remove(AbilisLogFile)
else
print("*")
print("* Mail with LOG FAILED (retval:"..mail_retval..")")
print("* Check log file on system disk instead - filename: "..AbilisLogFile)
-- intentionally don't delete the file to check it via FTP or telnet
end
end
end
end
local function verify_state_after_pollperiod()
while true do
verify_state()
abilis.cpx.sleep(POLLPERIOD)
end
end
--
local function main()
verify_state_after_pollperiod()
end
-- Execute the main function
main()
To pilot digital outputs of RIO device using a LUA Script, see Section 81.2.1, “Example of LUA Script to pilot digital outputs of RIO device”.
This script insert a command on CP (command line of abilis) after a call. It can be useful to activate a specific user preference, change a parameter in the configuration, do a restart, etc.
--- commandbycall.lua Script
--
-- This script insert a command on CP (command line of abilis) after a call
-- author Ion Buraga <buraga@antek.it>
--version 1.0
------------------------------------------------------------
-- call state
local CLOSED = 0
local CALLING = 1
local ALERTING = 2
local ACTIVE = 3
local CLOSING = 4
local LISTENING = 5
-- play state
--local SILENT = 0,
--local PLAYING = 1,
------------------------------------------------------------
-- Name of this script, show in log
local SCRIPTNAME = "comandbycall.lua"
-- Name of DISA/APP service
local DISASERVICE = "entryphone"
-- Poll period in seconds
local POLLPERIOD = 0.5
local abilis = require "abilis"
local CMD = "s p ip-1 descr:BBB"
------------------------------------------------------------
--- Display log message
-- The message is preceded with an automatically generated
-- timestamp.
-- @parammsg Message to be logged
--
local function log(msg)
local dt = os.date("%Y-%m-%d %X")
local sep = " "
print(dt .. sep .. msg)
end
-------------------------------------------------------
local function command() -- start of function 'cp'
local CpStream = abilis.cp.open() -- opening of CP stream channel
if CpStream == nil then
print("CP stream cannot be opened !!!")
else
if CpStream:write(""..CMD.."") then
print(""..CMD.."")
else
log("ERROR inserting CMD")
end
CpStream:close() -- close CP stream channel
end
end
------------------------------------------------------------
--- Wait for incoming call in DISA/APP
-- @param handle DISA/APP handle
--
local function wait_for_incoming_call(handle)
assert(handle > 0)
while true do
local state = abilis.disa.get_state(handle)
if state == CLOSED then
return false
elseif state ~= LISTENING then
return true
else
abilis.cpx.sleep(POLLPERIOD)
end
end
end
------------------------------------------------------------
--- Convert value to string.
-- Nil is converted to empty string, other values are
-- returned unchanged.
-- @param x String or nil
-- @return String
local function tostr(x)
if x ~= nil then
return x
else
return ""
end
end
------------------------------------------------------------
--- Handle incoming call.
-- Wait for incoming call, obtain called number
--
local function handle_incoming_call(handle)
assert(handle > 0)
if wait_for_incoming_call(handle) then
local cg, cd = abilis.disa.get_info(handle)
log("incoming call CG:" .. tostr(cg) .. " CD:" .. tostr(cd))
command()
end
log("closing call")
abilis.disa.close(handle)
end
------------------------------------------------------------
--- Handle incoming calls.
-- Listen on selected DISA/APP service, and process
-- incoming call. And again, forever.
--
local function handle_incoming_calls()
while true do
log("waiting for incoming call")
local handle = abilis.disa.listen(DISASERVICE)
if handle ~= nil then
handle_incoming_call(handle)
else
log("listen function failed")
break
end
end
end
local function main()
log(SCRIPTNAME .. " script started")
handle_incoming_calls()
log(SCRIPTNAME .. " script ended")
end
-- Execute the main function
main()
![]() | Note |
|---|---|
For CTI configuration (DISA service/user, CTIR routing), please see Section 81.2, “Example of I/O management via LUA Script”. |