![]()
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