111 */ |
111 */ |
112 function unit_update() { |
112 function unit_update() { |
113 /* |
113 /* |
114 * Build the update command |
114 * Build the update command |
115 */ |
115 */ |
116 if ($_POST['key'] == 'Delete') |
116 if ($_POST['key'] == 'Delete') { |
117 $update_cmd = "DEL UNIT ".$_POST['UUID']; |
117 $sock = open_socket(); |
118 else |
118 if ($sock != false) { |
119 $update_cmd = "XXXXXXX ".$_POST['UUID'].",".$_POST['Name']; |
119 socket_write($sock, "UNIT DEL ".$_POST['UUID'], 4096); |
120 |
120 /* Absorb response */ |
|
121 while (1) { |
|
122 $line = socket_read($sock, 4096); |
|
123 if ($line === '') |
|
124 break; |
|
125 } |
|
126 socket_close($sock); |
|
127 } |
|
128 } |
|
129 |
|
130 if ($_POST['key'] == 'Save') { |
121 $sock = open_socket(); |
131 $sock = open_socket(); |
122 if ($sock != false) { |
132 if ($sock != false) { |
123 /* |
133 /* |
124 * Send command and absorb the result. |
134 * Send command and absorb the result. |
125 */ |
135 */ |
126 socket_write($sock, $update_cmd, 4096); |
136 socket_write($sock, "UNIT PUT ".$_POST['UUID'], 4096); |
|
137 usleep(20000); |
|
138 socket_write($sock, "NAME,".$_POST['Name'], 4096); |
|
139 usleep(20000); |
|
140 socket_write($sock, "VOLUME,".$_POST['Volume'], 4096); |
|
141 usleep(20000); |
|
142 socket_write($sock, "AIR_ADDRESS,".$_POST['AirAddress'], 4096); |
|
143 usleep(20000); |
|
144 socket_write($sock, "BEER_ADDRESS,".$_POST['BeerAddress'], 4096); |
|
145 usleep(20000); |
|
146 socket_write($sock, "HEATER_ADDRESS,".$_POST['HeaterAddress'], 4096); |
|
147 usleep(20000); |
|
148 socket_write($sock, "COOLER_ADDRESS,".$_POST['CoolerAddress'], 4096); |
|
149 usleep(20000); |
|
150 socket_write($sock, "FAN_ADDRESS,".$_POST['FanAddress'], 4096); |
|
151 usleep(20000); |
|
152 socket_write($sock, "DOOR_ADDRESS,".$_POST['DoorAddress'], 4096); |
|
153 usleep(20000); |
|
154 socket_write($sock, "TEMP_SET_MIN,".$_POST['TempSetMin'], 4096); |
|
155 usleep(20000); |
|
156 socket_write($sock, "TEMP_SET_MAX,".$_POST['TempSetMax'], 4096); |
|
157 usleep(20000); |
|
158 socket_write($sock, "IDLE_RANGE_L,".$_POST['IdleRangeL'], 4096); |
|
159 usleep(20000); |
|
160 socket_write($sock, "IDLE_RANGE_H,".$_POST['IdleRangeH'], 4096); |
|
161 usleep(20000); |
|
162 |
|
163 socket_write($sock, ".", 4096); |
127 while (1) { |
164 while (1) { |
128 $line = socket_read($sock, 4096); |
165 $line = socket_read($sock, 4096); |
129 if ($line === '') |
166 if ($line === '') |
130 break; |
167 break; |
131 } |
168 } |
132 socket_close($sock); |
169 socket_close($sock); |
133 } |
170 } |
|
171 } |
134 |
172 |
135 unset($_POST['UUID']); |
173 unset($_POST['UUID']); |
136 unset($_POST['Name']); |
174 unset($_POST['Name']); |
|
175 unset($_POST['Volume']); |
137 unset($_POST['key']); |
176 unset($_POST['key']); |
138 unset($_POST['command']); |
177 unset($_POST['command']); |
139 load('units.php'); |
178 load('units.php'); |
140 } |
179 } |
141 |
180 |
221 $heading = 'ThermFerm - Add Unit'; |
263 $heading = 'ThermFerm - Add Unit'; |
222 } else { |
264 } else { |
223 $heading = 'ThermFerm - Edit Unit'; |
265 $heading = 'ThermFerm - Edit Unit'; |
224 } |
266 } |
225 |
267 |
226 edit_screen($_POST['UUID'], $_POST['Name'], $_POST['command'], $heading, $error); |
268 edit_screen($_POST['UUID'], $_POST['command'], $heading, $error); |
227 } |
269 } |
228 |
270 |
229 |
271 |
230 |
272 |
231 /* |
273 /* |
232 * Unit edit screen. Used by unit_edit(), unit_add() and testdata() |
274 * Unit edit screen. Used by unit_edit(), unit_add() and testdata() |
233 * |
275 * |
234 * @param string $UUID The record UUID (fixed). |
276 * @param string $UUID The record UUID (fixed). |
235 * @param string $Name The Unit Name. |
|
236 * @param string $command 'add' or 'update' |
277 * @param string $command 'add' or 'update' |
237 * @param string $heading Page heading title. |
278 * @param string $heading Page heading title. |
238 * @Param string $error_message Blank or previous error. |
279 * @Param string $error_message Blank or previous error. |
239 */ |
280 */ |
240 function edit_screen($UUID, $Name, $command, $heading, $error_message) { |
281 function edit_screen($UUID, $command, $heading, $error_message) { |
|
282 |
|
283 /* |
|
284 * Get list of devices, we need it later |
|
285 */ |
|
286 $sock = open_socket(); |
|
287 if ($sock == false) { |
|
288 load("units.php"); |
|
289 return; |
|
290 } |
|
291 |
|
292 socket_write($sock, "DEVICE LIST", 4096); |
|
293 $answer = ""; |
|
294 while (1) { |
|
295 $line = socket_read($sock, 4096); |
|
296 if ($line === '') |
|
297 break; |
|
298 $answer .= $line; |
|
299 } |
|
300 socket_close($sock); |
|
301 $devices = explode("\r\n", $answer); |
|
302 |
|
303 /* |
|
304 * Get current unit data |
|
305 */ |
|
306 $sock = open_socket(); |
|
307 if ($sock == false) { |
|
308 load("units.php"); |
|
309 return; |
|
310 } |
|
311 |
|
312 socket_write($sock, "UNIT GET ".$UUID, 4096); |
|
313 $answer = ""; |
|
314 while (1) { |
|
315 $line = socket_read($sock, 4096); |
|
316 if ($line === '') |
|
317 break; |
|
318 $answer .= $line; |
|
319 } |
|
320 socket_close($sock); |
|
321 $reply = explode("\r\n", $answer); |
241 |
322 |
242 $outstr = build_header($heading); |
323 $outstr = build_header($heading); |
243 $outstr .= ' <div id="errors">'.PHP_EOL; |
324 $outstr .= ' <div id="errors">'.PHP_EOL; |
244 $outstr .= ' '.$error_message.PHP_EOL; |
325 $outstr .= ' '.$error_message.PHP_EOL; |
245 $outstr .= ' </div> <!-- errors -->'.PHP_EOL; |
326 $outstr .= ' </div> <!-- errors -->'.PHP_EOL; |
246 $outstr .= ' <div id="etable">'.PHP_EOL; |
327 $outstr .= ' <div id="etable">'.PHP_EOL; |
247 $outstr .= ' <form method="POST" action="units.php">'.PHP_EOL; |
328 $outstr .= ' <form method="POST" action="units.php">'.PHP_EOL; |
248 $outstr .= ' <table class="editor">'.PHP_EOL; |
329 $outstr .= ' <table class="editor">'.PHP_EOL; |
249 $outstr .= ' <tr class="editor">'.PHP_EOL; |
330 |
250 $outstr .= ' <td class="editname">UUID</td>'.PHP_EOL; |
331 if (startsWith($reply[0], "213")) { |
251 $outstr .= ' <td class="editfield">'.$UUID.'</td>'.PHP_EOL; |
332 $i = 1; |
252 $outstr .= ' </tr>'.PHP_EOL; |
333 while (1) { |
253 $outstr .= ' <tr class="editor">'.PHP_EOL; |
334 if (strcmp($reply[$i], ".") == 0) |
254 $outstr .= ' <td class="editname">Unit Name</td>'.PHP_EOL; |
335 break; |
255 $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value="'.$Name.'"></td>'.PHP_EOL; |
336 $f = explode(",", $reply[$i]); |
256 $outstr .= ' </tr>'.PHP_EOL; |
337 |
|
338 if ($f[0] == "NAME") { |
|
339 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
340 $outstr .= ' <td class="editname">Unit Name</td>'.PHP_EOL; |
|
341 $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value="'.$f[1].'"></td>'.PHP_EOL; |
|
342 $outstr .= ' </tr>'.PHP_EOL; |
|
343 } |
|
344 if ($f[0] == "VOLUME") { |
|
345 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
346 $outstr .= ' <td class="editname">Unit Volume</td>'.PHP_EOL; |
|
347 $outstr .= ' <td class="editfield"><input type="text" name="Volume" size="5" value="'.$f[1].'"></td>'.PHP_EOL; |
|
348 $outstr .= ' </tr>'.PHP_EOL; |
|
349 } |
|
350 if ($f[0] == "AIR_ADDRESS") { |
|
351 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
352 $outstr .= ' <td class="editname">Air Sensor Address</td>'.PHP_EOL; |
|
353 $outstr .= ' <td class="editfield"><select name="AirAddress">'.PHP_EOL; |
|
354 $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; |
|
355 if (startsWith($devices[0], "212")) { |
|
356 $j = 1; |
|
357 while (1) { |
|
358 if (strcmp($devices[$j], ".") == 0) |
|
359 break; |
|
360 $g = explode(",", $devices[$j]); |
|
361 if ($g[5] == "IN_ANALOG") { |
|
362 ($f[1] == $g[0]) ? $se = " selected" : $se = ""; |
|
363 $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; |
|
364 } |
|
365 $j++; |
|
366 } |
|
367 } |
|
368 $outstr .= ' </select></td>'.PHP_EOL; |
|
369 $outstr .= ' </tr>'.PHP_EOL; |
|
370 } |
|
371 if ($f[0] == "BEER_ADDRESS") { |
|
372 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
373 $outstr .= ' <td class="editname">Beer Sensor Address</td>'.PHP_EOL; |
|
374 $outstr .= ' <td class="editfield"><select name="BeerAddress">'.PHP_EOL; |
|
375 $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; |
|
376 if (startsWith($devices[0], "212")) { |
|
377 $j = 1; |
|
378 while (1) { |
|
379 if (strcmp($devices[$j], ".") == 0) |
|
380 break; |
|
381 $g = explode(",", $devices[$j]); |
|
382 if ($g[5] == "IN_ANALOG") { |
|
383 ($f[1] == $g[0]) ? $se = " selected" : $se = ""; |
|
384 $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; |
|
385 } |
|
386 $j++; |
|
387 } |
|
388 } |
|
389 $outstr .= ' </select></td>'.PHP_EOL; |
|
390 $outstr .= ' </tr>'.PHP_EOL; |
|
391 } |
|
392 if ($f[0] == "HEATER_ADDRESS") { |
|
393 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
394 $outstr .= ' <td class="editname">Heater Switch Address</td>'.PHP_EOL; |
|
395 $outstr .= ' <td class="editfield"><select name="HeaterAddress">'.PHP_EOL; |
|
396 $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; |
|
397 if (startsWith($devices[0], "212")) { |
|
398 $j = 1; |
|
399 while (1) { |
|
400 if (strcmp($devices[$j], ".") == 0) |
|
401 break; |
|
402 $g = explode(",", $devices[$j]); |
|
403 if (($g[5] == "OUT_ANALOG") || ($g[5] == "OUT_BIN")) { |
|
404 ($f[1] == $g[0]) ? $se = " selected" : $se = ""; |
|
405 $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; |
|
406 } |
|
407 $j++; |
|
408 } |
|
409 } |
|
410 $outstr .= ' </select></td>'.PHP_EOL; |
|
411 $outstr .= ' </tr>'.PHP_EOL; |
|
412 } |
|
413 if ($f[0] == "COOLER_ADDRESS") { |
|
414 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
415 $outstr .= ' <td class="editname">Cooler Switch Address</td>'.PHP_EOL; |
|
416 $outstr .= ' <td class="editfield"><select name="CoolerAddress">'.PHP_EOL; |
|
417 $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; |
|
418 if (startsWith($devices[0], "212")) { |
|
419 $j = 1; |
|
420 while (1) { |
|
421 if (strcmp($devices[$j], ".") == 0) |
|
422 break; |
|
423 $g = explode(",", $devices[$j]); |
|
424 if (($g[5] == "OUT_ANALOG") || ($g[5] == "OUT_BIN")) { |
|
425 ($f[1] == $g[0]) ? $se = " selected" : $se = ""; |
|
426 $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; |
|
427 } |
|
428 $j++; |
|
429 } |
|
430 } |
|
431 $outstr .= ' </select></td>'.PHP_EOL; |
|
432 $outstr .= ' </tr>'.PHP_EOL; |
|
433 } |
|
434 if ($f[0] == "FAN_ADDRESS") { |
|
435 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
436 $outstr .= ' <td class="editname">Fan Switch Address</td>'.PHP_EOL; |
|
437 $outstr .= ' <td class="editfield"><select name="FanAddress">'.PHP_EOL; |
|
438 $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; |
|
439 if (startsWith($devices[0], "212")) { |
|
440 $j = 1; |
|
441 while (1) { |
|
442 if (strcmp($devices[$j], ".") == 0) |
|
443 break; |
|
444 $g = explode(",", $devices[$j]); |
|
445 if (($g[5] == "OUT_ANALOG") || ($g[5] == "OUT_BIN")) { |
|
446 ($f[1] == $g[0]) ? $se = " selected" : $se = ""; |
|
447 $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; |
|
448 } |
|
449 $j++; |
|
450 } |
|
451 } |
|
452 $outstr .= ' </select></td>'.PHP_EOL; |
|
453 $outstr .= ' </tr>'.PHP_EOL; |
|
454 } |
|
455 if ($f[0] == "DOOR_ADDRESS") { |
|
456 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
457 $outstr .= ' <td class="editname">Door Sensor Address</td>'.PHP_EOL; |
|
458 $outstr .= ' <td class="editfield"><select name="DoorAddress">'.PHP_EOL; |
|
459 $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; |
|
460 if (startsWith($devices[0], "212")) { |
|
461 $j = 1; |
|
462 while (1) { |
|
463 if (strcmp($devices[$j], ".") == 0) |
|
464 break; |
|
465 $g = explode(",", $devices[$j]); |
|
466 if ($g[5] == "IN_BIN") { |
|
467 ($f[1] == $g[0]) ? $se = " selected" : $se = ""; |
|
468 $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; |
|
469 } |
|
470 $j++; |
|
471 } |
|
472 } |
|
473 $outstr .= ' </select></td>'.PHP_EOL; |
|
474 $outstr .= ' </tr>'.PHP_EOL; |
|
475 } |
|
476 if ($f[0] == "TEMP_SET_MIN") { |
|
477 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
478 $outstr .= ' <td class="editname">Min. temp setting</td>'.PHP_EOL; |
|
479 $outstr .= ' <td class="editfield"><input type="text" name="TempSetMin" size="5" value="'.$f[1].'"></td>'.PHP_EOL; |
|
480 $outstr .= ' </tr>'.PHP_EOL; |
|
481 } |
|
482 if ($f[0] == "TEMP_SET_MAX") { |
|
483 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
484 $outstr .= ' <td class="editname">Max. temp setting</td>'.PHP_EOL; |
|
485 $outstr .= ' <td class="editfield"><input type="text" name="TempSetMax" size="5" value="'.$f[1].'"></td>'.PHP_EOL; |
|
486 $outstr .= ' </tr>'.PHP_EOL; |
|
487 } |
|
488 if ($f[0] == "IDLE_RANGE_L") { |
|
489 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
490 $outstr .= ' <td class="editname">Idle Range Low</td>'.PHP_EOL; |
|
491 $outstr .= ' <td class="editfield"><input type="text" name="IdleRangeL" size="5" value="'.$f[1].'"></td>'.PHP_EOL; |
|
492 $outstr .= ' </tr>'.PHP_EOL; |
|
493 } |
|
494 if ($f[0] == "IDLE_RANGE_H") { |
|
495 $outstr .= ' <tr class="editor">'.PHP_EOL; |
|
496 $outstr .= ' <td class="editname">Idle Range High</td>'.PHP_EOL; |
|
497 $outstr .= ' <td class="editfield"><input type="text" name="IdleRangeH" size="5" value="'.$f[1].'"></td>'.PHP_EOL; |
|
498 $outstr .= ' </tr>'.PHP_EOL; |
|
499 } |
|
500 $i++; |
|
501 } |
|
502 } |
257 $outstr .= ' <tr class="editor">'.PHP_EOL; |
503 $outstr .= ' <tr class="editor">'.PHP_EOL; |
258 $outstr .= ' <td class="editname"><input type="submit" value="Save" name="key"></td>'.PHP_EOL; |
504 $outstr .= ' <td class="editname"><input type="submit" value="Save" name="key"></td>'.PHP_EOL; |
259 $outstr .= ' <td class="editfield"><input type="submit" value="Cancel" name="key">'; |
505 $outstr .= ' <td class="editfield"><input type="submit" value="Cancel" name="key">'; |
260 $outstr .= '<input type="submit" value="Delete" name="key" style="margin-left: 100px;">'; |
506 $outstr .= '<input type="submit" value="Delete" name="key" style="margin-left: 100px;">'; |
261 $outstr .= '<input type="hidden" value="testdata" name="action">'; |
507 $outstr .= '<input type="hidden" value="testdata" name="action">'; |