Web - server communication for switches improved.

Mon, 04 Aug 2014 19:31:03 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 04 Aug 2014 19:31:03 +0200
changeset 178
988a898974f3
parent 177
48d19ec83a49
child 179
417ee898fb02

Web - server communication for switches improved.

thermferm/server.c file | annotate | diff | comparison | revisions
www-thermferm/index.php file | annotate | diff | comparison | revisions
www-thermferm/liveview.php file | annotate | diff | comparison | revisions
--- a/thermferm/server.c	Mon Aug 04 15:25:13 2014 +0200
+++ b/thermferm/server.c	Mon Aug 04 19:31:03 2014 +0200
@@ -998,7 +998,7 @@
     units_list          *unit, *tmpu;
     uuid_t		uu;
     socklen_t		fromlen;
-    int			i, rlen;
+    int			ival, i, rlen;
     float		fval;
 
     opt = strtok(buf, " \0");
@@ -1173,73 +1173,109 @@
 			}
 			kwd = strtok(ibuf, ",\0");
 			val = strtok(NULL, "\0");
-			if (kwd && val) {
+			if (kwd) {
+				fprintf(stdout, "strlen(%s) %d\n", val, strlen(val));
 			    /*
 			     * Accept writable data. The client can sent just one line,
 			     * but may also sent everything. Simply ignore things we
 			     * don't understand.
 			     */
-			    if (strcmp(kwd, (char *)"NAME") == 0) {
+			    if (val && (strcmp(kwd, (char *)"NAME") == 0)) {
 				if (unit->name)
 				    free(unit->name);
 				unit->name = xstrcpy(val);
 
-			    } else if (strcmp(kwd, (char *)"VOLUME") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"VOLUME") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->volume = fval;
 
 			    } else if (strcmp(kwd, (char *)"AIR_ADDRESS") == 0) {
 				if (unit->air_address)
 				    free(unit->air_address);
-				unit->air_address  = xstrcpy(val);
+				if (val)
+				    unit->air_address  = xstrcpy(val);
+				else
+				    unit->air_address  = NULL;
 
 			    } else if (strcmp(kwd, (char *)"BEER_ADDRESS") == 0) {
 				if (unit->beer_address)
 				    free(unit->beer_address);
-				unit->beer_address = xstrcpy(val);
+				if (val)
+				    unit->beer_address = xstrcpy(val);
+				else
+				    unit->beer_address = NULL;
 
 			    } else if (strcmp(kwd, (char *)"HEATER_ADDRESS") == 0) {
 				if (unit->heater_address)
 				    free(unit->heater_address);
-				unit->heater_address = xstrcpy(val);
+				if (val)
+				    unit->heater_address = xstrcpy(val);
+				else
+				    unit->heater_address = NULL;
+
+			    } else if (val && (strcmp(kwd, (char *)"HEATER_STATE") == 0)) {
+				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100)))
+				    unit->heater_state = ival;
 
 			    } else if (strcmp(kwd, (char *)"COOLER_ADDRESS") == 0) {
 				if (unit->cooler_address)
 				    free(unit->cooler_address);
-				unit->cooler_address = xstrcpy(val);
+				if (val)
+				    unit->cooler_address = xstrcpy(val);
+				else
+				    unit->cooler_address = NULL;
+
+			    } else if (val && (strcmp(kwd, (char *)"COOLER_STATE") == 0)) {
+				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100)))
+				    unit->cooler_state = ival;
 
 			    } else if (strcmp(kwd, (char *)"FAN_ADDRESS") == 0) {
 				if (unit->fan_address)
-				free(unit->fan_address);
-				unit->fan_address = xstrcpy(val);
+				    free(unit->fan_address);
+				if (val)
+				    unit->fan_address = xstrcpy(val);
+				else
+				    unit->fan_address = NULL;
 			   
+			    } else if (val && (strcmp(kwd, (char *)"FAN_STATE") == 0)) {
+				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100)))
+				    unit->fan_state = ival;
+			    
 			    } else if (strcmp(kwd, (char *)"DOOR_ADDRESS") == 0) {
 				if (unit->door_address)
-				free(unit->door_address);
-				unit->door_address = xstrcpy(val);
+				    free(unit->door_address);
+				if (val)
+				    unit->door_address = xstrcpy(val);
+				else
+				    unit->door_address = NULL;
 
-			    } else if (strcmp(kwd, (char *)"MODE") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"MODE") == 0)) {
 				for (i = 0; i < 5; i++) {
 				    if (strcmp(val, UNITMODE[i]) == 0) {
 					unit->mode = i;
+					/* Allways turn everything off after a mode change */
+					unit->heater_state = unit->cooler_state = unit->fan_state = 0;
 					break;
 				    }
 				}
 
-			    } else if (strcmp(kwd, (char *)"FRIDGE_SET") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"FRIDGE_SET") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->fridge_set = fval;
 
-			    } else if (strcmp(kwd, (char *)"BEER_SET") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"BEER_SET") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->beer_set = fval;
 
 			    } else if (strcmp(kwd, (char *)"PROFILE") == 0) {
 				if (unit->profile)
 				    free(unit->profile);
-				unit->profile = xstrcpy(val);
+				if (val)
+				    unit->profile = xstrcpy(val);
+				else
+				    unit->profile = NULL;
 
-			    } else if (strcmp(kwd, (char *)"PROF_STATE") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"PROF_STATE") == 0)) {
 				for (i = 0; i < 4; i++) {
 				    if (strcmp(val, PROFSTATE[i]) == 0) {
 					unit->prof_state = i;
@@ -1247,19 +1283,19 @@
 				    }
 				}
 
-			    } else if (strcmp(kwd, (char *)"TEMP_SET_MIN") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"TEMP_SET_MIN") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->temp_set_min = fval;
 
-			    } else if (strcmp(kwd, (char *)"TEMP_SET_MAX") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"TEMP_SET_MAX") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->temp_set_max = fval;
 
-			    } else if (strcmp(kwd, (char *)"IDLE_RANGE_L") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"IDLE_RANGE_L") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->idle_rangeL = fval;
 
-			    } else if (strcmp(kwd, (char *)"IDLE_RANGE_H") == 0) {
+			    } else if (val && (strcmp(kwd, (char *)"IDLE_RANGE_H") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1)
 				    unit->idle_rangeH = fval;
 
--- a/www-thermferm/index.php	Mon Aug 04 15:25:13 2014 +0200
+++ b/www-thermferm/index.php	Mon Aug 04 19:31:03 2014 +0200
@@ -55,6 +55,69 @@
 }
 
 
+if (isset($_POST['HeaterState']) && isset($_POST['UUID'])) {
+    $sock = open_socket();
+    if ($sock != false) {
+	socket_write($sock, 'UNIT PUT '.$_POST['UUID'], 4096);
+	usleep(20000);
+	socket_write($sock, 'HEATER_STATE,'.$_POST['HeaterState'], 4096);
+	usleep(20000);
+	socket_write($sock, '.', 4096);
+	/* Absorb response */
+	while (1) {
+	    $line = socket_read($sock, 4096);
+	    if ($line === '')
+		break;
+	}
+	socket_close($sock);
+    }
+    unset($_POST['UUID']);
+    unset($_POST['HeaterState']);
+}
+
+
+if (isset($_POST['CoolerState']) && isset($_POST['UUID'])) {
+    $sock = open_socket();
+    if ($sock != false) {
+	socket_write($sock, 'UNIT PUT '.$_POST['UUID'], 4096);
+	usleep(20000);
+	socket_write($sock, 'COOLER_STATE,'.$_POST['CoolerState'], 4096);
+	usleep(20000);
+	socket_write($sock, '.', 4096);
+	/* Absorb response */
+	while (1) {
+	    $line = socket_read($sock, 4096);
+	    if ($line === '')
+		break;
+	}
+	socket_close($sock);
+    }
+    unset($_POST['UUID']);
+    unset($_POST['CoolerState']);
+}
+
+
+if (isset($_POST['FanState']) && isset($_POST['UUID'])) {
+    $sock = open_socket();
+    if ($sock != false) {
+	socket_write($sock, 'UNIT PUT '.$_POST['UUID'], 4096);
+	usleep(20000);
+	socket_write($sock, 'FAN_STATE,'.$_POST['FanState'], 4096);
+	usleep(20000);
+	socket_write($sock, '.', 4096);
+	/* Absorb response */
+	while (1) {
+	    $line = socket_read($sock, 4096);
+	    if ($line === '')
+		break;
+	}
+	socket_close($sock);
+    }
+    unset($_POST['UUID']);
+    unset($_POST['FanState']);
+}
+
+
 
 $outstr  = '<!DOCTYPE html>'.PHP_EOL;
 $outstr .= '<html>'.PHP_EOL;
--- a/www-thermferm/liveview.php	Mon Aug 04 15:25:13 2014 +0200
+++ b/www-thermferm/liveview.php	Mon Aug 04 19:31:03 2014 +0200
@@ -56,6 +56,7 @@
 	$beer_temperature = "NA";
 	$power_led = $cooler_led = $heater_led = $fan_led = "off";
 	$heater = $cooler = $fan = "no";
+	$heater_state = $cooler_state = $fan_state = 0;
 
 	foreach($arr as $l) {
 	    $vals = explode(",", $l);
@@ -76,15 +77,24 @@
 	    if ((strcmp($vals[0], "BEER_TEMPERATURE") == 0) && ($beer_state == 0)) {
 		$beer_temperature = $vals[1];
 	    }
-	    if ((strcmp($vals[0], "HEATER") == 0) && (strcmp($vals[1], "YES"))) {
+	    if ((strcmp($vals[0], "HEATER_ADDRESS") == 0) && (strcmp($vals[1], "(null)"))) {
 		$heater = "yes";
 	    }
-	    if ((strcmp($vals[0], "COOLER") == 0) && (strcmp($vals[1], "YES"))) {
+	    if (strcmp($vals[0], "HEATER_STATE") == 0) {
+		$heater_state = $vals[1];
+	    }
+	    if ((strcmp($vals[0], "COOLER_ADDRESS") == 0) && (strcmp($vals[1], "(null)"))) {
 		$cooler = "yes";
 	    }
-	    if ((strcmp($vals[0], "FAN") == 0) && (strcmp($vals[1], "YES"))) {
+	    if (strcmp($vals[0], "COOLER_STATE") == 0) {
+		$cooler_state = $vals[1];
+	    }
+	    if ((strcmp($vals[0], "FAN_ADDRESS") == 0) && (strcmp($vals[1], "(null)"))) {
 		$fan = "yes";
 	    }
+	    if (strcmp($vals[0], "FAN_STATE") == 0) {
+		$fan_state = $vals[1];
+	    }
 	}
 
 	$outstr .= '    <script type="text/javascript">'.PHP_EOL;
@@ -191,39 +201,53 @@
 	$outstr .= '      </div>'.PHP_EOL;
 	$outstr .= '     </div> <!-- fermentor_panel_display -->'.PHP_EOL;
 
+
 	$outstr .= '     <div id="fermentor_panel_control">'.PHP_EOL;
+	if ($cooler_state == "100")
+	    $cooler_led = "on";
 	$outstr .= '      <div id="fermentor_led1">'.PHP_EOL;
 	$outstr .= '       <img src="images/led_green_'.$cooler_led.'.png"><br>Cool'.PHP_EOL;
 	$outstr .= '      </div>'.PHP_EOL;
+	if ($heater_state == "100")
+	    $heater_led = "on";
 	$outstr .= '      <div id="fermentor_led2">'.PHP_EOL;
 	$outstr .= '       <img src="images/led_green_'.$heater_led.'.png"><br>Heat'.PHP_EOL;
 	$outstr .= '      </div>'.PHP_EOL;
+	if ($fan_state == "100")
+	    $fan_led = "on";
 	$outstr .= '      <div id="fermentor_led3">'.PHP_EOL;
 	$outstr .= '       <img src="images/led_green_'.$fan_led.'.png"><br>Fan'.PHP_EOL;
 	$outstr .= '      </div>'.PHP_EOL;
+
 	$outstr .= '      <div id="fermentor_toggle1">'.PHP_EOL;
 	$outstr .= '       <form action="index.php" method="post">'.PHP_EOL;
-	strcmp($mode, "NONE") ? $dis = " disabled" : $dis = "";
-	$ch = " checked";
-
-	$outstr .= '        <input type="radio" name="cooler" onchange="this.form.submit()" value="OFF"'.$dis.$ch.'>Off<br>'.PHP_EOL;
-	$outstr .= '        <input type="radio" name="cooler" onchange="this.form.submit()" value="ON"'.$dis.'>On'.PHP_EOL;
+	(($mode == "NONE") && ($cooler == "yes")) ? $dis = "" : $dis = " disabled";
+	($cooler_state == "0") ? $ch = " checked" : $ch = "";
+	$outstr .= '        <input type="radio" name="CoolerState" onchange="this.form.submit()" value="0"'.$dis.$ch.'>Off<br>'.PHP_EOL;
+	($cooler_state == "100") ? $ch = " checked" : $ch = "";
+	$outstr .= '        <input type="radio" name="CoolerState" onchange="this.form.submit()" value="100"'.$dis.$ch.'>On'.PHP_EOL;
 	$outstr .= '        <input type="hidden" name="UUID" value="'.$unit.'">'.PHP_EOL;
 	$outstr .= '       </form>'.PHP_EOL;
 	$outstr .= '      </div>'.PHP_EOL;
+
 	$outstr .= '      <div id="fermentor_toggle2">'.PHP_EOL;
 	$outstr .= '       <form action="index.php" method="post">'.PHP_EOL;
-	strcmp($mode, "NONE") ? $dis = " disabled" : $dis = "";
-	$outstr .= '        <input type="radio" name="heater" onchange="this.form.submit()" value="OFF"'.$dis.$ch.'>Off<br>'.PHP_EOL;
-	$outstr .= '        <input type="radio" name="heater" onchange="this.form.submit()" value="ON"'.$dis.'>On'.PHP_EOL;
+	(($mode == "NONE") && ($heater == "yes")) ? $dis = "" : $dis = " disabled";
+	($heater_state == "0") ? $ch = " checked" : $ch = "";
+	$outstr .= '        <input type="radio" name="HeaterState" onchange="this.form.submit()" value="0"'.$dis.$ch.'>Off<br>'.PHP_EOL;
+	($heater_state == "100") ? $ch = " checked" : $ch = "";
+	$outstr .= '        <input type="radio" name="HeaterState" onchange="this.form.submit()" value="100"'.$dis.$ch.'>On'.PHP_EOL;
 	$outstr .= '        <input type="hidden" name="UUID" value="'.$unit.'">'.PHP_EOL;
 	$outstr .= '       </form>'.PHP_EOL;
 	$outstr .= '      </div>'.PHP_EOL;
+
 	$outstr .= '      <div id="fermentor_toggle3">'.PHP_EOL;
 	$outstr .= '       <form action="index.php" method="post">'.PHP_EOL;
-	strcmp($mode, "NONE") ? $dis = " disabled" : $dis = "";
-	$outstr .= '        <input type="radio" name="fan" onchange="this.form.submit()" value="OFF"'.$dis.$ch.'>Off<br>'.PHP_EOL;
-	$outstr .= '        <input type="radio" name="fan" onchange="this.form.submit()" value="ON"'.$dis.'>On'.PHP_EOL;
+	(($mode == "NONE") && ($fan== "yes")) ? $dis = "" : $dis = " disabled";
+	($fan_state == "0") ? $ch = " checked" : $ch = "";
+	$outstr .= '        <input type="radio" name="FanState" onchange="this.form.submit()" value="0"'.$dis.$ch.'>Off<br>'.PHP_EOL;
+	($fan_state == "100") ? $ch = " checked" : $ch = "";
+	$outstr .= '        <input type="radio" name="FanState" onchange="this.form.submit()" value="100"'.$dis.$ch.'>On'.PHP_EOL;
 	$outstr .= '        <input type="hidden" name="UUID" value="'.$unit.'">'.PHP_EOL;
 	$outstr .= '       </form>'.PHP_EOL;
 	$outstr .= '      </div>'.PHP_EOL;

mercurial