Re: Mesure puissance OWL
Publié : 27 sept. 2019, 14:00
Oui, 0,9 c'était l'ordre de grandeur dans le temps où l'on s'éclairait avec des lampes à incandescences, on n'avait que quelques moteurs (frigo, machine à laver) et le reste n'était que des résistances chauffantes (convecteur, four...). Depuis la généralisation des lampes éco (fluo ou led) et le nombre croissant d'appareils électroniques dans nos foyers la tendance est à la baisse !
Pour tenir compte de ça dans domoticz, voici à titre d'exemple le script que j'utilise :
Attention ! J'utilise un CM180 triphasé ! Pour la version monophasée, il faut adapter les lignes 44, 47 et 57..60
Les choses à créer :
- un device pour l'owl (owl_3ph chez moi)
- un switch sur planning pour les heures creuses (=1 en HC, =0 en HP)
- un P1 smart counter pour la consomation électrique
- une variable "Décimal" pour le cos phi, à initialiser à 0.9
- une variable "Entier" pour l'index de l'owl, à initialiser à l'index de l'owl
La tension en volt est récupérée depuis les préférences de domoticz
Pour les pzem, il y a un excellent tuto là : viewtopic.php?f=24&t=4687#p40253
Pour tenir compte de ça dans domoticz, voici à titre d'exemple le script que j'utilise :
Code : Tout sélectionner
-- Script pour transférer la consommation électrique lue par le owl
-- dans un compteur P1 gérant les heures pleine et creuses, en tenant compte du cos phi
-- Liste à adapter en fonction du nom des devices et variables
local dev_owl = "owl_3ph"
local dev_HC = "Heures creuses EDF"
local dev_conso = "Électricité"
local var_cosPhi = "cosPhi"
local var_index = "index_elec"
local dbPath="/var/domoticz/domoticz.db"
-- Fin de la liste
local debug=0
function UpdateVar(variable,valeur)
--Update une variable Domoticz
commandArray[#commandArray+1] = {['Variable:'..variable] = tostring(valeur)}
end
function UpdateDev(device,nvalue,svalues)
--Met à jour un device numérique Domoticz
if device~=nil then
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)}
end
end
function getPref(dbName,key)
-- Retourne une valeur depuis les préférences de domoticz
-- Key doit correspondre à l'une des lignes de la table preference
sql='sqlite3 '..dbName..' "select nValue,sValue from Preferences where Key=\''..tostring(key)..'\'"'
nV,sV=string.match(os.capture(sql),"(.*)|(.*)")
-- print("getpref",sql,nV,sV)
return tonumber(nV),tostring(sV)
end
commandArray = {}
if (devicechanged[dev_owl]) then
OldIndex = uservariables[var_index]
val_cosPhi = uservariables[var_cosPhi]
U,dum=getPref(dbPath,"ElectricVoltage") -- Tension en volt depuis les préférences de domoticz
L1,L2,L3,compteur,dum1 = string.match(otherdevices_svalues[dev_owl],"(%d+.%d*);(%d+.%d*);(%d+.%d*);(%d+).(%d*)")
usage1, usage2 = string.match(otherdevices_svalues[dev_conso],"(%d+);(%d+);.*")
actual_conso=round(val_cosPhi*U*(L1+L2+L3))
Wh=round(math.max(0,val_cosPhi*(compteur-OldIndex))) -- des fois que l'index de l'owl soit ré-initialisé (changement de pile...)
if otherdevices[dev_HC] == 'Off' then
UpdateDev(dev_conso,0,tostring(usage1+Wh)..';'..tostring(usage2)..';0;0;'..tostring(actual_conso)..';0')
else
UpdateDev(dev_conso,0,tostring(usage1)..';'..tostring(usage2+Wh)..';0;0;'..tostring(actual_conso)..';0')
end
if debug==1 then
U1=round(val_cosPhi*U*L1)
U2=round(val_cosPhi*U*L2)
U3=round(val_cosPhi*U*L3)
print("U "..U.." V ; U1 "..U1.." W ; U2 "..U2.." W ; U3 "..U3.." W ; Total "..actual_conso.." W")
end
UpdateVar(var_index,compteur)
end
return commandArray
Les choses à créer :
- un device pour l'owl (owl_3ph chez moi)
- un switch sur planning pour les heures creuses (=1 en HC, =0 en HP)
- un P1 smart counter pour la consomation électrique
- une variable "Décimal" pour le cos phi, à initialiser à 0.9
- une variable "Entier" pour l'index de l'owl, à initialiser à l'index de l'owl
La tension en volt est récupérée depuis les préférences de domoticz
Pour les pzem, il y a un excellent tuto là : viewtopic.php?f=24&t=4687#p40253