Usage Heatpump

Easy to use, 100% Lua-based event scripting framework.

Moderator: leecollings

Post Reply
Piacco
Posts: 81
Joined: Friday 14 November 2014 9:33
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Usage Heatpump

Post 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 :oops:
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Usage Heatpump

Post 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
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Piacco
Posts: 81
Joined: Friday 14 November 2014 9:33
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Usage Heatpump

Post by Piacco »

Thanks Waaren for the script, its running now :D

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 :oops:
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Usage Heatpump

Post by waaren »

Piacco wrote: Monday 10 February 2020 21:17 Thanks Waaren for the script, its running now :D
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 :oops:
Neither am I :D
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Piacco
Posts: 81
Joined: Friday 14 November 2014 9:33
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Usage Heatpump

Post by Piacco »

The Timeout function is working :lol: , 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
Log_Usage.JPG (43.14 KiB) Viewed 451 times
Attachments
Boilermeter.JPG
Boilermeter.JPG (31.91 KiB) Viewed 451 times
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Usage Heatpump

Post 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."
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest