The Abilis permits to pilot Output digital line also making phone calls. For that we use a LUA script joined to DISA resource that allows to open Gate#1 connected to Digital Output 1 verifying the calling number.
![]() | Note |
|---|---|
This advanced configuration normally is realized by Second Level Abilis support. Bellow are reported only the resource configurations and a short logical description. |
1 - The Abilis verify to receive a call to the called number 0213456789 from the calling numbers recognized in list CallingOK, in this case is sent a call to the DISA Service with called Number 91.
[13:47:55] ABILIS_CPX: d ctir pr:3
Last change: 01/02/2015 14:20:26 CET
---+-----+-----------------+---------+--------------------+--------------------
PR |[DESCR]
|TYPE |POI/SR [SR] |POO/DS |CDI |CDO
ACT|NEXT |LAST |EEC |T301|CGI |CGO
EDT|SP |SC |DJ |MJ |FMDJ|FMMJ|SDI |SDO
|SPOUT|SCOUT|DJOUT|MJOUT|LCS |LCST|SGI |SGO
| |BCO |RGI |RGO
|FMRLY|FAXSP|MODSP|FMLVL|ECM |UDT |IG |OG |SG |DL |DH
|CODERS
|CODERSOUT
|TI1 .. TI5
-------------------------------------------------------------------------------
3 CtoD * CtiDisa 0213456789 91
NO ANY NO Dft 'CallingOK' *
64000 Sys * * Sys Sys * *
-------------------------------------------------------------------------------
2- The DISA resource, configured like below, receive the call with called number 91. The DISA SERVICE:entryphone refuse the call but recognized the number that is motorized by LUA Script.
[13:47:16] ABILIS_CPX:d p ctidisaRES:CtiDisa ------------------------------------------------------------------- Run DESCR:Direct_Inward_System_Access LOG:NO ACT:YES sesnum:10 RESTRICTED-CALLING:NO PROVIDE-SG:YES CALL-ABORT:** CALL-REPEAT:** PIN-START:* PIN-END:# NPOO-CT:SYS CTIP-TYPE:NET-PRIVATE BUSY-NOCHAN:YES WDIR:C:\APP\DISA\ [13:47:19] ABILIS_CPX:d ctidisa userTotal number of users:1 ------------------------------------------------------------------------------- USER:Anonymous PIN: # |MAX-CALLS: NOMAX |PERMIT: SERVICE SERVICE: AUTO |CB: NO |DENY: # CGI: - ------------------------------------------------------------------------------- [13:47:22] ABILIS_CPX:d ctidisa service:entryphoneTotal number of services:2 ------------------------------------------------------------------------------- SERVICE:entryphone DESCR: MODE: APP |INTRO-STATE: CREQ |INTRO: MAX-CALLS: NOMAX |CONN-DELAY: 6 |WELCOME: BC: Speech |DIAL-TOUT: 30 |INITDIAL: CB-CGO: # |BYE: # CDI: 9* CGI: # -------------------------------------------------------------------------------
3- The script ephone-cd.lua verify the last digit of the called number and pilot the corresponding Digital Output. In this example the called number is 91 then the driven Digital Output is D-OUT: 1.
[13:46:52] ABILIS_CPX: d p script
RES:Script --------------------------------------------------------------------
Run DESCR:Scripting_service
LOG:NO ACT:YES bg-sesnum:4 fg-sesnum:4
wdir:C:\APP\SCRIPT\
- Background scripts ---------------------------------------------------
id:0 startup:YES file:ephone-cd.lua
id:1 startup:NO file:
id:2 startup:NO file:
id:3 startup:NO file:
![]() | Tip |
|---|---|
To manage the Lua script by web interface follows the chapter Section 69.23, “LUA scripts” |
4- To open GATE#1 connected to D-OUT:1 Mfio is configured to generate a Pulse of 250 ms.
[13:46:44] ABILIS_CPX: d p mfio
RES:MfIo ----------------------------------------------------------------------
Run DESCR:Abilis_Multi_Function_IO_Interface
LOG:NO ACT:YES
-------+-------------------- Digital Input lines -----------------------
D-IN: | [DESCR:]
-------+----------------------------------------------------------------
-------+-------------------- Digital Output lines ----------------------
D-OUT: | [DESCR:]
| MODE: PULSE-T: PULSE-GAP:
-------+----------------------------------------------------------------
1 | GATE#1
| PULSE 250 1000
2 | GATE#2
| PULSE 250 1000
3 | PULSE 90000 1000
------------------------------------------------------------------------
LUA Script ephone-cd.lua :
------------------------------------------------------------
--- ephone-cd.lua Script
--
-- This script waits for incoming call and makes a 250 ms
-- pulse on the selected digital output line depending on
-- the called number.
--
-- @author Tomas Klinkovsky <tklink@antek.it>
------------------------------------------------------------
local abilis = require "abilis"
------------------------------------------------------------
-- 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 = "ephone-cd.lua"
-- Name of DISA/APP service
local DISASERVICE = "entryphone"
-- GPIO resource type
local GPIORESTYPE = "MFIO"
-- GPIO resource instance
local GPIORESINST = 1
-- GPIO pulse duration
local PULSEDURATION = 0.25
-- Poll period in seconds
local POLLPERIOD = 0.5
------------------------------------------------------------
--- 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
------------------------------------------------------------
--- Handle of selected GPIO device
--
local GPIOHANDLE = abilis.gio.get_device_handle(GPIORESTYPE, GPIORESINST)
------------------------------------------------------------
--- Generate 250 ms pulse on selected GPIO line
-- @param line Digital output line number
--
local function pulse_line(line)
abilis.gio.set_digital_output(GPIOHANDLE, line, 1)
abilis.cpx.sleep(PULSEDURATION)
abilis.gio.set_digital_output(GPIOHANDLE, line, 0)
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
------------------------------------------------------------
--- Map last digit of called number to GPIO line
--
local MAP = {
["1"] = 1,
["2"] = 2,
["3"] = 3,
["4"] = 4,
}
------------------------------------------------------------
--- Convert called number to GPIO line (or nil).
-- @param number Called phone number
-- @return GPIO line number
--
local function get_line_for_number(number)
if number ~= nil then
local last_digit = number:sub(-1)
return MAP[last_digit]
else
return nil
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, find the
-- corresponding GPIO line, and generate pulse there.
-- @param handle DISA/APP handle
--
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))
local line = get_line_for_number(cd)
if line ~= nil then
log("generating pulse on line " .. line)
pulse_line(line)
else
log("unsupported called number")
end
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
------------------------------------------------------------
--- Create session object, and handle incoming calls from
-- DISA/APP.
--
local function main()
log(SCRIPTNAME .. " script started")
handle_incoming_calls()
log(SCRIPTNAME .. " script ended")
end
-- Execute the main function
main()
![]() | Note |
|---|---|
This script can also be used for an GPIO device, it's necessary
to modify only this line " |
The Abilis permits to pilot Output digital line and Relay switch
ports making phone calls. For that we use a LUA script joined to DISA
MODE:APP resource that allows to
open Gate#1 connected to Relay switch ports 1-A, 1-B. By enabling the
digital output line (ON) a contact is closed that short-circuits the
respective A and B pins.
![]() | Note |
|---|---|
This advanced configuration normally is realized by Second Level Abilis support. Bellow are reported only the resource configurations and a short logical description. |
![]() | Tip |
|---|---|
Interesting chapters: |
1 - The Abilis verify to receive a call to the called number 40x,
for example 401 to pilot
D-OUT:1.
[13:47:55] ABILIS_CPX: d ctir pr:3
Last change: 01/02/2015 14:20:26 CET
---+-----+-----------------+---------+--------------------+--------------------
PR |[DESCR]
|TYPE |POI/SR [SR] |POO/DS |CDI |CDO
ACT|NEXT |LAST |EEC |T301|CGI |CGO
EDT|SP |SC |DJ |MJ |FMDJ|FMMJ|SDI |SDO
|SPOUT|SCOUT|DJOUT|MJOUT|LCS |LCST|SGI |SGO
| |BCO |RGI |RGO
|FMRLY|FAXSP|MODSP|FMLVL|ECM |UDT |IG |OG |SG |DL |DH
|CODERS
|CODERSOUT
|TI1 .. TI5
--------------------------------------------------------------------------------
3 [Management_I/O]
VOICE ** # # Disa 40? *
NO ANY NO Dft * *
64000 Sys Sys Sys Sys Sys * *
--------------------------------------------------------------------------------
2- The DISA resource, configured like below, receive the call with called number 401. The DISA SERVICE:RIO refuse the call but recognized the number that is motorized by LUA Script.
[13:47:16] ABILIS_CPX:d p ctidisaRES:CtiDisa ------------------------------------------------------------------- Run DESCR:Direct_Inward_System_Access LOG:NO ACT:YES sesnum:10 RESTRICTED-CALLING:NO PROVIDE-SG:YES CALL-ABORT:** CALL-REPEAT:** PIN-START:* PIN-END:# NPOO-CT:SYS CTIP-TYPE:NET-PRIVATE BUSY-NOCHAN:YES WDIR:C:\APP\DISA\ [13:47:19] ABILIS_CPX:d ctidisa userTotal number of users:1 ------------------------------------------------------------------------------- USER:Anonymous PIN: # |MAX-CALLS: NOMAX |PERMIT: SERVICE SERVICE: AUTO |CB: NO |DENY: # CGI: - ------------------------------------------------------------------------------- [13:47:22] ABILIS_CPX:d ctidisa service:rioTotal number of services:2 ------------------------------------------------------------------------------- SERVICE:RIO DESCR: MODE: APP |INTRO-STATE: CREQ |INTRO: MAX-CALLS: NOMAX |CONN-DELAY: 0 |WELCOME: BC: Speech |DIAL-TOUT: 30 |INITDIAL: CB-CGO: # |BYE: # CDI: 40* CGI: # -------------------------------------------------------------------------------
3- The script ephone-cd.lua
verify the last digit of the called number and pilot the corresponding
Digital Output. In this example the called number is 401 then the driven
D-OUT:1.
[13:46:52] ABILIS_CPX: d p script
RES:Script --------------------------------------------------------------------
Run DESCR:Scripting_service
LOG:NO ACT:YES bg-sesnum:4 fg-sesnum:4
wdir:C:\APP\SCRIPT\
- Background scripts ---------------------------------------------------
id:0 startup:YES file:gate.lua
id:1 startup:NO file:
id:2 startup:NO file:
id:3 startup:NO file:
![]() | Tip |
|---|---|
To manage the Lua script by web interface follows the chapter Section 69.23, “LUA scripts” |
4- To open Gate#1 connected to
D-OUT:1 RIO device is configured
to generate a Pulse of 500 ms.
[13:46:44] ABILIS_CPX: d p rio
RES:Rio-1 ---------------------------------------------------------------------
Run DESCR:RIO
LOG:DS ACT:YES
- IpConf parameters (Read Only) ---------------------------------------
MAC:B8-27-EB-12-F7-FB IPRES:Ip-1
IPADD:192.168.001.222 MASK:255.255.255.000 GW:192.168.001.001
-------+-------------------- Digital Input lines -----------------------
D-IN: | [DESCR:]
-------+----------------------------------------------------------------
-------+-------------------- Digital Output lines ----------------------
D-OUT: | [DESCR:]
| MODE: PULSE-T: PULSE-GAP: START: DFT:
-------+----------------------------------------------------------------
1 | Gate#1
| PULSE 500 500 LAST OFF
-------+-------------------- Analog Input lines ------------------------
A-IN: | [DESCR:]
| UNIT: MIN: MAX: ALM-LO: ALM-HI: HYST: UPD: POLL:
-------+----------------------------------------------------------------
-------+-------------------- Analog Output lines -----------------------
A-OUT: | [DESCR:]
| UNIT: MIN: MAX: ALM-LO: ALM-HI: HYST: UPD: POLL:
| CUT-LO: CUT-HI: START: DFT:
-------+----------------------------------------------------------------
LUA Script gate.lua :
--- gate.lua Script
--
-- This script waits for incoming call and makes a 500 ms
-- pulse on the selected digital output line depending on
-- the called number.
-- author Ion Buraga <buraga@antek.it>
local abilis = require "abilis"
------------------------------------------------------------
-- 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 = "gate.lua"
-- Name of DISA/APP service
local DISASERVICE = "RIO"
-- GPIO resource type
local GPIORESTYPE = "RIO"
-- GPIO resource instance
local GPIORESINST = 1
-- GPIO pulse duration
local PULSEDURATION = 0.5
-- Poll period in seconds
local POLLPERIOD = 0.5
------------------------------------------------------------
--- 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
------------------------------------------------------------
--- Handle of selected GPIO device
--
local GPIOHANDLE = abilis.gio.get_device_handle(GPIORESTYPE, GPIORESINST)
------------------------------------------------------------
--- Generate 250 ms pulse on selected GPIO line
-- @param line Digital output line number
--
local function pulse_line(line)
abilis.gio.set_digital_output(GPIOHANDLE, line, 1)
abilis.cpx.sleep(PULSEDURATION)
abilis.gio.set_digital_output(GPIOHANDLE, line, 0)
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
------------------------------------------------------------
--- Map last digit of called number to GPIO line
--
local MAP = {
["1"] = 1,
["2"] = 2,
["3"] = 3,
["4"] = 4,
["5"] = 5,
["6"] = 6,
["7"] = 7,
["8"] = 8,
}
------------------------------------------------------------
--- Convert called number to GPIO line (or nil).
-- @param number Called phone number
-- @return GPIO line number
--
local function get_line_for_number(number)
if number ~= nil then
local last_digit = number:sub(-1)
return MAP[last_digit]
else
return nil
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, find the
-- corresponding GPIO line, and generate pulse there.
-- @param handle DISA/APP handle
--
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))
local line = get_line_for_number(cd)
if line ~= nil then
log("generating pulse on line " .. line)
pulse_line(line)
else
log("unsupported called number")
end
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
------------------------------------------------------------
--- Create session object, and handle incoming calls from
-- DISA/APP.
--
local function main()
log(SCRIPTNAME .. " script started")
handle_incoming_calls()
log(SCRIPTNAME .. " script ended")
end
-- Execute the main function
main()
![]() | Note |
|---|---|
This script can also be used for an RVS device, it's necessary
to modify only this line " |