[DzVents] Batterie virtuelle

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Vulmix
Messages : 14
Inscription : 12 mai 2021, 22:20

[DzVents] Batterie virtuelle

Message par Vulmix »

Bonjour à tous,

Est-ce que vous vous êtes déjà demandé s'il serait intéressant d'ajouter une batterie à votre installation de panneaux solaires ? Moi bien :D

Avant de faire l'achat et même si celui-ci sera probablement dans plusieurs années, je me suis dit que ce serait bien de simuler leur installation. Et pourquoi ne simuler qu'une seule ?

Bon c'est pas le module qui va révolutionner domoticz mais il fait son taf ;)

Dans mon cas, j'ai simulé deux batteries. Une de 5 kWh et une autre de 8,6 kWh. Ainsi en analysant les données, je pourrai voir ce qui serait le plus intéressant. Soit celle de 5 kWh ou celle de 8,6 kWh. On pourrait simuler plus de batteries ou d'autres puissances, le code n'est pas difficile à adapter.

Pour la première, j'ai ajouté deux "Dummy Devices" : un compteur électrique et un pourcentage.
Pour le deuxième, je n'ai utilisé qu'un "Dummy Devices" pourcentage. (je n'avais pas envie de saturer mes dispositifs)

Pour obtenir le nombre de kWh entrant et sortant, j'utilise les informations que me retourne de dispositif "P1 Smart Meter", mais il est facilement adaptable à d'autres systèmes de mesure.

Le principe est simple. S'il y a plus de courant que nécessaire, on charge la/les batterie(s) en tenant compte d'un coefficient de rendement. S'il n'y a pas assez de courant, on décharge la/les batterie(s). On comptabilise aussi ce que l'on achète et ce que l'on vend (un compteur par batterie).

Tout tient dans un simple module dzVents.

Les informations secondaires sont envoyées dans le logfile.

Code : Tout sélectionner

return {
	on = {
		    timer = {'every 5 minutes'}
	},
	data = {
	        start = {initial = true},
	        cptAchatPre ={initial = 0 },
	        cptVentePre ={initial = 0 },

            -- informations gardées pour la batterie 5kWh 
	        Achat5 = {initial = 0},
	        Vente5 = {initial = 0},

            -- informations gardées pour la batterie 8.6 kWh (cas où il n'y a pas l'éléments "compteur électrique"
	        Batt9kWh = {initial = 0},
	        Achat9 = {initial = 0},
	        Vente9 = {initial = 0}
	},
	logging = {
		level = domoticz.LOG_INFO,
		marker = 'template',
	},
	execute = function(domoticz, device)
      -- On récupère les données du mon compteurs "intelligent" via le module P1     
      Achat=domoticz.devices('Electricité').usage1 + domoticz.devices('Electricité').usage2  -- On somme les deux compteurs d'achat d'électricité (jour et nuit)
      Vente=domoticz.devices('Electricité').return1 + domoticz.devices('Electricité').return2 -- idem pour les compteurs de vente
      -- Si c'est la première fois que l'on fait tourner le module, il faut initialiser les compteurs
      if (domoticz.data.start) then 
	        domoticz.data.cptAchatPre=Achat
            domoticz.data.cptVentePre=Vente
            domoticz.data.start=false  --Et on ne doit plus passer 
      end
    
      -- On regarde le nombre de Wh que l'on a acheté et que l'on a vendu depuis le dernier passage.    
      AchatPeriode=(Achat-domoticz.data.cptAchatPre) 
      VentePeriode=(Vente-domoticz.data.cptVentePre) 

      -- on modifie les variables du module pour le prochain passage    
      domoticz.data.cptAchatPre=Achat
      domoticz.data.cptVentePre=Vente

      -- le solde de la période est ce que l'on va charger dans la/les batterie(s) virtuelle(s). Le facteur 0.9 est le coefficient de chargement de la batterie (à modifier si c'est une autre spécification)    
      Solde=VentePeriode * 0.9 -AchatPeriode
      
      -- Les informations "secondaires" sont affichées dans le log.
      text = '<br><br>'
      text = text .. 'Achat Période : ' .. AchatPeriode .. ' Wh <br>'
      text = text .. 'Vente Période : ' .. VentePeriode .. ' Wh <br>'

      
      
      -- Simulation de la batterie 5kWh. Elle est représentée par deux éléments :
      -- un compteurs éléctrique "Batterie Virtuelle 5kWh" et un pourcentage "Niveau Batterie Virtuelle 5kWh"
      
	  if (domoticz.devices('Batterie Virtuelle 5kWh').WhTotal+Solde <0) then --Batterie vide car on veut retirer plus de wh que ce que la batterie possède.
	     domoticz.devices('Batterie Virtuelle 5kWh').updateElectricity(0,0)  -- on "vide" la batterie
 	     text = text .. ('--> Batterie 5kWh Vide ! <--<br>')   --On affiche qu'elle est vide
	     Pourcentage = 0   -- On est à 0 % 
	     domoticz.data.Achat5=domoticz.data.Achat5-(domoticz.devices('Batterie Virtuelle 5kWh').WhTotal+Solde) -- On compte le nb de Wh que l'on achète. 
	  elseif (domoticz.devices('Batterie Virtuelle 5kWh').WhTotal+Solde >5000) then  -- Cas où il y a plus de Wh que ce que la batterie peut comptabiliser (ici 5000 wH)
	       domoticz.devices('Batterie Virtuelle 5kWh').updateElectricity(0,5000) -- On signale que la batterie est pleine. 
	       text = text .. ('--> Batterie 5 Pleine ! <--<br>')  --on marque l'info dans le log.
	       Pourcentage = 1 -- On est à 100% (la multiplication par 100 se fait plus bas ;-) )
	       domoticz.data.Vente5=domoticz.data.Vente5+(domoticz.devices('Batterie Virtuelle 5kWh').WhTotal+Solde)-5000 -- on compte ce que l'on retourne sur le réseau
	    else -- soit on charge et le Solde est positif, soit on décharge et le solde est négatif
	       domoticz.devices('Batterie Virtuelle 5kWh').updateElectricity(Solde,domoticz.devices('Batterie Virtuelle 5kWh').WhTotal+Solde) -- mise à jour du compteur
	       Pourcentage = (domoticz.devices('Batterie Virtuelle 5kWh').WhTotal)/5000 -- calcul du % (la multiplication par 100 est plus bas)
	  end
	  domoticz.devices('Niveau Batterie Virtuelle 5kWh').updatePercentage(Pourcentage*100) -- modification de l'élément %
	  text = text .. '% batterie 5 : ' .. domoticz.devices('Niveau Batterie Virtuelle 5kWh').percentage .. '<br>' -- Affiche le résultat
	  
	  --Simultion de la deuxième batterie... Ici il n'y a pas d'élement compteur électrique, c'est pour cela que l'on utilise à la place la variable local au module : domoticz.data.Batt9kWh
	  --Sinon c'est le même algorithme que pour la batterie 5kWh
	  if (domoticz.data.Batt9kWh+Solde <0) then 
	     domoticz.data.Batt9kWh=0
	     text = text .. ('--> Batterie 8,6 kWh Vide ! <--<br>')
	     Pourcentage = 0
	     domoticz.data.Achat9=domoticz.data.Achat9-(domoticz.data.Batt9kWh+Solde)
	  elseif (domoticz.data.Batt9kWh+Solde >8600) then
	       domoticz.data.Batt9kWh=8600
	       text = text .. ('--> Batterie 8,6 kWh Pleine ! <--<br>')
	       Pourcentage = 1
	       domoticz.data.Vente9=domoticz.data.Vente9+(domoticz.data.Batt9kWh+Solde)-8600
	    else
	       domoticz.data.Batt9kWh=domoticz.data.Batt9kWh+Solde
	       Pourcentage = (domoticz.data.Batt9kWh)/8600
	  end
	  domoticz.devices('Niveau Batterie Virtuelle 9kWh').updatePercentage(Pourcentage*100)
      text = text .. 'Contenu batterie 8,6 : ' .. domoticz.data.Batt9kWh .. ' Wh <br>'  -- On affiche l'innformation dans le log puisqu'il n'y a pas de compteur

	  text = text .. '% batterie 8,6 : ' .. domoticz.devices('Niveau Batterie Virtuelle 9kWh').percentage .. '<br>'
      text= text.. "Compteur Batt 5 Achat : " .. domoticz.data.Achat5 .. " Wh<br>"    
      text= text.. "Compteur Batt 5 Vente : " .. domoticz.data.Vente5 .. " Wh<br>"    
      text= text.. "Compteur Batt 8,6 Achat : " .. domoticz.data.Achat9 .. " Wh<br>"    
      text= text.. "Compteur Batt 8,6 Vente : " .. domoticz.data.Vente9 .. " Wh<br>"   

      domoticz.log(text) -- affiche données dans le log
	   
end
}
N'hésitez pas à me contacter si vous avez des questions. :?:

Vulmix
Dernière modification par Vulmix le 11 juin 2022, 17:32, modifié 1 fois.
Jieffe
Messages : 55
Inscription : 27 mars 2021, 20:52

Re: [DzVents] Batterie virtuelle

Message par Jieffe »

Super idée !!!

Je me posais également la même question quant à l'utilité d'ajouter une batterie à mon installation solaire.

Avec l'inflation galopante actuelle, je me demande si je ne devrais pas sauter le pas tant que mes économies me permettent d'acheter plus qu'un paquet familial de KitKat :)
Répondre