Les Variables dans Domoticz

Présentation

La notion de variable dans Domoticz à été introduite récemment et permet de stocker des valeurs dans la base de données de Domoticz, ces valeurs sont utilisables partout dans Domoticz (scripts lua, blocky, au travers de l’API JSON )

Ces variables peuvent contenir à ce jour :

  • Des entiers 0,-1,2,10,-10
  • Des nombre flottants 5.2,-74.12,3,5,-5,-88.12
  • Des chaines de caractère : On, Off, « le petit bonhomme en mousse » (sans les « )
  • Des dates au format JJ/MM/AAAA
  • Des heures au format HH:MM sur 24H

Comment définir nos variables

Dans le menu « Configuration », « Plus d’options », « Variables utilisateurs »

On peut ajouter,modifier,supprimer depuis ici

Remplissez les  3 cases , Nom, Type , Valeur puis validez

Les utiliser dans Blocky

Posez vos blocks pour faire qq chose comme celablocky

Toutefois faites attention à utiliser les numériques et chaines dans la partie « User Variables »  et non pas celles de « Logic » ou « Messages » sinon cela ne marche pas (vécu)

blocky_uservar

Les utiliser dans Lua

Il suffit d’appeler uservariables[« Nomdelavariable »]

Attention : Lorsque vous utilisez des variables dans Lua, n’oubliez pas qu’elles sont toujours stockées en tant que Chaines dans la base de  données Domoticz.

if ( uservariables["MyVar"] == "On" ) then
 commandArray['Variable:MyOtherVar']= uservariables["MyVar"]

fonctionnera : MyVar est une chaine et sera utilisé dans le commandArray  comme une chaine.

Lua se débrouillera pour convertir vos chaines en nombres dés qu’il y aura des calculs à faire, MAIS lorsque vous devez passer ce nombre à un CommandArray , IL FAUT le remettre en tant que chaine:

commandArray['Variable:MyVar']= uservariables["MyVar"] +25

ne fonctionnera pas.

Car Lua sait faire +25 dans la variable considérée comme chaîne « Myvar » qui devient à ce moment un entier.Mais étant donné que CommandArray n’accepte QUE des chaines de caractère , cela ne fonctionne pas.

Alors que (notez le tostring qui fait la différence)

commandArray['Variable:MyVar']= tostring(uservariables["MyVar"] +25)

fonctionnera. le nombre résultant du calcul est converti en chaine et peut être passé à commandArray sans soucis.

 

Les variables au travers de JSON

Pour  ajouter une variable appeler :

json.htm?type=command&param=saveuservariable&vname=votrenomdevariable&vtype=uservariabletype&vvalue=votrevaleurdevariablele

Renseigner : vname=votrenomdevariable, vvalue=votre valeur de variable et le type.

Ou  type est de  0 à 4:

0 = Entier -1, 1, 0, 2, 10 
1 = Décimal -1.1, 1.2, 3.1
2 = Chaine
3 = Date au format DD/MM/YYYY
4 = Heure au format 24 hr HH:MM

Tout les formats sont vérifiés par l’API,lorsque la variable ne correspond pas au format attendu, elle n’est pas stockée.

Mettre à jour une variable existante:

/json.htm?type=command&param=updateuservariable&idx=idx&vname=uservariablename&vtype=uservariabletype
&vvalue=uservariablevalue

ll vous faut Idx,uservariabletype fournis par Domoticz,uservariablename et votre valeur vous devriez les connaitre.

Pour connaitre uservariabletype et Idx un

http://IP:port/json.htm?type=command&param=getuservariables

vous les affichera

 

Lister toutes les variables et leur ID:

/json.htm?type=command&param=getuservariables

Lister une  variable:

/json.htm?type=command&param=getuservariable&idx=IDX
  • IDX = id  de la variable
  • Cet ID est donné par l’affichage de toutes les variables (voir plus haut)

Détruire une variable:

/json.htm?type=command&param=deleteuservariable&idx=IDX
  • IDX = id  de la variable
  • Cet ID est donné par l’affichage de toutes les variables (voir plus haut)

Verifier l’etat de vos variables

Un http://ip:port/json.htm?type=command&param=getuservariables affiche la liste des variables, pratique.

Rappel

Format d l’API

http://<username:password@>domoticz-ip<:port>/json.htm?api-call
  • <username:password@> = le couple username/password pour accéder à Domoticz. (optionnel).
  • domoticz-ip = l’ ip address ou le nom de votre install Domoticz.
  • <:port> = le port de Domoticz (optionnel).
ex. http://192.168.1.2:8080/json.htm?type=command&param=udevice&idx=$idx&nvalue=0&svalue=79

 

Posted in Débutants, domoticz and tagged , , , , , , , , , .

6 Comments

  1. bonjour, j’ai une variable ‘test_var’ et un script lua
    dans mon script j’ai une variable mais je voudrais utiliser celle de l’interface web pour éviter de ce connecter en ssh pour changer la valeur.
    actuellement j’ai ça :
    local val = 20
    et je voudrais avoir :
    local val = ‘test_var’ — ma variable de l’interface
    j’ai essayé : local val = ‘Variable:test_var’ et local val = uservariables[« test_var »]
    mais j’ai une erreur : Tue Sep 30 14:30:38 2014 Error: …/domoticz/scripts/lua/script_device_test.lua:26: attempt to perform arithmetic on local ‘var’ (a string value)

    qu’elle est la bonne commande ou es que ma demande est possible?
    Merci

  2. Bonsoir
    Au vu de ton erreur,je pense que tu as défini ta variable en integer (pour y mettre 20 dedans) et ensuite tu essaie de mettre ‘tes_var’ qui est une chaine
    Redéfinit donc ta variable en chaine dans le parametrage et ca devrait rouler
    Et puisque Domoticz sait que c’est une chaine tu n’a pas besoin de la quoter par les  »

    My 2 cents

  3. Bonsoir,

    Je souhaite réaliser dans Blocky un test du type :

    « If » avec une variable que je set via l’api ( de type entier ) et compare avec un device type température. exemple

    if « deviceTempérature » < "variableSetApi"
    then

    Si "la Température" est inférieur à "la valeur"
    alors

    Malheureusement, dans domoticz ca ne fonctionne pas.
    Mon interrupteur fait "On" puis "Off" et vis et versa.

    Auriez vous une idée ?

  4. Bonjour
    En effet je constate un mauvais fonctionnement moi aussi,pas tout à fait celui que tu décrit mais pas correct quand même

    Il fut un temps , pourtant ou cela fonctionnait

    Quelle version de Domoticz as tu ?
    Qu’affiche le log de Domoticz dans l’interface ?

    A suivre …

  5. Bonjour, je constate le meme problem de variable dans bloky. si je Set v1 dans v2, v2 se retroune avec un index (ds le tableau des variable) et non pas la valeur. Et si je fait une comparaison , pareil ca deconne…

    C’est nul du coup, je voulais utiliser bloky pour faire un thermostat a hysterisis et plusieur plage horaire, du coup je vai devoir me mettre au LUA (c’est pas un mal…) Mais j’aimerai utiliser les variable utilisateur pour definir mes consignes sans plonger ds le code.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *