You are on page 1of 27

AAF to AirVantage Tutorial

[7.0]
[August 2014]
Important Notice
Due to the nature of wireless communications, transmission and reception of data can never be
guaranteed. Data may be delayed, corrupted (i.e., have errors) or be totally lost. Although significant
delays or losses of data are rare when wireless devices such as the Sierra Wireless modem are used
in a normal manner with a well-constructed network, the Sierra Wireless modem should not be used
in situations where failure to transmit or receive data could result in damage of any kind to the user or
any other party, including but not limited to personal injury, death, or loss of property. Sierra Wireless
accepts no responsibility for damages of any kind resulting from delays or errors in data transmitted or
received using the Sierra Wireless modem, or for failure of the Sierra Wireless modem to transmit or
receive such data.

Safety and Hazards


Do not operate the Sierra Wireless modem in areas where blasting is in progress, where explosive
atmospheres may be present, near medical equipment, near life support equipment, or any
equipment which may be susceptible to any form of radio interference. In such areas, the Sierra
Wireless modem MUST BE POWERED OFF. The Sierra Wireless modem can transmit signals that
could interfere with this equipment. Do not operate the Sierra Wireless modem in any aircraft, whether
the aircraft is on the ground or in flight. In aircraft, the Sierra Wireless modem MUST BE POWERED
OFF. When operating, the Sierra Wireless modem can transmit signals that could interfere with
various onboard systems.
Note: Some airlines may permit the use of cellular phones while the aircraft is on the ground and the door
is open. Sierra Wireless modems may be used at this time.

The driver or operator of any vehicle should not operate the Sierra Wireless modem while in control of
a vehicle. Doing so will detract from the driver or operator’s control and operation of that vehicle. In
some states and provinces, operating such communications devices while in control of a vehicle is an
offence.

Limitations of Liability
This manual is provided “as is”. Sierra Wireless makes no warranties of any kind, either expressed or
implied, including any implied warranties of merchantability, fitness for a particular purpose, or
noninfringement. The recipient of the manual shall endorse all risks arising from its use.
The information in this manual is subject to change without notice and does not represent a
commitment on the part of Sierra Wireless. SIERRA WIRELESS AND ITS AFFILIATES
SPECIFICALLY DISCLAIM LIABILITY FOR ANY AND ALL DIRECT, INDIRECT, SPECIAL,
GENERAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES INCLUDING,
BUT NOT LIMITED TO, LOSS OF PROFITS OR REVENUE OR ANTICIPATED PROFITS OR
REVENUE ARISING OUT OF THE USE OR INABILITY TO USE ANY SIERRA WIRELESS
PRODUCT, EVEN IF SIERRA WIRELESS AND/OR ITS AFFILIATES HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES OR THEY ARE FORESEEABLE OR FOR CLAIMS BY ANY
THIRD PARTY.
Notwithstanding the foregoing, in no event shall Sierra Wireless and/or its affiliates aggregate liability
arising under or in connection with the Sierra Wireless product, regardless of the number of events,
occurrences, or claims giving rise to liability, be in excess of the price paid by the purchaser for the
Sierra Wireless product.

Rev [7.0] [August 2014] 2


Patents
This product may contain technology developed by or for Sierra Wireless Inc.
This product includes technology licensed from QUALCOMM®.
This product is manufactured or sold by Sierra Wireless Inc. or its affiliates under one or more patents
licensed from InterDigital Group and MMP Portfolio Licensing.

Copyright
© 2013 Sierra Wireless. All rights reserved.

Trademarks
Sierra Wireless™, AirCard™, AirPrime™, AirLink™, AirVantage™, Watcher™ and the Sierra Wireless
logo are trademarks of Sierra Wireless.
Windows® and Windows Vista® are registered trademarks of Microsoft Corporation.
Macintosh and Mac OS are registered trademarks of Apple Inc., registered in the U.S. and other
countries.
®
QUALCOMM is a registered trademark of QUALCOMM Incorporated. Used under license.
Other trademarks are the property of the respective owners.

International Contact Information


AirLink Sales airlinksales@sierrawireless.com
1
AirLink Support support@sierrawireless.com
1
AirLink RMA Repairs repairs@sierrawireless.com
AirLink Online Support Knowledgebase www.sierrawireless.com/Support/SupportCenter
AirLink Software Downloads www.sierrawireless.com/Support/Downloads

1
If you purchased your product from an AirLink Distributor or Reseller, please contact them for
first line technical support.

Rev [7.0] [August 2014] 3


Sierra Wireless Headquarters
Contact Information
Phone: +1-604-232-1488
Sales Headquarters: Hours: 8:00 AM to 5:00 PM Pacific Time
E-mail: sales@sierrawireless.com
Sierra Wireless
13811 Wireless Way
Post:
Richmond, BC
Canada V6V 3A4
Fax: 1-604-231-1109
Web: www.sierrawireless.com

Consult our website for up-to-date product descriptions, documentation, application notes, firmware
upgrades, troubleshooting tips, and press releases: www.sierrawireless.com

Rev [7.0] [August 2014] 4


Content

1. APPLICATION DESCRIPTION ............................................................................ 6


2. DEVICE SETUP.................................................................................................... 6
3. PLATFORM SETUP ............................................................................................. 6
4. APPLICATION SETUP ......................................................................................... 7
4.1. Data Model setup .............................................................................................................. 7
4.2. Script ............................................................................................................................... 12
4.3. Create an AirVantage Application Package .................................................................... 13

5. LOAD AND ASSIGN APPLICATION ON AV4 ................................................... 14


5.1. Load the application on the platform ............................................................................... 14
5.2. Assign the application to your system ............................................................................. 14

6. VIEW DATA ON THE PLATFORM .................................................................... 15


6.1. Timeline View .................................................................................................................. 15
6.2. Application View .............................................................................................................. 15

7. REMOTELY CONFIGURE THE APPLICATION ................................................ 17


7.1. Create a template ............................................................................................................ 17
7.2. Assign a template ............................................................................................................ 18
7.3. Send a Command to your application ............................................................................. 20

8. APPENDIX ......................................................................................................... 22
8.1. Uncommented source code ............................................................................................ 22
8.2. Full commented source code .......................................................................................... 24
8.3. Link to AAF APIs ............................................................................................................. 27

Rev [7.0] [August 2014] 5


1. Application Description
This document will guide you in creating an ALEOS AF application that leverages the AirVantage
platform to transmit, receive and remotely store data from your Airlink device.
A data model that defines the data elements will be designed, and the application with the data model
will be exported and uploaded to the AirVantage portal.
That application can be remotely installed from the platform onto your fleet of devices.

2. Device Setup
Check that these items have been done:
• Latest Aleos firmware version installed on your device
• Latest Developer Studio for ALEOS installed and Remote Explorer View connected to your
device (Window>Open Perspective>Remote Explorer View).
• With ACEmanager or AVMS:
- enable AAF (menu Applications>Aleos Application Framework)
- enable SNTP (menu Services>Time (SNTP))

3. Platform Setup
Check that these items have been done:
• Device registered and appearing in the monitor tab
• M3DA password has been configured.
You will find the default password on the device locally in ACEmanager, menu
Applications>Aleos Application Framework>Advanced (menu will be available only if AAF has
been enabled). Copy it and paste it in the platform into menu
Inventory>YourDevice>Edit>Credentials(”locker”icon)>M3DA Password, then save.
This step is needed in order to execute the authentication to the platform for the install job in
forth-coming section.

Rev [7.0] [August 2014] 6


4. Application Setup
Open the Studio and create a New Lua Embedded Project in Developer Studio:
• File>New>Lua Embedded Project
• Name it, e.g., "HelloAirVantage"
• Click Next and then Finish

4.1. Data Model setup


Right click on your project and create a new Data Model

We will now add variables, command, and settings to the Asset Model.
Double click on the “datamodel.data” file in your script explorer view. A new window with the data
model opens. Right click on the Asset Container and select New Child > Asset

Rev [7.0] [August 2014] 7


Right click on your Asset and select “show Properties View”.
In the properties view, give it a default label, e.g. "HelloAV_Label". Add a unique ID too, e.g. "nmp".

Now add variables to the asset.


A variable is a parameter of the embedded application that is from the platform end in read only
access.

Set the Default Label to e.g. "Embedded_App_LoopCount", Description: "Total number of loop
iterations", Path: "uplink.CountPath", Type: "int"

Similarly add a second variable with Path “uplink.FloatingPointPath” and add the info as below:

Rev [7.0] [August 2014] 8


Add a third variable with Path “uplink.StringPath" and add the info as below:

Add a fourth variable with Path "uplink.StatePath" and add the info as below:

Now Add a Command to the model.


Upon reception from the command script will execute the user provided call back function, which will
perform the corresponding customer given process.

Add the info as below:

Then select your command by highlighting it, and do right click > New Child and add a command
parameter:

Rev [7.0] [August 2014] 9


Fill in the info as below:

Note the Id of your command parameter which will be part of the command path and allow you to
access it.

Finally add Settings to the asset.


A Setting is a parameter of the embedded application that is from the platform end in read and write
access.

Fill in the info:

Rev [7.0] [August 2014] 10


Add a second Setting which this time will be defined as a string:

Fill in the info:

That finishes the Data Model, now save it.

Beware that all default values provided in the data model will be only used to populate the
corresponding fields on the platform GUI.
The default values from the data model are not reflected on the LUA script side.
If you need/want to provide default values on the script side, do such in the script as well.

Rev [7.0] [August 2014] 11


4.2. Script
For more clarity this section will detail only how the script is set up. For the actual Lua script see
Appendix Section, then in your Script Explorer under the HelloAirVantage src folder, open the
main.lua file and copy paste it.

Needed libraries.
- AirVantage Library: contains all the functions that are used for the interaction between the
device and the server.
- Scheduler: allows to execute, call, schedule and link the different tasks related to the
application.
- Device Tree: allows to access to the device parameters. Required in this case for accessing
the asset variables, settings and command.
- System: library needed upon call of restart function.

Main function.
What we want to achieve through this application is collecting locally data into a queue, then sending
this data to the platform at a given period using a policy. This implies 3 things:
- generating data
- collecting data
- creating a custom policy

Generating data:
Generating data is achieved through increment of a counter and generation of a random number.
Note a seed (based on OS time) is used to initialize the random algorithm in order to make it more
robust.

Collecting data is achieved through pushing into a queue the generated data and the fix variables
which do not change upon time (Embedded_App_String and Embedded_App_State).
Note that in order to assign a value to a Variable or a Setting in your application tree you must assign
this value to the corresponding Path in the application tree. For instance in order to give value ‘1’ to
Variable ‘Embedded_App_State’, you must assign this value to the corresponding Variable Path in the
application tree: helloasset.tree.uplink.StatePath = 1. Do not use the Variable/Setting name or
Default Label.

This whole process is done within a “while(true)” loop which makes in sort data is generated and
collected continuously. At the end of each loop a 3 minutes timer is set in order to wait before
triggering the next instance of the loop.

Creating a custom policy:


Predefined Policies allow flushing data from a queue to the platform either immediately, hourly, daily,
weekly, monthly or yearly. To better fit this demo and see live on the platform data being sent
regularly by the application, we will create a custom policy allowing to flush queued data every 15
minutes.
This policy, like any custom policy will become part of the applicative device tree (note it is erased
upon factory reset). Unit has to be rebooted upon policy creation. A “if” loop at the beginning of the
main verifies whether the policy exists on the device running the application, and if not, does create it
and restarts the unit.

Rev [7.0] [August 2014] 12


Rest of the main function deals with:
- Declare and define command callback. The command callback will print the received
message on the console or in the Admin logs.
- initialize the link to the Agent for communication with the server:
- create a new instance of an asset and tie it to our above defined asset ID. This will allow that
data are sent to the asset tree.
- create a downlink table in the downlink tree, where to store data received from the platform
(“helloasset.tree.downlink.IntegerPath = {}”).
- register the Asset with the Agent (“helloasset:start()”). Now data can be sent and received.
- sending State and time to the platform as a one shot communication upon application start.

4.3. Create an AirVantage Application Package


In order to load your application onto the platform you will need to create the corresponding
AirVantage Application Package. Right click on the project and select Export > Sierra Wireless >
AirVantage Application Package

Select “Next” and enter a Package Version. Browse to an output directory, select Finish. This creates
a zip file with the uploadable package, containing script of the application as well as Data Model and
other information pertaining to the communication protocol between the application and the platform.

Rev [7.0] [August 2014] 13


5. Load and assign application on AV4

5.1. Load the application on the platform


On the Portal navigate to “Develop>My Apps” tab.

Click the Release button (blue vertical arrow) to open a dialog box to select your exported package.
A released application is an application loaded on the platform and available in the application list.
Still this application is not available for deployment onto live units. In order to have the application
available in the different menus for attribution to devices, you must publish it.
You can publish the application from the release prompt using the check box available in the
advanced menu, or you can publish it afterwards by selecting your application in the list and using the
Publish button from the main page.

The application is now available throughout your company.

5.2. Assign the application to your system


This step is needed for you to visualize your data and application from the system details panel as
shown in section 6.2. We are assuming here you have created a system on the platform side.
Select your system from Inventory tab and edit it. In the “Applications” field start typing application
name and the dynamic filter will automatically populate it. Save the configuration.

This step can also be executed by simply remotely installing your application from the platform onto
your system (from Monitor tab select “More” button and “Install application”).

Rev [7.0] [August 2014] 14


6. View data on the Platform
We are assuming here you have installed the application either
- OTA from the platform. To do so go to Monitor tab, tick the check box in front of the device(s)
you want to upgrade and select the “More>install application” button from the button bar.
- or locally from the studio using the File>Export>SierraWireless>LocalApplicationPackage
menu.

6.1. Timeline View


The timeline view allows to see all data sent from the unit to the platform, including Applicative data
(AAF data), Aleos Reports, or any raw data sent from the AAF application even not defined in any
data model. Information is displaid in a chronological manner. To access Timeline view, select your
system and hit “TimeLine” button in the button bar at the top of your system details.

M3DA stamp will show AAF application related activity.


Note the stamp marked “0” data reported is a checkin where embedded applications checks the
platform for any pending jobs to execute, whereas stamp marked “20” is a report from the AAF
application to the platform containing 20 data points.
MSCI stamp will show Aleos Reports or synchronizations with corresponding data points.

6.2. Application View


The Application view will display exclusively AAF application data as declared in the Data Model.
It will display all Variables and Settings defined in it and only those variables and Settings.

If your application contains variables which are not declared in the Data Model or if path provided in
the push API of the script is not matching the one populated in the Data Model, then your
Variable/Setting will not appear in this view.

Rev [7.0] [August 2014] 15


Beware also you must create your data model under the root of your project in the studio script
explorer. If you have created the data model under, let’s say the lua file (by right cliking on the lua file
and creating a new data model, instead of right clicking on your project) then the data model created
upon export as in step 4.3 will not contain any information of your variables/settings and they will not
appear neither in the application view.

To access the application view, select your system, then to the bottom of the detail page, browse to
your application and click on the hyperlink.

Rev [7.0] [August 2014] 16


7. Remotely Configure the application

7.1. Create a template


A template will allow you to write a particular value to the Setting on the application running onto the
device. Only Settings as defined in the Data Model will be accessible. All other data from the
embedded application not defined as a Setting in the Data Model will not be available for template
creation.

To create a template go to Configure>Templates tab and hit the “create” button (‘+’ icon).
In the Application/Firmware field start typing your application name and select it and hit “continue”
(note process for template creation is the same for creating a template for an application or an Aleos
FW, hence the common field).

After this you will be prompted to set the value of the Setting(s) available in your application. Populate
the desired value, check the Setting box, and save the template.
Template will now appear in the Template list in Configure>Templates tab.

Rev [7.0] [August 2014] 17


7.2. Assign a template
To remotely write a Setting to your application you will simply need to assign the corresponding
template to your system.
Select your system in the Monitor>System list (or go in your System Details view) and hit the “Apply
Template” button from the button bar. You will be prompted to select the desired template, browse to
the above created one, and hit “Apply”.
Do uncheck the Reboot box in order to keep logs on your Studio console showing Setting value
before and after change.

Template will be applied upon next connection of your system to the platform, as defined in the
Configure Communication menu. Note that in the case your system is equipped with reachable SIM
cards / IPs and you have configured the platform with its IP / FQDN, then template can be
immediately pushed to your device.

Starting Aleos 4.3.6 a dedicated GUI button in AceManager is available allowing to trigger connection
on the fly to the AirVantage platform. Use the connect button in menu Services>AVMS>AAF if you do
not want to wait until next scheduled connection.

Rev [7.0] [August 2014] 18


User can follow execution of the job from the Monitor>Operation tab or from the Sytem Operation
View within the System tab:

In order to check the new applied setting, after the template has been executed either go on the
platform to the configure application view or check on the Studio in the console logs, or in the admin
logs of AceManager, application subsystem.
More information on accessing the console logs and using debug mode can be found at:
http://developer.sierrawireless.com/en/Resources/Resources/AirLink/ALEOS_AF/Tutorial_AAF_Gettin
g_Started.aspx

Studio Console output upon Setting appliance:

Rev [7.0] [August 2014] 19


7.3. Send a Command to your application
To remotely send a command to your application, select “More>Custom Command” button either from
the Monitor>Systems page or from your system detail page. Then you will be prompted to select the
corresponding application and command / parameter.

Upon next connection of the device to the platform, command will be executed. In our case command
will trigger the printing of the Message content onto the console in the Studio (in case application
executed in run mode) or in the AceManager Admin logs if application is installed and running on the
device.

Here again use the connect button in menu Services>AVMS>AAF if you do not want to wait until next
scheduled connection.

Rev [7.0] [August 2014] 20


Studio Console output upon Command execution:

Rev [7.0] [August 2014] 21


8. Appendix
8.1. Uncommented source code
In order to show how little coding is needed, below is the plain uncommented code of this demo:

local sched = require 'sched'


local airvantage = require "airvantage"
local dev = require 'devicetree'
local sys = require 'system'
local count = 0

----------------------------------------------------------------------------------
local function PrintCallback (assetInstance, commandArgumentsList,
path_commands_PrintMessage)
print ("inside PrintCallback, new message received:")

print("command path:", path_commands_PrintMessage)

-- Note the Command Parameter Id (in our case "Message") after argument
"commandArgumentsList"
-- This is the Id as defined in the command parameter of the command, within the
DataModel
print("command message:", commandArgumentsList.Message)

-- send log to platform


local message = "From Command Callback, command path: " ..
path_commands_PrintMessage
log ("Hello AV Embedded APP log","DEBUG", message)

-- send log to platform


local message = "From Command Callback, command message: " ..
commandArgumentsList.Message
log ("Hello AV Embedded APP log","DEBUG", message)

return "ok"
end

----------------------------------------------------------------------------------
local function main ()
dev.init()
sys.init()

local value, table = dev.get ('config.data.policy.15mnpolicy.period')


if value == nil
then
dev.set('config.data.policy.15mnpolicy',{period = 900})
print ("rebooting")
sys.reboot()
end

local st,err = airvantage.init()


if not st
then
log("MAIN","ERROR","Cannot initialize av lib %s", err)
return
end

Rev [7.0] [August 2014] 22


local helloasset = airvantage.newAsset("nmp")
helloasset.tree.commands.PrintMessage = PrintCallback
helloasset.tree.downlink = {}
helloasset.tree.downlink.IntegerPath = 0
helloasset.tree.downlink.StringPath = "DefaultString"

helloasset:start()
helloasset:pushdata("uplink", {StatePath=1, timestamp=os.time()}, "now")

math.randomseed(os.time())

while true do
count = count + 1
local randomnumber = math.random()
helloasset:pushdata("uplink", {CountPath=count,
FloatingPointPath=randomnumber,
StringPath= "Hello AirVantage from my embedded app",
StatePath=1,
timestamp=os.time()}, "15mnpolicy")

print ("loop iteration number", count)


print ("current value of my integer Setting:",
helloasset.tree.downlink.IntegerPath)
print ("current value of my string Setting :",
helloasset.tree.downlink.StringPath)

sched.wait(180)
end

end

sched.run(main)
sched.loop()

Rev [7.0] [August 2014] 23


8.2. Full commented source code
local sched = require 'sched'
local airvantage = require "airvantage"
local dev = require 'devicetree'
local sys = require 'system'

local count = 0

----------------------------------------------------------------------------------
----------------
local function PrintCallback (assetInstance, commandArgumentsList,
path_commands_PrintMessage)
print ("inside PrintCallback, new message received:")

print("command path:", path_commands_PrintMessage)

-- Note the Command Parameter Id (in our case "Message") after argument
"commandArgumentsList"
-- This is the Id as defined in the command parameter of the command, within the
DataModel
print("command message:", commandArgumentsList.Message)

-- send log to platform


local message = "From Command Callback, command path: " ..
path_commands_PrintMessage
log ("Hello AV Embedded APP log","DEBUG", message)

-- send log to platform


local message = "From Command Callback, command message: " ..
commandArgumentsList.Message
log ("Hello AV Embedded APP log","DEBUG", message)

return "ok"
end

----------------------------------------------------------------------------------
----------------
local function main ()

-- define a custom push policy


-- To be Noted predefined push policies are hourly, daily, monthly and yearly
-- To better fit this sample need, we will define a 15 minutes pace push policy
-- Note as well the policy is defined by the AAF app onto the device tree.
-- This means will be persisted once created and available for all others app
-- or Aleos on the target unit
-- System needs to be rebooted upon creation, then app restarts, checks whether
-- or not policy exists, then keeps on executing the script

dev.init()
sys.init()

local value, table = dev.get ('config.data.policy.15mnpolicy.period')


-- print ("push policy period read from device tree: ", value)
-- p(table)
if value == nil
then
dev.set('config.data.policy.15mnpolicy',{period = 900})

Rev [7.0] [August 2014] 24


print ("rebooting")
sys.reboot()
end

-- initialize AirVantage library


-- do output the error number in case of issue during initialization
-- (will cause the application to not start)
local st,err = airvantage.init()
if not st
then
log("MAIN","ERROR","Cannot initialize av lib %s", err)
return
end

-- define an asset. An asset is a set of data, actions or variables gathered


-- under a same entity
-- Corresponding data model has to be as well defined separately in the
-- datamodel.data
local helloasset = airvantage.newAsset("nmp")

-- define what the application will do upon reception of command from the
platform
helloasset.tree.commands.PrintMessage = PrintCallback

-- create a downlink table in the downlink tree, where to store data


received from the platform
-- (typically those data will be new template values)
helloasset.tree.downlink = {}

-- set a default value to integer that is going to be printed in the cyclic


loop below
-- that integer is declared as a Setting and, as part of this demo, is
subject to be modified OTA from a template assignation from the platform
-- Do the same for the string setting.
helloasset.tree.downlink.IntegerPath = 0
helloasset.tree.downlink.StringPath = "DefaultString"

-- Before data can be sent or received, the asset must be started


-- Beware if asset not started, app will be running but data will never be sent to
the platform
helloasset:start()

-- push state and time to the AirVantage platform as a one shot


communication upon application start
helloasset:pushdata("uplink", {StatePath=1, timestamp=os.time()}, "now")

-- initialize random generator using seed (in this case current time)
-- using a seed will allow generating more undeterministic random value
math.randomseed(os.time())

-- create a cyclic 3 minutes loop in the main which will store data locally
-- and send those data to the platform at the frequency defined in the above
custom push policy
while true do

Rev [7.0] [August 2014] 25


-- increment loop counter
count = count + 1

-- get a random number


local randomnumber = math.random()

-- Push into a queue which will be flushed to the platform according to


customer policy '15mnpolicy'
-- Note that the first parameter of the pushdata API is the common node of
the different paths
-- and the second parameter of the push is a table pointing to the actual
different Paths for each variable
-- note as well in order to assign a value to a Variable you must assign it
to its corresponding Path in the application tree
helloasset:pushdata("uplink", {CountPath=count,
FloatingPointPath=randomnumber, StringPath= "Hello AirVantage from my embedded
app", StatePath=1, timestamp=os.time()}, "15mnpolicy")

-- print in Studio console when running in debug mode, or in AceManager


Admin logs, log subsystem = application, verbosity = info
print ("loop iteration number", count)

-- print in Studio console when running in debug mode, or in AceManager


Admin logs, log subsystem = application, verbosity = info
print ("current value of my integer Setting:",
helloasset.tree.downlink.IntegerPath)
print ("current value of my string Setting :",
helloasset.tree.downlink.StringPath)

-- Sleep 3 minutes
sched.wait(180)

end

end

sched.run(main)
sched.loop()

-- Note:
-- if instead of putting the data into a queue for a later flush according
to the set policy,
-- user wants to send all data immediately from all defined queues and not
waiting for the policy defined period, use:
-- airvantage.triggerpolicy("*")

Rev [7.0] [August 2014] 26


8.3. Link to AAF APIs
All AAF APIs Prototype and complete description is available from within the Studio in the Script
Explorer. Unfold the AAF folder in the script explorer and browse to the desired AAF module and
corresponding API. You will find for instance pushdata API description under airvantage.asset.lua
module:

Rev [7.0] [August 2014] 27

You might also like