# HG changeset patch # User Michiel Broek # Date 1570826923 -7200 # Node ID 17f244137a9bbd0b49ebd55e12254a2fa6a25c76 # Parent 8ab0e87d579e55d424d60bb1dd4470ca2bf5c0de Add refermentation logfile and graph. diff -r 8ab0e87d579e -r 17f244137a9b www/Makefile --- a/www/Makefile Fri Oct 11 21:04:48 2019 +0200 +++ b/www/Makefile Fri Oct 11 22:48:43 2019 +0200 @@ -5,8 +5,8 @@ SRC = cmd_fermenter.php cmd_co2meter.php \ config.php.dist crontasks.php favicon.ico gen_about.php \ - getbrewlog.php getco2meter.php getfermentablesources.php getfermenter.php \ - getfermentlog.php gethopsources.php getmiscsources.php getnode.php \ + getbrewlog.php getco2meter.php getco2pressurelog.php getfermentablesources.php \ + getfermenter.php getfermentlog.php gethopsources.php getmiscsources.php getnode.php \ getwatersources.php getyeastsources.php import_ingredients.php index.php \ inv_equipments.php inv_fermentables.php inv_hops.php inv_instock.php \ inv_miscs.php inv_suppliers.php inv_waters.php inv_yeasts.php \ diff -r 8ab0e87d579e -r 17f244137a9b www/getco2pressurelog.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/getco2pressurelog.php Fri Oct 11 22:48:43 2019 +0200 @@ -0,0 +1,97 @@ +seek(PHP_INT_MAX); +// $file->key() = lines in the file. + +define ('MAX_INTERVALS', 10); +$GRAPH_INTERVAL = array ( 0, 1, 5, 15, 30, 60, 120, 240, 480, 720 ); +$GRAPH_DATALINES = array ( 0, 800, 3200, 12000, 24000, 48000, 96000, 192000, 384000, 768000 ); + + +for ($graphstep = 1; $graphstep <= MAX_INTERVALS; $graphstep++) { + if ($file->key() < $GRAPH_DATALINES[$graphstep]) + break; +} +if ($graphstep > MAX_INTERVALS) + $graphstep = MAX_INTERVALS; + +//echo $code . '.log lines=' . $file->key() . ' interval=' . $GRAPH_INTERVAL[$graphstep] . ' graphstep=' . $graphstep . PHP_EOL; + +/* + * 2014-11-15 18:39:12,TEMPERATURE,PRESSURE,UUID + * | | | | + * datetime + | | | + * temperature ------------+ | | + * pressure --------------------------+ | + * unit uuid --------------------------------+ + */ + + +$handle = @fopen($filename, "r"); +if ($handle) { + $lines = 0; + while (($buffer = fgets($handle, 4096)) !== false) { + + $buffer = preg_replace( "/\r|\n/", "", $buffer); + $row = explode(",", $buffer); + + $hr = intval(substr($buffer, 11, 2)); + if ((($graphstep == 1)) || + (($graphstep == 2) && ((substr($buffer, 15, 1) == '0') || (substr($buffer, 15, 1) == '5'))) || + (($graphstep == 3) && ((substr($buffer, 14, 2) == '00') || (substr($buffer, 14, 2) == '15') || + (substr($buffer, 14, 2) == '30') || (substr($buffer, 14, 2) == '45'))) || + (($graphstep == 4) && ((substr($buffer, 14, 2) == '00') || (substr($buffer, 14, 2) == '30'))) || + (($graphstep == 5) && (substr($buffer, 14, 2) == '00')) || + (($graphstep == 6) && (substr($buffer, 14, 2) == '00') && (($hr % 2) == 0)) || + (($graphstep == 7) && (substr($buffer, 14, 2) == '00') && (($hr % 4) == 0)) || + (($graphstep == 8) && (substr($buffer, 14, 2) == '00') && (($hr % 8) == 0)) || + (($graphstep == 9) && (substr($buffer, 14, 2) == '00') && (($hr % 12) == 0))) { +// echo $hr . ' ' . $row[1] . ' ' . $buffer; + $lines++; + +// $heat_used = $cool_used = 0; +// if ($row[10] && ($row[10] != "NA") && ($heater_l > 0)) { +// $heat_used = round((intval($row[10]) - $heater_l) * 100 / ($GRAPH_INTERVAL[$graphstep] * 60)); +// } +// if ($row[12] && ($row[12] != "NA") && ($cooler_l > 0)) { +// $cool_used = round((intval($row[12]) - $cooler_l) * 100 / ($GRAPH_INTERVAL[$graphstep] * 60)); +// } + + +// echo $GRAPH_INTERVAL[$graphstep] . ' ' . $heat_used . ' ' . $cool_used . PHP_EOL; + +// if (($heat_used <= 100) && ($cool_used <= 100)) { + $logs[] = array( + 'date' => $row[0], + 'temperature' => $row[1], + 'pressure' => $row[2] + ); +// } + +// if ($row[10] && ($row[10] != "NA")) +// $heater_l = intval($row[10]); +// if ($row[12] && ($row[12] != "NA")) +// $cooler_l = intval($row[12]); + } + + } + if (!feof($handle)) { + echo "Error: unexpected fgets() fail\n"; + } + fclose($handle); +} +header("Content-type: application/json"); +echo json_encode($logs); +//echo $lines . ' lines' . PHP_EOL; diff -r 8ab0e87d579e -r 17f244137a9b www/js/log_co2pressure-min.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/js/log_co2pressure-min.js Fri Oct 11 22:48:43 2019 +0200 @@ -0,0 +1,1 @@ +$(document).ready(function(){$("#jqxMenu").jqxMenu("destroy");$("#jqxLoader").jqxLoader({width:250,height:150,isModal:true,text:"Opmaken grafiek ...",theme:theme});$("#jqxLoader").jqxLoader("open");function a(){return"https://www.jqwidgets.com/export_server/export.php"}var d={datatype:"json",datafields:[{name:"date",type:"date",format:"yyyy-MM-dd HH:mm"},{name:"temperature",type:"float"},{name:"pressure",type:"float"},{name:"uuid",type:"string"}],url:"getco2pressurelog.php?code="+my_code+"&name="+my_name},c=new $.jqx.dataAdapter(d,{autoBind:true,async:false,loadComplete:function(){$("#jqxLoader").jqxLoader("close")},loadError:function(g,e,f){}}),b={title:my_code+' "'+my_name+'"',description:"",source:c,xAxis:{dataField:"date",type:"date",formatFunction:function(e){return e.getDate()+"-"+(e.getMonth()+1)+"-"+e.getFullYear()},toolTipFormatFunction:function(g){var f=g.getHours(),e=g.getMinutes();return g.getDate()+"-"+(g.getMonth()+1)+"-"+g.getFullYear()+" "+(f<10?"0"+f:f)+":"+(e<10?"0"+e:e)},textRotationAngle:45,howGridLines:false},colorScheme:"scheme01",seriesGroups:[{type:"area",valueAxis:{minValue:0,displayValueAxis:false,description:"Druk in bar"},series:[{dataField:"pressure",lineWidth:1,displayText:"Druk",opacity:0.4}]},{type:"spline",valueAxis:{minValue:0,description:"Graden C"},series:[{dataField:"temperature",lineWidth:1,displayText:"Temperatuur"}]}]};$("#pressure_chart").jqxChart(b);$("#print").click(function(){var g=$("#pressure_chart")[0].outerHTML,h=window.open("","","width=865, height=425"),e=h.document.open(),f=''+my_code+" "+my_name+" hergisting"+g+"";e.write(f);e.close();h.print()});$("#print").jqxButton({template:"primary",width:125,theme:theme});$("#pdfButton").click(function(){$("#pressure_chart").jqxChart("saveAsPDF","hergisting_"+my_code+".pdf",a())});$("#pdfButton").jqxButton({template:"primary",width:125,theme:theme});$("#pngButton").click(function(){$("#pressure_chart").jqxChart("saveAsPNG","hergisting_"+my_code+".png",a())});$("#pngButton").jqxButton({template:"primary",width:125,theme:theme});$("#Close").jqxButton({template:"success",width:125,theme:theme});$("#Close").click(function(){window.close()})}); \ No newline at end of file diff -r 8ab0e87d579e -r 17f244137a9b www/js/log_co2pressure.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/js/log_co2pressure.js Fri Oct 11 22:48:43 2019 +0200 @@ -0,0 +1,141 @@ +/***************************************************************************** + * 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 Managment System is distributed 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 () { + + $('#jqxMenu').jqxMenu('destroy'); + + $("#jqxLoader").jqxLoader({ + width: 250, + height: 150, + isModal: true, + text: "Opmaken grafiek ...", + theme: theme + }); + $('#jqxLoader').jqxLoader('open'); + + function getExportServer() { + return "https://www.jqwidgets.com/export_server/export.php"; + } + + var sourceA = { + datatype: "json", + datafields: [ + { name: "date", type: "date", format: "yyyy-MM-dd HH:mm" }, + { name: "temperature", type: "float" }, + { name: "pressure", type: "float" }, + { name: "uuid", type: "string" } + ], + url: 'getco2pressurelog.php?code=' + my_code + '&name=' + my_name + }, + dataAdapter = new $.jqx.dataAdapter(sourceA, { + autoBind: true, + async: false, + loadComplete: function () { + $('#jqxLoader').jqxLoader('close'); + }, + loadError: function (jqXHR, status, error) { + } + }), + settings = { + title: my_code + ' "' + my_name + '"', + description: "", + source: dataAdapter, + xAxis: { + dataField: 'date', + type: 'date', + formatFunction: function (value) { + return value.getDate() + '-' + (value.getMonth() + 1) + '-' + value.getFullYear(); + }, + toolTipFormatFunction: function (value) { + var h = value.getHours(), + m = value.getMinutes(); + return value.getDate() + '-' + (value.getMonth() + 1) + '-' + value.getFullYear() + + ' ' + (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m); + }, + textRotationAngle: 45, + howGridLines: false + }, + colorScheme: 'scheme01', + seriesGroups: [ + { + type: "area", + valueAxis: { + minValue: 0, + displayValueAxis: false, + description: "Druk in bar" + }, + series: [ + { dataField: "pressure", lineWidth: 1, displayText: "Druk", opacity: 0.4 } + ] + }, + { + type: 'spline', + valueAxis: { + minValue: 0, + description: 'Graden C' + }, + series: [ + { dataField: "temperature", lineWidth: 1, displayText: "Temperatuur" } + ] + } + ] + }; + $("#pressure_chart").jqxChart(settings); + + $("#print").click(function () { + var content = $("#pressure_chart")[0].outerHTML, + newWindow = window.open("", "", "width=865, height=425"), + document = newWindow.document.open(), + pageContent = + '' + + '' + + '' + + '' + + '' + + '' + my_code + ' ' + my_name + ' hergisting' + + '' + + '' + content + ''; + document.write(pageContent); + document.close(); + newWindow.print(); + }); + $("#print").jqxButton({ template: "primary", width: 125, theme: theme }); + + + $("#pdfButton").click(function () { + $("#pressure_chart").jqxChart("saveAsPDF", "hergisting_"+my_code+".pdf", getExportServer()); + }); + $("#pdfButton").jqxButton({ template: "primary", width: 125, theme: theme }); + + $("#pngButton").click(function () { + $("#pressure_chart").jqxChart("saveAsPNG", "hergisting_"+my_code+".png", getExportServer()); + }); + $("#pngButton").jqxButton({ template: "primary", width: 125, theme: theme }); + + $("#Close").jqxButton({ template: "success", width: 125, theme: theme }); + $("#Close").click(function () { + window.close(); + }); +}); + diff -r 8ab0e87d579e -r 17f244137a9b www/js/mon_co2meter-min.js --- a/www/js/mon_co2meter-min.js Fri Oct 11 21:04:48 2019 +0200 +++ b/www/js/mon_co2meter-min.js Fri Oct 11 22:48:43 2019 +0200 @@ -1,1 +1,1 @@ -$(document).ready(function(){var g={},f={},d=false,h=0,i={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"},l=new $.jqx.dataAdapter(i,{beforeLoadComplete:function(m){var p,n,o=new Array();f.code="Free";f.name="Dummy";f.uuid="66ecccbf-e942-4a35-af49-8b02314561a5";o.push(f);for(n=0;nPower');$("#select_beer").jqxDropDownList({disabled:true});$("#select_beer").jqxDropDownList("clearSelection");$("#select_beer").hide()}else{$("#co2meter_powerled").html('
Power');$("#select_beer").show();$("#select_beer").jqxDropDownList({disabled:false})}if(g.online&&(g.alarm!="0")){$("#co2meter_alarmled").html('
Alarm')}else{$("#co2meter_alarmled").html('
Alarm')}$("#gaugeContainer_temperature").jqxGauge({caption:{value:"Temp: "+g.temperature.toFixed(3)}});$("#gaugeContainer_temperature").jqxGauge({value:g.temperature});if(g.temperature_state=="OK"){$("#gaugeContainer_temperature").jqxGauge({disabled:false})}else{$("#gaugeContainer_temperature").jqxGauge({disabled:true})}$("#gaugeContainer_pressure").jqxGauge({caption:{value:"Bar: "+g.pressure_bar.toFixed(2)}});$("#gaugeContainer_pressure").jqxGauge({value:g.pressure_bar});if(g.pressure_state=="OK"){$("#gaugeContainer_pressure").jqxGauge({disabled:false})}else{$("#gaugeContainer_pressure").jqxGauge({disabled:true})}}});$("#select_beer").jqxDropDownList({placeHolder:"Kies bier:",theme:theme,source:l,displayMember:"code",width:150,height:24,dropDownWidth:500,autoDropDownHeight:true,renderer:function(n,m,p){var o=l.records[n];return o.code+" - "+o.name}});$("#gaugeContainer_temperature").jqxGauge(c);$("#gaugeContainer_temperature").jqxGauge({caption:{value:"Temp: 00.000"}});$("#gaugeContainer_pressure").jqxGauge(e);$("#gaugeContainer_pressure").jqxGauge({caption:{value:"Bar: 00.000"}});function j(o,m,n){console.log("sendProduct("+o+", "+m+", "+n+")");var p="uuid="+g.uuid+"&beeruuid="+n+"&beercode="+o+"&beername="+m;$.ajax({url:"cmd_co2meter.php",data:p,type:"POST",success:function(q){},error:function(q,s,r){console.log("sendProduct() error")}})}k.dataBind();setInterval(function(){var m=false;if(d){j(g.beercode,g.beername,g.beeruuid);d=false;m=true}if(m){h=4}else{if(h>0){h--}}if(h<=0){k.dataBind();h=20}},500);$("#select_beer").on("select",function(o){if(o.args){var m=o.args.index,n=l.records[m];g.beercode=n.code;g.beername=n.name;g.beeruuid=n.uuid;d=true}});$("#FLog").jqxButton({template:"primary",width:"150px",theme:theme});$("#FLog").click(function(){window.open("log_fermentation.php?code="+g.beercode+"&name="+g.beername)})}); \ No newline at end of file +$(document).ready(function(){var g={},f={},d=false,h=0,i={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"},l=new $.jqx.dataAdapter(i,{beforeLoadComplete:function(m){var p,n,o=new Array();f.code="Free";f.name="Dummy";f.uuid="66ecccbf-e942-4a35-af49-8b02314561a5";o.push(f);for(n=0;nPower');$("#select_beer").jqxDropDownList({disabled:true});$("#select_beer").jqxDropDownList("clearSelection");$("#select_beer").hide()}else{$("#co2meter_powerled").html('
Power');$("#select_beer").show();$("#select_beer").jqxDropDownList({disabled:false})}if(g.online&&(g.alarm!="0")){$("#co2meter_alarmled").html('
Alarm')}else{$("#co2meter_alarmled").html('
Alarm')}$("#gaugeContainer_temperature").jqxGauge({caption:{value:"Temp: "+g.temperature.toFixed(3)}});$("#gaugeContainer_temperature").jqxGauge({value:g.temperature});if(g.temperature_state=="OK"){$("#gaugeContainer_temperature").jqxGauge({disabled:false})}else{$("#gaugeContainer_temperature").jqxGauge({disabled:true})}$("#gaugeContainer_pressure").jqxGauge({caption:{value:"Bar: "+g.pressure_bar.toFixed(2)}});$("#gaugeContainer_pressure").jqxGauge({value:g.pressure_bar});if(g.pressure_state=="OK"){$("#gaugeContainer_pressure").jqxGauge({disabled:false})}else{$("#gaugeContainer_pressure").jqxGauge({disabled:true})}}});$("#select_beer").jqxDropDownList({placeHolder:"Kies bier:",theme:theme,source:l,displayMember:"code",width:150,height:24,dropDownWidth:500,autoDropDownHeight:true,renderer:function(n,m,p){var o=l.records[n];return o.code+" - "+o.name}});$("#gaugeContainer_temperature").jqxGauge(c);$("#gaugeContainer_temperature").jqxGauge({caption:{value:"Temp: 00.000"}});$("#gaugeContainer_pressure").jqxGauge(e);$("#gaugeContainer_pressure").jqxGauge({caption:{value:"Bar: 00.000"}});function j(o,m,n){console.log("sendProduct("+o+", "+m+", "+n+")");var p="uuid="+g.uuid+"&beeruuid="+n+"&beercode="+o+"&beername="+m;$.ajax({url:"cmd_co2meter.php",data:p,type:"POST",success:function(q){},error:function(q,s,r){console.log("sendProduct() error")}})}k.dataBind();setInterval(function(){var m=false;if(d){j(g.beercode,g.beername,g.beeruuid);d=false;m=true}if(m){h=4}else{if(h>0){h--}}if(h<=0){k.dataBind();h=20}},500);$("#select_beer").on("select",function(o){if(o.args){var m=o.args.index,n=l.records[m];g.beercode=n.code;g.beername=n.name;g.beeruuid=n.uuid;d=true}});$("#FLog").jqxButton({template:"primary",width:"150px",theme:theme});$("#FLog").click(function(){window.open("log_co2pressure.php?code="+g.beercode+"&name="+g.beername)})}); \ No newline at end of file diff -r 8ab0e87d579e -r 17f244137a9b www/js/mon_co2meter.js --- a/www/js/mon_co2meter.js Fri Oct 11 21:04:48 2019 +0200 +++ b/www/js/mon_co2meter.js Fri Oct 11 22:48:43 2019 +0200 @@ -218,6 +218,6 @@ // The chart button. $("#FLog").jqxButton({ template: "primary", width: '150px', theme: theme }); $("#FLog").click(function () { - window.open('log_co2meter.php?code=' + record.beercode + '&name=' + record.beername); + window.open('log_co2pressure.php?code=' + record.beercode + '&name=' + record.beername); }); }); diff -r 8ab0e87d579e -r 17f244137a9b www/log_co2pressure.php --- a/www/log_co2pressure.php Fri Oct 11 21:04:48 2019 +0200 +++ b/www/log_co2pressure.php Fri Oct 11 22:48:43 2019 +0200 @@ -5,7 +5,7 @@
-
+