Ce billet propose différentes fonctions qui permette d’utiliser pleinement le contrôleur IPX800 depuis la box Vera Lite. Dans un premier temps, il expose comment consulter ou modifier l’état de l’IPX800. Dans un second temps, il propose un moyen de synchroniser l’état de l’IPX800 avec une structure de donnée dans la Vera Lite afin de bénéficier d’un cache restant synchrone avec les changements d’état de l’IPX800.
Lire un état sur l’IPX800
Connexion à l’IPX800 en Lua :
local socket=require("socket")
function josdConnexionIPX800()
local addresseIP="192.168.0.34" -- adresseIP de l'IPX
local port=9870 -- par defaut le port de lIPX est 9870
local client = assert(socket.connect(addresseIP, port))
client:send("key=<motdepasse>") -- Si l'interface est protégée par un mot de passe
client:receive() -- Si l'interface est protégée par un mot de passe
return (client)
end
</motdepasse> |
local socket=require("socket")
function josdConnexionIPX800()
local addresseIP="192.168.0.34" -- adresseIP de l'IPX
local port=9870 -- par defaut le port de lIPX est 9870
local client = assert(socket.connect(addresseIP, port))
client:send("key=<motdepasse>") -- Si l'interface est protégée par un mot de passe
client:receive() -- Si l'interface est protégée par un mot de passe
return (client)
end
</motdepasse>
Attention, à partir du micrologiciel version 3.05.46, si l’interface de l’IPX800 est protégée par un mot de passe, ce dernier doit être envoyé juste après la connexion comme indiqué ci-dessus (remplacer <motDePasse>
par le mot de passe).
Fonction interne Lua de lecture d’un état de l’IPX800 :
function josdGetIPX800(indice,commande)
if (type(indice)=="string") then indice=tonumber(indice) end
assert(type(indice)=="number" and indice>=1 and indice< =8)
local client=josdConnexionIPX800()
commande=commande..tostring(indice)
client:send(commande)
local reponse=client:receive()
assert(client:close())
local etat=assert(string.match(reponse,'=([0-9]*)$'))
return tonumber(etat)
end |
function josdGetIPX800(indice,commande)
if (type(indice)=="string") then indice=tonumber(indice) end
assert(type(indice)=="number" and indice>=1 and indice< =8)
local client=josdConnexionIPX800()
commande=commande..tostring(indice)
client:send(commande)
local reponse=client:receive()
assert(client:close())
local etat=assert(string.match(reponse,'=([0-9]*)$'))
return tonumber(etat)
end
Fonction Lua de lecture de l’état d’une entrée de l’IPX800 :
function josdGetEntreeIPX800(indice)
return josdGetIPX800(indice,"GetIn")
end |
function josdGetEntreeIPX800(indice)
return josdGetIPX800(indice,"GetIn")
end
Fonction Lua de lecture de l’état d’une sortie de l’IPX800 :
function josdGetSortieIPX800(indice)
return josdGetIPX800(indice,"GetOut")
end |
function josdGetSortieIPX800(indice)
return josdGetIPX800(indice,"GetOut")
end
Fonction Lua de lecture de l’état d’un compteur d’impulsion de l’IPX800 :
function josdGetCompteurIPX800(indice)
return josdGetIPX800(indice,"GetCount")
end |
function josdGetCompteurIPX800(indice)
return josdGetIPX800(indice,"GetCount")
end
Fonction Lua de lecture de l’état d’une entrée analogique de l’IPX800 :
function josdGetEntreeAnalogiqueIPX800(indice)
return josdGetIPX800(indice,"GetAn")
end |
function josdGetEntreeAnalogiqueIPX800(indice)
return josdGetIPX800(indice,"GetAn")
end
(suite…)