diff -r 0ef62ec2d5b0 -r 6470e5c6a001 www/js/mon_fermenter.js --- a/www/js/mon_fermenter.js Sat Jan 12 20:18:54 2019 +0100 +++ b/www/js/mon_fermenter.js Sat Jan 19 12:05:37 2019 +0100 @@ -25,10 +25,12 @@ var record = {}; var blank = {}; + var ppayload = ''; var newBase = false; var newProduct = false; var newSwitch = false; var newProfile = false; + var schedule = 0; var yl = 12; // Normal yeast temp range var yh = 24; @@ -53,8 +55,7 @@ data.push(blank); for (var i = 0; i < records.length; i++) { var row = records[i]; - if (row.inventory || ! fermentableinstock) - data.push(row); + data.push(row); } return data; }, @@ -68,7 +69,7 @@ source: productlist, displayMember: "code", width: 150, - height: 23, + height: 24, dropDownWidth: 500, autoDropDownHeight: true, renderer: function (index, label, value) { @@ -77,6 +78,59 @@ } }); + var profileSource = { + datatype: "json", + cache: false, + datafields: [ + { name: 'record', type: 'int' }, + { name: 'uuid', type: 'string' }, + { name: 'name', type: 'string' }, + { name: 'inittemp_lo', type: 'float' }, + { name: 'inittemp_hi', type: 'float' }, + { name: 'fridgemode', type: 'int' }, + { name: 'totalsteps', type: 'int' }, + { name: 'duration', type: 'int' }, + { name: 'steps', type: 'array' } + ], + id: 'record', + url: "includes/db_profile_fermentation.php" + }; + var profilelist = new $.jqx.dataAdapter(profileSource, { + beforeLoadComplete: function (records) { + var data = new Array(); + var empty = {}; + // Create a dummy beer on top to store in idle fermenters. + empty['record'] = -1; + empty['uuid'] = ''; + empty['name'] = 'Wis profiel'; + empty['inittemp_lo'] = 20; + empty['inittemp_hi'] = 20; + empty['fridgemode'] = 0; + empty['totalsteps'] = 0; + empty['duration'] = 0; + empty['steps'] = '[]'; + data.push(empty); + for (var i = 0; i < records.length; i++) { + var row = records[i]; + data.push(row); + } + return data; + }, + loadError: function(jqXHR, status, error) { + $('#err').text(status + ' ' + error); + }, + }); + $("#select_profile").jqxDropDownList({ + placeHolder: "Kies profiel:", + theme: theme, + source: profilelist, + displayMember: "name", + width: 150, + height: 24, + dropDownWidth: 500, + autoDropDownHeight: true, + }); + var gaugeoptions = { min: 0, max: 40, width: 375, height: 375, ranges: [{ startValue: 0, endValue: yl, style: { fill: '#3399FF', stroke: '#3399FF' }, endWidth: 10, startWidth: 10 }, @@ -123,15 +177,14 @@ srcMode = [ "OFF", "NONE", "FRIDGE", "BEER", "PROFILE" ]; srcStage = [ "PRIMARY", "SECONDARY", "TERTIARY", "CARBONATION" ]; - $("#info_mode").jqxDropDownList({ theme: theme, source: srcMode, width: 100, height: 23, dropDownHeight: 156 }); - $("#info_stage").jqxDropDownList({ theme: theme, source: srcStage, width: 150, height: 23, dropDownHeight: 125 }); + $("#info_mode").jqxDropDownList({ theme: theme, source: srcMode, width: 100, height: 24, dropDownHeight: 156 }); + $("#info_stage").jqxDropDownList({ theme: theme, source: srcStage, width: 150, height: 24, dropDownHeight: 125 }); var targetoptions = { inputMode: 'simple', spinMode: 'simple', theme: theme, width: 70, - height: 23, min:0, max: 40, decimalDigits: 1, spinButtons: true, @@ -140,6 +193,11 @@ $("#target_lo").jqxNumberInput( targetoptions ); $("#target_hi").jqxNumberInput( targetoptions ); + $("#Profile1").jqxButton({ template: "info", width: '150px', height: 24, theme: theme }); + $("#Profile2").jqxButton({ template: "info", width: '150px', height: 24, theme: theme }); + $("#Profile1").hide(); // Hide these until they are needed. + $("#Profile2").hide(); + function sendBase(stage, mode, tlo, thi) { console.log("sendBase("+stage+", "+mode+", "+tlo+", "+thi+")"); @@ -194,6 +252,23 @@ }); } + function sendProfile(payload) { + + console.log("sendProfile("+payload+")"); + var data = 'node='+record.node+'&alias='+record.alias+'&payload='+payload; + $.ajax({ + url: "cmd_fermenter.php", + data: data, + type: "POST", + success: function(data) { + //do something after something is received from php + }, + error: function(jqXHR, textStatus, errorThrown) { + console.log("sendBase() error"); + } + }); + } + var url = "getfermenter.php?uuid='" + my_uuid + "'"; var source = { datatype: "json", @@ -217,9 +292,12 @@ { name: 'cooler_usage', type: 'int' }, { name: 'fan_state', type: 'int' }, { name: 'fan_usage', type: 'int' }, + { name: 'light_address', type: 'string' }, { name: 'light_state', type: 'int' }, { name: 'light_usage', type: 'int' }, + { name: 'door_address', type: 'string' }, { name: 'door_state', type: 'int' }, + { name: 'psu_address', type: 'string' }, { name: 'psu_state', type: 'int' }, { name: 'mode', type: 'string' }, { name: 'alarm', type: 'int' }, @@ -228,7 +306,7 @@ { name: 'profile_uuid', type: 'string' }, { name: 'profile_name', type: 'string' }, { name: 'profile_state', type: 'string' }, - { name: 'profile_precent', type: 'int' }, + { name: 'profile_percent', type: 'int' }, { name: 'profile_inittemp_high', type: 'float' }, { name: 'profile_inittemp_low', type: 'float' }, { name: 'profile_steps', type: 'string' }, @@ -243,7 +321,8 @@ record = dataAdapter.records[0]; var oline = (record.online) ? "On-line" : "Off-line"; $("#info_uuid").html(record.uuid); - $("#info_system").html(record.node + "/" + record.alias + " " + oline); + $("#info_system").html(record.node + "/" + record.alias); + $("#info_online").html(oline); $("#info_beer").html(record.beercode + " - " + record.beername); $("#info_mode").jqxDropDownList('selectItem', record.mode); $("#info_stage").jqxDropDownList('selectItem', record.stage); @@ -264,12 +343,12 @@ $("#target_hi").jqxNumberInput({ readOnly: true, Width: 50, spinButtons: false }); } - if (record.online && (record.door_state != "0")) { + if (record.online && record.door_address && (record.door_state == "0")) { $("#fermenter_doorled").html('
Door'); } else { $("#fermenter_doorled").html('
Door'); } - if (record.online && (record.light_state != "0")) { + if (record.online && record.light_address && (record.light_state != "0")) { $("#fermenter_lightled").html('
Light'); } else { $("#fermenter_lightled").html('
Light'); @@ -279,8 +358,10 @@ $("#fermenter_powerled").html('
Power'); $("#select_beer").jqxDropDownList({ disabled: true }); $("#select_beer").jqxDropDownList('clearSelection'); + $("#select_beer").hide(); } else { $("#fermenter_powerled").html('
Power'); + $("#select_beer").show(); $("#select_beer").jqxDropDownList({ disabled: false }); } if (record.online && (record.alarm != "0")) { @@ -317,6 +398,51 @@ $("#fermenter_toggle3").val( (record.fan_state != "0") ); } + if (record.online && (record.mode == "PROFILE")) { + if (record.profile_state == "OFF") { + $("#select_profile").show(); + $("#select_profile").jqxDropDownList({ disabled: false }); + $("#info_mode").jqxDropDownList({ disabled: false }); + $('#Profile1').jqxButton({ template: "success", value: "Starten" }); + $("#Profile1").show(); + $("#Profile2").hide(); + $("#status_profile").html(''); + } else if (record.profile_state == "RUN") { + $("#select_profile").jqxDropDownList({ disabled: true }); + $("#select_profile").hide(); + $("#info_mode").jqxDropDownList({ disabled: true }); + $('#Profile1').jqxButton({ template: "danger", value: "Afbreken" }); + $('#Profile2').jqxButton({ template: "primary", value: "Pauze" }); + $("#Profile1").show(); + $("#Profile2").show(); + $("#status_profile").html('Profiel actief, '+record.profile_percent+'% gereed'); + } else if (record.profile_state == "PAUSE") { + $("#select_profile").jqxDropDownList({ disabled: true }); + $("#select_profile").hide(); + $("#info_mode").jqxDropDownList({ disabled: true }); + $('#Profile1').jqxButton({ template: "danger", value: "Afbreken" }); + $('#Profile2').jqxButton({ template: "success", value: "Doorgaan" }); + $("#Profile1").show(); + $("#Profile2").show(); + $("#status_profile").html('Profiel pauze, '+record.profile_percent+'% gereed'); + } else if (record.profile_state == "DONE") { + $("#select_profile").jqxDropDownList({ disabled: true }); + $("#select_profile").hide(); + $("#info_mode").jqxDropDownList({ disabled: true }); + $('#Profile1').jqxButton({ template: "primary", value: "Profiel Ok" }); + $("#Profile1").show(); + $("#Profile2").hide(); + $("#status_profile").html('Profiel is gereed'); + } + } else { + $("#select_profile").show(); + $("#select_profile").jqxDropDownList({ disabled: false }); + $("#info_mode").jqxDropDownList({ disabled: false }); + $("#Profile1").hide(); + $("#Profile2").hide(); + $("#status_profile").html(''); + } + $("#gaugeContainer_air").jqxGauge( { caption: { value: 'Air: '+record.air_temperature.toFixed(3) }}); $('#gaugeContainer_air').jqxGauge({ value: record.air_temperature }); if (record.online && (record.air_state == "OK")) { @@ -359,12 +485,23 @@ newProduct = false; skip = true; } + if (newProfile) { + sendProfile(ppayload); + newProfile = false; + skip = true; + } + if (skip) { + schedule = 4; // 2 seconds wait to get the results + } else { + if (schedule > 0) + schedule--; + } - if (! skip) { - // Only if we didn't send a command so that a command can be processed. + if (schedule <= 0) { dataAdapter.dataBind(); + schedule = 20; } - }, 10000); + }, 500); $('#info_mode').on('change', function (event) { record.mode = args.item.value; @@ -386,6 +523,29 @@ newProduct = true; } }); + $("#select_profile").on('select', function (event) { + if (event.args) { + var index = event.args.index; + var datarecord = profilelist.records[index]; + if (datarecord.record == -1) { + ppayload = '{"profile":null}'; + } else { + ppayload = '{"profile":{"uuid":"'+datarecord.uuid+'","name":"'+datarecord.name+'",'; + ppayload += '"inittemp":{"low":'+datarecord.inittemp_lo+',"high":'+datarecord.inittemp_hi+'},'; + ppayload += '"fridgemode":'+datarecord.fridgemode+',"steps":['; + for (var i = 0; i < datarecord.steps.length; i++) { + var row = datarecord.steps[i]; + if (i > 0) + ppayload += ','; + ppayload += '{"steptime":'+row['steptime']+',"resttime":'+row['resttime']; + ppayload += ',"target_lo":'+row['target_lo']+',"target_hi":'+row['target_hi']; + ppayload += ',"fridgemode":'+row['fridgemode']+',"name":"'+row['name']+'"}'; + } + ppayload += ']}}'; + } + newProfile = true; + } + }); $('#target_lo').on('change', function (event) { record.setpoint_low = parseFloat(event.args.value); @@ -446,10 +606,31 @@ newSwitch = true; } }); - + $("#Profile1").click(function () { + if (record.mode == "PROFILE") { + if (record.profile_state == "OFF") { + ppayload = '{"profile":{"command":"start"}}'; + newProfile = true; + } else if ((record.profile_state == "RUN") || (record.profile_state == "PAUSE")) { + ppayload = '{"profile":{"command":"abort"}}'; + newProfile = true; + } else if (record.profile_state == "DONE") { + ppayload = '{"profile":{"command":"done"}}'; + newProfile = true; + } + } + }); + $("#Profile2").click(function () { + if (record.mode == "PROFILE") { + if ((record.profile_state == "RUN") || (record.profile_state == "PAUSE")) { + ppayload = '{"profile":{"command":"pause"}}'; + newProfile = true; + } + } + }); // The chart button. - $("#FLog").jqxButton({ template: "info", width: '150px', theme: theme }); + $("#FLog").jqxButton({ template: "primary", width: '150px', theme: theme }); $("#FLog").click(function () { var url="log_fermentation.php?code=" + record.beercode + "&name=" + record.beername; window.open(url);