Fri, 05 Aug 2022 14:24:29 +0200
Tab 2 is a viewer.
/***************************************************************************** * Copyright (C) 2019-2020 * * Michiel Broek <mbroek at mbse dot eu> * * 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 = {}, 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 meters. 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) { console.log(status + ' ' + error); }, }), gaugeoptionst = { min: 10, max: 40, width: 375, height: 375, ranges: [{ startValue: 10, endValue: 20, style: { fill: '#3399FF', stroke: '#3399FF' }, endWidth: 10, startWidth: 10 }, { startValue: 20, endValue: 28, style: { fill: '#00CC33', stroke: '#00CC33' }, endWidth: 10, startWidth: 10 }, { startValue: 28, 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' }, gaugeoptionsg = { orientation: 'vertical', labels: { position: 'near', interval: 10 }, ticksMinor: { size: '5%', interval: 2 }, ticksMajor: { size: '9%', interval: 10 }, ticksPosition: 'near', min: 0990, max: 1150, width: 120, height: 375, value: 1000, pointer: { pointerType: 'arrow', size: '15%', visible: true, offset: 0 }, colorScheme: 'scheme05', showRanges: false }, url = 'getispindel.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: 'alarm', type: 'int' }, { name: 'angle', type: 'float' }, { name: 'temperature', type: 'float' }, { name: 'battery', type: 'float' }, { name: 'gravity', type: 'float' }, { name: 'up_interval', type: 'int' }, { name: 'mode', type: 'string' }, { name: 'og_gravity', type: 'float' } ], id: 'record', url: url }, dataAdapter = new $.jqx.dataAdapter(source, { loadComplete: function(records) { record = dataAdapter.records[0]; updateScreen(); blank['name'] = record.alias; blank['code'] = record.alias.toUpperCase(); blank['uuid'] = record.uuid; } }); function updateScreen() { $('#info_uuid').html(record.uuid); $('#info_system').html(record.node + '/' + record.alias); $('#info_beer').html(record.beercode + ' - ' + record.beername); $('#info_mode').jqxDropDownList('selectItem', record.mode); if (record.mode != 'OFF') { $('#select_beer').jqxDropDownList({ disabled: true }); $('#select_beer').jqxDropDownList('clearSelection'); $('#select_beer').hide(); } else { $('#select_beer').show(); $('#select_beer').jqxDropDownList({ disabled: false }); } if (record.online) { $('#info_online').html('On-line'); if (record.mode != 'OFF') { $('#ispindel_powerled').html('<div class="LEDblue_on"></div>Power'); } else { $('#ispindel_powerled').html('<div class="LEDblue_off"></div>Power'); } if (record.online && (record.alarm != '0')) { $('#ispindel_alarmled').html('<div class="LEDred_on"></div>Alarm'); } else { $('#ispindel_alarmled').html('<div class="LEDred_off"></div>Alarm'); } $('#gaugeContainer_temperature').jqxGauge({ disabled: false }); $('#gaugeContainer_gravity').jqxLinearGauge({ disabled: false }) var sg = plato_to_sg(record.gravity); $('#info_battery').val(record.battery); $('#info_tilt').val(record.angle); $('#info_plato').val(record.gravity); $('#info_sg').val(sg); if (record.og_gravity) { var og = plato_to_sg(record.og_gravity); var svg = calc_svg(og, sg); var max = Math.ceil(og * 100, 0) * 10; var gravity = sg * 1000; console.log ('set max ' + max); $('#gaugeContainer_gravity').jqxLinearGauge({ max: max }); $('#vg_og1').html(og.toFixed(4)); $('#vg_og2').html(record.og_gravity.toFixed(3) + '°P'); $('#vg_sg1').html(sg.toFixed(4)); $('#vg_sg2').html(record.gravity.toFixed(3) + '°P'); $('#vg_svg').html(svg.toFixed(1) + '%'); $('#vg_abv').html(abvol(og, sg).toFixed(2) + '%'); } else { $('#gaugeContainer_gravity').jqxLinearGauge({ max: 1150 }); $('#vg_og1').html(''); $('#vg_og2').html(''); $('#vg_sg1').html(''); $('#vg_sg2').html(''); $('#vg_svg').html(''); $('#vg_abv').html(''); } var batt = record.battery - 3.064; // 0% voltage. if (batt < 0) batt = 0; batt = Math.round(batt / 1.17875 * 100); // 100% range if (batt > 100) batt = 100; $('#vg_batt').html(batt + '%'); $('#gaugeContainer_temperature').jqxGauge({ caption: { value: record.temperature.toFixed(3) + '°C' }}); $('#gaugeContainer_temperature').jqxGauge({ value: record.temperature }); $('#gaugeContainer_gravity').jqxLinearGauge({ value: gravity }); } else { // offline $('#info_online').html('Off-line'); $('#ispindel_powerled').html('<div class="LEDblue_off"></div>Power'); $('#ispindel_alarmled').html('<div class="LEDred_on"></div>Alarm'); $('#gaugeContainer_temperature').jqxGauge({ disabled: true }); $('#gaugeContainer_gravity').jqxLinearGauge({ 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; } }); $('#info_battery').jqxNumberInput(Show3dec); $('#info_tilt').jqxNumberInput(Show5dec); $('#info_plato').jqxNumberInput(Show3dec); $('#info_sg').jqxNumberInput(Show4dec); $('#gaugeContainer_temperature').jqxGauge(gaugeoptionst); $('#gaugeContainer_temperature').jqxGauge({ caption: { value: '0.000°C' }}); $('#gaugeContainer_gravity').jqxLinearGauge(gaugeoptionsg); srcMode = ['OFF', 'ON']; $('#info_mode').jqxDropDownList({ theme: theme, source: srcMode, width: 100, height: 24, dropDownHeight: 65 }); // Get the data immediatly. dataAdapter.dataBind(); $('#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; console.log('Select beer ' + record.beercode + ', ' + record.beername); websocket.send('{"device":"ispindels","node":"' + record.node + '","unit":"' + record.alias + '","beeruuid":"' + record.beeruuid + '","beercode":"' + record.beercode + '","beername":"' + record.beername + '"}'); } }); $('#info_mode').on('select', function(event) { if (event.args && event.args.item.value != record.mode) { record.mode = event.args.item.value; websocket.send('{"device":"ispindels","node":"' + record.node + '","unit":"' + record.alias + '","mode":"' + record.mode + '"}'); } }); // The chart button. $('#VLog').jqxButton({ template: 'primary', width: '150px', theme: theme }); $('#VLog').click(function() { window.open('log_ispindel.php?code=' + record.beercode + '&name=' + record.beername); }); websocket.onmessage = function(evt) { var msg = evt.data; var obj = JSON.parse(msg); if (obj.device == "ispindels" && obj.node == record.node) { console.log('ws got this device ' + msg); record.online = obj.online; if (obj.online) { record.beeruuid = obj.beeruuid; record.beercode = obj.beercode; record.beername = obj.beername; record.mode = obj.mode; record.alarm = obj.alarm; record.angle = obj.angle; record.temperature = obj.temperature; record.battery = obj.battery; record.gravity = obj.gravity; record.up_interval = obj.up_interval; record.og_gravity = obj.og_gravity; } updateScreen(); } } });