J’étudie actuellement la rentabilité de l’abonnement heures pleines/heures creuses : EDF et la rentabilité de l’abonnement heures creuses. Je suis donc intéressé par connaitre ma répartitions des consommation HP/HC. Je dispose actuellement d’un compteur OWL relevé par mon RFLink. Il réalise le suivi de ma consommation, mais il ne gère qu’un seul compteur (tarif). Mon objectif est donc de « découper » ma consommation en deux pour distinguer les HP/HC. Il se trouve que Domoticz fourni un tel compteur avec deux tarifs différents. D’autre part, je connais mes plages horaires HP/HC.

J’ai donc créé un script lua qui en transforme mon compteur électrique (Instant+compteur) du OWL en un compteur P1 Compteur Intelligent.

Le principe

Le principe est simple. Je dois transformer un compteur unique (OWL) en deux compteurs (HP + HC). Donc la somme des deux compteurs doit à tout moment être égale au compteur unique. A chaque changement de valeur du compteur principal (OWL), pour connaitre l’évolution du compteur depuis la dernière mesure, j’utilise la formule suivante :

Conso OWL = cpt HP + cpt HC + Delta depuis dernière mesure

J’en déduis donc que

Delta depuis dernière mesure = Conso OWL - (cpt HP + cpt HC)

En fonction de la plage horaire j’ajoute ce delta au compteur HP ou HC.

Indiquer ses plages horaires à Domoticz

Pour connaitre la plage horaire en cours, j’ai créé un interrupteur virtuel (Matériel virtuel) qui doit être « ON » pendant les heures creuses (planification).

 HPHC1

HPHC2

Notez son IDX depuis les dispositifs.

Créer le compteur virtuel intelligent

Toujours dans matériel virtuel, créer capteur virtuel de type P1 compteur intelligent.

HPHC3

Notez son IDX depuis les dispositifs.

Le script

Il vous faudra également l’IDX du compteur principal (OWL). Remplacer les numéros des IDX (en rouge) et créez un nouveau script lua (Réglage > plus d’option > événements) de type device, il se déclenchera à chaque fois que le compteur recevra une nouvelle valeur.

HPHC6.png

function log(p_message)
-- print("[HPHC] " .. p_message)
end
function getdevname4idx(deviceIDX)
 for i, v in pairs(otherdevices_idx) do
   if v == deviceIDX then
     return i
   end
 end
 return 0
end

commandArray = {}
DEBUG = false

local nomCompteurPrincipal = getdevname4idx(30) --OWL
local idxCompteurIntelligent = 2553
local nomCompteurIntelligent = getdevname4idx(idxCompteurIntelligent)--HPHC
local nomHeureCreuse = getdevname4idx(2552) -- Switch Heures Creuses

for deviceName,deviceValue in pairs(devicechanged) do
 if (deviceName==nomCompteurPrincipal) then
   -- On récupère la valeur du compteur unique => consEnergy
   ConsPower, consEnergy = string.match(otherdevices_svalues[nomCompteurPrincipal], "(%d+%.*%d*);(%d+%.*%d*)")
   log(ConsPower.."-"..consEnergy)
   --on somme les compteurs HP et HC => EnergyImport
   --http://www.domoticz.com/wiki/Upload_energy_data_to_PVoutput
   EnergyImportLow, EnergyImportHigh, EnergyExportLow, EnergyExportHigh, PowerImport, PowerExport = otherdevices_svalues[nomCompteurIntelligent]:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
  
   -- For the first time, the value are not initilize in the smart counter, we set 0 by default.
   if(EnergyImportLow == nil)then
     EnergyImportLow =0
     EnergyImportHigh =0
     EnergyExportLow = 0
     EnergyExportHigh =0
     PowerImport = 0
     PowerExport = 0
   end
   -- Lors du changement de pile du compteur unique, consEnergy a été réinitialisé, faussant complémtement les valeurs de EnergyImportLow/EnergyImportHigh
   if((EnergyImportLow+0) < 0 or (EnergyImportHigh+0) < 0) then
     EnergyImportLow =0
     EnergyImportHigh =0
     log("  ----- Reinit de EnergyImportLow/EnergyImportHigh");
   end

   EnergyImport = EnergyImportLow + EnergyImportHigh
   EnergyExport = EnergyExportLow + EnergyExportHigh

   log(" ----- PowerImport = " .. PowerImport .. " W");
   log(" ----- EnergyImportLow = " .. EnergyImportLow .. " Wh");
   log(" ----- EnergyImportHigh = " .. EnergyImportHigh .. " Wh");
   log(" ----- EnergyImport = " .. EnergyImport .. " Wh");
   log(" ----- PowerExport = " .. PowerExport .. " W");
   log(" ----- EnergyExportLow = " .. EnergyExportLow .. " Wh");
   log(" ----- EnergyExportHigh = " .. EnergyExportHigh .. " Wh");
   log(" ----- EnergyExport = " .. EnergyExport .. " Wh");
 
   --On calcule le delta avec le compteur actuel
   delta = consEnergy - EnergyImport
 
   --On ajoute le delta sur le bon tarif
   if (otherdevices[nomHeureCreuse] == 'On') then
     EnergyImportLow = EnergyImportLow + delta
   else
     EnergyImportHigh = EnergyImportHigh + delta
   end
 
   --On modifie le compteur intelligent
   commandArray['UpdateDevice'] = idxCompteurIntelligent.."|0|"..EnergyImportLow..";"..EnergyImportHigh..";0;0;"..ConsPower..";0"

 end
end

return commandArray

Edit 29/10/2018 : Suite au changement de pile de mon compteur OWL, son compteur de consommation cumulée est repassé à 0, faussant complètement les calculs de delta entre le compteur OWL et le compteur intelligent virtuel (L’une des consommations passe en négatif). Pour corriger, si je détecte un cumul négatif, je remet à zéro, faussant la première mesure, mais tout rentre dans l’ordre dès la deuxième mesure.

Et voilà le résultat

Après plusieurs mois d’usage, cela semble fonctionner correctement, je n’ai pas de désynchro entre mes compteurs. Et je vois maintenant mes ratio HPHC.

HPHC5.png

HPHC4.png