Einleitung
Apache Superset (hier zu finden)ist ein Projekt der Apache Software Foundation, es wird zum Untersuchen und Visualisieren großer Datenmengen genutzt.
In der Heizsaison 2020/2021 gab es mehrere Probleme mit der über 20 Jahre alten Ölheizung, daher wurde diese im Sommer 2021 durch eine Luftwärmepumpe abgelöst.
Beim Objekt handelt es sich um ein Zweifamilienhaus mit Heizkörpern, Baujahr ab 1978, wo seitdem Fenster und Heizkörper modernisiert wurden. Zusätzlich wurde 2010 noch eine Solaranlage installiert, die für das Aufheizen des Warmwasserspeichers dient.
Um den Verbrauch nach der Heizsaison gerecht teilen zu können, wurde für die Wärmepumpe ein digitaler Stromzähler installiert mit dem wir die verbrauchten kWh ablesen können.
Interessehalber wurde während der Heizsaison (1.10 bis 1.5) jeden Sonntag und ganzjährig zusätzlich jeden Monatsersten um ~10h die kWh abgelesen und in ein Excel eingetragen, um einen Überblick über den Verbrauch zu haben.
Ursprünglich war geplant, nur am Monatsersten die Daten abzulesen – da im Oktober 2021 aber schon einige kWh geflossen sind, wurde beschlossen die Daten ab 1.10 wöchentlich abzulesen.
→ Aus diesem Grund fehlen die ersten 3 Sonntage im Oktober 2021
Erwartungswerte für den Verbrauch
In den letzten (milden) Jahren wurden pro Heizsaison ~3.500L Heizöl verbraucht, Heizöl hat ~10kWH Heizleistung pro Liter. D.h. in unserem Fall benötigen wir ~35.000kWh an Heizleistung pro Jahr – dem entsprechend müssen auch Wärmepumpe und Pufferspeicher dimensioniert werden.
Wenn die Wärmepumpe eine Leistungzahl (COP) von 3,5 schafft (aus 1kW elektrischer Leistung werden 3,5kW Heizleistung), sollten wir ~10.000kWh elektrischer Leistung benötigen.
Die Leistungsanzahl können wir auf der Wärmepumpe ablesen, den genauen Wert wissen wir allerdings erst nach der Heizsaison.
(je kälter es draußen ist, umso schlechter wird die Leistungsanzahl)
Was ist jetzt unser Ziel?
Da wir eine laufende Superset Installation für unsere Wetterdaten haben, wollen wir diese nutzen, um unsere Exceldaten zusätzlich in eine MariaDB Tabelle einzufügen.
Außerdem wollen wir Views erstellen und mittels diesen und SQL Abfragen dann Grafiken über den Verbrauch erstellen.
Die Tabelle soll möglichst einfach sein (Ablesedatum und aktuellen kWh Stand), den Rest wollen wir per SQL lösen.
Tabellenaufbau
Eingefügt werden die Daten mit insert‘s, hier ein Beispiel:
insert into waermepumpe values ('2023-12-24','24476.84');
View #1 anlegen
Für unsere erste View werden wir nur die Monatsersten abfragen, daraus ergibt sich dann der Verbrauch für den Vormonat. Zusätzlich ermitteln wir die Differenz zum Vorjahr und die Differenz zum Vorjahr in Prozent.
create or replace view waermepumpe_view as ( select hzs.*, hzs.kwh_monat-hzs2.kwh_monat as 'Diff_Vorjahr', round((hzs.kwh_monat/hzs2.kwh_monat-1)*100,2) as 'Diff_Vorjahr_Prozent' from ( select ROWNUM() as id,all1.Ablesedatum,all1.kwh, date_format(DATE_SUB(all1.Ablesedatum, interval 1 day),'%M','de_AT') as 'Monat', date_format(DATE_SUB(all1.Ablesedatum, interval 1 day),'%Y','de_AT') as 'Jahr', all1.kwh-all2.kwh as kwh_monat from ( select ROWNUM() as id,Ablesedatum,kwh from waermepumpe where date_format(Ablesedatum,'%d') in ('01') order by Ablesedatum asc ) as all1 left outer join ( select ROWNUM()+1 as id,Ablesedatum,kwh from waermepumpe where date_format(Ablesedatum,'%d') in ('01') order by Ablesedatum asc ) as all2 on all1.id=all2.id ) hzs left outer join ( select ROWNUM()+12 as id,all1.Ablesedatum,all1.kwh,all1.kwh-all2.kwh as kwh_monat from ( select ROWNUM() as id,Ablesedatum,kwh from waermepumpe where date_format(Ablesedatum,'%d') in ('01') order by Ablesedatum asc ) as all1 left outer join ( select ROWNUM()+1 as id,Ablesedatum,kwh from waermepumpe where date_format(Ablesedatum,'%d') in ('01') order by Ablesedatum asc ) as all2 on all1.id=all2.id order by all1.Ablesedatum asc ) hzs2 on hzs.id=hzs2.id ) ;
Ergebnis der View:
Dataset SQL für Chart WP_1 anlegen
Auf Basis unserer View #1 ermitteln wir uns noch die Heizsaison (startend mit 1.9) und stellen die Monate als einzelne Spalten pro Heizsaison dar.
Somit sollten wir beim Erstellen unseres Charts nach Monat sortieren und Monatsweise vergleichen können.
Mit unserem vorhandenen Excel können wir die Ergebnisse des SQL’s abgleichen.
select hzs.Heizsaison, sep.kwh_Monat as 'September', okt.kwh_Monat as 'Oktober', nov.kwh_Monat as 'November', dez.kwh_Monat as 'Dezember', jan.kwh_Monat as 'Jänner', feb.kwh_Monat as 'Februar', mar.kwh_Monat as 'März', apr.kwh_Monat as 'April', mai.kwh_Monat as 'Mai', jun.kwh_Monat as 'Juni', jul.kwh_Monat as 'Juli', aug.kwh_Monat as 'August' from (select distinct concat(right(Jahr,2),'/',right(Jahr+1,2)) as Heizsaison from waermepumpe_view union select distinct concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view order by 1 ) as hzs left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='Jänner') jan on hzs.Heizsaison=jan.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='Februar') feb on hzs.Heizsaison=feb.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='März') mar on hzs.Heizsaison=mar.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='April') apr on hzs.Heizsaison=apr.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='Mai') mai on hzs.Heizsaison=mai.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='Juni') jun on hzs.Heizsaison=jun.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='Juli') jul on hzs.Heizsaison=jul.Heizsaison left outer join (select *,concat(right(Jahr-1,2),'/',right(Jahr,2)) as Heizsaison from waermepumpe_view where Monat='August') aug on hzs.Heizsaison=aug.Heizsaison left outer join (select *,concat(right(Jahr,2),'/',right(Jahr+1,2)) as Heizsaison from waermepumpe_view where Monat='September') sep on hzs.Heizsaison=sep.Heizsaison left outer join (select *,concat(right(Jahr,2),'/',right(Jahr+1,2)) as Heizsaison from waermepumpe_view where Monat='Oktober') okt on hzs.Heizsaison=okt.Heizsaison left outer join (select *,concat(right(Jahr,2),'/',right(Jahr+1,2)) as Heizsaison from waermepumpe_view where Monat='November') nov on hzs.Heizsaison=nov.Heizsaison left outer join (select *,concat(right(Jahr,2),'/',right(Jahr+1,2)) as Heizsaison from waermepumpe_view where Monat='Dezember') dez on hzs.Heizsaison=dez.Heizsaison where sep.kwh_Monat is not null order by hzs.Heizsaison
Ergebnis des SQLs:
Chart WP_1 in Superset anlegen
Unser Chart hat als Datenbasis unser Dataset WP_1, als Typ wählen wir „BAR CHART (legacy)“ aus.
Unter „DATA“ fügen wir die Monate, beginnend mit September, als „METRICS“ ein.
Zusätzlich stellen wir als „DIMENSIONS“ die Heizsaison ein, ebenso als Sortierung („SORT BY“).
Nach einem Klick auf „UPDATE CHART“ sehen wir das aktuelle Ergebnis:
Im Reiter „CUSTOMIZE“ aktivieren wir noch „BAR VALUES“ und „STACKED BARS“.
Zusätzlich beschriften wir die X-Achse mit „Heizsaison“ und die Y-Achse mit „kWh“.
Nach einem Klick auf „UPDATE CHART“ sehen wir unser finales Ergebnis:
Das sieht ja schon sehr gut aus. Nächstes Monat setzen wir mit einem zweiten Dataset fort, diesmal mit kWh nach Monaten pro Heizsaison gruppiert.