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).
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.
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.
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.
slt,
je déterre un peu LOL,
ton tuto manque de précision pour un noob comme moi, j’ai une semaine de domoticz derrière moi
mais au final ça fonctionne bien.
donc un grand merci a toi.
kutsner
J’aimeJ’aime
Bonjour, comment récupérez-vous la mesure ? Je suis branché sur mon Linky et j’ai donc 2 mesures / dispositifs distincts, l’un en HP, l’autre en HC. Il m’est donc impossible de dédoubler les valeurs.
J’aimeJ’aime
Bonjour, j’ai mis le script et j’ai le message d’erreur suivant dans les logs. Je suis débutant en LUA , je ne vois pas de quoi il s’agit.
2018-01-09 16:21:00.514 Error: EventSystem: in script_elect: [string « function log(p_message) … »]:21: bad argument #1 to ‘pairs’ (table expected, got nil)
merci de votre aide.
J’aimeJ’aime
bonjour,
en réponse à votre erreur, c’est parce que votre script n’est pas déclenché par « device » (event) comme indiqué dans le tuto, mais certainement par « time » (et donc lancé chaque minute). le script demande la liste des devices updatés (« pairs(devicechanged) ») qui retourne un élément vide si le déclencheur est le temps.
à noter que l’update d’un device par « commandArray[‘UpdateDevice’] » ne déclenche pas les scripts « device »
si ça peut aider le prochain qui tombe sur cette erreur… 😉
et sinon, merci à l’auteur pour ce script… top !!
J’aimeJ’aime
Merci pour ce super tuto , je vais essayer d’intégrer ça dans mon domoticz car j’ai récemment ajouté un OWL (juste l’emetteur recepteur) + 2 pinces (1 pour la conso EDF (hc-hp) et l’autre pour ma production Photovoltaique) , la pince sur le photovoltaique me donne une conso presque identique a mon onduleur , par contre celle que j’ai mis sur le fil principal qui alimente mon tableau electrique , me donne une conso farfelue bien inferieure à mon compteur edf.
affaire à suivre…………..
J’aimeJ’aime
Bonjour,
Merci pour le script fonctionne super bien ! J’ai un OWL CM160 et donc je n’ai pas le retour pour la consommatio total. J’aurai souhaiter que l’index total soit incrémenter également (j’ai introduit manuellement pour la premiere fois le total des index HP et HC repris du compteur general) mais il reste toujours a la meme valeur. Y a t il un truc pour que cette valeur s’incrémente avec la consommation du jour ? (ca me permettrais de faire une comparaison du total indique sur le compteur et via domoticz)
Merci !
J’aimeJ’aime
Merci.
De quel index total parle tu?
Sur la « tuile » du compteur, tu as en haut à droite la consommation courante (241W sur mon article) puis sur la deuxième ligne, tu as le compteur total depuis le début (6109,28) puis La consommation du jour (16,937KWh).
Le compteur total devrait s’incrémenter.
J’aimeJ’aime
En fait chez moi c’est l’inverse mais c’est le pareil, sur la tuile de droite j’ai d’abord « Aujourd’hui » ensuite le total. Dans le total j’ai additionné les index heures creuses et heures pleines du « vrai compteur ». Ici je vois qu’il incrémente mais il y a un gros ecart. sur le compteur physique j’ai un total de 136 597 et dans domoticz137 593. Mais j’ai aussi des style de bugs (Luminus HCHP) :
puis ensuite cela redeviens des valeurs normales
Merci d’avance pour ton aide !
J’aimeJ’aime
Salut,
Tu as surement dû te planter d’un kilowatt à l’initialisation. Pour autant, le OWL et le compteur réel ne seront jamais synchrone, et il y aura très probablement une dérive dans le temps, la précision du OWL n’étant pas du même niveau que ton compteur (pince ampère métrique oblige).
Je n’ai jamais constaté le bug que tu as sur la première photo. Tu peux toujours activer les log et regarder ce qu’il se passe quand tu constates le bug d’affichage. Personnellement je suis sur une version stable de Domoticz.
J’aimeJ’aime
Bonjour, chez moi le script ne fonctionne pas, pouvez vous m’aider, il n’y a rien qui s’incrémente, j’ai un OWL 180, et je sais pas d’où cela peut venir ?
J’aimeJ’aime
En complément, j’ai bien sivi la documentation, et je me demande si c’est pas a cause de ma tuile source OWL, j’ai pas d’erreur dans les logs, comment je peux tester ?
J’aimeJ’aime
Bonsoir,
J’ai un ID non numérique pour le compteur OWL
2018-09-09 21:43:57.049 Error: EventSystem: in scripte_device_electric: [string « function log(p_message) … »]:16: malformed number near ‘00008B12’
Comment faire ?
J’aimeJ’aime
Je me suis trompé de colonne. 🙂
Désolé. Scripte marche nickel
J’aimeJ’aime
Plus d’erreur dans les logs, mais ca trace pas.
J’aimeJ’aime
Salut. Le script fonctionne parfaitement chez moi depuis un an. J’ai installé un bot telegram et je me demandais s’il y a un moyen de récupérer le coût quotidien dans les rapports de domoticz et de me l’envoyer dans telegram à chaque fin de journée ? Je m’éloigne du sujet de départ mais si qqn sait comment faire… Merci
J’aimeJ’aime
Bonjour
J’ai testé ce script et ait quelques pb apparemment. j’ai démarré hier.
sur le compteur OWl, pour la journé d’hier, l’OWL met 47kwh de conso, et le compteur HCHP mis à mis journé, met 21 kwh ce qui semble cohérent.
Pour aujourd’hui, à 8hr du mat, l’OWL met 21kwh et l’HCHP déja 90kwh…
J’ai copié tel quel, aux idx prés, le prog de l’exemple.
J’aimeJ’aime
Bonjour,
C’est bien un script device et pas time?
J’aimeJ’aime
Bonjour
ET merci de répondre si vite
Donc oui c’est bien un script device.
Dans un premier temps j’ai essayé ce midi en pensant à un pb d’initialisation des relecés de mettre à 0 si nil valeur
— For the first time, the value are not initilize in the smart counter, we set 0 by default.
if(EnergyImportLow == nil)then
EnergyImportLow =0
EnergyExportLow = 0
end
— For the first time, the value are not initilize in the smart counter, we set 0 by default.
if(EnergyImportHigh == nil)then
EnergyImportHigh =0
EnergyExportHigh =0
end
— For the first time, the value are not initilize in the smart counter, we set 0 by default.
if(PowerImport == nil)then
PowerImport = 0
PowerExport = 0
end
et j’ai donc recrée un compteur « intelligent »
même pb sur un jour j’ai déja 92kwh sur ce compteur alors que l’OWL indique 27kwh
J’aimeJ’aime
Bonjour Supermat
pour info, ici
http://easydomoticz.com/forum/viewtopic.php?f=8&t=8009&p=65552#p65552
j’ai ouvert un pb sur le forum de DOMOTICZ
Je parle pas des HCHP, car dans un premier temps j’ai déjà un écart entre ce que relève Domoticz par heure et le bilan de la journée…
pb de DOMOTICZ, de mon interprétation, paramètres?
J’aimeJ’aime
Salut,
Je viens de changer les piles de mon OWL et du coup j’ai des données complètement farfelue pour aujourd’hui. Tu parles de remise à zéro de valeur mais je comprends pas bien. Comment fais-tu cela ?
Merci,
PS: Merci pour ton script qui tourne parfaitement depuis plusieurs moi 😉
J’aimeJ’aime
Bonjour
Merci pour ce script qui marche vraiment bien.
le problème avec OWL ou la téléinfo est que l’on mesure des KVA (puissance apparente) et non des KW/H( energie consommée).
Avec tous les appareils en veille ça fini par faire une grosse différence; chez moi 480W/h pour 60W/h au compteur EDF.
J’aimeJ’aime