Monitor for central heating system (e.g. 2zones+hw) Supports up to 15 temp probes (DS18B20/DS18S20) 3 valve monitors Gas pulse meter recording Use stand-alone or with nodeEnergyServer See http://robdobson.com/2015/09/central-heating-monitor

Dependencies:   EthernetInterfacePlusHostname NTPClient Onewire RdWebServer SDFileSystem-RTOS mbed-rtos mbed-src

Committer:
Bobty
Date:
Tue Mar 03 12:53:37 2015 +0000
Revision:
14:3c3aa4fd7e1a
Added other sensor readings to web view

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bobty 14:3c3aa4fd7e1a 1 <!DOCTYPE html>
Bobty 14:3c3aa4fd7e1a 2 <html>
Bobty 14:3c3aa4fd7e1a 3 <head>
Bobty 14:3c3aa4fd7e1a 4 <title>Gas Use Monitor</title>
Bobty 14:3c3aa4fd7e1a 5 <meta name="viewport" content="width=device-width, initial-scale=1">
Bobty 14:3c3aa4fd7e1a 6 <script type="text/javascript">
Bobty 14:3c3aa4fd7e1a 7 function callAjax(url, callback, contentType, usePost)
Bobty 14:3c3aa4fd7e1a 8 {
Bobty 14:3c3aa4fd7e1a 9 var xmlhttp;
Bobty 14:3c3aa4fd7e1a 10 // code for IE7+, Firefox, Chrome, Opera, Safari
Bobty 14:3c3aa4fd7e1a 11 xmlhttp = new XMLHttpRequest();
Bobty 14:3c3aa4fd7e1a 12 xmlhttp.onreadystatechange = function()
Bobty 14:3c3aa4fd7e1a 13 {
Bobty 14:3c3aa4fd7e1a 14 if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
Bobty 14:3c3aa4fd7e1a 15 {
Bobty 14:3c3aa4fd7e1a 16 callback(xmlhttp.responseText);
Bobty 14:3c3aa4fd7e1a 17 }
Bobty 14:3c3aa4fd7e1a 18 }
Bobty 14:3c3aa4fd7e1a 19
Bobty 14:3c3aa4fd7e1a 20 if (typeof usePost !== "undefined")
Bobty 14:3c3aa4fd7e1a 21 {
Bobty 14:3c3aa4fd7e1a 22 xmlhttp.open("POST", url, true);
Bobty 14:3c3aa4fd7e1a 23 }
Bobty 14:3c3aa4fd7e1a 24 else
Bobty 14:3c3aa4fd7e1a 25 {
Bobty 14:3c3aa4fd7e1a 26 xmlhttp.open("GET", url, true);
Bobty 14:3c3aa4fd7e1a 27 }
Bobty 14:3c3aa4fd7e1a 28 if (typeof contentType !== "undefined")
Bobty 14:3c3aa4fd7e1a 29 {
Bobty 14:3c3aa4fd7e1a 30 if (contentType === "json")
Bobty 14:3c3aa4fd7e1a 31 {
Bobty 14:3c3aa4fd7e1a 32 xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
Bobty 14:3c3aa4fd7e1a 33 }
Bobty 14:3c3aa4fd7e1a 34 }
Bobty 14:3c3aa4fd7e1a 35 xmlhttp.send();
Bobty 14:3c3aa4fd7e1a 36 }
Bobty 14:3c3aa4fd7e1a 37 function ajaxCallback()
Bobty 14:3c3aa4fd7e1a 38 {
Bobty 14:3c3aa4fd7e1a 39 }
Bobty 14:3c3aa4fd7e1a 40 function dataRefresh()
Bobty 14:3c3aa4fd7e1a 41 {
Bobty 14:3c3aa4fd7e1a 42 updateCurData();
Bobty 14:3c3aa4fd7e1a 43 setTimeout(function(){ dataRefresh();}, 10000);
Bobty 14:3c3aa4fd7e1a 44 }
Bobty 14:3c3aa4fd7e1a 45 function updateCurData()
Bobty 14:3c3aa4fd7e1a 46 {
Bobty 14:3c3aa4fd7e1a 47 callAjax("./getcurdata", curDataCallback, "json");
Bobty 14:3c3aa4fd7e1a 48 }
Bobty 14:3c3aa4fd7e1a 49 function curDataCallback(resp)
Bobty 14:3c3aa4fd7e1a 50 {
Bobty 14:3c3aa4fd7e1a 51 console.log("Response " + resp);
Bobty 14:3c3aa4fd7e1a 52 var respObj = JSON.parse(resp);
Bobty 14:3c3aa4fd7e1a 53 // Handle elements
Bobty 14:3c3aa4fd7e1a 54 if ("e" in respObj)
Bobty 14:3c3aa4fd7e1a 55 {
Bobty 14:3c3aa4fd7e1a 56 // Remove temperature and pump elements
Bobty 14:3c3aa4fd7e1a 57 var elem = document.getElementById("tempValues");
Bobty 14:3c3aa4fd7e1a 58 while (elem.firstChild)
Bobty 14:3c3aa4fd7e1a 59 {
Bobty 14:3c3aa4fd7e1a 60 elem.removeChild(elem.firstChild);
Bobty 14:3c3aa4fd7e1a 61 }
Bobty 14:3c3aa4fd7e1a 62 var elem = document.getElementById("pumpValues");
Bobty 14:3c3aa4fd7e1a 63 while (elem.firstChild)
Bobty 14:3c3aa4fd7e1a 64 {
Bobty 14:3c3aa4fd7e1a 65 elem.removeChild(elem.firstChild);
Bobty 14:3c3aa4fd7e1a 66 }
Bobty 14:3c3aa4fd7e1a 67
Bobty 14:3c3aa4fd7e1a 68 // Extract data from ajax json block and show
Bobty 14:3c3aa4fd7e1a 69 var i;
Bobty 14:3c3aa4fd7e1a 70 for (i = 0; i < respObj.e.length; i++)
Bobty 14:3c3aa4fd7e1a 71 {
Bobty 14:3c3aa4fd7e1a 72 dataRec = respObj.e[i];
Bobty 14:3c3aa4fd7e1a 73 if ("n" in dataRec)
Bobty 14:3c3aa4fd7e1a 74 {
Bobty 14:3c3aa4fd7e1a 75 if (dataRec.n === "gasCount")
Bobty 14:3c3aa4fd7e1a 76 {
Bobty 14:3c3aa4fd7e1a 77 var elem = document.getElementById("gasCountValue");
Bobty 14:3c3aa4fd7e1a 78 elem.innerHTML = "" + dataRec.v;
Bobty 14:3c3aa4fd7e1a 79 }
Bobty 14:3c3aa4fd7e1a 80 else if (dataRec.n.indexOf("temp_") > -1)
Bobty 14:3c3aa4fd7e1a 81 {
Bobty 14:3c3aa4fd7e1a 82 var tempStr = dataRec.n.slice(5);
Bobty 14:3c3aa4fd7e1a 83 var elem = document.getElementById("tempValues");
Bobty 14:3c3aa4fd7e1a 84 var para = document.createElement("p");
Bobty 14:3c3aa4fd7e1a 85 para.className = "label";
Bobty 14:3c3aa4fd7e1a 86 var node = document.createTextNode(tempStr);
Bobty 14:3c3aa4fd7e1a 87 para.appendChild(node);
Bobty 14:3c3aa4fd7e1a 88 elem.appendChild(para);
Bobty 14:3c3aa4fd7e1a 89 para = document.createElement("p");
Bobty 14:3c3aa4fd7e1a 90 para.className = "value";
Bobty 14:3c3aa4fd7e1a 91 node = document.createTextNode("" + dataRec.v);
Bobty 14:3c3aa4fd7e1a 92 para.appendChild(node);
Bobty 14:3c3aa4fd7e1a 93 elem.appendChild(para);
Bobty 14:3c3aa4fd7e1a 94 }
Bobty 14:3c3aa4fd7e1a 95 else if (dataRec.n.indexOf("pump_") > -1)
Bobty 14:3c3aa4fd7e1a 96 {
Bobty 14:3c3aa4fd7e1a 97 var pumpStr = dataRec.n.slice(5);
Bobty 14:3c3aa4fd7e1a 98 var elem = document.getElementById("pumpValues");
Bobty 14:3c3aa4fd7e1a 99 var para = document.createElement("p");
Bobty 14:3c3aa4fd7e1a 100 para.className = "label";
Bobty 14:3c3aa4fd7e1a 101 var node = document.createTextNode("Pump " + pumpStr);
Bobty 14:3c3aa4fd7e1a 102 para.appendChild(node);
Bobty 14:3c3aa4fd7e1a 103 elem.appendChild(para);
Bobty 14:3c3aa4fd7e1a 104 para = document.createElement("p");
Bobty 14:3c3aa4fd7e1a 105 para.className = "value";
Bobty 14:3c3aa4fd7e1a 106 node = document.createTextNode(dataRec.bv ? "On" : "Off");
Bobty 14:3c3aa4fd7e1a 107 para.appendChild(node);
Bobty 14:3c3aa4fd7e1a 108 elem.appendChild(para);
Bobty 14:3c3aa4fd7e1a 109 }
Bobty 14:3c3aa4fd7e1a 110 }
Bobty 14:3c3aa4fd7e1a 111 }
Bobty 14:3c3aa4fd7e1a 112 }
Bobty 14:3c3aa4fd7e1a 113 if ("bt" in respObj)
Bobty 14:3c3aa4fd7e1a 114 {
Bobty 14:3c3aa4fd7e1a 115 var elem = document.getElementById("lastUpdateTime");
Bobty 14:3c3aa4fd7e1a 116 ud = new Date(respObj.bt * 1000);
Bobty 14:3c3aa4fd7e1a 117 elem.innerHTML = "" + ud.getFullYear() + "/" + padZero(ud.getMonth()+1,2) + "/" + padZero(ud.getDate(),2) + " " + padZero(ud.getHours(),2) + ":" + padZero(ud.getMinutes(),2) + ":" + padZero(ud.getSeconds(),2);
Bobty 14:3c3aa4fd7e1a 118 }
Bobty 14:3c3aa4fd7e1a 119
Bobty 14:3c3aa4fd7e1a 120 }
Bobty 14:3c3aa4fd7e1a 121 function padZero(val, zeroes)
Bobty 14:3c3aa4fd7e1a 122 {
Bobty 14:3c3aa4fd7e1a 123 return("00000000" + val).slice(-zeroes);
Bobty 14:3c3aa4fd7e1a 124 }
Bobty 14:3c3aa4fd7e1a 125 function dispGasNewVal()
Bobty 14:3c3aa4fd7e1a 126 {
Bobty 14:3c3aa4fd7e1a 127 document.getElementById("gasadjust").style.display = "none";
Bobty 14:3c3aa4fd7e1a 128 document.getElementById("gasnewval").style.display = "block";
Bobty 14:3c3aa4fd7e1a 129 document.getElementById("setgasnewval").style.display = "block";
Bobty 14:3c3aa4fd7e1a 130 }
Bobty 14:3c3aa4fd7e1a 131 function setGasNewVal()
Bobty 14:3c3aa4fd7e1a 132 {
Bobty 14:3c3aa4fd7e1a 133 document.getElementById("gasadjust").style.display = "block";
Bobty 14:3c3aa4fd7e1a 134 document.getElementById("gasnewval").style.display = "none";
Bobty 14:3c3aa4fd7e1a 135 document.getElementById("setgasnewval").style.display = "none";
Bobty 14:3c3aa4fd7e1a 136 var elem = document.getElementById("gasnewval");
Bobty 14:3c3aa4fd7e1a 137 var newVal = elem.value;
Bobty 14:3c3aa4fd7e1a 138 callAjax("./setgascount?newVal=" + newVal, setValCallback, "json", "POST")
Bobty 14:3c3aa4fd7e1a 139 }
Bobty 14:3c3aa4fd7e1a 140 function setValCallback(resp)
Bobty 14:3c3aa4fd7e1a 141 {
Bobty 14:3c3aa4fd7e1a 142 console.log("setGasValue returned " + resp)
Bobty 14:3c3aa4fd7e1a 143 updateCurData();
Bobty 14:3c3aa4fd7e1a 144 }
Bobty 14:3c3aa4fd7e1a 145 function showLog()
Bobty 14:3c3aa4fd7e1a 146 {
Bobty 14:3c3aa4fd7e1a 147 document.getElementById("logtext").style.display = "block";
Bobty 14:3c3aa4fd7e1a 148 callAjax("log.txt", getLogTextCallback);
Bobty 14:3c3aa4fd7e1a 149 }
Bobty 14:3c3aa4fd7e1a 150 function getLogTextCallback(resp)
Bobty 14:3c3aa4fd7e1a 151 {
Bobty 14:3c3aa4fd7e1a 152 var elem = document.getElementById("logtext");
Bobty 14:3c3aa4fd7e1a 153 elem.innerHTML = resp;
Bobty 14:3c3aa4fd7e1a 154 }
Bobty 14:3c3aa4fd7e1a 155 </script>
Bobty 14:3c3aa4fd7e1a 156 <style>
Bobty 14:3c3aa4fd7e1a 157 body {
Bobty 14:3c3aa4fd7e1a 158 font-family: Helvetica;
Bobty 14:3c3aa4fd7e1a 159 line-height: 1.7rem;
Bobty 14:3c3aa4fd7e1a 160 font-size:12pt;
Bobty 14:3c3aa4fd7e1a 161 }
Bobty 14:3c3aa4fd7e1a 162 .layout { display:table; width: 100%; max-width: 800px; margin: 0 auto 0 auto; }
Bobty 14:3c3aa4fd7e1a 163 .pg-hd { background-color: #00344c; display: block; }
Bobty 14:3c3aa4fd7e1a 164 .hd-txt { padding: 10px; color: White; vertical-align: middle; text-align:center; }
Bobty 14:3c3aa4fd7e1a 165 .hd-com
Bobty 14:3c3aa4fd7e1a 166 {
Bobty 14:3c3aa4fd7e1a 167 float: right;
Bobty 14:3c3aa4fd7e1a 168 height:0;
Bobty 14:3c3aa4fd7e1a 169 width:0;
Bobty 14:3c3aa4fd7e1a 170 }
Bobty 14:3c3aa4fd7e1a 171 .hd-ico
Bobty 14:3c3aa4fd7e1a 172 {
Bobty 14:3c3aa4fd7e1a 173 position: relative;
Bobty 14:3c3aa4fd7e1a 174 top: -37px;
Bobty 14:3c3aa4fd7e1a 175 left: -60px;
Bobty 14:3c3aa4fd7e1a 176 }
Bobty 14:3c3aa4fd7e1a 177 .hd-com div
Bobty 14:3c3aa4fd7e1a 178 {
Bobty 14:3c3aa4fd7e1a 179
Bobty 14:3c3aa4fd7e1a 180 }
Bobty 14:3c3aa4fd7e1a 181 .hd-com div a
Bobty 14:3c3aa4fd7e1a 182 {
Bobty 14:3c3aa4fd7e1a 183 background: transparent url('gear-gr.png') no-repeat;
Bobty 14:3c3aa4fd7e1a 184 padding: 40px 60px 20px 13px;
Bobty 14:3c3aa4fd7e1a 185 color: white;
Bobty 14:3c3aa4fd7e1a 186 }
Bobty 14:3c3aa4fd7e1a 187 .hd-com div a.text
Bobty 14:3c3aa4fd7e1a 188 {
Bobty 14:3c3aa4fd7e1a 189 left: -20px;
Bobty 14:3c3aa4fd7e1a 190 }
Bobty 14:3c3aa4fd7e1a 191 .lk-hd
Bobty 14:3c3aa4fd7e1a 192 {
Bobty 14:3c3aa4fd7e1a 193 color: #fff;
Bobty 14:3c3aa4fd7e1a 194 background-color: #8898aB !important;
Bobty 14:3c3aa4fd7e1a 195 display: table-cell;
Bobty 14:3c3aa4fd7e1a 196 width: 20%;
Bobty 14:3c3aa4fd7e1a 197 border-bottom: 1px solid #666;
Bobty 14:3c3aa4fd7e1a 198 text-align:center;
Bobty 14:3c3aa4fd7e1a 199 vertical-align: middle;
Bobty 14:3c3aa4fd7e1a 200 border-right: 1px solid #666;
Bobty 14:3c3aa4fd7e1a 201 }
Bobty 14:3c3aa4fd7e1a 202 .lk-hd:last-child
Bobty 14:3c3aa4fd7e1a 203 {
Bobty 14:3c3aa4fd7e1a 204 border-right: none !important;
Bobty 14:3c3aa4fd7e1a 205 }
Bobty 14:3c3aa4fd7e1a 206 .lk-5x
Bobty 14:3c3aa4fd7e1a 207 {
Bobty 14:3c3aa4fd7e1a 208 color: #315D96;
Bobty 14:3c3aa4fd7e1a 209 background-color: #e6ebf0 !important;
Bobty 14:3c3aa4fd7e1a 210 background: -webkit-gradient(linear, center top, center bottom, color-stop(0, #E6E8EC), color-stop(0.5, #E6E8EC), color-stop(1, #98a0b0)) !important;
Bobty 14:3c3aa4fd7e1a 211 background: -moz-linear-gradient(top, #E6E8EC 0%, #E6E8EC 50%, #98a0b0 100%) !important;
Bobty 14:3c3aa4fd7e1a 212 background: linear-gradient(to bottom, #E6E8EC 0%, #E6E8EC 50%, #98a0b0 100%) !important;
Bobty 14:3c3aa4fd7e1a 213 display: table-cell;
Bobty 14:3c3aa4fd7e1a 214 width: 20%;
Bobty 14:3c3aa4fd7e1a 215 border-bottom: 1px solid #666;
Bobty 14:3c3aa4fd7e1a 216 text-align:center;
Bobty 14:3c3aa4fd7e1a 217 vertical-align: middle;
Bobty 14:3c3aa4fd7e1a 218 border-right: 1px solid #666;
Bobty 14:3c3aa4fd7e1a 219 }
Bobty 14:3c3aa4fd7e1a 220 .lk-5x:last-child
Bobty 14:3c3aa4fd7e1a 221 {
Bobty 14:3c3aa4fd7e1a 222 border-right: none !important;
Bobty 14:3c3aa4fd7e1a 223 }
Bobty 14:3c3aa4fd7e1a 224 .lk-5x a
Bobty 14:3c3aa4fd7e1a 225 {
Bobty 14:3c3aa4fd7e1a 226 color: #315D96;
Bobty 14:3c3aa4fd7e1a 227 font-weight: bold;
Bobty 14:3c3aa4fd7e1a 228 }
Bobty 14:3c3aa4fd7e1a 229 .up-ico a, .st-ico a, .dn-ico a
Bobty 14:3c3aa4fd7e1a 230 {
Bobty 14:3c3aa4fd7e1a 231 display: block;
Bobty 14:3c3aa4fd7e1a 232 vertical-align: middle;
Bobty 14:3c3aa4fd7e1a 233 text-decoration:none;
Bobty 14:3c3aa4fd7e1a 234 padding: 25px 0 25px 0;
Bobty 14:3c3aa4fd7e1a 235 font-size: 150%;
Bobty 14:3c3aa4fd7e1a 236 }
Bobty 14:3c3aa4fd7e1a 237 .hd-lin
Bobty 14:3c3aa4fd7e1a 238 {
Bobty 14:3c3aa4fd7e1a 239 display: block;
Bobty 14:3c3aa4fd7e1a 240 vertical-align: middle;
Bobty 14:3c3aa4fd7e1a 241 text-decoration:none;
Bobty 14:3c3aa4fd7e1a 242 font-size: 150%;
Bobty 14:3c3aa4fd7e1a 243 font-weight: bold;
Bobty 14:3c3aa4fd7e1a 244 padding: 30px 0 30px 0;
Bobty 14:3c3aa4fd7e1a 245 }
Bobty 14:3c3aa4fd7e1a 246 .un-pad {
Bobty 14:3c3aa4fd7e1a 247 padding: 2px;
Bobty 14:3c3aa4fd7e1a 248 }
Bobty 14:3c3aa4fd7e1a 249 .label, .value, #gasnewval {
Bobty 14:3c3aa4fd7e1a 250 width: 100%; text-align: center;
Bobty 14:3c3aa4fd7e1a 251 }
Bobty 14:3c3aa4fd7e1a 252 #gasadjust, #setgasnewval {
Bobty 14:3c3aa4fd7e1a 253 text-align: center;
Bobty 14:3c3aa4fd7e1a 254 padding: 10px;
Bobty 14:3c3aa4fd7e1a 255 border: 10px;
Bobty 14:3c3aa4fd7e1a 256 margin: 5%;
Bobty 14:3c3aa4fd7e1a 257 width: 90%;
Bobty 14:3c3aa4fd7e1a 258 }
Bobty 14:3c3aa4fd7e1a 259 .label {
Bobty 14:3c3aa4fd7e1a 260 color: grey;
Bobty 14:3c3aa4fd7e1a 261 margin: 0.6em 0 0.6em 0;
Bobty 14:3c3aa4fd7e1a 262 }
Bobty 14:3c3aa4fd7e1a 263 .value {
Bobty 14:3c3aa4fd7e1a 264 font-size: 180%;
Bobty 14:3c3aa4fd7e1a 265 font-weight: bold;
Bobty 14:3c3aa4fd7e1a 266 color: green;
Bobty 14:3c3aa4fd7e1a 267 margin: 0.6em 0 0.6em 0;
Bobty 14:3c3aa4fd7e1a 268 }
Bobty 14:3c3aa4fd7e1a 269 .datacell {
Bobty 14:3c3aa4fd7e1a 270 display:block; width: 100%; max-width: 200px; margin: 0; border: solid lightgrey 2px; padding: 5px;
Bobty 14:3c3aa4fd7e1a 271 float: left;
Bobty 14:3c3aa4fd7e1a 272 }
Bobty 14:3c3aa4fd7e1a 273 #gasnewval {
Bobty 14:3c3aa4fd7e1a 274 display: none;
Bobty 14:3c3aa4fd7e1a 275 font-size: 200%;
Bobty 14:3c3aa4fd7e1a 276 }
Bobty 14:3c3aa4fd7e1a 277 #setgasnewval {
Bobty 14:3c3aa4fd7e1a 278 display: none;
Bobty 14:3c3aa4fd7e1a 279 }
Bobty 14:3c3aa4fd7e1a 280 #logtext {
Bobty 14:3c3aa4fd7e1a 281 display: none;
Bobty 14:3c3aa4fd7e1a 282 margin: 0; border: solid lightgrey 2px; padding: 5px;
Bobty 14:3c3aa4fd7e1a 283 width: 100%;
Bobty 14:3c3aa4fd7e1a 284 height: 100%;
Bobty 14:3c3aa4fd7e1a 285 min-height: 300px;
Bobty 14:3c3aa4fd7e1a 286 }
Bobty 14:3c3aa4fd7e1a 287 </style>
Bobty 14:3c3aa4fd7e1a 288 </head>
Bobty 14:3c3aa4fd7e1a 289 <body onload="dataRefresh();">
Bobty 14:3c3aa4fd7e1a 290 <div class="layout">
Bobty 14:3c3aa4fd7e1a 291 <div class="pg-hd">
Bobty 14:3c3aa4fd7e1a 292 <div class="hd-txt">
Bobty 14:3c3aa4fd7e1a 293 <h1>Gas Use Monitor</h1>
Bobty 14:3c3aa4fd7e1a 294 </div>
Bobty 14:3c3aa4fd7e1a 295 <div class="hd-com"><div class="hd-ico">
Bobty 14:3c3aa4fd7e1a 296 <div id="showlog"><a href="#" onclick="showLog();">Log</a></div>
Bobty 14:3c3aa4fd7e1a 297 </div></div>
Bobty 14:3c3aa4fd7e1a 298 </div>
Bobty 14:3c3aa4fd7e1a 299 </div>
Bobty 14:3c3aa4fd7e1a 300 <div class="layout">
Bobty 14:3c3aa4fd7e1a 301 <div class="datacell">
Bobty 14:3c3aa4fd7e1a 302 <p class="label">Update time</p>
Bobty 14:3c3aa4fd7e1a 303 <p class="value" id="lastUpdateTime"></p>
Bobty 14:3c3aa4fd7e1a 304 <p class="label">Gas Count</p>
Bobty 14:3c3aa4fd7e1a 305 <p class="value" id="gasCountValue"></p>
Bobty 14:3c3aa4fd7e1a 306 <button id="gasadjust" href="#" onclick="dispGasNewVal();">Change</button>
Bobty 14:3c3aa4fd7e1a 307 <input id="gasnewval" type="text" name="newGasCountValue" />
Bobty 14:3c3aa4fd7e1a 308 <button id="setgasnewval" type="button" href="#" onclick="setGasNewVal();">Set New Value</button>
Bobty 14:3c3aa4fd7e1a 309 </div>
Bobty 14:3c3aa4fd7e1a 310 <div class="datacell" id="tempValues">
Bobty 14:3c3aa4fd7e1a 311 </div>
Bobty 14:3c3aa4fd7e1a 312 <div class="datacell" id="pumpValues">
Bobty 14:3c3aa4fd7e1a 313 </div>
Bobty 14:3c3aa4fd7e1a 314 </div>
Bobty 14:3c3aa4fd7e1a 315 <div class="layout">
Bobty 14:3c3aa4fd7e1a 316 <textarea id="logtext">
Bobty 14:3c3aa4fd7e1a 317 </textarea>
Bobty 14:3c3aa4fd7e1a 318 </div>
Bobty 14:3c3aa4fd7e1a 319 </body>
Bobty 14:3c3aa4fd7e1a 320 </html>