Page 1 sur 1

LUA récupérer une valeur d’un device

Publié : 29 mars 2020, 22:20
par Busshi
Bonsoir tout le monde,

Je tente de m’initier au Lua et j’essaie de récupérer une valeur d’un device (Compteur EDF) qui apparaît dans Utility (grâce au plugin DomoticzLinky). Avec un script bash je sais modifier un Dummy Device (Coût EDF) tous les jours en calculant les kWh * prix nrj. Ça fonctionne bien mais pour comprendre comment le faire en LUA je bloque sur la partie où je récupère la valeur du compteur EDF. En LUA je souhaite modifier mon Dummy Coût EDF :

Code : Tout sélectionner

 local nrj=tonumber(otherdevices_svalues['Compteur EDF'])

commandArray = {}
if (devicechanged['Compteur EDF'] and nrj > 0) then
--        os.execute(' $CDOM/linky.sh day ')
        local prix=tonumber(uservariables['kWh']) * nrj
        if prix ~= tonumber(otherdevices_svalues['Coût EDF']) then
                print('Mise à jour des dépenses énergétiques')
                commandArray['Coût EDF']=prix
                print('MAJ NRJ OK')
        else
                print ('EDF : rien à modifier')
        end
end
return commandArray
Savez-vous comment récupérer cette valeur ? J’ai essayé otherdevices_svalues / otherdevices. J’ai beau cherché dans les commandes Lua mais cela ne fonctionne pas alors que j’y arrive avec mes capteurs de luminosité (qui sont aussi dans utility). Avez-vous une piste de réflexion svp ??

Pour info : quand je vais dans le log (événements dans domoticz) je vois que l’état du device comporte 2 infos. Comment extraire la seconde qui m’intéresse ? (otherdevices_svalues...)

Compteur EDF -1.0;32779.0

Enfin dernière info : dans le log de domoticz il y a une erreur concernant ma variable nrj : attemp to index a nil value... Ceci confirme que ma valeur n’est pas enregistrée dans la variable nrj.

Merci d’avance.

Re: LUA récupérer une valeur d’un device

Publié : 29 mars 2020, 23:30
par Neutrino
Ton device Compteur EDF contient 2 valeurs.
Pour les séparer en lua :

Code : Tout sélectionner

	
index1,index2 = otherdevices_svalues[' Compteur EDF']:match("([^;]+);([^;]+)")
et du coup

Code : Tout sélectionner

 local nrj=tonumber(index2)

Re: LUA récupérer une valeur d’un device

Publié : 29 mars 2020, 23:34
par Busshi
Merci super ça me simplifie la vie. Pendant ce temps j’avais trouvé cette solution :

Code : Tout sélectionner

local nrj=tonumber(string.sub(otherdevices_svalues['Compteur EDF'],6))

commandArray = {}
if (devicechanged['Compteur EDF'] and nrj > 0) then
        local prix=tonumber(uservariables['kWh']) * nrj / 1000
        if prix ~= tonumber(otherdevices_svalues['Coût EDF']) then
                commandArray['UpdateDevice']='345|0|'..tostring(prix)
                print('MAJ dépenses énergétiques')
        end
end
return commandArray
Cela servira peut-être à quelqu’un d’autre... encore merci !

Re: LUA récupérer une valeur d’un device

Publié : 29 mars 2020, 23:46
par Neutrino
Merci pour le feedback.
Si la programmation objet ne te file pas des boutons, tu as aussi le DzVents : https://www.domoticz.com/wiki/DzVents:_ ... _scripting
C'est du LUA, mais optimisé Domoticz. Très complet.

Re: LUA récupérer une valeur d’un device

Publié : 29 mars 2020, 23:55
par Busshi
Merci pour l’info. En fait je cherche le mode le plus optimisé pour éviter de surcharger le pi car j’ai pas mal de scripts qui tournent toute la journée... Selon vous le mieux serait le Lua ou le DzEvent ?

Re: LUA récupérer une valeur d’un device

Publié : 30 mars 2020, 00:10
par Neutrino
DZVents permet de programmer le déclenchement de scripts à heures précises, toutes les 3 minutes, quand un device est activé.... Les scripts vont s'activer à la suite, et pas en même temps comme le LUA 'brut".
Perso, j'ai tout basculé sur DZVents. Si un script consomme trop, DzVents te le dira dans les logs.
Après, les goûts et les couleurs :mrgreen: