Intégration du langage de script Lua

Le langage de script Lua a été développé par l'université de Rio par by Waldemar Celes, Roberto Ierusalimschy et Luiz Henrique de Figueiredo. Ce langage procédural, apparenté au Pascal possède toutes les primitives nécessaires à l'élaboration de programmes complexes bien que son objectif principal consiste à fournir des services de paramétrage à d'autres applications.

Azur Soft a sécurisé ce langage pour l'inclure dans tous les logiciels du système Horus nécessitant un paramétrage. La sécurisation a permis d'inclure ce langage dans le superviseur d'alarme qui fonctionne 24h/24h et nécessite donc une fiabilité exemplaire.

Plusieurs bibliothèques de fonctions permettent aux scripts Lua d'accéder aux objets du système Horus.

OS fonctions système d'exploitation, accès fichiers, rs232, gestion date/heure
SQL Accès SQL server Microsoft
DIALOGIC Primitive de gestion de la carte Dialogic
PSOLA Primitive de gestion des modems à synthèse vocale de la société Elan informatique
HORUS Fonctions de gestion des objets du superviseur Even
GALARM Fonctions de gestion des objets du programme opérateur Galarm

Le langage est ainsi possible de paramétrer très finement le comportement du système sans modifier les composants logiciels. Ce type de fonctionnement évite les modifications intempestive des logiciels et permet aux utilisateurs finaux de programmer eux-même le logiciel.

Lua est intégré aux modules suivants du système Horus :

EVEN Superviseur d'alarme
GALARM Interface opérateur
AZFRONTAL Frontal de réception
AZTELCOM Serveur de télécommandes
HORUSVOX Serveur vocal
HORUSMAP Gestion de synoptiques dynamiques

Exemples de programme Lua :

-- N'enregistre pas dans l'historique l'évenement et simule une horloge pour le canal §90
reference=HORUSgetcontext("reference")
HORUSsetcontext("no_archive",1)
HORUSaddhorloge(reference,"§90","1","0",OSadddate(OSgetdate(),60),"","0")
ok,date,msg=GALARMdialog("Information site","2,1,Date message,,3,20,1,1\r\n2,3,Message,,1,255,1,1\r\n")
if ok==1 then
	ref=GALARMgetcontext("REFERENCE")
	req="insert into horloge(reference,type,soustype,d_attente,d_systeme,codephysique,datas,periode,operateur) "
	req=req.."values('"..ref.."',6,22,'"..date.."',GetDate(),'INFO','INFOSENDER(&"..ref..","..msg..")',0,'')"
	SQLexec(req)
else
	OSalert("Information site","Insertion annulée")
end
-- Recuperer le numero de telephone
--$TIMEOUT=40000
tel = ("P[@telephonetr]")
print(tel)
code = "[@code_ecoute]"
-- Recuperer du code d'acces 
c1 = tostring(strsub(code,1,1))
c2 = tostring(strsub(code,2,2))
c3 = tostring(strsub(code,3,3))
c4 = tostring(strsub(code,4,4))
--prom ="[@prom]"
-- Recuperer du code d'acces = 4 dernier caracteres de la prom
--c1 = tostring(strsub(prom,5,5))
--c2 = tostring(strsub(prom,6,6))
--c3 = tostring(strsub(prom,7,7))
--c4 = tostring(strsub(prom,8,8))
OSsleep(500)
-- Numerotation
resnum,msg=DIALOGICdial(tel,10)
print("RESULTAT DE LA COMMUNICATION : " ..resnum)
print(msg)
if (resnum ~= 10 and resnum ~=18 ) then
lua_return = "Problème ligne"
DIALOGIChangup()
elseif (resnum == 7) then
lua_return = "Ligne Occupée"
DIALOGIChangup()
else
OSsleep(16000)
print("Fin attente")
-- Joue le mot passe
DIALOGICplayDTMF(c1)
OSsleep(200)
DIALOGICplayDTMF(c2)
OSsleep(200)
DIALOGICplayDTMF(c3);
OSsleep(200)
DIALOGICplayDTMF(c4);
OSsleep(200)
DIALOGICplayDTMF("#")
-- Attente du ACK
OSsleep(2000)
DIALOGICplayDTMF("*")
OSsleep(200)
DIALOGICplayDTMF("6")
OSsleep(200)
DIALOGICplayDTMF("#")
OSsleep(2000)
-- MICRO 1
DIALOGICplayDTMF("0")
OSsleep(200)
DIALOGICplayDTMF("1")
OSsleep(200)
DIALOGICplayDTMF("0")
OSsleep(200)
DIALOGICplayDTMF("1")
OSsleep(200)
DIALOGICplayDTMF("#")
lua_return = "EN ECOUTE SUR MICRO [@micro_1]"
end