This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Calculate Daily, Monthly, and Yearly Energy from Trend
#1
Hi guys,
I need your help with calculating today’s, weekly, monthly, and yearly energy values.

I was not able to manage it using the Trends library:
https://kb.logicmachine.net/libraries/trends/

Your help would be greatly appreciated.
What I need is:
  • One script that runs every hour, calculates today’s energy consumption, and writes it to an object.
  • Another script that calculates the monthly energy consumption and write it into object . It should sum the daily energy values, run 1 per day, and reset at the beginning of each new month.
  • Another script that calculates the yearly energy consumption. It should accumulate the values over the year and reset at the beginning of each new year.
I already have a trend for the total consumed active energy in kWh.

I would really appreciate your help in advance.
Reply
#2
Create scheduled scripts that run at required intervals. For monthly/yearly mode the current day data won't be included into calculation because the data has not been aggregated yet.

Daily:
Code:
require('trends')
name = 'energy'

dates = {}
dates['start'] = os.date('*t')
dates['end'] = os.date('*t')
dates['end'].day = dates['end'].day + 1

sum = 0
values = trends.fetch(name, dates)

for _, value in ipairs(values) do
  sum = sum + (value or 0)
end

grp.checkupdate('0/0/1', sum)

Monthly:
Code:
require('trends')
name = 'energy'

dates = {}
dates['start'] = os.date('*t')
dates['start'].day = 1
dates['end'] = os.date('*t')

sum = 0
values = trends.fetch(name, dates, 86400)

for _, value in ipairs(values) do
  sum = sum + (value or 0)
end

grp.checkupdate('0/0/2', sum)

Yearly:
Code:
require('trends')
name = 'energy'

dates = {}
dates['start'] = os.date('*t')
dates['start'].month = 1
dates['start'].day = 1
dates['end'] = os.date('*t')

sum = 0
values = trends.fetch(name, dates, 86400)

for _, value in ipairs(values) do
  sum = sum + (value or 0)
end

grp.checkupdate('0/0/3', sum)
Reply
#3
Thank you for the great support and the clear solution. As always, very helpful!
Reply


Forum Jump: