Additionner plusieur capteur de conso elect

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 <\>.
mulot35
Messages : 200
Inscription : 20 déc. 2014, 00:27

Additionner plusieur capteur de conso elect

Message par mulot35 »

Salut,
je suis sur l'excellent script de vil1driver (le V1 sans pir) pour la régule du chauffage.
1zone = 1 pièce = 1sonde+1commande de radiateur+un thermostat virtuel+1compteur de conso virtuel
J'ai 5 zone et je m'en sert pour faire des comparatifs (certaines partie de la maison non isolé)
Mais j'aimerai avoir un 6ème compteur virtuel qui totalise les 5 autres.
Es ce possible auriez vous une idée?

Code : Tout sélectionner

-- Ce script permet de maintenir la température
 
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_conf_semaine = 19  -- Température de consigne confort en semaine
local consigne_conf_weekend = 20  -- Température de consigne confort le weekend
local consigne_eco = 17  -- Température de consigne économique
local consigne_abs = 15  -- Température de consigne lors d'abscence prolongée

local sonde = 'salon' -- Nom de la sonde de température
local mode = 'ampli' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local thermostat = 'thermostat' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)
local boost = 'boost'   -- Nom de l'interrupteur virtuel de de forçage de la consigne en mode weekend

local radiateur = 'radiateur cuisine' -- Nom de l'interrupteur de chauffage
local puissance = 2700   -- puissance du chauffage en watt
local conso = 'conso salon'   -- nom du capteur virtuel de consommation électrique
local conso_id = 107   -- idx du capteur virtuel de consommation électrique

--------------------------------
-- Fin des variables à éditer --
--------------------------------
 
time = os.date("*t") 

-- on regarde depuis combien de temps l'inter de mode à changé d'état
t1 = os.time()
s = otherdevices_lastupdate[mode]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))

commandArray = {}
   
   local today = os.date("%A")
    local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) -- Température relevée
   
   if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On') then
      consigne_conf = consigne_conf_weekend
   else
      consigne_conf = consigne_conf_semaine
   end
   
   -- si le thermostat général est actif
    if (otherdevices[thermostat] == 'On') then
      -- si il y a présence ou abscence depuis moins d'une heure, la journée
        if (otherdevices[mode] == 'On' or (otherdevices[mode] == 'Off' and difference < 3600 and time.hour >= 7 and time.hour < 23)) then
         consigne = consigne_conf
         else
         consigne = consigne_eco
      end
   else
         consigne = consigne_abs
   end   
   
   if (temperature < consigne) then
   
      --commandArray[radiateur]='On'
      commandArray[1]={['radiateur salon']='On'}   
      commandArray[2]={['radiateur cuisine']='On'}
      print('Chauffage salon -. ON .-')
      
                  
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy) + (puissance / 60)    
      commandArray['UpdateDevice'] = conso_id .. '|0|' .. puissance .. ';' .. energy   
      
             
    else
      
      --commandArray[radiateur]='Off'
      commandArray[1]={['radiateur salon']='Off'}   
      commandArray[2]={['radiateur cuisine']='Off'}
      print('Chauffage salon -. OFF .-')
      
         
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy)
      commandArray['UpdateDevice'] = conso_id .. '|0|' .. 0 .. ';' .. energy   
      
   end

   print('il fait '..temperature..'°C pour '..consigne..'°C souhaité')
      
return commandArray
Raspi B+ avec Domoticz ,6 Chacon 2300W , 6 Sondes Oregon, 1 Sonde DIY Oregon ds18b20, Téléinfo sur photovoltaique, script backup ftp & anti offline.
chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Additionner plusieur capteur de conso elect

Message par chandler45 »

Je pense que oui c'est possible... Du coup pour le script ça donnerait quelque chose dans ce genre (attention, je ne l'ai pas testé) :

Code : Tout sélectionner

-- script script_time_cumul.lua
local consoTotaleIDX = 1  -- IDX du capteur de conso à mettre à jour

commandArray = {}

	consoZone1 = otherdevices_svalues["Capteur Conso Zone 1']
	consoZone2 = otherdevices_svalues["Capteur Conso Zone 2']
	consoZone3 = otherdevices_svalues["Capteur Conso Zone 3']
	consoZone4 = otherdevices_svalues["Capteur Conso Zone 4']
	consoZone5 = otherdevices_svalues["Capteur Conso Zone 5']
	consoTotale = tonumber(consoZone1) + tonumber(consoZone2) + tonumber(consoZone3) + tonumber(consoZone4) + tonumber(consoZone5)
	commandArray['UpdateDevice'] = consoTotaleIDX .. '|0|' .. consoTotale
	
return commandArray
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500
chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Additionner plusieur capteur de conso elect

Message par chandler45 »

Sinon, autre possibilité, tu peux aussi mettre à jour le capteur de conso totale à chaque fois que tu mets un des 5 autres à jour... Style :

Code : Tout sélectionner

-- La mise à jour du capteur de conso de la zone 1 par exemple que tu as déjà dans un de tes scripts
commandArray[1] = {['UpdateDevice'] = idZone1 .. "|0|" ..  energy}
-- Et tu ajoutes juste après les lignes suivantes
consoZoneTotale = otherdevices_svalues["Capteur Conso Totale'] -- Recuperation de l'ancienne valeur
consoZoneTotale  = consoZoneTotale + energy -- Ajout de la conso de la zone 1
commandArray[2] = {['UpdateDevice'] = idZoneTotale .. "|0|" ..  consoZoneTotale} -- Mise à jour de la conso totale
C'est peut être plus propre d'ailleurs...
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500
mulot35
Messages : 200
Inscription : 20 déc. 2014, 00:27

Re: Additionner plusieur capteur de conso elect

Message par mulot35 »

Merci je regarde ca ce soir
Raspi B+ avec Domoticz ,6 Chacon 2300W , 6 Sondes Oregon, 1 Sonde DIY Oregon ds18b20, Téléinfo sur photovoltaique, script backup ftp & anti offline.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Additionner plusieur capteur de conso elect

Message par vil1driver »

@chandler45,
ton code ne corresponds pas à un capteur instant+compteur mais à un compteur simple..
du plus le principe n'est pas bon :? ,
tu ne peux pas additionner le cumule des compteurs, il faut recalculer pour chaque compteur...


@mulot35,
je ferais comme ceci

Code : Tout sélectionner


local conso_zone = 'conso zone 1'   -- nom du capteur virtuel de consommation électrique de la zone
local conso_zone_id = 106   -- idx du capteur virtuel de consommation électrique de la zone

local conso_totale = 'conso totale'   -- nom du capteur virtuel de consommation électrique totale
local conso_totale_id = 107   -- idx du capteur virtuel de consommation électrique totale

... 
   
   if (temperature < consigne) then
   
      commandArray[radiateur]='On'
                     
      -- calcul zone
      npower1, energy1 = string.match(otherdevices_svalues[conso_zone], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1 + (puissance / 60))
        
      -- calcul total
      npower, energy = string.match(otherdevices_svalues[conso_totale], "(%d+%.*%d*);(%d+%.*%d*)")
      if(otherdevices[radiateur] == 'On') then
         power = tonumber(npower)
      else
         power = tonumber(npower + puissance)
      end   
      energy = tonumber(energy + (puissance / 60))
      
      -- envoie conso      
      commandArray[1]={['UpdateDevice'] = conso_zone_id .. '|0|' .. puissance .. ';' .. energy1 }   
      commandArray[2]={['UpdateDevice'] = conso_totale_id .. '|0|' .. power .. ';' .. energy }   
             
    else
     
      commandArray[radiateur]='Off'
      
     
      -- calcul conso zone
      npower1, energy1 = string.match(otherdevices_svalues[conso_zone], "(%d+%.*%d*);(%d+%.*%d*)")
      energy1 = tonumber(energy1)
      
      -- calcul conso totale
      npower, energy = string.match(otherdevices_svalues[conso_totale], "(%d+%.*%d*);(%d+%.*%d*)")
      if(otherdevices[radiateur] == 'On') then
         power = tonumber(npower - puissance)
         if(power < 0) then power = 0 end
      else
         power = tonumber(npower)
      end   
      energy = tonumber(energy)
      
      -- envoie conso
      commandArray[1]={['UpdateDevice'] = conso_zone_id .. '|0|' .. 0 .. ';' .. energy1 }
      commandArray[2]={['UpdateDevice'] = conso_totale_id .. '|0|' .. power .. ';' .. energy }
     
   end
   
 ...  
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Additionner plusieur capteur de conso elect

Message par chandler45 »

@vil1driver : le compteur simple c'était volontaire... J'ai commencé à ajouter ce genre d'information chez moi (conso d'un radiateur), et ma réflexion m'avait amené à me dire que la conso instantanée à partir du moment où on la calcule n'apporte pas forcément beaucoup d'information puisque dès que c'est allumé on a toujours le même chiffre. Mais effectivement c'est mon choix, et ce n'est peut être pas ce que mulot35 a mis en oeuvre.

Et pour le cumul tu as raison... j'oublie à chaque fois que c'est un cumul qui est envoyé... Et donc pour le coup la formule dans mon premier script était plus correcte...
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Additionner plusieur capteur de conso elect

Message par vil1driver »

je veux bien que l'instantané ne t'intéresse pas mais tu ne répondais pas à la question... :|
d'ailleurs dès que l'on parle de conso totale, on à pas toujours la même valeur pour l'instantané.
et cette valeur est d'ailleurs très intéressante pour faire du délestage par exemple..
et non que ce soit dans ton premier ou deuxième script, tu additionnais les cumules donc pas correct du tout. :(
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
chandler45
Messages : 49
Inscription : 09 mars 2015, 15:05

Re: Additionner plusieur capteur de conso elect

Message par chandler45 »

Bon... ben je sors alors...
Domoticz (dernière beta)
Raspberry Pi / RFXTrx433e
Sondes : 3 Sonde Oregon THN132N + 1 OWL Micro+ CM180
Interrupteurs : 3 Prises COCO (AWS APA3-1500R) + 3 Micro modules COCO AWS3500
mulot35
Messages : 200
Inscription : 20 déc. 2014, 00:27

Re: Additionner plusieur capteur de conso elect

Message par mulot35 »

Salut,
après plusieurs essaie "j'ai" reussi a faire marché le totaliseur de conso sur 2 script.
Petit problème :
-Quand je ne met qu'un script ca fonctionne (l'un ou l'autre)
-Quand je met les deux script le premier alimente le conso total mais le deuxième ni arrive pas.

Avez vous une solution

Code : Tout sélectionner

-- Ce script permet de maintenir la température
 
--------------------------------
------ Variables à éditer ------
--------------------------------
nom = 'SDB RDC'  --Affichage dans le log
local consigne_conf_semaine = tonumber(otherdevices_svalues['Thermostat_sdb'])  -- Température de consigne confort en semaine
local consigne_conf_weekend = tonumber(otherdevices_svalues['Thermostat_sdb'])  -- Température de consigne confort le weekend
local consigne_eco = tonumber(otherdevices_svalues['Thermostat_eco'])  -- Température de consigne économique
local consigne_abs = tonumber(otherdevices_svalues['Thermostat_eco'])  -- Température de consigne lors d'abscence prolongée

local sonde = 'Sonde_sdb_rdc' -- Nom de la sonde de température
local mode = 'Confort_on_eco_off' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local thermostat = 'Capteur_presence' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)
local boost = 'Forcage_confort'  -- Nom de l'interrupteur virtuel de forçage de la consigne en mode weekend

local radiateur = 'Radiateur_sdb_rdc' -- Nom de l'interrupteur de chauffage
local puissance = 2000   -- puissance du chauffage en watt
local conso = 'Conso_sdb_rdc'   -- nom du capteur virtuel de consommation électrique
local conso_id = 57  -- idx du capteur virtuel de consommation électrique
local conso_total = 'Conso_total'   -- nom du capteur virtuel de consommation électrique totale
local conso_total_id = 60   -- idx du capteur virtuel de consommation électrique totale

--------------------------------
-- Fin des variables à éditer --
--------------------------------
 
time = os.date("*t") 

-- on regarde depuis combien de temps l'inter de mode à changé d'état
t1 = os.time()
s = otherdevices_lastupdate[mode]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))

commandArray = {}
   
   local today = os.date("%A")
    local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) -- Température relevée
   
   if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On') then
      consigne_conf = consigne_conf_weekend
   else
      consigne_conf = consigne_conf_semaine
   end
   
   -- si le thermostat général est actif
    if (otherdevices[thermostat] == 'On') then
      -- si il y a présence ou abscence depuis moins d'une heure, la journée
        if (otherdevices[mode] == 'On' or (otherdevices[mode] == 'Off' and difference < 3600 and time.hour >= 7 and time.hour < 23)) then
         consigne = consigne_conf
         else
         consigne = consigne_eco
      end
   else
         consigne = consigne_abs
   end   
   
   if (temperature < consigne) then
   
      commandArray[radiateur]='On'
      print('Chauffage ' .. nom .. ' -. ON .-')
      
                  
      -- conso dans le capteur virtuel d'énergie
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy) + (puissance / 60)    
        
	  
	  -- conso dans le capteur virtuel d'énergie total
      npower2, energy2 = string.match(otherdevices_svalues[conso_total], "(%d+%.*%d*);(%d+%.*%d*)")
      energy2 = tonumber(energy2) + (puissance / 60)    
       
	  
	  -- envoi
	  commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. puissance .. ';' .. energy }
      commandArray[2]={['UpdateDevice'] = conso_total_id .. '|0|' .. puissance .. ';' .. energy2 } 
   else
      
      commandArray[radiateur]='Off'
      print('Chauffage ' .. nom .. ' -. OFF .-')
      
         
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy)
            
	  -- envoie de la conso dans le capteur virtuel d'énergie total
      npower2, energy2 = string.match(otherdevices_svalues[conso_total], "(%d+%.*%d*);(%d+%.*%d*)")
      energy2 = tonumber(energy2)   
      	  
	  -- envoi
	  commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. 0 .. ';' .. energy }
      commandArray[2]={['UpdateDevice'] = conso_total_id .. '|0|' .. 0 .. ';' .. energy2 } 
	  
   end

   print('il fait '..temperature..'C pour une consigne de '..consigne..'C souhaite dans la ' .. nom .. '')
      
return commandArray
Raspi B+ avec Domoticz ,6 Chacon 2300W , 6 Sondes Oregon, 1 Sonde DIY Oregon ds18b20, Téléinfo sur photovoltaique, script backup ftp & anti offline.
Répondre