Page 17 sur 33
Re: Repartition Consommation HC / HP...
Publié : 10 juil. 2016, 18:09
par itcitc77
bonjour a tous j'ai un problème avec le script initiale il ne me remonte pas la valeur de :LastValueCptElecGlobal
voila le log
2016-07-10 18:06:57.595 LUA: -- Calcul Compteurs HC / HP --
2016-07-10 18:06:57.596 LUA: CapteurGlobal = EDF CONSOMMATION
2016-07-10 18:06:57.596 LUA: CapteurCptHP = EDF H.P.
2016-07-10 18:06:57.596 LUA: CapteurCptHC = EDF H.C.
2016-07-10 18:06:57.597 LUA: idxCptHP = 82
2016-07-10 18:06:57.597 LUA: idxCptHC = 81
2016-07-10 18:06:57.597 LUA: flagHP = Compteur Electrique HP
2016-07-10 18:06:57.597 LUA: flagHC = Compteur Electrique HC
2016-07-10 18:06:57.597 LUA: LastValueCptElecGlobal
2016-07-10 18:06:57.597 LUA: LastValueCptElecGlobal = nil
2016-07-10 18:06:57.597 LUA: LastValueCptElecGlobal
2016-07-10 18:06:57.597 LUA: Conso Instant = 804 / Conso Cumule = 759635.5
2016-07-10 18:06:57.597 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_device_compteurHC-HP.lua: .../pi/domoticz/scripts/lua/script_device_compteurHC-HP.lua:53: attempt to perform arithmetic on local 'lastValueCptElecGlobal' (a nil value)
la valeur dans domoticz
6 lastValueCptElecGlobal Décimal 759444.938
Merci de vos réponses
Re: Repartition Consommation HC / HP...
Publié : 11 juil. 2016, 20:35
par itcitc77
bon cela fonctionne j'ai supprimé la ligne de la variable dans le script et je l'ai retapée, et cela fonctionne bizarre bizarre
Re: Repartition Consommation HC / HP...
Publié : 29 oct. 2016, 21:40
par jfpiat
Bonsoir,
J'ai réutitilisé une bonne partie du script placé en première page, mais j'y ai fait quelques ajustements.
J'ai notamment supprimé bon nombre des variables utilisateurs, car je trouvais l'utilisation un peu lourde.
J'ai aussi supprimé l'utilisation de la variable d'historisation pour positionner les valeurs dans un compteur Histo.
Dernier point, qui marche que depuis 24h, le calcul du cout en €, jour par jour.
Code : Tout sélectionner
-- script domoticz/scripts/lua/script_device_compteurHC-HP.lua
local script_label = "EDF"
-- Initialisation des variables locales
local capteurGlobal = "Compteur_Global_Cumul"
local capteurCptHP = "Compteur_HP"
local capteurCptHC = "Compteur_HC"
local HistoHCHP = "Compteur_Histo"
local euro = "EURO_EDF"
local idxCptHP = otherdevices_idx[capteurCptHP]
local idxCptHC = otherdevices_idx[capteurCptHC]
local idxCptHisto = otherdevices_idx[HistoHCHP]
local idxEuro = otherdevices_idx[euro]
local flagHC = "EDF_HCHP"
local euro_HC = uservariables['Cout_KW_HC']
local euro_HP = uservariables['Cout_KW_HP']
-- Mode debug Oui / Non
local debug = uservariables['DEBUG']
-- Fonction de mise à jour
function update(device, id, power, energy, index)
print(script_label .. ' Update ' .. device .. ' ID : ' .. id .. ' => power : ' .. power .. ' energy :' .. energy)
commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
return
end
commandArray = {}
if otherdevices["Standbye_Signal"] == "On" then
print (script_label .. " : Standbye_Signal configuré, aucun pilotage")
return commandArray
end
print(script_label .. ' Start')
print(script_label .. ' Debug : ' .. debug)
print(script_label .. ' capteurGlobal : ' .. capteurGlobal)
Conso_Instant, Conso_Cumul = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
Conso_Instant = tonumber (Conso_Instant)
print (script_label .. ' Conso Instant = ' .. Conso_Instant .. "/Watts")
print (script_label .. ' Conso Cumul = ' .. Conso_Cumul .. "/Watts")
print (script_label .. ' Conso Cumul/1000 = ' .. Conso_Cumul/1000 .. "/kWh")
-- update(HistoHCHP, idxCptHisto, 0, 0, 1)
-- update(capteurCptHP, 726, 0, 0, 5)
-- update(capteurCptHC, idxCptHC, 0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
-- update(euro, 728, 0,0, 5)
if (devicechanged[capteurGlobal]) then
print (script_label .. ' Il y a eu augmentation de la consommation')
-- Mise à jour du compteur
Histo_Instant, Histo_Cumul = otherdevices_svalues[HistoHCHP]:match("([^;]+);([^;]+)")
print (script_label .. ' Conso Histo Instant = ' .. Histo_Instant .. "/kWh")
print (script_label .. ' Conso Histo Cumul = ' .. Histo_Cumul .. "/kWh")
print (script_label .. ' Conso Histo Cumul/1000 = ' .. Histo_Cumul/1000 .. "/kWh")
-- commandArray[capteurCptHP]= tostring(Delta_Conso)
print (script_label .. ' flagHC = ' .. otherdevices[flagHC])
if (otherdevices[flagHC]=='On') then
print (script_label .. ' On est en heures creuses')
Delta_Conso = (Conso_Cumul-Histo_Cumul)
print (script_label .. ' Delta Conso = ' .. Delta_Conso .. "/Wh")
print (script_label .. ' Delta Conso = ' .. Delta_Conso/1000 .. "/kWh")
print (script_label .. ' La conso du kWh HC est de : ' .. euro_HC)
-- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
conso_Cumul = tonumber(conso_Cumul)
euro_HCHP = euro_HC
print(script_label .. ' Compteur cible = HC')
print(script_label .. ' Valeur capteurCptHC = '..tostring(capteurCptHC))
print(script_label .. ' Valeur idxCptHC = '..tostring(idxCptHC))
print(script_label .. ' Valeur consoInstant = '..tostring(Conso_Instant))
-- Mise à jour du compteur
consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
print(script_label .. ' Valeur consoInstantHC = '..tostring(capteurCptHC))
print(script_label .. ' Valeur consoCumuleHC = '..tostring(capteurCptHC))
update(capteurCptHC, idxCptHC, tonumber(Conso_Instant), consoCumuleHC+Delta_Conso, 1)
-- Mise à 0 de la conso intantanee du compteur HP
consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
consoInstantHP = 0
update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)
-- Sauvegarde de la valeur du compteur global pour prochain calcul
update(HistoHCHP, idxCptHisto, Conso_Instant, Conso_Cumul, 3)
euro_HCHP = euro_HC
else
-- Periode heures pleines
-- Recuperation des valeurs du compteur global
print (script_label .. ' On est en heures pleines')
Delta_Conso = (Conso_Cumul-Histo_Cumul)
print (script_label .. ' Delta Conso = ' .. Delta_Conso .. "/Wh")
print (script_label .. ' Delta Conso = ' .. Delta_Conso/1000 .. "/kWh")
print (script_label .. ' La conso du kWh HP est de : ' .. euro_HP)
-- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
conso_Cumul = tonumber(conso_Cumul)
euro_HCHP = euro_HP
print(script_label .. ' Compteur cible = HP')
print(script_label .. ' Valeur capteurCptHP = '..tostring(capteurCptHP))
print(script_label .. ' Valeur idxCptHP = '..tostring(idxCptHP))
print(script_label .. ' Valeur consoInstant = '..tostring(Conso_Instant))
-- Mise à jour du compteur
consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
update(capteurCptHP, idxCptHP, tonumber(Conso_Instant), consoCumuleHP+Delta_Conso, 1)
-- Mise à 0 de la conso intantanee du compteur HC
consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
consoInstantHC = 0
update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 2)
-- Sauvegarde de la valeur du compteur global pour prochain calcul
update(HistoHCHP, idxCptHisto, Conso_Instant, Conso_Cumul, 3)
euro_HCHP = euro_HP
end
print(script_label .. ' Calcul Tarifaire')
print(script_label .. ' Calcul Tarifaire => Delta_Conso /Wh: ' .. Delta_Conso)
print(script_label .. ' Calcul Tarifaire => Delta_Conso /kWh: ' .. Delta_Conso/1000)
print(script_label .. ' Calcul Tarifaire => Tarif kWh : ' .. euro_HCHP)
print(script_label .. ' Calcul Tarifaire => Cout : ' .. Delta_Conso/1000*euro_HCHP)
Cout_Instant, Cout_Cumul = otherdevices_svalues[euro]:match("([^;]+);([^;]+)")
print(script_label .. ' Calcul Tarifaire => Cout_Cumul actuel : ' .. Cout_Cumul)
print(script_label .. ' Calcul Tarifaire => Cout_Cumul+Delta_Conso*euro_HCHP : ' .. Cout_Cumul+Delta_Conso/1000*euro_HCHP)
update(euro, idxEuro, Cout_Cumul+ Delta_Conso/1000*euro_HCHP, Cout_Cumul+ Delta_Conso/1000*euro_HCHP, 4)
else
print (script_label .. " Il n'y a PAS eu augmentation de la consommation")
end
return commandArray
Je pense réutiliser le debug.
voila pour mes mesures

- Mesures.jpg (266.88 Kio) Consulté 9645 fois
Le calcul €

- euros.jpg (122.72 Kio) Consulté 9645 fois
et mes variables

- Variables.jpg (122.33 Kio) Consulté 9645 fois
Voici un extrait des logs, lorsqu'il y a changement d'état sur le CM180 avec une modification du total de W consommés
Code : Tout sélectionner
2016-10-29 21:38:20.832 LUA: EDF Start
2016-10-29 21:38:20.832 LUA: EDF Debug : 1
2016-10-29 21:38:20.832 LUA: EDF capteurGlobal : Compteur_Global_Cumul
2016-10-29 21:38:20.832 LUA: EDF Conso Instant = 1078/Watts
2016-10-29 21:38:20.832 LUA: EDF Conso Cumul = 6345037.500/Watts
2016-10-29 21:38:20.848 LUA: EDF Conso Cumul/1000 = 6345.0375/kWh
2016-10-29 21:38:20.848 LUA: EDF Il y a eu augmentation de la consommation
2016-10-29 21:38:20.848 LUA: EDF Conso Histo Instant = 1062/kWh
2016-10-29 21:38:20.848 LUA: EDF Conso Histo Cumul = 6345019.500/kWh
2016-10-29 21:38:20.848 LUA: EDF Conso Histo Cumul/1000 = 6345.0195/kWh
2016-10-29 21:38:20.848 LUA: EDF flagHC = Off
2016-10-29 21:38:20.848 LUA: EDF On est en heures pleines
2016-10-29 21:38:20.848 LUA: EDF Delta Conso = 18/Wh
2016-10-29 21:38:20.848 LUA: EDF Delta Conso = 0.018/kWh
2016-10-29 21:38:20.848 LUA: EDF La conso du kWh HP est de : 0.15762
2016-10-29 21:38:20.848 LUA: EDF Compteur cible = HP
2016-10-29 21:38:20.848 LUA: EDF Valeur capteurCptHP = Compteur_HP
2016-10-29 21:38:20.848 LUA: EDF Valeur idxCptHP = 726
2016-10-29 21:38:20.863 LUA: EDF Valeur consoInstant = 1078
2016-10-29 21:38:20.863 LUA: EDF Update Compteur_HP ID : 726 => power : 1078 energy :28385
2016-10-29 21:38:20.863 LUA: EDF Update Compteur_HC ID : 725 => power : 0 energy :19985
2016-10-29 21:38:20.863 LUA: EDF Update Compteur_Histo ID : 724 => power : 1078 energy :6345037.500
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire => Delta_Conso /Wh: 18
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire => Delta_Conso /kWh: 0.018
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire => Tarif kWh : 0.15762
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire => Cout : 0.00283716
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire => Cout_Cumul actuel : 5.61653278
2016-10-29 21:38:20.863 LUA: EDF Calcul Tarifaire => Cout_Cumul+Delta_Conso*euro_HCHP : 5.61936994
2016-10-29 21:38:20.863 LUA: EDF Update EURO_EDF ID : 728 => power : 5.61936994 energy :5.61936994
Amusez-vous bien !
Re: Repartition Consommation HC / HP...
Publié : 29 oct. 2016, 22:02
par stephdes
Jfpiat, je pense que tu vas être ma prochaine source d'inspiration !
Merci du partage par contre je ne comprends pas bien le code que tu as collé

Re: Repartition Consommation HC / HP...
Publié : 29 oct. 2016, 22:50
par jfpiat
Salut,
lol, c'est corrigé, j'crois que c'est le bon maintenant
jfp
Re: Repartition Consommation HC / HP...
Publié : 30 oct. 2016, 09:49
par Snorky
Bonjour,
Voici ma version :
Code : Tout sélectionner
-- Version : 20161030_01
-- Author : chandler45 (easydomoticz.com) / Snorky
-- Recuperation releve electricite et dispatch HP/HC
--------------------------------
-- Variable a editer -----------
--------------------------------
local capteurGlobal = 'CompteurEDF' -- Nom device OWL 180
local capteurHP = 'ConsoHP' -- Nom virtual device des HP
local capteurHPIdx = 26 -- IDX virtual device des HP
local capteurHC = 'ConsoHC' -- Nom virtual device des HC
local capteurHCIdx = 25 -- IDX virtual device des HC
local flagHP = 'HP EDF' -- Nom virtual device des HP/HC
--------------------------------
-- Fin des variables a editer --
--------------------------------
-- Fonction de mise à jour
function update(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[flagHP]) then
-- Recuperation des valeurs du compteur global
local consoCumule
local consoInstant
consoInstant, consoCumule = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
consoInstant = tonumber(consoInstant)
consoCumule = tonumber(consoCumule)
-- Recuperation des valeurs du compteur HP
local consoCumuleHP
local consoInstantHP
consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurHP]:match("([^;]+);([^;]+)")
consoInstantHP = tonumber(consoInstantHP)
consoCumuleHP = tonumber(consoCumuleHP)
-- Recuperation des valeurs du compteur HP
local consoCumuleHC
local consoInstantHC
consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurHC]:match("([^;]+);([^;]+)")
consoInstantHC = tonumber(consoInstantHC)
consoCumuleHC = tonumber(consoCumuleHC)
-- Calcul de l'ecart entre compteurGlobal et compteurHP+compteurHC
local consoDelta = consoCumule - consoCumuleHP - consoCumuleHC
-- Changement HP/HC
if (otherdevices[flagHP] == 'On') then
-- Mise à jour du compteur HC
update(capteurHCIdx, 0, consoCumuleHC+consoDelta,1)
else
-- Mise à jour du compteur HP
update(capteurHPIdx, 0, consoCumuleHP+consoDelta,2)
end
end
return commandArray
Je suis reparti du code de chandler45 mais j'ai simplifié le principe pour moi.
- Un device global : OWL 180
- Un device virtuel de type Electric pour les HP
- Un device virtuel de type Electric pour les HC
- Un device vituel interrupteur HP (avec planning je le passe à ON/OFF en fonction de mes heures)
La différence majeure avec le script initial est que je ne stocke pas la dernière valeur de conso globale.
1 - Récupération de la conso globale (c'est la consommation actuelle)
2 - Récupération de la conso HP (c'est la dernière conso stockée lorsque je suis passé en HP)
3 - Récupération de la conso HC (c'est la dernière conso stockée lorsque je suis passé en HC)
4 - Calcul du delta avec consoGlobale - consoHP - consoHC
Exemple :
23h30 : ConsoGlobale=100 / ConsoHP=70 / ConsoHC=30
6h29 : ConsoGlobale=130 / ConsoHP=70 / ConsoHC=30
6h30 : Mon interrupteur passe en HP donc je sais que j'étais en HC juste avant
ConsoGlobale=130 / ConsoHP=70 / ConsoHC=60
Point à améliorer :
- Pas de gestion de la conso instantanée (pas besoin dans mon cas) mais il suffit de passer le script lua en time et de modifier l'update (0 avec consoInstant)
Je suis en phase de test donc wait and see
Re: Repartition Consommation HC / HP...
Publié : 30 oct. 2016, 15:22
par stephdes
jfpiat a écrit :Salut,
lol, c'est corrigé, j'crois que c'est le bon maintenant
jfp
Merci !
J'ai un soucis avec ton script si tu peux m'aider stp.
Alors, j'ai substitué ta variable "local capteurGlobal = "Compteur_Global_Cumul"" par mon compteur : "local capteurGlobal = "Compteur EDF""
J'ai créé les compteurs : Compteur HC, Compteur HP, Compteur Histo, Euro EDF
Puis les variables utilisateurs : COUT...HC, COUT...HP et EDF dernier relevé.
Dans les log j'ai une erreur : script_device_compteurHC-HP.lua:61: attempt to index field '?' (a nil value)
ce qui correspond à Histo_Instant, Histo_Cumul = otherdevices_svalues[HistoHCHP]:match("([^;]+);([^;]+)")
Code : Tout sélectionner
2016-10-30 16:01:27.926 LUA: EDF Start
2016-10-30 16:01:27.926 LUA: EDF Debug : 1
2016-10-30 16:01:27.927 LUA: EDF capteurGlobal : Compteur EDF
2016-10-30 16:01:27.927 LUA: EDF Conso Instant = 2929/Watts
2016-10-30 16:01:27.927 LUA: EDF Conso Cumul = 122002.805/Watts
2016-10-30 16:01:27.927 LUA: EDF Conso Cumul/1000 = 122.002805/kWh
2016-10-30 16:01:27.927 LUA: EDF Il y a eu augmentation de la consommation
2016-10-30 16:01:27.927 Error: EventSystem: in C:\Program Files (x86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua: ...86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua:61: attempt to index field '?' (a nil value)
Merci !
Re: Repartition Consommation HC / HP...
Publié : 30 oct. 2016, 21:29
par jfpiat
Bonsoir,
Ce problème doit venir de l'initialisation de tes compteurs
Pour l'heure, il n'y a pas de valeurs, donc, cela génère une erreur quand le script tente de les lire
Il faut les initialiser
un par un en retirant les commentaires des lignes suivantes
-- update(HistoHCHP, idxCptHisto, 0, 0, 1)
-- update(capteurCptHP, 726, 0, 0, 5)
-- update(capteurCptHC, idxCptHC, 0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
-- update(euro, 728, 0,0, 5)
Après les 5 initialisations, ça devrait fonctionner. Dis moi si il y a encore un problème.
jf
Re: Repartition Consommation HC / HP...
Publié : 31 oct. 2016, 13:18
par stephdes
jfpiat a écrit :Bonsoir,
Ce problème doit venir de l'initialisation de tes compteurs
Pour l'heure, il n'y a pas de valeurs, donc, cela génère une erreur quand le script tente de les lire
Il faut les initialiser
un par un en retirant les commentaires des lignes suivantes
-- update(HistoHCHP, idxCptHisto, 0, 0, 1)
-- update(capteurCptHP, 726, 0, 0, 5)
-- update(capteurCptHC, idxCptHC, 0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
-- update(euro, 728, 0,0, 5)
Après les 5 initialisations, ça devrait fonctionner. Dis moi si il y a encore un problème.
jf
Bonjour JF et merci de ton aide.
Je dois mal m'y prendre car ça ne fonctionne pas. J'ai essayé en supprimant les lignes une par une et également en mettant :
-- update(HistoHCHP, idxCptHisto)
-- update(capteurCptHP)
-- update(capteurCptHC, idxCptHC)
-- update(euro, idxEuro)
-- update(euro)
Mais vu que je suis boulet, je n'ai peut être pas compris

Re: Repartition Consommation HC / HP...
Publié : 31 oct. 2016, 16:06
par thier
Enlever les commentaires ne veut pas dire supprimer la ligne mais enlever les "--" qui sont au début de chaque ligne pour qu'elle s'exécute. Ensuite tu recommentes.