[LUA] Repartition Consommation HC / HP...
Re: Repartition Consommation HC / HP...
Le soucis proviendrait de uservariables['CONSO_LAST_HC'], d'où la réponse de denis_brasseur.
dg-59, il faut vraiment que tu comprennes le fonctionnement des programmes et que tu te fasses ton débogage. Tu n'arriveras pas à avancer sinon.
Et poster un message pour chaque erreur : je veux bien aider mais là, j'ai l'impression de faire du SAV.
Je te souhaite une bonne continuation.
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Repartition Consommation HC / HP...
j'e pense que la variable qu'il me manqué est bonne maintenant si vous pouvez me confirmé
Code : Tout sélectionner
-- Recuperation des valeurs du compteur global
local consoCumule
local consoInstant
consoInstant, consoCumule = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
consoInstant = otherdevices_svalues[capteurGlobal2]:match("([^;]+);([^;]+)")
conso_last = otherdevices_svalues[capteurGlobal2]:match("([^;]+);([^;]+)")
conso_last = tonumber(conso_last)
consoInstant = tonumber(consoInstant)
consoCumule = tonumber(consoCumule)
if (debug == 'OUI') then
print('Conso Instant = '..tostring(consoInstant)..' / Conso Cumule = '..tostring(consoCumule)..' ')
end
delta = consoCumule - conso_last
commandArray['Variable:conso_last'] = tostring(consoCumule)
Code : Tout sélectionner
2020-08-05 11:00:22.636 Status: LUA: Conso Instant = 528.0 / Conso Cumule = 8557.0
2020-08-05 11:00:22.636 Status: LUA: conso_last = 528.0
2020-08-05 11:00:22.636 Status: LUA: delta = 8029.0
2020-08-05 11:00:22.636 Status: LUA: Inst = 528.0
2020-08-05 11:00:22.636 Status: LUA: Cum = 8557.0
2020-08-05 11:00:22.637 Status: LUA: période : Heure PleineCode : Tout sélectionner
if (otherdevices[flagHC] == 'On') then
-- Periode heures creuse
commandArray['Variable:CONSO_LAST_HC'] = tostring(conso_hc + delta)
update(idxCptHC, consoInstant, conso_hc)
update(idxCptHP, 0, conso_hp)
else
commandArray['Variable:CONSO_LAST_HP'] = tostring(conso_hp + delta)
update(idxCptHP, consoInstant, conso_hp)
update(idxCptHC, 0, conso_hc)
end-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Repartition Consommation HC / HP...
Code : Tout sélectionner
consoInstant, consoCumule = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
consoInstant = otherdevices_svalues[capteurGlobal2]:match("([^;]+);([^;]+)")
conso_last = otherdevices_svalues[capteurGlobal2]:match("([^;]+);([^;]+)")Pour la 2 eme ligne, tu affecte une nouvelle valeur à consoInstant, et avec une structure différente du premier capteur.
Tu devrais avoir quelque chose comme ceci pour capteurGlobal2, à toi de personnaliser le nom de tes variables :
Code : Tout sélectionner
p1, p2 = otherdevices_svalues[capteurGlobal2]:match("([^;]+);([^;]+)") Re: Repartition Consommation HC / HP...
CONSO_LAST c'est pas l'ancien Conso Cumule
et delta la différence
Code : Tout sélectionner
delta = consoCumule - conso_lastCode : Tout sélectionner
-- Sauvegarde de la valeur du compteur global pour prochain calcul
commandArray['Variable:LastValueCptElecGlobal'] = tostring(consoCumule)le script qui fonctionne mais pas le 'CONSO_LAST
Code : Tout sélectionner
2020-08-05 16:43:22.514 Status: LUA: Conso Instant = 480.0 / Conso Cumule = 10505.0
2020-08-05 16:43:22.514 Status: LUA: conso_last = 0
2020-08-05 16:43:22.514 Status: LUA: delta = 10505.0
2020-08-05 16:43:22.514 Status: LUA: Inst = 480.0
2020-08-05 16:43:22.514 Status: LUA: Cum = 10505.0
2020-08-05 16:43:22.514 Status: LUA: période : Heure PleineCode : Tout sélectionner
local capteurGlobal = 'compteur_Global'
local capteurGlobal2 = 'OWL1'
local debug = 'OUI' -- mode debug
local meter_base = 'CONSO_LAST'
local flagHC = 'HC'
local delta = 0
local inc = 0
local idxCptHP = uservariables['175']
local idxCptHC = uservariables['176']
--local lastValueCptElecGlobal = uservariables['LastValueCptElecGlobal']
------------------------------------------------------------------------------
-- Fonction de mise à jour
function update(id, power, energy)
commandArray[inc]= {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
inc = inc + 1
return
end
commandArray = {}
if (devicechanged[capteurGlobal]) then
conso_last = tonumber(uservariables['CONSO_LAST'])
if not conso_last then
conso_last = 0
end
-- Recuperation des valeurs du compteur global
local consoCumule
local consoInstant
consoInstant, consoCumule = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
consoInstant = otherdevices_svalues[capteurGlobal2]:match("([^;]+);([^;]+)")
consoInstant = tonumber(consoInstant)
consoCumule = tonumber(consoCumule)
if (debug == 'OUI') then
print('Conso Instant = '..tostring(consoInstant)..' / Conso Cumule = '..tostring(consoCumule)..' ')
end
delta = consoCumule - conso_last
commandArray['Variable:conso_last'] = tostring(consoCumule)
local conso_hc = tonumber(uservariables['CONSO_LAST_HC'])
local conso_hp = tonumber(uservariables['CONSO_LAST_HP'])
if (debug == 'OUI') then
print('conso_last = '..tostring(conso_last))
print('delta = '..tostring(delta))
print('Inst = '..tostring(consoInstant))
print('Cum = '..tostring(consoCumule))
--print('LastValueCptElecGlobal = '..tostring(lastValueCptElecGlobal))
if (otherdevices[flagHC] == 'On') then
print('période : Heure Creuse')
else
print('période : Heure Pleine')
end
end
if (otherdevices[flagHC] == 'On') then
-- Periode heures creuse
commandArray['Variable:CONSO_LAST_HC'] = tostring(conso_hc + delta)
update(idxCptHC, consoInstant, conso_hc)
else
commandArray['Variable:CONSO_LAST_HP'] = tostring(conso_hp + delta)
update(idxCptHP, consoInstant, conso_hp)
update(idxCptHC, 0, conso_hc)
end
-- Sauvegarde de la valeur du compteur global pour prochain calcul
-- commandArray['Variable:LastValueCptElecGlobal'] = tostring(consoCumule)
if (debug == 'OUI') then
print('-- Fin Calcul Compteur HC / HP --')
end
end
return commandArray j'ai essayé depuis tt a l'heure de comprendre la mais je suis perdu
Code : Tout sélectionner
-- Sauvegarde de la valeur du compteur global pour prochain calcul
-- commandArray['Variable:LastValueCptElecGlobal'] = tostring(consoCumule)Re: Repartition Consommation HC / HP...
A la fin du code : commandArray['Variable:LastValueCptElecGlobal'] = tostring(consoCumule)
Il me semble que cela doit être la même variable.
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Repartition Consommation HC / HP...
qui pourrai me dire ou sa beug?
Merci
le script fonctionne en Heures Creuses

Code : Tout sélectionner
2020-08-07 13:36:13.989 Status: User: DG-59 initiated a switch command (191/Heures pleines / Heures Creuses/On)
2020-08-07 13:37:09.595 Status: LUA: -- Calcul Compteurs HC / HP --
2020-08-07 13:37:09.595 Status: LUA: CapteurGlobal = OWL_Intuition
2020-08-07 13:37:09.595 Status: LUA: CapteurGlobal = OWL1
2020-08-07 13:37:09.595 Status: LUA: CapteurCptHP = Compteur Electrique HP
2020-08-07 13:37:09.595 Status: LUA: CapteurCptHC = Compteur Electrique HC
2020-08-07 13:37:09.595 Status: LUA: idxCptHP = 190
2020-08-07 13:37:09.595 Status: LUA: idxCptHC = 193
2020-08-07 13:37:09.595 Status: LUA: flagHP = Heures pleines / Heures Creuses
2020-08-07 13:37:09.596 Status: LUA: Heures pleines = 0.0 / Heures Creuses = 18475.0 / Watt = 1648.000
2020-08-07 13:37:09.596 Status: LUA: Compteur cible = Heures Creuses
2020-08-07 13:37:09.596 Status: LUA: Valeur precedente = 18411.0
Code : Tout sélectionner
2020-08-07 13:38:22.325 Status: User: DG-59 initiated a switch command (191/Heures pleines / Heures Creuses/Off)
2020-08-07 13:39:09.595 Status: LUA: -- Calcul Compteurs HC / HP --
2020-08-07 13:39:09.596 Status: LUA: CapteurGlobal = OWL_Intuition
2020-08-07 13:39:09.596 Status: LUA: CapteurGlobal = OWL1
2020-08-07 13:39:09.596 Status: LUA: CapteurCptHP = Compteur Electrique HP
2020-08-07 13:39:09.596 Status: LUA: CapteurCptHC = Compteur Electrique HC
2020-08-07 13:39:09.596 Status: LUA: idxCptHP = 190
2020-08-07 13:39:09.596 Status: LUA: idxCptHC = 193
2020-08-07 13:39:09.596 Status: LUA: flagHP = Heures pleines / Heures Creuses
2020-08-07 13:39:09.596 Status: LUA: Heures pleines = 0.0 / Heures Creuses = 18483.0 / Watt = 1104.000
2020-08-07 13:39:09.596 Status: LUA: Compteur cible = heures pleines
2020-08-07 13:39:09.596 Status: LUA: Valeur precedente = 0.0
2020-08-07 13:39:09.596 Status: LUA: -- Fin Calcul Compteur HC / HP --Code : Tout sélectionner
-- Initialisation des variables locales
local capteurGlobal = 'OWL_Intuition'
local capteurGlobal2 = 'OWL1'
local capteurCptHP = 'Compteur Electrique HP'
local capteurCptHC = 'Compteur Electrique HC'
local idxCptHP = '190'
local idxCptHC = '193'
--local flagHC = 'Heures pleines / Heures Creuses'
local flagHP = 'Heures pleines / Heures Creuses'
-- Mode debug Oui / Non
local debug = uservariables['OUI']
-- 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
print('-- Calcul Compteurs HC / HP --')
print('CapteurGlobal = '..capteurGlobal)
print('CapteurGlobal = '..capteurGlobal2)
print('CapteurCptHP = '..capteurCptHP)
print('CapteurCptHC = '..capteurCptHC)
print('idxCptHP = '..tostring(idxCptHP))
print('idxCptHC = '..tostring(idxCptHC))
print('flagHP = '..tostring(flagHP))
--print('flagHC = '..tostring(flagHC))
-- extraction de la puissance consommé en watt
usage = otherdevices_svalues[capteurGlobal2]:match("([^;]+)")
-- 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)
print('Heures pleines = '..tostring(heurespleines)..' / Heures Creuses = '..tostring(heurescreuses)..' / Watt = '..tostring(usage)..' ')
local consoCumuleCible
local consoInstantCible
if (otherdevices[flagHP] == '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)
print('Compteur cible = Heures Creuses')
print('Valeur precedente = '..tostring(consoCumuleCible))
-- Calcul de la conso journalière Heures Creuses
consoCumuleCible = consoCumuleCible + heurescreuses
-- Mise à jour du compteur
update(capteurCptHC, idxCptHC, usage , heurescreuses, 1)
-- Mise à 0 de la conso intantanee du compteur heures pleines
consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
consoInstantHP = 0
update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)
else
if (otherdevices[flagHP] == 'Off') then
-- Periode heures pleines
-- Recupération des valeurs actuelles du compteur Heures Creuses
consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
-- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
consoCumuleCible = tonumber(consoCumuleCible)
print('Compteur cible = heures pleines')
print('Valeur precedente = '..tostring(consoCumuleCible))
-- Calcul de la conso journalière heures pleines
consoCumuleCible = consoCumuleCible + heurespleines
-- Mise à jour du compteur
update(capteurCptHP, idxCptHP, usage , heurespleines, 3)
-- Mise à 0 de la conso intantanée du compteur Heures Creuses
consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
consoInstantHC = 0
update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 4)
end
print('-- Fin Calcul Compteur HC / HP --')
end
end
return commandArray-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Repartition Consommation HC / HP...
http://ip:port/json.htm?type=devices&rid=idx
Avec idx pour le OWL_Intuition
Et pour le. OWL1
?
Nous intéresse ici les lignes 'Data'
En fait ce script semble utiliser un capteur qui compte déjà les HP et HC pour renseigner deux autres capteurs qui vont differencier HP et HC.
J'ai du mal à saisir l'intérêt..
L'auteur ne savait probablement pas que sont capteur et domoticz pouvait déjà faire les calculs de conso jour/nuit pour lui ?
Je n'aime pas trop la façon dont il est écrit,
C'est trop bidouille.
Exemple la fonction update à laquelle on envoie 5 variables mais qui n'en utilise que 4..
De plus pourquoi utiliser un capteur jour/nuit alors que l'on peut le déterminer avec les valeurs remontées par le compteur.
Hum
Je persiste, ce script en l'état ne va pas avec ce que tu cherches à faire.
Autant partir de zero.
C'est pas si hardu.
Des lors que l'on peut créer un p1 smart meter virtuel. On peut ?
Lire la valeur
La recopier, écrire dans le nouveau compteur dans les bonnes cases selon jour/nuit.
En gros un scripts de 5 ou 6 lignes
Bon j'exagère peut être faudra-t-il aussi memorser des variables.. Pour calculer les écart et changements de jour.
Si tu fais cela tu vas vraiment arriver à comprendre les choses
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Repartition Consommation HC / HP...
OWL_Intuition nous donne le data
Owl1 nous donne l'usage
/json.htm?type=devices&rid=196 (OWL_Intuition)
Code : Tout sélectionner
{
"ActTime" : 1596804579,
"AstrTwilightEnd" : "23:45",
"AstrTwilightStart" : "03:58",
"CivTwilightEnd" : "21:56",
"CivTwilightStart" : "05:46",
"DayLength" : "14:55",
"NautTwilightEnd" : "22:45",
"NautTwilightStart" : "04:58",
"ServerTime" : "2020-08-07 14:49:39",
"SunAtSouth" : "13:51",
"Sunrise" : "06:24",
"Sunset" : "21:19",
"app_version" : "2020.2",
"result" :
[
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CounterToday" : "0.481 kWh",
"CustomImage" : 0,
"Data" : "18.815 kWh",
"Description" : "",
"EnergyMeterMode" : "",
"Favorite" : 1,
"HardwareID" : 2,
"HardwareName" : "RFlink",
"HardwareType" : "RFLink Gateway USB",
"HardwareTypeVal" : 46,
"HaveTimeout" : false,
"ID" : "000003B4",
"LastUpdate" : "2020-08-07 14:49:09",
"Name" : "OWL_Intuition",
"Notifications" : "false",
"PlanID" : "0",
"PlanIDs" :
[
0
],
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : "-",
"SubType" : "kWh",
"SwitchTypeVal" : 0,
"Timers" : "false",
"Type" : "General",
"TypeImg" : "current",
"Unit" : 1,
"Usage" : "0 Watt",
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "196"
}
],
"status" : "OK",
"title" : "Devices"
}/json.htm?type=devices&rid=167 (OWL1)
Code : Tout sélectionner
{
"ActTime" : 1596804734,
"AstrTwilightEnd" : "23:45",
"AstrTwilightStart" : "03:58",
"CivTwilightEnd" : "21:56",
"CivTwilightStart" : "05:46",
"DayLength" : "14:55",
"NautTwilightEnd" : "22:45",
"NautTwilightStart" : "04:58",
"ServerTime" : "2020-08-07 14:52:14",
"SunAtSouth" : "13:51",
"Sunrise" : "06:24",
"Sunset" : "21:19",
"app_version" : "2020.2",
"result" :
[
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CounterToday" : "0.000 kWh",
"CustomImage" : 0,
"Data" : "0.000 kWh",
"Description" : "",
"EnergyMeterMode" : "0",
"Favorite" : 1,
"HardwareID" : 2,
"HardwareName" : "RFlink",
"HardwareType" : "RFLink Gateway USB",
"HardwareTypeVal" : 46,
"HaveTimeout" : false,
"ID" : "000001B4",
"LastUpdate" : "2020-08-07 14:51:45",
"Name" : "OWL1",
"Notifications" : "false",
"PlanID" : "0",
"PlanIDs" :
[
0
],
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : "-",
"SubType" : "kWh",
"SwitchTypeVal" : 0,
"Timers" : "false",
"Type" : "General",
"TypeImg" : "current",
"Unit" : 1,
"Usage" : "688 Watt",
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "167"
}
],
"status" : "OK",
"title" : "Devices"
}-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Repartition Consommation HC / HP...
Que donne
Code : Tout sélectionner
print(otherdevices_svalues['OWL_Intuition'])
print(otherdevices_svalues['OWL1'])
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Repartition Consommation HC / HP...
Code : Tout sélectionner
print(otherdevices_svalues['OWL_Intuition'])
print(otherdevices_svalues['OWL1']) Code : Tout sélectionner
2020-08-07 15:16:09.564 Status: LUA: 0.000;18882.000
2020-08-07 15:16:09.564 Status: LUA: 640.000;0.000Code : Tout sélectionner
-- extraction de la puissance consommé en watt
Usage = otherdevices_svalues[capteurGlobal2]:match("([^;]+)")Code : Tout sélectionner
heurespleines , heurescreuses = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
heurespleines =0.000
heurescreuses = 18882.000
Code : Tout sélectionner
2020-08-07 15:51:09.552 Status: LUA: -- Calcul Compteurs HC / HP --
2020-08-07 15:51:09.552 Status: LUA: CapteurGlobal = OWL_Intuition
2020-08-07 15:51:09.552 Status: LUA: CapteurGlobal = OWL1
2020-08-07 15:51:09.552 Status: LUA: CapteurCptHP = Compteur Electrique HP
2020-08-07 15:51:09.552 Status: LUA: CapteurCptHC = Compteur Electrique HC
2020-08-07 15:51:09.552 Status: LUA: idxCptHP = 190
2020-08-07 15:51:09.552 Status: LUA: idxCptHC = 193
2020-08-07 15:51:09.552 Status: LUA: flagHP = Heures pleines / Heures Creuses
2020-08-07 15:51:09.552 Status: LUA: Heures pleines = 18961.0 / Heures Creuses = 18961.0 / Watt = 624.000
2020-08-07 15:51:09.552 Status: LUA: 0.000;18961.000
2020-08-07 15:51:09.552 Status: LUA: 624.000;0.000
2020-08-07 15:51:09.552 Status: LUA: Compteur cible = heures pleines
2020-08-07 15:51:09.552 Status: LUA: Valeur precedente = 18959.0
2020-08-07 15:51:09.552 Status: LUA: -- Fin Calcul Compteur HC / HP --