Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

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 <\>.
herbru01
Messages : 4
Inscription : 24 juil. 2020, 22:01

Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par herbru01 »

capteur.jpg
capteur.jpg (139.13 Kio) Consulté 5493 fois
Bonjour a tous
je me lance dans la programmation LUA je ne comprend rien sa fait 5 jours que je tente de programmer un capteur virtuelle avec une simple soustraction de 2 capteur ( pince ampèremétrique de mes panneaux solaire)

je sollicite donc votre aide pour le script en question

en gros jai une mesure en Watt de la consommation de la maison ( conso maison ) et une mesure en watt de la conso de la maison - solaire (maison - solaire) j'ai donc creé une mesure virtuelle ( dummy) (P istantane)

qu faut t'il coder pour

( conso maison ) - (maison - solaire) = (P istantane)

merci d'avance pour votre aide précieuse
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par Keros »

Bonjour herbru01 et bienvenue sur le forum ;)

Regarde dans ma signature, j'ai écrit différentes choses à propos de la programmation.

As tu réussi a écrire une valeur dans P istantane ? Peut importe la valeur : le but est d'arriver à écrire dans le compteur.
As tu réussi à lire les deux consos ? De là est-ce que le calcul donne un résultat cohérent ? Pour cela écrit les infos dans les logs.
En décomposant ton besoin et en procédant par étape tu pourras tout mettre bout à bout et atteindre ton besoin.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
herbru01
Messages : 4
Inscription : 24 juil. 2020, 22:01

Re: Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par herbru01 »

bonjour
merci pour ta reponse rapide

effectivement c'est deja mon premier probleme

j'ai ecris

Code : Tout sélectionner


commandArray = {}

commandArray['UpdateDevice'] = '7|0|555' 
    
  

return commandArray

sa fonctionne jaffiche 555 sur le capteur

maintenant comment faire le calcule? la ces plus compliquer et surtout qui change seule
Dernière modification par herbru01 le 25 juil. 2020, 01:07, modifié 1 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par Keros »

Essaye ceci :

Code : Tout sélectionner

commandArray['UpdateDevice'] = "124|0|" .. tostring(svalue)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
herbru01
Messages : 4
Inscription : 24 juil. 2020, 22:01

Re: Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par herbru01 »

sa fonctionne jaffiche 555 sur le capteur

maintenant comment faire le calcule? la ces plus compliquer et surtout qui change seule

Code : Tout sélectionner

commandArray['UpdateDevice'] = '124|0|555'
herbru01
Messages : 4
Inscription : 24 juil. 2020, 22:01

Re: Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par herbru01 »

Bon jai un peut avancer mais la je sèche

Code : Tout sélectionner

commandArray = {}

local prod = tonumber(index2)
local conso = tonumber(index2)
local istant = (prod - conso)

index1,index2,index3,index4,index5 = otherdevices_svalues['maison-production']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")

index1,index2,index3,index4,index5 = otherdevices_svalues['conso maison']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")

commandArray['UpdateDevice'] = '124|0|'..tostring(istant)


  
return commandArray


sur le log jai 2020-07-25 02:29:05.356 Error: EventSystem: in Script #1: [string "--..."]:33: attempt to perform arithmetic on a nil value (local 'prod')


conso maison 421.000;88403.000 0/421.000;88403.000
maison-production 414.000;146532.000 0/414.000;146532.000

en rouge les valeur qui intéresse
valeur.jpg
valeur.jpg (41.4 Kio) Consulté 4788 fois
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Aide soustraction 2 capteur phisique pour crée un capteur virtuelle Lua

Message par Chrominator »

Le script est exécuté ligne à ligne, du début jusqu'à la fin.
L'ordre des instructions est donc important.
En l'occurence, tu fais des calculs avec des variables qui ne sont pas encore valorisées avec ce que tu attends ;

Au début de ton script, tu écris en ligne 3 :

Code : Tout sélectionner

local prod = tonumber(index2)
L'opérateur = est l'opérateur d'affectation, c'est à dire qu'il va évaluer l'expression de droite et mettre le résultat dans la variable dont le nom est à gauche.
A ce stade c'est la première fois qu'on rencontre index2, donc sa valeur est non définie (nil en lua).
En exécutant ce code, tu passes la valeur numérique (tonumber) de index2 à la variable prod.
Bah prod vaut donc nil aussi.

C'est ce que t'explique le message dans le log quand il essaie de faire la soustraction entre prod et conso.

Code : Tout sélectionner

local istant = (prod - conso)

Code : Tout sélectionner

2020-07-25 02:29:05.356 Error: EventSystem: in Script #1: [string "--..."]:33: attempt to perform arithmetic on a nil value (local 'prod')
Lua ne lit pas les lignes suivantes de ton script à cause cette erreur.


A la seconde ligne, tu affectes la valeur tonumber(index2) à une variable conso.

Code : Tout sélectionner

 local conso =  tonumber(index2)
index2 a-t-il reçu une valeur ?
Toujours pas.
Donc même résultat, conso vaudra nil.

En admettant que ta ligne 7 soit correcte, là index2 recevra une valeur.

Code : Tout sélectionner

index1,index2,index3,index4,index5 = otherdevices_svalues['maison-production']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
et donc juste après cette ligne 7, tu pourras affecter la valeur de index2 à ta variable prod.

Je te laisse deviner la suite.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Répondre