Alors voila. Après plusieurs jours de tests, je n'ai eu aucun bug. J'ai modifié donc le script de chandler45 afin d'obtenir les relevés conso des heures creuses et pleines de chaque jour.
A la base son script fonctionne pour ceux qui une sonde CM180 pour récupérer les infos du compteur EDF. Pour tous ceux qui comme moi ont mi un optocoupleur relié sur le compteur EDF, le script ne fonctionne pas.
Avant j'obtenais ceci:

- domoticz conso.png (83.82 Kio) Consulté 8468 fois
Maintenant après modif du script j'ai ceci:

- EDF HC HP.png (40.03 Kio) Consulté 8468 fois

C'est déja plus parlant.
Maintenant la mise en place:
Il faut prendre tout le tuto de chandler45 présent sur la première page, faire l'étape 1 et l'étape 2
L'étape 3 il faut prendre mon code que voici:
Code : Tout sélectionner
-- script domoticz/scripts/lua/script_device_compteurHC-HP.lua
-- Initialisation des variables locales
local capteurGlobal = uservariables['CapteurGlobal']
local capteurCptHP = uservariables['CapteurCptHP']
local capteurCptHC = uservariables['CapteurCptHC']
local idxCptHP = uservariables['IdxCptHP']
local idxCptHC = uservariables['IdxCptHC']
local flagHC = uservariables['FlagHC']
local flagHP = uservariables['FlagHP']
-- Mode debug Oui / Non
local debug = uservariables['debug']
-- Fonction de mise à jour
function update(device, id, power, energy, index)
commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
return
end
commandArray = {}
-- On prend en compte a chaque changement de valeur du compteur global
if (devicechanged[capteurGlobal]) then
if (debug == 'OUI') then
print('-- Calcul Compteurs HC / HP --')
print('CapteurGlobal = '..capteurGlobal)
print('CapteurCptHP = '..capteurCptHP)
print('CapteurCptHC = '..capteurCptHC)
print('idxCptHP = '..tostring(idxCptHP))
print('idxCptHC = '..tostring(idxCptHC))
print('flagHP = '..tostring(flagHP))
print('flagHC = '..tostring(flagHC))
end
-- extraction de la puissance consommé en watt
-- Attention remplacer dans la ligne ci-dessous 'Compteur EDF' par le nom de votre capteur principal, ne pas mettre l'uservariable 'CapteurGlobal' ca ne marche pas
-- extraction de la valeur en watt , (P1 smart meter, ex: "Data" : "17564059;9855288;0;0;517;0")
a, b, x, y, watt, z = string.match(otherdevices_svalues['Compteur EDF'], "(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*)")
usage = tonumber(watt)
-- Recuperation des valeurs du compteur principal
local heurescreuses
local heurespleines
heurespleines, heurescreuses = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
heurespleines = tonumber(heurespleines)
heurescreuses = tonumber(heurescreuses)
watt = tonumber(watt)
if (debug == 'OUI') then
print('Heures pleines = '..tostring(heurespleines)..' / Heures Creuses = '..tostring(heurescreuses)..' / Watt = '..tostring(usage)..' ')
end
local consoCumuleCible
local consoInstantCible
if (otherdevices[flagHC] == 'On') then
-- Periode heures creuse
-- Recupération des valeurs actuelles du compteur Heures Creuses
consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
-- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
consoCumuleCible = tonumber(consoCumuleCible)
if (debug == 'OUI') then
print('Compteur cible = HC')
print('Valeur precedente = '..tostring(consoCumuleCible))
end
-- Calcul de la conso journalière HC
consoCumuleCible = consoCumuleCible + heurescreuses
-- Mise à jour du compteur
update(capteurCptHC, idxCptHC, usage , heurescreuses, 1)
-- Mise à 0 de la conso intantanee du compteur HP
consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
consoInstantHP = 0
update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)
else
if (otherdevices[flagHP] == 'On') then
-- Periode heures pleines
-- Récuperation des valeurs du compteur Heures Pleines
consoInstancible, consoCumuleCible = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
-- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
consoCumuleCible = tonumber(consoCumuleCible)
if (debug == 'OUI') then
print('Compteur cible = HP')
print('Valeur precedente = '..tostring(consoCumuleCible))
end
-- calcul de la conso journaliere HP
consoCumuleCible = consoCumuleCible + heurespleines
-- Mise à jour du compteur
update(capteurCptHP, idxCptHP, usage , heurespleines, 3)
-- Mise à 0 de la conso intantanée du compteur HC
consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
consoInstantHC = 0
update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 4)
end
if (debug == 'OUI') then
print('-- Fin Calcul Compteur HC / HP --')
end
end
end
return commandArray
Pour les variables :
CapteurGlobal : Nom du capteur physique que vous avez mi lors de la création de votre compteur EDF. Pour moi comme le montre l'image au dessus c'est "Compteur EDF"
CapteurCptHP : nom du capteur virtuelle HP (chez moi Compteur Electrique HP)
CapteurCptHC : nom du capteur virtuelle HC (chez moi Compteur Electrique HC)
idxCptHP : IDX du capteur virtuelle HP
idxCptHC : IDX du capteur virtuelle HC
flagHP : Nom du switch HP
flagHC : Nom du switch HC
Pas besoin de la variable LastValueCptElecGlobal pour mon script
Voila j'espère que cela fonctionne chez vous comme chez moi