Home Center 2 – Snipets LUA

Paru sur domotique-info.fr

Possesseurs d’une Home Center 2, il vous est souvent nécessaire de coder en LUA.

Nous allons vous fournir quelques briques de code afin de vous simplifier la vie.
Attention : l’API Net.FHttp ne peut être utilisé que dans des modules virtuels

Adresse IP
Très souvent vous avez des modules virtuels avec quelques boutons et derrière ces boutons, vous avez le code suivant

HC2 = Net.FHttp("votre adresse ip")

Hors, chaque fois que vous exporter votre module pour un ami, ou que vous devez changer d’adresse IP, vous devez repasser derrière le code de chaque bouton pour modifier l’adresse IP.
Nous vous proposons donc de vous reposer sur le champs “Adresse IP:” et “Port TCP:” de votre module virtuel. En effet, une fois ces deux champs renseignés, il ne vous reste plus qu’à exploiter ces valeurs :

-- Récupération de l'adresse IP et du Port inscrit sur le module virtuel
-- fibaro:getSelfId() retourne l'ID du module virtuel en cours
local ip_module = fibaro:get(fibaro:getSelfId(), "IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort")
HC2 = Net.FHttp(ip_module, port)

Exporter votre télécommande virtuel Free, envoyé la à un ami, il lui suffit de l’importer et de remplacer à un seul endroit l’adresse IP pour que sa télécommande fonctionne chez lui au lieu de modifier les 40 boutons de cette télécommande.

Arrondir
Si vous souhaitez arrondir une valeur à l’entier le plus proche.

-- Arrondir 20.8 donnera 21
local temp = math.floor(20.8 + .5)
-- Arrondir 20.3 donnera 20
local temp2 = math.floor(20.3 + .5)

Très utile si vous souhaitez comparer des températures

if ( math.floor({ma température} + .5) == 21 ) then
   -- ma température est proche de 21 alors ---
else
   -- sinon --
end

Info sur un périphérique
Il peut être utile de s’envoyer un message avec par exemple le nom et l’emplacement d’un périphérique. Vous pouvez simplement récupérer ces informations ainsi :

local id_du_module = 25
local emplacement = fibaro:getRoomNameByDeviceID( id_du_module )
local nom= fibaro:getName( id_du_module )
local batterie = fibaro:getValue ( id_du_module , 'batteryLevel')

Vous n’avez plus qu’à exploiter ces données dans un message ou autre.
Pour un script complet sur l’usage de la fonction batteryLevel, vous pouvez voir l’article d’Olivierici. Avec ce code et celui d’Olivier vous pourriez recevoir un email contenant :
“Low battery (6%) on module Capteur fumée in Cuisine”

Problème de maillage
Votre périphérique est toujours entrain de dormir, réveillez-le et forcer le maillage

local id_du_module = 25
fibaro:wakeUpDeadDevice( id_du_module )
fibaro:sleep(5000) -- laissons lui 5 secondes pour ce réveiller
fibaro:call( id_du_module , "requestNodeNeighborUpdate")

Pour plus d’information sur la détection des noeuds morts Olivier nous a encore fournir un script tout en couleur.

Redémarrer votre HC2
Il peut, parfois, être utile de redémarrer sa box [Code from Krikroff]

-- Code from Krikroff --
HC2 = Net.FHttp("127.0.0.1")
-- mettre votre pseudonyme et votre mot de passe
HC2:setBasicAuthentication("{pseudonyme}","{mot de passe}")  
response, status, errorCode = HC2:POST("/api/settings/reboot", "data=reset")

Comparer le comparable
En LUA, les variables ne sont pas typée. Cela signifie qu’une variable peut contenir un nombre, ou une chaîne de caractères, ou un tableau, …
Hors quand arrive le moment de savoir si var1 == var2 … cela ce complique. Prenons un exemple :

local var1 = "100"
local var2 = 100
if (var1 == var2) then
   fibaro:debug("identique")  
else
   fibaro:debug("différent")
end

Ce code va vous retourner comme quoi ces 2 variables sont différentes car une chaîne de caractère n’est pas égale à la valeur 100.
Si vous souhaiter comparer 2 valeurs entre elle, utiliser la fonction tonumber(), vous vous soulagerez ainsi d’un grand nombre de prise de tête.

if (tonumber(var1) == tonumber(var2)) then
   fibaro:debug("identique")  
else
   fibaro:debug("différent")
end

Variable globale
Depuis le panneau des variables, vous avez la possibilité d’ajouter des variables. Pour pouvoir les modifier depuis du code LUA, il vous suffit d’exploiter getGlobal() ou setGlobal()

-- Inversons la tendance --
-- si la variable "tendance" est à 1 ou la met à 0 et inversement ---
local tendance = fibaro:getGlobal("tendance")
if (tonumber(tendance) == 1) then
  fibaro:setGlobal("tendance", 0);
else
  fibaro:setGlobal("tendance", 1) 
end
Par programmation, les variables globales peuvent contenir du texte

Voilà donc quelques petits morceaux de code qui nous l’espérons vous ferons gagner du temps pour vos future développement en LUA.

Laisser un commentaire

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Changer )

Twitter picture

You are commenting using your Twitter account. Log Out / Changer )

Facebook photo

You are commenting using your Facebook account. Log Out / Changer )

Google+ photo

You are commenting using your Google+ account. Log Out / Changer )

Connecting to %s