Files
smarthome/mean-app/src/app/data.service.ts
T
2017-04-10 13:05:45 +02:00

143 lines
3.2 KiB
TypeScript

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map'
import { Http, Response, Headers } from '@angular/http';
import { LineData } from './line-data';
import { GraphData } from './graph-data';
import { LabelData } from './label-data';
import { Device } from './device';
import { Usage } from './usage';
@Injectable()
export class DataService {
private getUrl: string = '/webapi/data';
private usageUrl: string = '/webapi/usage';
private nameUrl: string = '/webapi/name';
private deviceUrl: string = '/webapi/device';
constructor(private http : Http){}
get(id:string): Observable<GraphData> {
let lineChartData$ =
this.http
.get((`${this.getUrl}/${id}`)
, {headers: this.getHeaders()})
.map(mapData);
return lineChartData$;
}
usage(id:string): Observable<Usage> {
let usageData$ =
this.http
.get((`${this.usageUrl}/${id}`)
, {headers: this.getHeaders()})
.map(mapUsage);
return usageData$;
}
name(id:string): Observable<string> {
let nameData$ =
this.http
.get((`${this.nameUrl}/${id}`)
, {headers: this.getHeaders()})
.map(mapName);
return nameData$;
}
devices(): Observable<Device[]> {
let devices$ =
this.http
.get((`${this.deviceUrl}`)
, {headers: this.getHeaders()})
.map(mapDevice);
return devices$;
}
private getHeaders(){
let headers = new Headers();
headers.append('Accept', 'application/json');
return headers;
}
}
function mapData(response:Response): GraphData {
let TOE1S = response.json().map(toe1ToData);
let TOE2S = response.json().map(toe2ToData);
let HOV = response.json().map(hovToData);
let HT = response.json().map(htToData);
let times = response.json().map(timeToData);
let Toe1Line:LineData = <LineData>({data: TOE1S, label: "Totaal Energieverbruik tarief 1"});
let Toe2Line:LineData = <LineData>({data: TOE2S, label: "Totaal Energieverbruik tarief 2"});
let HovLine:LineData = <LineData>({data: HOV, label: "Huidig Energieverbruik"});
let HtLine:LineData = <LineData>({data: HT, label: "Huidig Tarief"});
let label:LabelData = <LabelData>({data: times});
let graph:GraphData = <GraphData>({TOE1:Toe1Line,TOE2:Toe2Line,HOV:HovLine,HT:HtLine,labels:label});
return graph;
}
function toe1ToData(r:any){
let TOE1 = r.TOE1;
return TOE1;
}
function toe2ToData(r:any){
let TOE2 = r.TOE2;
return TOE2;
}
function hovToData(r:any){
let HOV = r.HOV;
return HOV;
}
function htToData(r:any){
let HT = r.HT;
return HT;
}
function timeToData(r:any){
let times = r.time.substring(11,19);
return times;
}
function mapUsage(response:Response): Usage {
let r = response.json();
let usage = <Usage>({
hov: r.HOV,
htv: r.HTV,
ht: r.HT
});
return usage;
}
function mapName(response:Response): string {
let name = response.json().name;
return name;
}
function mapDevice(response:Response): Device[] {
let devices = response.json().map(toDevice);
return devices;
}
function toDevice(r:any){
let device = <Device>({
sn: r.SN,
name: r.name
});
return device;
}