diff --git a/src/main/angular/public/air.svg b/src/main/angular/public/air.svg index 06407da..a27837a 100644 --- a/src/main/angular/public/air.svg +++ b/src/main/angular/public/air.svg @@ -1,15 +1,2 @@ - - - - - - - - - + + \ No newline at end of file diff --git a/src/main/angular/public/electricity.svg b/src/main/angular/public/electricity.svg index 80d66dc..4d7c10c 100644 --- a/src/main/angular/public/electricity.svg +++ b/src/main/angular/public/electricity.svg @@ -1,40 +1,4 @@ - - - - - - - - - - - - - - - + + + diff --git a/src/main/angular/public/fire.svg b/src/main/angular/public/fire.svg new file mode 100644 index 0000000..bd1d8d8 --- /dev/null +++ b/src/main/angular/public/fire.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/angular/public/heating.svg b/src/main/angular/public/heating.svg new file mode 100644 index 0000000..83572e6 --- /dev/null +++ b/src/main/angular/public/heating.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + diff --git a/src/main/angular/src/app/api/series/series.service.ts b/src/main/angular/src/app/api/series/series.service.ts index b21cfee..de2299e 100644 --- a/src/main/angular/src/app/api/series/series.service.ts +++ b/src/main/angular/src/app/api/series/series.service.ts @@ -27,11 +27,35 @@ export class SeriesService { public schlafzimmerHumidityAbsolute: Series | null = null; - public gartenTemperature: Series | null = null; + public outdoorTemperature: Series | null = null; - public gartenHumidityRelative: Series | null = null; + public outdoorHumidityRelative: Series | null = null; - public gartenHumidityAbsolute: Series | null = null; + public outdoorHumidityAbsolute: Series | null = null; + + public heatingRoomTemperature: Series | null = null; + + public heatingRoomHumidityRelative: Series | null = null; + + public heatingRoomHumidityAbsolute: Series | null = null; + + public heatingExhaustTemperature: Series | null = null; + + public heatingBufferSupplyTemperature: Series | null = null; + + public heatingBufferReturnTemperature: Series | null = null; + + public heatingBufferColdTemperature: Series | null = null; + + public heatingBufferInnerTemperature: Series | null = null; + + public heatingBufferHotTemperature: Series | null = null; + + public heatingBufferCirculationTemperature: Series | null = null; + + public heatingLoopSupplyTemperature: Series | null = null; + + public heatingLoopReturnTemperature: Series | null = null; constructor( private readonly api: ApiService, @@ -57,9 +81,23 @@ export class SeriesService { this.schlafzimmerHumidityRelative = this.seriesUpdate2(series, this.schlafzimmerHumidityRelative, 'schlafzimmer.humidity_relative'); this.schlafzimmerHumidityAbsolute = this.seriesUpdate2(series, this.schlafzimmerHumidityAbsolute, 'schlafzimmer.humidity_absolute'); - this.gartenTemperature = this.seriesUpdate2(series, this.gartenTemperature, 'garten.temperature'); - this.gartenHumidityRelative = this.seriesUpdate2(series, this.gartenHumidityRelative, 'garten.humidity_relative'); - this.gartenHumidityAbsolute = this.seriesUpdate2(series, this.gartenHumidityAbsolute, 'garten.humidity_absolute'); + this.outdoorTemperature = this.seriesUpdate2(series, this.outdoorTemperature, 'garten.temperature'); + this.outdoorHumidityRelative = this.seriesUpdate2(series, this.outdoorHumidityRelative, 'garten.humidity_relative'); + this.outdoorHumidityAbsolute = this.seriesUpdate2(series, this.outdoorHumidityAbsolute, 'garten.humidity_absolute'); + + this.heatingRoomTemperature = this.seriesUpdate2(series, this.heatingRoomTemperature, 'heating.room.temperature'); + this.heatingRoomHumidityRelative = this.seriesUpdate2(series, this.heatingRoomHumidityRelative, 'heating.room.humidity_relative'); + this.heatingRoomHumidityAbsolute = this.seriesUpdate2(series, this.heatingRoomHumidityAbsolute, 'heating.room.humidity_absolute'); + + this.heatingExhaustTemperature = this.seriesUpdate2(series, this.heatingExhaustTemperature, 'heating.exhaust.temperature'); + this.heatingBufferSupplyTemperature = this.seriesUpdate2(series, this.heatingBufferSupplyTemperature, 'heating.buffer.supply.temperature'); + this.heatingBufferReturnTemperature = this.seriesUpdate2(series, this.heatingBufferReturnTemperature, 'heating.buffer.return.temperature'); + this.heatingBufferColdTemperature = this.seriesUpdate2(series, this.heatingBufferColdTemperature, 'heating.buffer.cold.temperature'); + this.heatingBufferInnerTemperature = this.seriesUpdate2(series, this.heatingBufferInnerTemperature, 'heating.buffer.inner.temperature'); + this.heatingBufferHotTemperature = this.seriesUpdate2(series, this.heatingBufferHotTemperature, 'heating.buffer.hot.temperature'); + this.heatingBufferCirculationTemperature = this.seriesUpdate2(series, this.heatingBufferCirculationTemperature, 'heating.buffer.circulation.temperature'); + this.heatingLoopSupplyTemperature = this.seriesUpdate2(series, this.heatingLoopSupplyTemperature, 'heating.loop.supply.temperature'); + this.heatingLoopReturnTemperature = this.seriesUpdate2(series, this.heatingLoopReturnTemperature, 'heating.loop.return.temperature'); } private seriesUpdate2(fresh: Series, old: Series | null, name: string): Series | null { diff --git a/src/main/angular/src/app/pages/dashboard/air/dashboard-air-tile.component.ts b/src/main/angular/src/app/pages/dashboard/air/dashboard-air-tile.component.ts index 0615e7e..c809470 100644 --- a/src/main/angular/src/app/pages/dashboard/air/dashboard-air-tile.component.ts +++ b/src/main/angular/src/app/pages/dashboard/air/dashboard-air-tile.component.ts @@ -29,9 +29,13 @@ export class DashboardAirTileComponent { new Display('Schlaf. Feucht. Relativ', '', this.seriesService.schlafzimmerHumidityRelative), new Display('Schlaf. Feucht. Absolut', '', this.seriesService.schlafzimmerHumidityAbsolute), null, - new Display('Garten Temperatur', '', this.seriesService.gartenTemperature), - new Display('Garten Feucht. Relativ', '', this.seriesService.gartenHumidityRelative), - new Display('Garten Feucht. Absolut', '', this.seriesService.gartenHumidityAbsolute), + new Display('Garten Temperatur', '', this.seriesService.outdoorTemperature), + new Display('Garten Feucht. Relativ', '', this.seriesService.outdoorHumidityRelative), + new Display('Garten Feucht. Absolut', '', this.seriesService.outdoorHumidityAbsolute), + null, + new Display('Heiz. Temperatur', '', this.seriesService.heatingRoomTemperature), + new Display('Heiz. Feucht. Relativ', '', this.seriesService.heatingRoomHumidityRelative), + new Display('Heiz. Feucht. Absolut', '', this.seriesService.heatingRoomHumidityAbsolute), ]; } diff --git a/src/main/angular/src/app/pages/dashboard/dashboard.component.html b/src/main/angular/src/app/pages/dashboard/dashboard.component.html index 2337774..4d10e80 100644 --- a/src/main/angular/src/app/pages/dashboard/dashboard.component.html +++ b/src/main/angular/src/app/pages/dashboard/dashboard.component.html @@ -5,3 +5,7 @@
+ +
+ +
diff --git a/src/main/angular/src/app/pages/dashboard/dashboard.component.ts b/src/main/angular/src/app/pages/dashboard/dashboard.component.ts index 5595350..fd59f6b 100644 --- a/src/main/angular/src/app/pages/dashboard/dashboard.component.ts +++ b/src/main/angular/src/app/pages/dashboard/dashboard.component.ts @@ -4,6 +4,7 @@ import {ValuesTileComponent} from "../../shared/values-tile/values-tile.componen import {DashboardElectricityTileComponent} from "./electricity/dashboard-electricity-tile.component"; import {DashboardAirTileComponent} from "./air/dashboard-air-tile.component"; import {Subscription, timer} from "rxjs"; +import {DashboardHeatingTileComponent} from "./heating/dashboard-heating-tile.component"; const UPDATE_INTERVAL_MILLIS = 1000; @@ -16,6 +17,7 @@ const UPDATE_INTERVAL_MILLIS = 1000; JsonPipe, DashboardElectricityTileComponent, DashboardAirTileComponent, + DashboardHeatingTileComponent, ], templateUrl: './dashboard.component.html', styleUrl: './dashboard.component.less' diff --git a/src/main/angular/src/app/pages/dashboard/electricity/dashboard-electricity-tile.component.ts b/src/main/angular/src/app/pages/dashboard/electricity/dashboard-electricity-tile.component.ts index df2e146..6ca1d67 100644 --- a/src/main/angular/src/app/pages/dashboard/electricity/dashboard-electricity-tile.component.ts +++ b/src/main/angular/src/app/pages/dashboard/electricity/dashboard-electricity-tile.component.ts @@ -44,11 +44,10 @@ export class DashboardElectricityTileComponent { const gridColor = this.getGridPowerColor(); const productionColor = this.getProductionPowerColor(); return [ - new Display('Bezug', '', this.seriesService.gridPurchased), - new Display('Einspeisung', '', this.seriesService.gridDelivered), - null, - new Display('Produktion', '#006600', this.seriesService.photovoltaicProduced), - new Display('Eigenverbrauch', '#006600', selfConsumed), + new Display('Bezogen', '', this.seriesService.gridPurchased), + new Display('Eingespeist', '', this.seriesService.gridDelivered), + new Display('Produziert', '', this.seriesService.photovoltaicProduced), + new Display('Selbst verbraucht', '', selfConsumed), null, new Display('Produktion', productionColor, this.seriesService.photovoltaicPower), new Display('Netz', gridColor, this.seriesService.gridPower), diff --git a/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.html b/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.html new file mode 100644 index 0000000..297c285 --- /dev/null +++ b/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.html @@ -0,0 +1 @@ + diff --git a/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.less b/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.ts b/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.ts new file mode 100644 index 0000000..b94a31f --- /dev/null +++ b/src/main/angular/src/app/pages/dashboard/heating/dashboard-heating-tile.component.ts @@ -0,0 +1,40 @@ +import {Component, Input} from '@angular/core'; +import {ValuesTileComponent} from "../../../shared/values-tile/values-tile.component"; +import {Display, DisplayOrSeparator} from "../../../api/series/IValue"; +import {SeriesService} from "../../../api/series/series.service"; + +@Component({ + selector: 'app-dashboard-heating-tile', + standalone: true, + imports: [ + ValuesTileComponent + ], + templateUrl: './dashboard-heating-tile.component.html', + styleUrl: './dashboard-heating-tile.component.less' +}) +export class DashboardHeatingTileComponent { + + @Input() + now!: Date; + + constructor( + protected readonly seriesService: SeriesService, + ) { + // - + } + + getDisplayList(): DisplayOrSeparator[] { + return [ + new Display('Abgas', '', this.seriesService.heatingExhaustTemperature), + new Display('Puffer Vorlauf', '', this.seriesService.heatingBufferSupplyTemperature), + new Display('Puffer Rücklauf', '', this.seriesService.heatingBufferReturnTemperature), + new Display('Puffer Kalt', '', this.seriesService.heatingBufferColdTemperature), + new Display('Puffer Speicher', '', this.seriesService.heatingBufferInnerTemperature), + new Display('Puffer Warm', '', this.seriesService.heatingBufferHotTemperature), + new Display('Puffer Zirkulation', '', this.seriesService.heatingBufferCirculationTemperature), + new Display('Heizkreis Vorlauf', '', this.seriesService.heatingLoopSupplyTemperature), + new Display('Heizkreis Rücklauf', '', this.seriesService.heatingLoopReturnTemperature), + ]; + } + +} diff --git a/src/main/angular/src/app/shared/values-tile/values-tile.component.html b/src/main/angular/src/app/shared/values-tile/values-tile.component.html index 0b15e0c..4ffefd0 100644 --- a/src/main/angular/src/app/shared/values-tile/values-tile.component.html +++ b/src/main/angular/src/app/shared/values-tile/values-tile.component.html @@ -3,7 +3,6 @@ {{ title }} -
{{ number() }}
diff --git a/src/main/angular/src/app/shared/values-tile/values-tile.component.ts b/src/main/angular/src/app/shared/values-tile/values-tile.component.ts index 5c952dd..d9fabb9 100644 --- a/src/main/angular/src/app/shared/values-tile/values-tile.component.ts +++ b/src/main/angular/src/app/shared/values-tile/values-tile.component.ts @@ -1,10 +1,7 @@ import {Component, Input} from '@angular/core'; -import {Series} from "../../api/series/Series"; import {DecimalPipe, NgForOf, NgIf} from "@angular/common"; import {DisplayOrSeparator} from "../../api/series/IValue"; -const TOO_OLD_MILLIS = 10000; - @Component({ selector: 'app-values-tile', standalone: true, @@ -51,54 +48,10 @@ export class ValuesTileComponent { } @Input() - set purchase(purchase: Series | null) { - this.purchase_ = purchase; - this.displayUpdate(); - } - - get purchase(): Series | null { - return this.purchase_; - } - - private purchase_: Series | null = null; - - @Input() - set delivery(delivery: Series | null) { - this.delivery_ = delivery; - this.displayUpdate(); - } - - get delivery(): Series | null { - return this.delivery_; - } - - private delivery_: Series | null = null; - - @Input() - set rate(rate: Series | null) { - this.rate_ = rate; - this.displayUpdate(); - } - - get rate(): Series | null { - return this.rate_; - } - - private rate_: Series | null = null; - - number(): string { - if (this.purchase?.period) { - return this.purchase?.period.name; - } else if (this.delivery?.period) { - return this.delivery?.period.name; - } else if (this.rate?.period) { - return this.rate?.period.name; - } - return ''; - } + maxAgeSeconds: number = 10; private displayUpdate() { - this.valid = this.displayList.some(d => !!d && !!d.iValue && !!d.iValue.date && (this.now.getTime() - d.iValue.date.getTime()) <= TOO_OLD_MILLIS) + this.valid = this.displayList.some(d => !!d && !!d.iValue && !!d.iValue.date && (this.now.getTime() - d.iValue.date.getTime()) <= this.maxAgeSeconds * 1000) } }