homefront/src/app/battery/battery.service.ts
2019-01-05 10:20:25 -05:00

75 lines
2.7 KiB
TypeScript

import {Injectable} from '@angular/core';
import {firebaseApp} from '../app.module';
@Injectable({
providedIn: 'root'
})
export class BatteryService {
readonly firestore;
batteries = [];
charge: number;
lastCharge: number;
lastUpdate = new Date().getTime();
relayMode: string = 'null';
temp: number = 0;
get charging() { return this.lastCharge < this.charge; }
get icon() {
if (new Date().getTime() - this.lastUpdate > 120000) return 'battery_alert';
return 'battery_full';
/*let temp = 'battery';
if (this.batteries.length) temp += '_charging';
if (this.average <= 20) {
temp += '_20';
} else if (this.average <= 30) {
temp += '_30';
} else if (this.average <= 50) {
temp += '_50';
} else if (this.average <= 60) {
temp += '_60';
} else if (this.average <= 80) {
temp += '_80';
} else if (this.average <= 90) {
temp += '_90';
} else if (this.average > 90) {
temp += 'full'
}
return temp;*/
}
constructor() {
this.firestore = firebaseApp.firestore();
this.firestore.settings({timestampsInSnapshots: true});
this.firestore.collection('Battery').doc('170614D').onSnapshot(snap => {
this.lastUpdate = new Date().getTime();
let data = snap.data();
this.relayMode = data.config.relayMode ? data.config.relayMode.toString() : 'null';
this.batteries = Object.keys(data.modules).map(key => {
let last = data.modules[key].length - 1;
return {
charge: data.modules[key][last].charge,
chargeHistory: data.modules[key].map((val, i) => ({name: i, value: val.charge})),
name: key,
temp: data.modules[key][last].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.temp = this.batteries.reduce((acc, battery) => acc + battery.temp, 0) / 4;
});
}
setRelayMode(mode?: string) {
if(mode == 'null') this.firestore.collection('Battery').doc('170614D').update({config: {relayMode: null}});
else if(mode == 'true') this.firestore.collection('Battery').doc('170614D').update({config: {relayMode: true}});
else if(mode == 'false') this.firestore.collection('Battery').doc('170614D').update({config: {relayMode: false}});
}
}