www/js/mon_fermenter.js

changeset 189
6470e5c6a001
parent 188
0ef62ec2d5b0
child 191
fd1d7225ca6e
--- 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('<div class="LEDyellow_on"></div>Door');
 			} else {
 				$("#fermenter_doorled").html('<div class="LEDyellow_off"></div>Door');
 			}
-			if (record.online && (record.light_state != "0")) {
+			if (record.online && record.light_address && (record.light_state != "0")) {
 				$("#fermenter_lightled").html('<div class="LEDyellow_on"></div>Light');
 			} else {
 				$("#fermenter_lightled").html('<div class="LEDyellow_off"></div>Light');
@@ -279,8 +358,10 @@
 				$("#fermenter_powerled").html('<div class="LEDblue_on"></div>Power');
 				$("#select_beer").jqxDropDownList({ disabled: true });
 				$("#select_beer").jqxDropDownList('clearSelection');
+				$("#select_beer").hide();
 			} else {
 				$("#fermenter_powerled").html('<div class="LEDblue_off"></div>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);

mercurial