PowerUsage, and return values without a P1 meter

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
gajotnt
Messages : 2
Inscription : 16 juil. 2018, 15:47

PowerUsage, and return values without a P1 meter

Message par gajotnt »

1720/5000
Bonjour (désolé si le français est mauvais, en utilisant google translate), j'ai récemment acheté des panneaux solaires, et parfois je donne du courant à la grille (la compagnie d'électricité n'achète pas), puisque j'ai un capteur pzem004T ) qui ne connaît qu'une direction, quand je donne 300w à la grille, il montre 300w consommation.
J'ai commandé un SDM120 qui peut voir les deux directions, mais comme je n'ai pas reçu le capteur SDM120, je suppose qu'il donnera des valeurs négatives quand je donnerai de la puissance à la grille.

Y a-t-il un moyen de:
- Mettre les valeurs négatives à zéro
- Envoyer les valeurs négatives à un autre capteur virtuel, de sorte que je peux savoir comment mutch im gaspillage.
- (ou) comme le (je pense) le matériel P1 montre l'utilisation et le retour sur les graphiques.

J'ai fait les maths, je ne sais pas comment le programmer.

Ce que je sais:
- L'énergie solaire générée;
- Consommation d'énergie / retour de / à la grille;

Donc si:
Exemple: si l'énergie solaire générée est de 600w, et si elle retient 100w (donne une valeur négative) à la grille

SOLAR + (EnergyUsed / Returned) = Consommation

Ensuite, je sais que la maison utilise 500w:
600 + (-100) = 500w (consommé par la maison)

Alors je peux calculer le montant im perdre (en le gardant à la grille)

SOLAR - Consommation = "Déchets"
En utilisant l'exemple:
600 - 500 = 100w (de "énergie gaspillée")

Maintenant, si sa nuit, cela ne fonctionnerait pas correctement, toutes les valeurs négatives devraient être mises à zéro? ou abandonné ?, parce que l'idée du «compteur d'énergie gaspillée» serait de voir comment mieux utiliser et savoir combien d'argent est gaspillé en l'envoyant au réseau.
car:
Si SOLAR = 0 et Consommation = 500w
0 - 500 = -500w

Quelqu'un peut-il donner un aperçu
Je suppose que ce code fonctionnerait pour calculer la partie Consommation:

Code : Tout sélectionner

-- demo time script

-- Get current date & time
t1 = os.time()
local currentDate = os.date("*t");  -- sets up currentDate.[table] 
-- (currentDate.year [full], .month [1-12], .day [1-31], .hour [0-23], .min [0-59], .sec [0-59], .wday [0-6 {Sun-Sat}])
sCurrentTime = currentDate.year .. "-" .. currentDate.month .. "-" .. currentDate.day .. " " .. currentDate.hour .. ":" .. currentDate.min .. ":" .. currentDate.sec

function update(device, id, power, energy, index)
commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
end 

commandArray = {}

TotalPowerUsage, TotalEnergyUsage = otherdevices_svalues["Total"]:match("([^;]+);([^;]+)")

SolarPowerUsage, SolarEnergyUsage = otherdevices_svalues["Solar"]:match("([^;]+);([^;]+)")

CurrentPowerBalance = SolarPowerUsage + TotalPowerUsage
CurrentEnergyBalance = SolarEnergyUsage + TotalEnergyUsage

update("Consumption", 50, CurrentPowerBalance, CurrentEnergyBalance, 2) -- 50 is the ID of the dummy consumption device


return commandArray
Calcul de la partie "déchets" im stuck
gajotnt
Messages : 2
Inscription : 16 juil. 2018, 15:47

Re: PowerUsage, and return values without a P1 meter

Message par gajotnt »

Think i got it working :D

To whom it may help:

Power cunsumption of the house taking into consideration the Solar Power generated

Code : Tout sélectionner

--Calculate what the house is consuming
-- Get current date & time
t1 = os.time()
local currentDate = os.date("*t");  -- sets up currentDate.[table] 
-- (currentDate.year [full], .month [1-12], .day [1-31], .hour [0-23], .min [0-59], .sec [0-59], .wday [0-6 {Sun-Sat}])
sCurrentTime = currentDate.year .. "-" .. currentDate.month .. "-" .. currentDate.day .. " " .. currentDate.hour .. ":" .. currentDate.min .. ":" .. currentDate.sec

function update(device, id, power, energy, index)
commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
end 

commandArray = {}

-- Total consumption of the house, when positive its consuming from grid, when negative its giving to the grid
-- Solar is self explanatory

TotalUsage, TotalEnergyUsage = otherdevices_svalues["Total"]:match("([^;]+);([^;]+)")
SolarPowerUsage, SolarEnergyUsage = otherdevices_svalues["Solar"]:match("([^;]+);([^;]+)")

-- The logic here is to know and have easy access to the real value of power consumption, so if my Solar panels are giving 600watts and the Total is showing -150watts,
-- means that the house is consuming 450watts and i'm giving 150watts to the grid for free. 
-- So that value is calculated bellow.

ConsumoPowerBalance = SolarPowerUsage + (TotalPowerUsage)
ConsumoEnergyBalance = SolarEnergyUsage + (TotalEnergyUsage)

update("Consumo", 94, ConsumoPowerBalance, ConsumoEnergyBalance, 2) -- 94 is the ID of the dummy incoming device
end

return commandArray
Now to calculate the "wasted" energy:

Code : Tout sélectionner

-- Calculate Wasted Energy
-- Get current date & time
t1 = os.time()
local currentDate = os.date("*t");  -- sets up currentDate.[table] 
-- (currentDate.year [full], .month [1-12], .day [1-31], .hour [0-23], .min [0-59], .sec [0-59], .wday [0-6 {Sun-Sat}])
sCurrentTime = currentDate.year .. "-" .. currentDate.month .. "-" .. currentDate.day .. " " .. currentDate.hour .. ":" .. currentDate.min .. ":" .. currentDate.sec

function update(device, id, power, energy, index)
commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
end 

commandArray = {}

-- Now to do this we only need the negative values

TotalPowerUsage, TotalEnergyUsage = otherdevices_svalues["Total"]:match("([^;]+);([^;]+)")

-- So if the Total Power usage is bellow zero, it records the value to the dummy waste device (and passes it to positive)
if tonumber(TotalPowerUsage) <=0  then
WastePowerBalance = -(TotalPowerUsage)
WasteEnergyBalance = -(TotalEnergyUsage)
end

-- If it's a positive number it will record the value has Zero, since it's not wasted energy
if tonumber(ConsumoPowerUsage) >=1  then

WastePowerBalance = 0
WasteEnergyBalance = 0
end

update("Waste", 94, WastePowerBalance, WasteEnergyBalance, 2) -- 94 is the ID of the dummy incoming device


return commandArray
Répondre