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

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Busshi
Messages : 4
Inscription : 29 mars 2020, 22:11

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

Message 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.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Busshi
Messages : 4
Inscription : 29 mars 2020, 22:11

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

Message 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 !
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Busshi
Messages : 4
Inscription : 29 mars 2020, 22:11

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

Message 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 ?
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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:
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Répondre