Page 1 sur 4

[LUA] Consommation virtuelle

Publié : 30 oct. 2017, 09:33
par vil1driver
Salut,

je vous partage ici un petit script qui à pour but de remplir un compteur de consommation virtuel

Image

quel que soit l'équipement à suivre et la façon dont il est utilisé (manuellement, plannings, scripts, etc..)

il vous suffit de créer le(s) compteur(s) virtuel(s) depuis le matériel virtuel (dummy)
puis de renseigner le tableau en début de script en indiquant
le nom du dispositif à surveiller, sa puissance en watt et le nom du compteur associé.
surveillez autant de dispositifs que vous le souhaitez.. chaqun devant avoir son propre compteur.

Code : Tout sélectionner

-- mesures virtuelles de consommation électrique
-- script de type DEVICE

-- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940)
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

debug = false  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

local devices = {}

-- tableau a renseigner {'dispositif', puissance, 'compteur'}

devices[1] = {'radiateur thomas', 900, 'conso thomas'}
devices[2] = {'radiateur SDB', 1200, 'conso SDB'}
devices[3] = {'radiateur salon', 3200, 'conso salon'}
devices[4] = {'radiateur parents', 800, 'conso parents'}
-- etc..

-- fin du tableau

commandArray = {} 

for n,device in pairs(devices) do
   if stateChange(device[1]) == 'On' then
      -- affichage puissance instantanée
      power, energy = string.match(otherdevices_svalues[device[3]], "(%d+%.*%d*);(%d+%.*%d*)")
      commandArray['UpdateDevice'] = otherdevices_idx[device[3]] .. '|0|' .. device[2] .. ';' .. energy
      break
   end
   if stateChange(device[1]) == 'Off' then
      log(device[1]..' est resté allumé '..duree..'s',debug)
      -- calcule puissance consommée
      power, energy = string.match(otherdevices_svalues[device[3]], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy + (device[2] / 3600 * duree))
      commandArray['UpdateDevice'] = otherdevices_idx[device[3]] .. '|0|0;' .. energy
      break
   end
end   

return commandArray
Image

Re: Consommation virtuelle

Publié : 30 oct. 2017, 09:50
par foudepc83
Bonjour,

Très intéressant mais je suis vraiment nul en script.

Ce script calcule la totalité de plusieurs chauffages si j'ai bien compris ?

Est il possible de faire un script par chauffage pour avoir une consommation par chauffage ?

Merci beaucoup !

Re: Consommation virtuelle

Publié : 30 oct. 2017, 09:56
par vil1driver
ce script s'occupe d'autant d'appareils que tu veux mais ne fait pas le cumule.
c'est un compteur par appareil ;)

utilisable pour n'importe quel appareil.. la cafetière, la vmc, la pompe de la piscine, etc.. pas seulement des radiateurs ;)

Re: Consommation virtuelle

Publié : 30 oct. 2017, 10:59
par jackslayter
la variable "duree" tu la prends ou?

Re: Consommation virtuelle

Publié : 30 oct. 2017, 11:03
par vil1driver
viewtopic.php?f=17&t=3861&p=43248#p43248

elle est générée par la fonction stateChange utilisée dans ce script.

à condition d'avoir une version de modules.lua à jour (de ce jour), j'avais oublié de le préciser, désolé.

Re: Consommation virtuelle

Publié : 30 oct. 2017, 12:08
par foudepc83
vil1driver a écrit :ce script s'occupe d'autant d'appareils que tu veux mais ne fait pas le cumule.
c'est un compteur par appareil ;)

utilisable pour n'importe quel appareil.. la cafetière, la vmc, la pompe de la piscine, etc.. pas seulement des radiateurs ;)
D'accord Merci beaucoup ! je vais tester chez moi ;)

Re: Consommation virtuelle

Publié : 30 oct. 2017, 12:15
par foudepc83
vil1driver a écrit :viewtopic.php?f=17&t=3861&p=43248#p43248

elle est générée par la fonction stateChange utilisée dans ce script.

à condition d'avoir une version de modules.lua à jour (de ce jour), j'avais oublié de le préciser, désolé.
Désolé , je n'ai pas trop compris comment mettre la version de modules.lua ... as tu un lien qui explique la mise en version de modules.lua ?

Merci beaucoup !

Re: Consommation virtuelle

Publié : 30 oct. 2017, 12:17
par foudepc83
foudepc83 a écrit :
vil1driver a écrit :viewtopic.php?f=17&t=3861&p=43248#p43248

elle est générée par la fonction stateChange utilisée dans ce script.

à condition d'avoir une version de modules.lua à jour (de ce jour), j'avais oublié de le préciser, désolé.
Désolé , je n'ai pas trop compris comment mettre la version de modules.lua ... as tu un lien qui explique la mise en version de modules.lua ?

Merci beaucoup !
Pardon , je viens de remarqué que tu a rajouté le lien dans le script. Autant pour moi

Re: Consommation virtuelle

Publié : 30 oct. 2017, 12:54
par foudepc83
J'ai mis à jour le module.lua comme indiqué dans ton tutoriel,
J'ai plus d'erreur dans les logs,

Par contre je vois cela :

Code : Tout sélectionner

dzVents: stateChange : création variable manquante lastState_Chauffage Cuisine
2017-10-30 12:50:17.012 (Chauffages) Light/Switch (Chauffage Chambre)
2017-10-30 12:50:17.055 User: Admin initiated a switch command (163/Rad Chambre/Set Level)
2017-10-30 12:50:17.055 OpenZWave: Domoticz has send a Switch command!, Level: 0, NodeID: 3 (0x03)
2017-10-30 12:50:17.293 dzVents: stateChange : création variable manquante lastState_Chauffage Cuisine
2017-10-30 12:50:17.305 dzVents: stateChange : création variable manquante lastState_Chauffage Cuisine
2017-10-30 12:50:22.279 dzVents: stateChange : création variable manquante lastState_Chauffage Cuisine
2017-10-30 12:50:22.291 dzVents: stateChange : création variable manquante lastState_Chauffage Cuisine

Les variables :

Code : Tout sélectionner

-- tableau a renseigner {'dispositif', puissance, 'compteur'}

devices[1] = {'Chauffage Cuisine', 2000, 'Consommation Chauffage Cuisine'}
-- etc..

-- fin du tableau
Chauffage Cuisine est un selecteur ( Fil pilote Zwave )
Consommation Chauffage Cuisine est un compteur Electrique.

J'utilise également un script qui permet de maintenir la température : viewtopic.php?f=17&t=2728

Le compteur ne tourne pas , j'ai raté quelque chose ?

Merci beaucoup !

Re: Consommation virtuelle

Publié : 30 oct. 2017, 14:09
par rapinou
A priori le problème vient du fait que ton interrupteur est un sélecteur, donc avec des niveaux (10, 20, etc), alors que le script cherche un changement d'état à "On" ou "Off".

Si tu remplaces dans le script : "On" par le niveau du sélecteur correspondant (par ex: 10), ça dit quoi ?
Si ça fonctionne, tu perdra cependant le côté universel du script, il ne fonctionnera plus pour des appareils reliés à des interrupteurs On/Off.