Automatisation Domotique avec Vera : Exemple de Code LUUP pour Surveiller la Température

Vera 3 - Code LUUP pour récupérer la température


Attention cet article est déprécié (= n'est peut-être plus valable) : il avait été testé à l'époque avec UI5 et UI7 de Vera. Vera a depuis beaucoup évolué et Bricomachin ne peut pas garantir que cela fonctionnera toujours avec les versions actuelles et futurs. Pour information UI5 est remplacé actuellement par UI7+ de Vera.


Pour rappel : Veralite, Vera ou VeraEdge est une box domotique réalisée par une entreprise qui offre un GUI propre à la marque. Vera est très populaire car ils sont arrivés à simplifier au maximum les boxes domotiques : interface clair, rapide et ergonomique!


Nous avons tous un jour ou l'autre voulu récupérer la température ambiante dans un code LUA pour exporter les données dans une autre centrale. Dans notre exemple, nous utilisons un ancien box Veralite pour quelques capteurs "non importants" et pour libérer la mémoire dans notre box principal (ce n'est plus vraiment d'application, nous utilisons désormais un serveur virtualité avec Docker, mais cet article a lieu d'exister pour les novices).


L’un des gros avantage de la box domotique Vera Lite est de pouvoir développer ses propres fonctions en langage Lua.

Ce langage est un langage procédurale de programmation simplifié mais cela fait la grande force de la box domotique Vera.

En effet, toutes les fonctions pré-définies n'apportent pas toujours une solution aux fonctionnalités recherchés et donc il faut les créer nous-même : nous voilà dans la force du langage LUA.


Il faut bien entendu s'investir pour apprendre à programmer même si c'est de la programmation "simpliste", facile par rapport à de la programmation OBJET ou FONCTIONNEL


Revenons au but principal de cet article, c'est de vous présenter un code lUA pour récupérer la température d'un capteur dans une boite domotique Vera, pour cette raison, nous aimerons donc récupérer la température sur la box principal dans notre serveur principal. En effet, le 1er problème rencontré en domotique est souvent la limitation des ressources disponibles, on commence à travailler avec de "petite box" ou des ordinateurs très lights (raspberry) et petit à petit, nous en demandons beaucoup plus à notre système domotique!


A la date de ce poste, la box Veralite est devenu "has been" (la mémoire est vachement ridicule) mais fonctionne toujours convenablement. Pourquoi ne pas l'utiliser pour faire un réseau secondaire? Bricomachin milite pour ne réutiliser ce qui existe et qui marche toujours! Pensons à notre planète.


Prérequis :


  1. Vous devez connaître le numéro de device dans l'interface de Vera.
  2. Vous êtes capable de créer des scripts LUA.


luup.variable_get ("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", device)
luup.variable_get ("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", device)

-- Id du device dans cet exemple 37

 local temp_ambiante = luup.variable_get ("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", 37) or 0
      -- On transforme le réseau en nombre
      local temp_ambiante = tonumber(temp_ambiante)
-- Id du device dans cet exemple 41
 local temp_ambiante1 = luup.variable_get ("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", 41) or 0
      -- On transforme le réseau en nombre
      local temp_ambianteX = tonumber(temp_ambiante1)
  
-- Id du device dans cet exemple 51
 local temp_ambiante2 = luup.variable_get ("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", 51) or 0
       -- On transforme le réseau en nombre
      local temp_ambianteY = tonumber(temp_ambiante2)
  

-- On récupère le taux d'humidité du capteur device 53 dans cette exemple :
 local temp_hum = luup.variable_get ("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", 53) or 0
      -- On transforme le réseau en nombre
      local temp_hum1 = tonumber(temp_hum)
Qu'est ce qu'on fait vraiment dans ce scripts ?

On crée des variables locaux où nous stockons dans cette variable (un espace mémoire) le résultat de la demande de température. 
La commande luup.variable_get("blabla") permet de demander la témpérature :
  1. TemperatureSensor1 = demander la température
  2. HumiditySensor1 = demander le taux d'humidité.


Explication du code ci-dessus :


On crée une variable local temp_ambianteXXX qui va récupérer la valeur de la variable, CurrentTemperature ou CurrentLevel .

-- est un commentaire dans le langage LUA.

 

 et dans cette exemple-ci, on l'envoie plusieurs requête PHP sur un script externe


luup.inet.wget('http://192.168.0.16/sqltemp.php?action='..temp_hum1..'&periph=53')
luup.inet.wget('http://192.168.0.16/sqltemp.php?action='..temp_ambiante..'&periph=37')
luup.inet.wget('http://192.168.0.16/sqltemp.php?action='..temp_ambianteX..'&periph=41')
luup.inet.wget('http://192.168.0.16/sqltemp.php?action='..temp_ambianteY..'&periph=51')

return true



Explication du code ci-dessus :


Si vous n'êtes pas novice en programme, l'explication du code ne sera pas nécessaire pour vous mais tout le monde n'a pas ce niveau, Bricomachin pense également aux petits nouveaux.


luup. est une fonction d'appel du langage LUUP. En quelque sorte, cela appelle le langage de programmation.

init est sa librairie. Un peu comme un dossier.


wget est l'utilisation du programme wget pour aller récupérer une information quelque part. Ici on utilise une sorte de workaround, on utilise wget pour lancer une requête HTTP vers un autre serveur qui récupère les données dans les variables action?xxxx !


Il y'a peut-être une meilleure manière de réaliser ceci que d'utiliser WGET.

Lors de nos recherches, nous n'avions pas trouvé une meilleure manière de réaliser cette action avec ce langage. Le langage a évolué et donc peut-être que la manière de faire a évoluer également dans l'univers de Vera.











Illustration