diff -r a8a6901b5a99 -r b23ef14c6b09 www/js/mon_co2meter.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/js/mon_co2meter.js Thu Oct 10 22:19:29 2019 +0200 @@ -0,0 +1,224 @@ +/***************************************************************************** + * Copyright (C) 2019 + * + * Michiel Broek + * + * This file is part of BMS + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * Brewery Management System istributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ThermFerm; see the file COPYING. If not, write to the Free + * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + *****************************************************************************/ + + +$(document).ready(function () { + + var record = {}, + blank = {}, +// newBase = false, +// newProduct = false, + schedule = 0, + + productSource = { + datatype: "json", + cache: false, + datafields: [ + { name: 'code', type: 'string' }, + { name: 'name', type: 'string' }, + { name: 'uuid', type: 'string' } + ], + id: 'code', + url: "includes/db_product.php?select=ferment" + }, + productlist = new $.jqx.dataAdapter(productSource, { + beforeLoadComplete: function (records) { + var row, i, data = new Array(); + // Create a dummy beer on top to store in idle fermenters. + blank['code'] = "Free"; // Will override this later. + blank['name'] = 'Dummy'; + blank['uuid'] = '66ecccbf-e942-4a35-af49-8b02314561a5'; + data.push(blank); + for (i = 0; i < records.length; i++) { + row = records[i]; + data.push(row); + } + return data; + }, + loadError: function(jqXHR, status, error) { + $('#err').text(status + ' ' + error); + }, + }), + gaugeoptionst = { + min: 0, max: 40, width: 375, height: 375, + ranges: [{ startValue: 0, endValue: 20, style: { fill: '#3399FF', stroke: '#3399FF' }, endWidth: 10, startWidth: 10 }, + { startValue: 20, endValue: 26, style: { fill: '#00CC33', stroke: '#00CC33' }, endWidth: 10, startWidth: 10 }, + { startValue: 26, endValue: 40, style: { fill: '#FC6A6A', stroke: '#FC6A6A' }, endWidth: 10, startWidth: 10 }], + ticksMinor: { interval: 1, size: '5%' }, + ticksMajor: { interval: 5, size: '9%' }, + labels: { interval: 5 }, + style: { fill: '#eeeeee', stroke: '#666666' }, + value: 0, + colorScheme: 'scheme05' + }, + gaugeoptionsp = { + min: 0, max: 6, width: 375, height: 375, + ranges: [{ startValue: 0, endValue: 3, style: { fill: '#00CC33', stroke: '#00CC33' }, endWidth: 10, startWidth: 10 }, + { startValue: 3, endValue: 6, style: { fill: '#FC6A6A', stroke: '#FC6A6A' }, endWidth: 10, startWidth: 10 }], + ticksMinor: { interval: 0.2, size: '5%' }, + ticksMajor: { interval: 1, size: '9%' }, + labels: { interval: 1 }, + style: { fill: '#eeeeee', stroke: '#666666' }, + value: 0, + colorScheme: 'scheme05' + }, + url = "getco2meter.php?uuid='" + my_uuid + "'", + source = { + datatype: "json", + datafields: [ + { name: 'record', type: 'int' }, + { name: 'uuid', type: 'string' }, + { name: 'alias', type: 'string' }, + { name: 'node', type: 'string' }, + { name: 'online', type: 'int' }, + { name: 'beercode', type: 'string' }, + { name: 'beername', type: 'string' }, + { name: 'beeruuid', type: 'string' }, + { name: 'mode', type: 'string' }, + { name: 'temperature_state', type: 'string' }, + { name: 'temperature', type: 'float' }, + { name: 'pressure_state', type: 'string' }, + { name: 'pressure_bar', type: 'float' } + ], + id: 'record', + url: url + }, + dataAdapter = new $.jqx.dataAdapter(source, { + loadComplete: function (records) { + record = dataAdapter.records[0]; + var oline = (record.online) ? "On-line" : "Off-line"; + $("#info_uuid").html(record.uuid); + $("#info_system").html(record.node + "/" + record.alias); + $("#info_online").html(oline); + $("#info_mode").jqxDropDownList('selectItem', record.mode); + blank['name'] = record.alias; + blank['code'] = record.alias.toUpperCase(); + blank['uuid'] = record.uuid; + + if (record.online && (record.mode != "OFF")) { + $("#co2meter_powerled").html('
Power'); + } else { + $("#co2meter_powerled").html('
Power'); + } + + $("#gaugeContainer_temperature").jqxGauge({ caption: { value: 'Temp: '+record.temperature.toFixed(3) }}); + $('#gaugeContainer_temperature').jqxGauge({ value: record.temperature }); + if (record.temperature_state == "OK") { + $("#gaugeContainer_temperature").jqxGauge({ disabled: false }); + } else { + $("#gaugeContainer_temperature").jqxGauge({ disabled: true }); + } + $("#gaugeContainer_pressure").jqxGauge({ caption: { value: 'Bar: '+record.pressure_bar.toFixed(2) }}); + $('#gaugeContainer_pressure').jqxGauge({ value: record.pressure_bar }); + if (record.pressure_state == "OK") { + $("#gaugeContainer_pressure").jqxGauge({ disabled: false }); + } else { + $("#gaugeContainer_pressure").jqxGauge({ disabled: true }); + } + } + }); + + $("#select_beer").jqxDropDownList({ + placeHolder: "Kies bier:", + theme: theme, + source: productlist, + displayMember: "code", + width: 150, + height: 24, + dropDownWidth: 500, + autoDropDownHeight: true, + renderer: function (index, label, value) { + var datarecord = productlist.records[index]; + return datarecord.code + " - " + datarecord.name; + } + }); + + $("#gaugeContainer_temperature").jqxGauge( gaugeoptionst ); + $("#gaugeContainer_temperature").jqxGauge( { caption: { value: 'Temp: 00.000' }} ); + $("#gaugeContainer_pressure").jqxGauge( gaugeoptionsp ); + $("#gaugeContainer_pressure").jqxGauge( { caption: { value: 'Bar: 00.000' }} ); + + srcMode = [ "OFF", "ON" ]; + $("#info_mode").jqxDropDownList({ theme: theme, source: srcMode, width: 100, height: 24, dropDownHeight: 62 }); + +// function sendProduct(code, name, uuid, yeast_lo, yeast_hi) { + +// console.log("sendProduct("+code+", "+name+", "+uuid+", "+yeast_lo+", "+yeast_hi+")"); +// var data = 'node='+record.node+'&alias='+record.alias+'&payload='; +// data += '{"product":{"code":"'+code+'","name":"'+name+'","uuid":"'+uuid+'","yeast_lo":'+yeast_lo+',"yeast_hi":'+yeast_hi+'}}'; +// $.ajax({ +// url: "cmd_fermenter.php", +// data: data, +// type: "POST", +// success: function(data) {}, +// error: function(jqXHR, textStatus, errorThrown) { console.log("sendProduct() error"); } +// }); +// } + + // Get the data immediatly and then at regular intervals to refresh. + dataAdapter.dataBind(); + setInterval(function() { + var skip = false; +// if (newProduct) { +// sendProduct(record.beercode, record.beername, record.beeruuid, record.yeast_lo, record.yeast_hi); +// newProduct = false; +// skip = true; +// } + if (skip) { + schedule = 4; // 2 seconds wait to get the results + } else { + if (schedule > 0) + schedule--; + } + + if (schedule <= 0) { + dataAdapter.dataBind(); + schedule = 20; + } + }, 500); + + $('#info_mode').on('change', function (event) { + var args = event.args; + if (args) { + record.mode = args.item.value; + } +// newBase = true; + }); +// $("#select_beer").on('select', function (event) { +// if (event.args) { +// var index = event.args.index, +// datarecord = productlist.records[index]; +// record.beercode = datarecord.code; +// record.beername = datarecord.name; +// record.beeruuid = datarecord.uuid; +// record.yeast_lo = datarecord.yeast_lo; +// record.yeast_hi = datarecord.yeast_hi; +// newProduct = true; +// } +// }); + + // The chart button. + $("#FLog").jqxButton({ template: "primary", width: '150px', theme: theme }); + $("#FLog").click(function () { + window.open('log_fermentation.php?code=' + record.beercode + '&name=' + record.beername); + }); +});