123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- import { Component, ViewChild, ChangeDetectorRef } from '@angular/core';
- import { NavController, NavParams, Platform, Content } from 'ionic-angular';
- import { Chart } from 'chart.js';
- import { SettingBasePage } from '../setting-base/setting-base';
- import { MeBaristaService } from '../../providers/me-barista-service';
- // import { Gauge } from 'svg-gauge';
- import Gauge from 'svg-gauge';
- @Component({
- selector: 'page-home',
- templateUrl: 'home.html'
- })
- export class Home extends SettingBasePage {
- @ViewChild(Content) content: Content; // was allemaal class 'Content'
- @ViewChild('lineCanvas') lineCanvas;
- @ViewChild('powerGauge') powergauge_canvas;
- @ViewChild('timerGauge') shottimer_canvas;
- @ViewChild('spinner') spinner;
- lineChart: any;
- powergauge: any;
- shottimer: any;
- temperature: any;
- target_temperature: any;
- sub_l: any;
- shottimer_show: any;
- shottimer_hide_timeout: any;
- green_gradient: any;
- constructor(public navCtrl: NavController, public navParams: NavParams, public platform: Platform, public cdr: ChangeDetectorRef, public abc: MeBaristaService) {
- super(navCtrl, navParams, cdr, abc);
- this.shottimer_show = false;
- }
- ionViewDidLoad() {
- Chart.defaults.global.legend.display = false;
- Chart.defaults.global.tooltips.enabled = false;
- var line_ctx = this.lineCanvas.nativeElement.getContext('2d')
- let green_gradient = line_ctx.createLinearGradient(0, 0, 0, 150)
- green_gradient.addColorStop(0, 'rgba(46, 204, 113, 0.2)')
- green_gradient.addColorStop(0.4, 'rgba(46, 204, 113, 0.1)')
- green_gradient.addColorStop(1, 'rgba(46, 204, 113, 0)')
- let gray_gradient = line_ctx.createLinearGradient(0, 0, 0, 200)
- gray_gradient.addColorStop(0, 'rgba(240,240,240, 1.0)')
- gray_gradient.addColorStop(0.5, 'rgba(240,240,240, 0.25)')
- gray_gradient.addColorStop(1, 'rgba(240,240,240, 0)')
- this.lineChart = new Chart(this.lineCanvas.nativeElement, {
- animation: true,
- type: 'line',
- options: {
- maintainAspectRatio: false,
- scales: {
- xAxes: [{
- autoSkip: true,
- display: false,
- type: 'time',
- ticks: {
- fontFamily: "Noto Sans"
- }
- }],
- yAxes: [{
- gridLines: {
- drawBorder: false,
- drawOnChartArea: false,
- drawTicks: false
- },
- ticks: {
- fontFamily: '-apple-system, sans-serif',
- mirror: true,
- autoSkip: true,
- callback: function (value, index, values) {
- return value + ' °C';
- }
- }
- }]
- }
- },
- data: {
- labels: this.abc.graph_data['label'],
- datasets: [
- {
- label: "Sensor 1",
- data: this.abc.graph_data['sensor1'],
- fill: false,
- borderColor: "rgba(144, 12, 63, 0.4)",
- cubicInterpolationMode: "default",
- borderWidth: 2,
- pointRadius: 0,
- lineTension: 1
- },
- {
- label: "Setpoint",
- data: this.abc.graph_data['setpoint'],
- fill: 'origin',
- borderColor: "rgba(46, 204, 113, 0.4)",
- backgroundColor: green_gradient,
- borderWidth: 1,
- pointRadius: 0
- }
- ]
- }
- });
- this.updateData();
- if (this.powergauge == null) {
- this.powergauge = Gauge(this.powergauge_canvas.nativeElement,
- {
- max: 100,
- dialStartAngle: 180,
- dialEndAngle: 0,
- value: 0,
- title: "Power",
- label: function (value) {
- return Math.round(value) + " %";
- }
- });
- }
-
- if (this.shottimer == null) {
- this.shottimer = Gauge(this.shottimer_canvas.nativeElement,
- {
- max: 100,
- dialStartAngle: 180,
- dialEndAngle: 0,
- value: 50,
- title: "Shot",
- label: function (value) {
- return Math.round(value) + " s";
- }
- });
- }
- this.powergauge.setValue(0);
- }
- updateData() {
- //var tmax = Math.max.apply(Math, this.abc.graph_data['sensor1']);
- var tmin = 0 //Math.min.apply(Math, this.abc.graph_data['sensor1']);
- var setpoint = Math.max.apply(Math, this.abc.graph_data['setpoint']);
-
- this.lineChart.options.scales.yAxes[0].ticks.max = Math.round((setpoint + 15) / 5) * 5;
- this.lineChart.options.scales.yAxes[0].ticks.min = tmin; //Math.round((tmin - 15) / 5) * 5;
- var diff = this.abc.graph_data['setpoint'].slice(-1) - this.abc.graph_data['sensor1'].slice(-1);
- let color = { bg: null, border: null }
- if(diff > 20) {
- color.bg = "rgba(144, 12, 63, 0.3)"
- color.border = "rgba(144, 12, 63, 0.75)"
- } else if (diff > 5){
- color.bg = "rgba(255, 195, 0, 0.3)"
- color.border = "rgba(255, 195, 0, 0.75)"
- } else {
- color.bg = "rgba(22, 160, 133, 0.3)"
- color.border = "rgba(22, 160, 133, 0.75)"
- }
- this.lineChart.data.datasets[0].borderColor = color.border
- this.lineChart.options.scales.xAxes[0].time.min = this.abc.graph_data['label'].slice(-200)[0];
- this.lineChart.options.scales.xAxes[0].time.max = this.abc.graph_data['label'].slice(-1)[0];
- this.lineChart.update();
- this.temperature = this.formatTemperature(this.abc.temperature);
- this.target_temperature = this.formatTemperature(setpoint);
- this.spinner_show = !this.abc.connected;
- }
- formatTemperature(temp) {
- return temp.toFixed(1) + ' °C';
- }
- ionViewWillEnter() {
- var f: any;
- //console.log('view-enter');
- // super.ionViewWillEnter( );
- this.sub_l = this.abc.temperature_s1.subscribe(data => {
- //console.log('sub ' + this.abc.temperature);
- this.powergauge.setValue(this.abc.pid.power);
- // show shot timer when shot has started
- if (this.abc.shottimer_started)
- this.shottimer_show = true;
- // update timer with current time as long as it running
- // TODO: this does not work for the DEMO
- if (this.abc.shottimer_started) {
- f = new Date();
- this.shottimer.setValue((f - this.abc.shottimer_started) / 1000 * this.abc.speed);
- }
- // when the shot is done, show shot time from meCoffee
- // and start timer to hide shot timer
- if (this.abc.shottimer_duration) {
- this.shottimer.setValue(this.abc.shottimer_duration / 1000);
- // We have consumed, clear it ( not nice )
- this.abc.shottimer_duration = 0;
- if (this.shottimer_hide_timeout)
- clearTimeout(this.shottimer_hide_timeout);
- this.shottimer_hide_timeout = setTimeout(() => { this.shottimer_show = false; this.shottimer_hide_timeout = null; }, 30 * 1000 / this.abc.speed);
- }
- this.cdr.detectChanges();
- this.updateData();
- });
- }
- ionViewWillLeave() {
- // super.ionViewWillLeave( );
- // this.abc.temperature_s1.unsubscribe();
- this.sub_l.unsubscribe();
- }
- changeOrientation(event: any) {
- //console.log( "changeOrientation " + event );
- // this.content.resize();
- this.ionViewDidLoad(); // fix iOS orientation issues with ChartJS canvas
- }
- // import { Storage, SqlStorage } from 'ionic-framework/ionic';
- // this.storage = new Storage(SqlStorage);
- // this.storage.get('questionnaires').then((data) => {
- // if (data != null) this.questionnaires = JSON.parse(data);
- // else this.loadDefaultQuestions();
- // And to store Objects, use JSON.stringify(myObject) to store and JSON.parse(...) to turn back
- }
|