Page 1 of 1
Usage Heatpump
Posted: Sunday 09 February 2020 22:24
by Piacco
Hello,
For heating my house and to make hot water for my boiler i use a heat pump.
The total usage of the heat pump is measured by PZEM-004T which sends the data to domoticz (P1 Smart meter). Now i want to split those two. So that i know how much power i have used for heating up my house en how much power i have used for making hot water. I have installed a switch for the state of the heatpump (Heating or Hot water). Can someone help me to write a little dzVents script to achieve this

Re: Usage Heatpump
Posted: Monday 10 February 2020 9:53
by waaren
Piacco wrote: Sunday 09 February 2020 22:24
I want to split those two. So that i know how much power i have used for heating up my house en how much power i have used for making hot water. I have installed a switch for the state of the heatpump (Heating or Hot water).
It could look like below
Code: Select all
return
{
on =
{
timer =
{
'every minute',
},
},
data =
{
usage = { initial = 0 },
},
logging =
{
level = domoticz.LOG_DEBUG,
marker = "heatpump"
},
execute = function(dz)
--- Changes below this line
local houseActive = dz.devices('stateSwitch').state == 'On' -- change to name of your state switch
local usage = dz.devices('Power').usage -- change to name of your P1 meter
local housemeter = dz.devices('house') -- define as counter inremental
local boilermeter = dz.devices('boiler') -- define as counter inremental
-- No changes below this line
if houseActive and dz.data.usage ~= 0 then housemeter.incrementCounter(usage - dz.data.usage)
elseif dz.data.usage ~= 0 then boilermeter.incrementCounter(usage - dz.data.usage)
end
dz.data.usage = usage
end
}
Re: Usage Heatpump
Posted: Monday 10 February 2020 21:17
by Piacco
Thanks Waaren for the script, its running now
Heating my home can take a lot of time, so the boilermeter recieves a timeout, is there a way to update the boilermeter?
Code: Select all
if (dz.devices('boilermeter').lastUpdate.minutesago > 5 then
dz.devices('boilermeter').update
print("Laatste update is meer dan 5 minuten geleden")
Sorry i'm not a programmer

Re: Usage Heatpump
Posted: Monday 10 February 2020 22:58
by waaren
Piacco wrote: Monday 10 February 2020 21:17
Thanks Waaren for the script, its running now
Heating my home can take a lot of time, so the boilermeter recieves a timeout, is there a way to update the boilermeter?
can you try this ?
Code: Select all
return
{
on =
{
timer =
{
'every minute',
},
},
data =
{
usage = { initial = 0 },
},
logging =
{
level = domoticz.LOG_DEBUG,
marker = "heatpump"
},
execute = function(dz)
--- Changes below this line
local houseActive = dz.devices('stateSwitch').state == 'On' -- change to name of your state switch
local usage = dz.devices('Power').usage -- change to name of your P1 meter
local housemeter = dz.devices('house') -- define as counter inremental
local boilermeter = dz.devices('boiler') -- define as counter inremental
-- No changes below this line
if houseActive and dz.data.usage ~= 0 then
housemeter.incrementCounter(usage - dz.data.usage)
boilermeter.incrementCounter(0)
elseif
dz.data.usage ~= 0 then
boilermeter.incrementCounter(usage - dz.data.usage)
housemeter.incrementCounter(0)
end
dz.data.usage = usage
end
}
Sorry i'm not a programmer

Neither am I

Re: Usage Heatpump
Posted: Tuesday 11 February 2020 20:05
by Piacco
The Timeout function is working

, only sometimes i get some strange values and the increment counter of my boilermeter is not counting right and how do i show the local variable in the domoticz logfile?
print("Usage boilermeter" .. boilermeter), gives an error
Code: Select all
print("Usage boilermeter" .. boilermeter)

- Log_Usage.JPG (43.14 KiB) Viewed 454 times
Re: Usage Heatpump
Posted: Tuesday 11 February 2020 21:09
by waaren
Piacco wrote: Tuesday 11 February 2020 20:05
print("Usage boilermeter" .. boilermeter), gives an error
Code: Select all
print("Usage boilermeter" .. boilermeter)
Log_Usage.JPG
Changed some logic in below script. Best to start with new virtual devices and another script name to prevent mixup with old data.
Also shows how to get information to the log.
Code: Select all
return
{
on =
{
timer =
{
'every minute',
},
},
data =
{
usage = { initial = 0 },
},
logging =
{
level = domoticz.LOG_DEBUG,
marker = "heatpump"
},
execute = function(dz)
--- Changes below this line
local houseActive = dz.devices('stateSwitch').state == 'On' -- change to name of your state switch
local power = dz.devices('Power') -- change to name of your P1 meter
local usage = power.usage1 + power.usage2
local housemeter = dz.devices('house') -- define as counter inremental
local boilermeter = dz.devices('boiler') -- define as counter inremental
-- No changes below this line
if houseActive and dz.data.usage ~= 0 then
housemeter.incrementCounter(usage - dz.data.usage)
dz.log('usage ' .. housemeter.name ..': ' .. (usage - dz.data.usage),dz.log_DEBUG)
boilermeter.incrementCounter(0)
elseif dz.data.usage ~= 0 then
boilermeter.incrementCounter(usage - dz.data.usage)
dz.log('usage ' .. boilermeter.name ..': ' .. (usage - dz.data.usage),dz.log_DEBUG)
housemeter.incrementCounter(0)
end
dz.data.usage = usage
end
}
When not yet familiar with dzVents please start with reading
Get started Before implementing (~ 5 minutes). Special attention please for "In Domoticz go to Setup > Settings > Other and in the section EventSystem make sure the checkbox 'dzVents disabled' is not checked. Also make sure that in the Security section in the settings you allow 127.0.0.1 to not need a password. dzVents uses that port to send certain commands to Domoticz. Finally make sure you have set your current location in Setup > Settings > System > Location, otherwise there is no way to determine nighttime/daytime state."