Added widget for dashboard

This commit is contained in:
Zakary Timson 2019-01-01 20:09:58 -05:00
parent 4780150895
commit 363c21e2ca
3 changed files with 27 additions and 5 deletions

View File

@ -8,14 +8,15 @@ export class BatteryService {
readonly firestore; readonly firestore;
batteries = []; batteries = [];
charge: number = 0; charge: number;
last: Date; lastCharge: number;
relayMode?: boolean = null; relayMode?: boolean = null;
temp: number = 0; temp: number = 0;
get charging() { return this.lastCharge < this.charge; }
get icon() { get icon() {
if (!this.batteries.length) return 'battery_alert'; if (!this.batteries.length) return 'battery_alert';
if (!this.last) return 'battery_warn';
return 'battery_full'; return 'battery_full';
@ -45,7 +46,6 @@ export class BatteryService {
this.firestore = firebaseApp.firestore(); this.firestore = firebaseApp.firestore();
this.firestore.settings({timestampsInSnapshots: true}); this.firestore.settings({timestampsInSnapshots: true});
this.firestore.collection('Battery').doc('170614D').onSnapshot(snap => { this.firestore.collection('Battery').doc('170614D').onSnapshot(snap => {
this.last = new Date();
let data = snap.data(); let data = snap.data();
this.relayMode = data.config.relayMode || null this.relayMode = data.config.relayMode || null
@ -56,12 +56,12 @@ export class BatteryService {
return { return {
charge: data.modules[key][last].charge, charge: data.modules[key][last].charge,
chargeHistory: data.modules[key].map((val, i) => ({name: i, value: val.charge})), chargeHistory: data.modules[key].map((val, i) => ({name: i, value: val.charge})),
charging: data.modules[key][last] > data.modules[key][last - 1],
name: key, name: key,
temp: data.modules[key][last].temp, temp: data.modules[key][last].temp,
tempHistory: data.modules[key].map((val, i) => ({name: i, value: val.temp})) tempHistory: data.modules[key].map((val, i) => ({name: i, value: val.temp}))
} }
}); });
this.lastCharge = this.charge;
this.charge = this.batteries.reduce((acc, battery) => acc + battery.charge, 0) / 2; this.charge = this.batteries.reduce((acc, battery) => acc + battery.charge, 0) / 2;
this.temp = this.batteries.reduce((acc, battery) => acc + battery.temp, 0) / 4; this.temp = this.batteries.reduce((acc, battery) => acc + battery.temp, 0) / 4;
}); });

View File

@ -0,0 +1,9 @@
<div class="w-100 h-100">
<div class="d-flex align-items-center">
<div><mat-icon class="mr-2" style="font-size: 3rem; height: 3rem; width: 3rem">{{batteryService.icon}}</mat-icon> </div>
<div class="flex-grow-1">
<h1 class="d-inline mb-0">Powerwall: <span [ngClass]="{'text-success': batteryService.charging, 'text-danger': !batteryService.charging}">{{batteryService.charge | round}} V</span></h1>
<h1 class="float-right mb-0 text-muted">{{batteryService.temp | round}} °C</h1>
</div>
</div>
</div>

View File

@ -0,0 +1,13 @@
import { Component, OnInit } from '@angular/core';
import {BatteryService} from '../battery.service';
@Component({
selector: 'battery-widget',
templateUrl: './widget.component.html'
})
export class WidgetComponent implements OnInit {
constructor(public batteryService: BatteryService) { }
ngOnInit() { }
}