add statistices

This commit is contained in:
Wolfgang Hottgenroth 2023-02-10 22:28:38 +01:00
parent 79ee9898e7
commit da76cf5f6f
Signed by: wn
GPG Key ID: 836E9E1192A6B132

View File

@ -29,4 +29,45 @@ create view pv_stats_v as
powerApparent, powerActive, powerReactive, powerDemandPositive, powerDemandReverse, powerDemand,
factor, angle, voltage, current
from pv_power_measurement_t
order by time;
order by time;
create table pv_stats_t (
id serial not null primary key,
"date" date not null,
dateType varchar(5) not null,
first double precision not null,
total double precision default 0
);
grant insert, select, update on pv_stats_t to nodered;
grant select, update on pv_stats_t_id_seq to nodered;
create or replace function pv_stats_func ()
returns trigger
language plpgsql
as $$
declare
v_stat_id pv_stats_t.id%TYPE;
v_dateTypes varchar[] := array['day', 'month', 'year'];
v_dateType varchar;
begin
foreach v_dateType in array v_dateTypes
loop
select id from pv_stats_t into v_stat_id where "date" = date_trunc(v_dateType, NEW.time::date) and dateType = v_dateType;
if not found then
insert into pv_stats_t ("date", dateType, first) values (date_trunc(v_dateType, NEW.time::date), v_dateType, NEW.exportEnergyActive);
else
update pv_stats_t set total = NEW.exportEnergyActive - first where id = v_stat_id;
end if;
end loop;
return NEW;
end;
$$
create trigger pv_stats_trig
after insert on pv_power_measurement_t
for each row
execute function pv_stats_func();