Page 1 sur 4

probleme conso virtuel

Publié : 14 janv. 2016, 19:31
par alexbi
bonjour

j'ai tenté de faire fonctionner 3 dummy 'conso instant + cumul'. J'ai regardé pas mal de tutos sur le forum il me semble que j'ai fais ce qu'il fallait ... sauf que cela ne fonctionne pas OU fonctionne une fois de temps en temps.

je vous met donc mon code LUA pour comprendre mon erreur ... Merci d'avance pour votre aide

Code : Tout sélectionner

---------- test consommation virtuel -------


-- radiateur

local radiateurSalon = 'radiateur salon'       -- Nom de l'interrupteur de chauffage
local puissance1 = 1000                  -- puissance du chauffage en watt
local conso1 = 'radiateur salon conso'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id1 = 121                  -- idx du capteur virtuel de consommation électrique

local radiateurCuisine = 'radiateur cuisine'       -- Nom de l'interrupteur de chauffage
local puissance2 = 700                  -- puissance du chauffage en watt
local conso2 = 'radiateur cuisine conso'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id2 = 122                  -- idx du capteur virtuel de consommation électrique

local radiateurChambre = 'radiateur chambre'       -- Nom de l'interrupteur de chauffage
local puissance3 = 500                  -- puissance du chauffage en watt
local conso3 = 'radiateur chambre conso'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id3 = 123                  -- idx du capteur virtuel de consommation électrique


commandArray = {}
 
if (otherdevices[radiateurSalon] == 'On') then 
 
  -- envoie de la conso dans le capteur virtuel d'énergie
      npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1) + (puissance1 / 60)    
      commandArray['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1   
      
             
    else
      
        
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1)
      commandArray['UpdateDevice'] = conso_id1 .. '|0|' .. 0 .. ';' .. energy1   
      
   end
   

if (otherdevices[radiateurCuisine] == 'On') then 
 
  -- envoie de la conso dans le capteur virtuel d'énergie
      npower2, energy2 = string.match(otherdevices_svalues[conso2], "(%d+%.*%d*);(%d+%.*%d*)")
      energy2 = tonumber(energy2) + (puissance2 / 60)    
      commandArray['UpdateDevice'] = conso_id2 .. '|0|' .. puissance2 .. ';' .. energy2  
      
             
    else
      
        
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower2, energy2 = string.match(otherdevices_svalues[conso2], "(%d+%.*%d*);(%d+%.*%d*)")
      energy2 = tonumber(energy2)
      commandArray['UpdateDevice'] = conso_id2 .. '|0|' .. 0 .. ';' .. energy2   
      
   end
   
if (otherdevices[radiateurChambre] == 'On') then 
 
  -- envoie de la conso dans le capteur virtuel d'énergie
      npower3, energy3 = string.match(otherdevices_svalues[conso3], "(%d+%.*%d*);(%d+%.*%d*)")
      energy3 = tonumber(energy3) + (puissance3 / 60)    
      commandArray['UpdateDevice'] = conso_id3 .. '|0|' .. puissance3 .. ';' .. energy3  
      
             
    else
      
        
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower3, energy3 = string.match(otherdevices_svalues[conso3], "(%d+%.*%d*);(%d+%.*%d*)")
      energy3 = tonumber(energy3)
      commandArray['UpdateDevice'] = conso_id3 .. '|0|' .. 0 .. ';' .. energy3   
      
   end
return commandArray
Image


il doit y avoir une erreur quelque part car les infos ne semblent pas être envoyer a mes conso virtuel

Image


je précise que depuis les heures indiquées sur les capteurs de conso virtuel, les radiateurs se sont mis a en fonctionnement plusieurs fois !

Re: probleme conso virtuel

Publié : 15 janv. 2016, 04:17
par vil1driver
Salut,

Essai avec un seul radiateur pour voir..

Un peu de lecture pour comprendre
send the same command type multiple times:
https://www.domoticz.com/wiki/Events

Re: probleme conso virtuel

Publié : 15 janv. 2016, 13:46
par alexbi
oui j'ai vu cette page :

Updating Energy Usage with Lua
The simplest method is purely to send the current power and the cumulative energy via commandArray['UpdateDevice'], but only 1 value per script can be sent this way:

commandArray['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy

Since version 1.700 of Domoticz it has been possible to send multiple updates via this route:

commandArray[1] = {['UpdateDevice'] = houseid .. "|0|" .. housepower .. ";" .. houseenergy}
commandArray[2] = {['UpdateDevice'] = pumpid .. "|0|" .. pumppower .. ";" .. pumpenergy}
commandArray[3] = {['UpdateDevice'] = solarid .. "|0|" .. solarpower .. ";" .. solarenergy}
See the Events page for the full context.

For simpler meter then the command is:

commandArray[4] = {['UpdateDevice'] = exportedid .. "|0|" .. exportenergy}

au début je ne comprenais pas très bien c'est donc parce que je demande le même type de commande 'updatedevice' que je dois utiliser le commandarray [1],[2],[3], ...

merci a toi pour ton retour, tout fonctionne maintenant

Re: probleme conso virtuel

Publié : 15 janv. 2016, 14:42
par vil1driver
alexbi a écrit :au début je ne comprenais pas très bien c'est donc parce que je demande le même type de commande 'updatedevice' que je dois utiliser le commandarray [1],[2],[3], ...
exactement,

pas de quoi ;)

Re: probleme conso virtuel

Publié : 15 janv. 2016, 21:38
par AlexElectro
Bonsoir
je ne comprend pas bien ce qu'il faut modifier au final. J'utilise le code suivant:

Code : Tout sélectionner

---------- test consommation virtuel -------


-- radiateur

local radiateur = 'Radiateur Evrard'       -- Nom de l'interrupteur de chauffage
local puissance1 = 1000                  -- puissance du chauffage en watt
local conso1 = 'Conso Evrard'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id1 = 50                  -- idx du capteur virtuel de consommation électrique




commandArray = {}
 
if (otherdevices[radiateur] == 'On') then 
 
  -- envoie de la conso dans le capteur virtuel d'énergie
      npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1) + (puissance1 / 60)    
      commandArray['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1   
      
             
    else
      
        
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1)
      commandArray['UpdateDevice'] = conso_id1 .. '|0|' .. 0 .. ';' .. energy1   
      
   end
   

return commandArray
mais dans le log j'ai l'erreur:

Code : Tout sélectionner

Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_conso.lua:28: bad argument #1 to 'match' (string expected, got nil)

Re: probleme conso virtuel

Publié : 15 janv. 2016, 21:40
par AlexElectro
mince j'ai cliqué "envoyer" trot tôt :oops:

pour finir, je n'arrive pas à comprendre cette ligne de commande:

Code : Tout sélectionner

npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
pas facile de débuter en LUA :geek:

Re: probleme conso virtuel

Publié : 15 janv. 2016, 22:51
par alexbi
salut

lol ca va je suis pas le seul a la ramasse

l'explication est plutôt simple !

tu as prit la mauvaise base pour faire simple, c'est a dire que tu as copié collé mon script qui ne FONCTIONNE PAS !

si tu regarde les réponses en dessous tu verra qu'il faut modifier les CommandArray !!!

pour t'éviter de te prendre trop la tete regarde ce script et LA tu peux t'en inspirer car il est fonctionnel !!!

Code : Tout sélectionner

---------- consommation virtuel radiateur  -------


-- radiateur

local radiateurSalon = 'radiateur salon'       -- Nom de l'interrupteur de chauffage
local puissance1 = 1000               -- puissance du chauffage en watt
local conso1 = 'radiateur_salon_conso'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id1 = 130                  -- idx du capteur virtuel de consommation électrique

local radiateurChambre = 'radiateur chambre'       -- Nom de l'interrupteur de chauffage
local puissance2 = 500               -- puissance du chauffage en watt
local conso2 = 'radiateur_chambre_conso'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id2 = 132                  -- idx du capteur virtuel de consommation électrique

local radiateurCuisine = 'radiateur cuisine'       -- Nom de l'interrupteur de chauffage
local puissance3 = 700               -- puissance du chauffage en watt
local conso3 = 'radiateur_cuisine_conso'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id3 = 131                  -- idx du capteur virtuel de consommation électrique

commandArray = {}


------- salon --------- 

if (otherdevices[radiateurSalon] == 'On') then
-- envoie de la conso dans le capteur virtuel d'énergie
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
energy1 = tonumber(energy1) + (puissance1 / 60)
npower1 = tonumber(npower1)
commandArray[1]={['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1}

end

if (otherdevices[radiateurSalon] == 'Off') then 
-- envoie de la conso dans le capteur virtuel d'énergie
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
energy1 = tonumber(energy1)
npower1 = tonumber(npower1)
commandArray[2]={['UpdateDevice'] = conso_id1 .. '|0|' .. 0 .. ';' .. energy1}

end  



------- Chambre --------

if (otherdevices[radiateurChambre] == 'On') then
-- envoie de la conso dans le capteur virtuel d'énergie
npower2, energy2 = string.match(otherdevices_svalues[conso2], "(%d+%.*%d*);(%d+%.*%d*)")
energy2 = tonumber(energy2) + (puissance2 / 60)
npower2 = tonumber(npower2)
commandArray[3]={['UpdateDevice'] = conso_id2 .. '|0|' .. puissance2 .. ';' .. energy2}

end

if (otherdevices[radiateurChambre] == 'Off') then 
-- envoie de la conso dans le capteur virtuel d'énergie
npower2, energy2 = string.match(otherdevices_svalues[conso2], "(%d+%.*%d*);(%d+%.*%d*)")
energy2 = tonumber(energy2)
npower2 = tonumber(npower2)
commandArray[4]={['UpdateDevice'] = conso_id2 .. '|0|' .. 0 .. ';' .. energy2}

end  



------- Cuisine --------

if (otherdevices[radiateurCuisine] == 'On') then
-- envoie de la conso dans le capteur virtuel d'énergie
npower3, energy3 = string.match(otherdevices_svalues[conso3], "(%d+%.*%d*);(%d+%.*%d*)")
energy3 = tonumber(energy3) + (puissance3 / 60)
npower3 = tonumber(npower3)
commandArray[5]={['UpdateDevice'] = conso_id3 .. '|0|' .. puissance3 .. ';' .. energy3}

end

if (otherdevices[radiateurCuisine] == 'Off') then 
-- envoie de la conso dans le capteur virtuel d'énergie
npower3, energy3 = string.match(otherdevices_svalues[conso3], "(%d+%.*%d*);(%d+%.*%d*)")
energy3 = tonumber(energy3)
npower3 = tonumber(npower3)
commandArray[6]={['UpdateDevice'] = conso_id3 .. '|0|' .. 0 .. ';' .. energy3}

end  

return commandArray

Re: probleme conso virtuel

Publié : 16 janv. 2016, 04:05
par vil1driver
@AlexElectro,

Je pense que tu n'as pas créé le bon compteur tout simplement.

Les modifications apportées au code d'alexbi ne te concernent pas car tu n'utilises qu'un compteur.

Re: probleme conso virtuel

Publié : 16 janv. 2016, 10:38
par AlexElectro
@Alexbi:

j'ai fait les modifications suivante:

Code : Tout sélectionner

---------- test consommation virtuel -------


-- radiateur

local radiateur = 'Radiateur Evrard'       -- Nom de l'interrupteur de chauffage
local puissance1 = 1000                  -- puissance du chauffage en watt
local conso1 = 'Conso Evrard'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id1 = 50                  -- idx du capteur virtuel de consommation électrique




commandArray = {}
 
if (otherdevices[radiateur] == 'On') then 
 
  -- envoie de la conso dans le capteur virtuel d'énergie
      npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
	  energy1 = tonumber(energy1) + (puissance1 / 60)    
      npower1 = tonumber(npower1)
	  commandArray[1]={['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1} 
      print('Conso Evrard envoyée')
             
    end
      
if (otherdevices[radiateur] == 'Off') then 
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1)
      npower1 = tonumber(npower1)
	  commandArray[2]={['UpdateDevice'] = conso_id1 .. '|0|' .. 0 .. ';' .. energy1} 
      print('Conso Evrard nulle')
   end
  

return commandArray
et j'ai toujours l'erreur:

Code : Tout sélectionner

Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_conso.lua:29: bad argument #1 to 'match' (string expected, got nil)
pas facile cette histoire!! :oops:

@vil1driver
quel compteur j'aurais du mettre? tu peux être un peu plus précis stp?

Re: probleme conso virtuel

Publié : 16 janv. 2016, 12:13
par vil1driver
Bien c'est spécifié, instant + compteur, c'est ce que tu as créés ?