From da76cf5f6f13bc6159b7a6990580569940cf3809 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 10 Feb 2023 22:28:38 +0100 Subject: [PATCH] add statistices --- schema/create.sql | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/schema/create.sql b/schema/create.sql index 227d9fb..1ad2b67 100644 --- a/schema/create.sql +++ b/schema/create.sql @@ -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; \ No newline at end of file + 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(); +