Major update/rewrite/recombine to get SSDP, and GrowController UI and application shell.

This commit is contained in:
David
2021-10-25 23:46:03 +00:00
parent c47c37a891
commit 4597350845
52 changed files with 4981 additions and 4990 deletions

View File

@@ -1,8 +1,12 @@
input.BigButton {
width: 150px;
padding: 20px;
height: 100px;
padding: 10px;
white-space: normal;
cursor: pointer;
text-align: center;
font-weight: bold;
font-size: 120%;
background: #3366cc;
@@ -19,3 +23,26 @@ input.BigButton:hover {
background: #000;
border: 5px solid #fff;
}
input.SmallButton {
width: 150px;
height: 50px;
padding: 10px;
white-space: normal;
cursor: pointer;
font-weight: bold;
font-size: 100%;
background: #3366cc;
color: #fff;
border: 5px solid #112233;
border-radius: 10px;
-moz-box-shadow: 6px 6px 5px #999;
-webkit-box-shadow: 6px 6px 5px #999;
box-shadow: 6px 6px 5px #999;
}
input.SmallButton:hover {
color: #ffff00;
background: #000;
border: 5px solid #fff;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -2,25 +2,25 @@
<html>
<head>
<title>Grow Controller</title>
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, width=device-width">
<script type='text/javascript' src='myip.js'></script>
<script type='text/javascript' src='about.js'></script>
<script type='text/javascript' src='nav.js'></script>
</head>
<body>
<body onload="NavInit();">
<h1>Grow Controller</h1>
by Smartware Computing
<blockquote>
<table cellpadding="5">
<tr valign="top">
<td><img src="/icon.jpg" /></td>
<td><img src="icon.png" title="logo" /></td>
<td>
This Grow Controller is an IOT device based on an ESP8266-12 module. The software for it has been
derived from various sources and where copyrights have been identified, they are listed below.<br />
<ul>
<li>The composite work is Copyright &copy; 2018-2021 by Smartware Computing, all rights reserved.</li>
<li>Library for WEMO emulation, Copyright &copy; 2016 by Xose Pérez</li>
<li>Libraries; Copyright &copy; 2001-2013 Free Software Foundation, Inc.</li>
<li>Libraries; Copyright (c) 1997 Silicon Graphics Computer Systems, Inc.</li>
</ul>
<dl>
<dt>Toggle Button</dt>
@@ -36,20 +36,6 @@
Uptime:
</blockquote>
<table>
<tr valign="top">
<td>NAV:</td>
<td>
<a href='/'>Home</a> |
<a href='/config'>Config</a> |
<a href='/scan'>Scan</a> |
<a href='/rssi'>RSSI</a> |
<a href='/curr'>Current</a> |
<a href='/config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> |
<a href='/about'>About</a>
</td>
</tr>
</table>
<span id='nav'></span>
</body>
</html>

View File

@@ -2,11 +2,13 @@
<html>
<head>
<title>Grow Controller</title>
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, width=device-width">
<script type='text/javascript' src='myip.js'></script>
<script type='text/javascript' src='curr.js'></script>
<script type='text/javascript' src='nav.js'></script>
</head>
<body onload='CurrInit();'>
<body onload='CurrInit(); NavInit();'>
<h1>Grow Controller - Current Sense</h1>
<blockquote>
<table width='800' border='0'>
@@ -25,19 +27,6 @@
</tr>
</table>
</blockquote>
<table>
<tr valign="top">
<td>NAV:</td>
<td>
<a href='/'>Home</a> |
<a href='/config'>Config</a> |
<a href='/scan'>Scan</a> |
<a href='/rssi'>RSSI</a> |
<a href='/curr'>Current</a> |
<a href='/config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> |
<a href='/about'>About</a>
</td>
</tr>
</table>
<span id='nav'></span>
</body>
</html>

View File

@@ -10,7 +10,7 @@ var axes = {};
var totalSamples = 400; // Width of the graph
for (var i = 0; i < totalSamples; i++)
rawData[i] = avgData[i] = 0;
setInterval(RefreshStatus, 250);
setInterval(RefreshStatus, 500);
// -------------------------

View File

@@ -2,133 +2,16 @@
<html lang="en">
<head>
<title>Grow Controller</title>
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
<style>
input.SmallButton {
width: 150px;
height: 50px;
padding: 10px;
white-space: normal;
cursor: pointer;
font-weight: bold;
font-size: 100%;
background: #3366cc;
color: #fff;
border: 5px solid #112233;
border-radius: 10px;
-moz-box-shadow: 6px 6px 5px #999;
-webkit-box-shadow: 6px 6px 5px #999;
box-shadow: 6px 6px 5px #999;
}
input.SmallButton:hover {
color: #ffff00;
background: #000;
border: 5px solid #fff;
}
input.BigButton {
width: 150px;
height: 100px;
padding: 10px;
white-space: normal;
cursor: pointer;
font-weight: bold;
font-size: 120%;
background: #3366cc;
color: #fff;
border: 5px solid #112233;
border-radius: 10px;
-moz-box-shadow: 6px 6px 5px #999;
-webkit-box-shadow: 6px 6px 5px #999;
box-shadow: 6px 6px 5px #999;
}
input.BigButton:hover {
color: #ffff00;
background: #000;
border: 5px solid #fff;
}
table {
width: 100%;
}
.box {
position: relative;
display: inline-block;
}
div.airtemp {
position: absolute;
left: 170px;
top: 50px;
//border: 2px solid lightgray;
}
div.soilmoisture {
position: absolute;
left: 140px;
top: 75px;
//border: 2px solid lightgray;
}
div.soiltemp {
position: absolute;
left: 150px;
top: 120px;
color: white;
//border: 2px solid lightgray;
}
div.heater {
position: absolute;
left: 105px;
top: 156px;
color: white;
//border: 2px solid lightgray;
}
div.ambtemp {
position: absolute;
left: 205px;
top: 205px;
//border: 2px solid lightgray;
}
div.drumMotorV {
position: absolute;
left: 190px;
top: 290px;
//border: 2px solid lightgray;
}
div.drumMotorI {
position: absolute;
left: 180px;
top: 320px;
//border: 2px solid lightgray;
}
div.waterMotorV {
position: absolute;
left: 210px;
top: 390px;
//border: 2px solid lightgray;
}
div.waterLevel {
position: absolute;
left: 85px;
top: 395px;
//border: 2px solid lightgray;
}
div.heaterCoil {
position: absolute;
left: 78px;
top: 177px;
}
div.water {
position: absolute;
left: 52px;
top: 420px;
z-index: -55;
}
</style>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, width=device-width">
<link rel="stylesheet" type="text/css" href="button.css" media="all" />
<link rel="stylesheet" type="text/css" href="plantmodel.css" media="all" />
<script type='text/javascript' src='nav.js'></script>
<script type='text/javascript' src='myip.js'></script>
<script type='text/javascript' src='about.js'></script>
<script type='text/javascript' src='index.js'></script>
</head>
<body onload="RefreshStatus();">
<body onload="NavInit();">
<h1><span id='name'>Grow Controller</span></h1>
<form>
<table border='0'>
@@ -137,19 +20,44 @@
<div class="box">
<div style="position: relative; z-index: -10;">
<!-- 243 x 488 -->
<img src='PlantModel.png' />
<img src='plantmodel.png' title='Picture of the System' />
</div>
<div class="airtemp">92&deg;F</div>
<div class="soilmoisture">8%</div>
<div class="soiltemp">74&deg;F</div>
<div class="heater">ON</div>
<div class="ambtemp">65&deg;F</div>
<div class="drumMotorV">12.3V</div>
<div class="drumMotorI">1.2A</div>
<div class="waterMotorV">0.0V</div>
<div class="waterLevel">OK</div>
<div class="heaterCoil"><img src="Heater.png" /></div>
<div class="water"><img src="Water.png" /></div>
<div class='TimeOfDay' id='TimeOfDay'>--:--</div>
<div class='AmbientTemp_C' id='AmbientTemp_C' >--.- &deg;F</div>
<div class='AmbientTempIcon' id='AmbientTempIcon' ><img src='thermometer.png' title='Ambient Temperature' /></div>
<div class='ChamberTemp_C' id='ChamberTemp_C' >--.- &deg;F</div>
<div class='ChamberHumi' id='ChamberHumi' >-- %</div>
<div class='ChamberTempIcon' id='ChamberTempIcon' ><img src='thermometer.png' title='Chamber Temperature' /></div>
<div class='SoilHeater' id='SoilHeater' >Heat</div>
<div class='SoilHeaterOnIcon' id='SoilHeaterOnIcon' ><img src='soilheater_on.png' title='Soil Heater' /></div>
<div class='SoilHeaterOffIcon' id='SoilHeaterOffIcon' ><img src='soilheater_off.png' title='Soil Heater' /></div>
<div class='SoilThermoIcon' id='SoilThermoIcon' ><img src='thermometer.png' title='Soil Temperature' /></div>
<div class='SoilHumiIcon' id='SoilHumiIcon' ><img src='soilmoisture.png' title='Soil Temperature' /></div>
<div class='SoilTemp_C' id='SoilTemp_C' >--.- &deg;F</div>
<div class='SoilMoisture_X' id='SoilMoisture_X' >-- %</div>
<div class='DrumDoorIcon' id='DrumDoorIcon' ><img src='open.png' title='Open' /></div>
<div class='DrumOpenSensor' id='DrumOpenSensor' >O</div>
<div class='DrumClosedSensor' id='DrumClosedSensor' >C</div>
<div class='DrumMotorLabel' id='DrumMotorLabel' >Motor</div>
<div class='DrumMotorStatus' id='DrumMotorStatus' >Off</div>
<div class='DrumMotor_V' id='DrumMotor_V' >12.5 V</div>
<div class='DrumMotor_I' id='DrumMotor_I' >1.2 A</div>
<div class='DrumMotorOn_sec' id='DrumMotorOn_sec' >10 s</div>
<div class='WaterInTank' id='WaterInTank'>Low Water</div>
<div class='WaterPumpLabel' id='WaterPumpLabel' >Pump</div>
<div class='WaterPumpStatus' id='WaterPumpStatus' >On</div>
<div class='WaterLevelIcon' id='WaterLevelIcon'><img src='water.png' title='Water in Tank' /></div>
<div class='WaterMotor_V' id='WaterMotor_V' >10.7 V</div>
<div class='WaterCyclePeriod_sec' id='WaterCyclePeriod_sec' >90 s</div>
<div class='WaterCycleOn_sec' id='WaterCycleOn_sec' >8 s</div>
<div class='WaterCycle_sec' id='WaterCycle_sec' >10 s</div>
<div class='WaterCycleOnBox' id='WaterCycleOnBox' ></div>
<div class='WaterCycleStatusIcon' id='WaterCycleStatusIcon' ><img src='pointer.png' title='Pump On Time' /></div>
</div>
</td>
<td width='10%' align='center'>
@@ -174,33 +82,19 @@
</table>
</form>
<p></p>
<table border='0'>
<tr valign="top">
<td>NAV:</td>
<td>
<a href='/'>Home</a> |
<a href='/config'>Config</a> |
<a href='/scan'>Scan</a> |
<a href='/rssi'>RSSI</a> |
<a href='/curr'>Current</a> |
<a href='/config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> |
<a href='/about'>About</a>
</td>
</tr>
<!-- tr valign="top">
<td>M2M:</td>
<td>
<a href='/on'>http://<span class='ip'></span>/on</a> |
<a href='/off'>http://<span class='ip'></span>/off</a> |
<a href='/toggle'>http://<span class='ip'></span>/toggle</a> |
<a href='/state'>http://<span class='ip'></span>/state</a>
</td>
</tr!-->
</table>
<span id='state'></span>
<span id='raw'></span>
<span id='sense'></span>
<span id='toggle'></span>
<span id='reset'></span>
<span id='countdown'></span>
<span id='uptime'></span>
<span id='wifimode'></span>
<span id='nav'></span>
<hr>
<table border='0'>
<tr>
<td>GrowController by Origin Technologies</td>
<td>GrowController by Smartware Computing</td>
<td align="right"><a href="/swupdatecheck">Firmware</a>: <span id='version'>v0.00.00</span></td>
</tr>
</table>

View File

@@ -1,9 +1,9 @@
//
// rssi script
// Main Page period status update
//
// var mySite = 'http://192.168.1.23' from myip.js
// var mySite = 'http://192.168.1.23'; // from myip.js
var url = mySite + '/state';
setInterval(RefreshStatus, 250);
setInterval(RefreshStatus, 2500);
getIt = function (aUrl, callback) {
var xhr = new XMLHttpRequest();
@@ -17,6 +17,14 @@ getIt = function (aUrl, callback) {
xhr.send();
};
function ConvertTempToString(tempC, showF) {
var tempF = tempC * 9 / 5 + 32;
if (showF)
return tempF.toFixed(1) + "&deg;F";
else
return tempC.toFixed(1) + "&deg;C";
}
function RefreshStatus() {
getIt(url,
function(data) {
@@ -27,18 +35,72 @@ function RefreshStatus() {
state = "Off";
document.getElementById('version').innerHTML = obj.version;
document.getElementById('name').innerHTML = obj.name;
document.getElementById('state').innerHTML = 'Output: ' + state;
document.getElementById('raw').innerHTML = 'raw: ' + obj.raw;
document.getElementById('sense').innerHTML = 'Sense: ' + obj.sense;
document.getElementById('toggle').innerHTML = 'Toggle: ' + obj.toggle;
document.getElementById('reset').innerHTML = 'Reset: ' + obj.reset;
document.getElementById('countdown').innerHTML = obj.countdown;
//document.getElementById('state').innerHTML = 'Output: ' + state;
//document.getElementById('raw').innerHTML = 'raw: ' + obj.raw;
//document.getElementById('sense').innerHTML = 'Sense: ' + obj.sense;
//document.getElementById('toggle').innerHTML = 'Toggle: ' + obj.toggle;
//document.getElementById('reset').innerHTML = 'Reset: ' + obj.reset;
//document.getElementById('countdown').innerHTML = 'Countdown: ' + obj.countdown;
document.getElementById('uptime').innerHTML = 'Uptime: ' + obj.uptime;
document.getElementById('wifimode').innerHTML = 'Mode: ' + obj.wifimode;
document.getElementById('wifimode').innerHTML = 'WiFi Mode: ' + obj.wifimode;
// IP Address
var elms = document.querySelectorAll('.' + 'ip'), i;
for (i = 0; i < elms.length; ++i) {
elms[i].textContent = obj.ip;
}
// Plant status
document.getElementById('TimeOfDay').innerHTML = obj.TimeOfDay;
var userF = obj.Fahrenheit;
if (typeof obj.AmbientTemp_C != "undefined") {
document.getElementById('AmbientTemp_C').innerHTML = ConvertTempToString(obj.AmbientTemp_C, userF);
} else {
document.getElementById('AmbientTemp_C').innerHTML = "--";
}
if (typeof obj.ChamberTemp_C != "undefined") {
document.getElementById('ChamberTemp_C').innerHTML = ConvertTempToString(obj.ChamberTemp_C, userF);
document.getElementById('ChamberHumi').innerHTML = parseInt(obj.ChamberHumi) + "%";
} else {
document.getElementById('ChamberTemp_C').innerHTML = "--";
document.getElementById('ChamberHumi').innerHTML = "--"
}
if (typeof obj.SoilHeater != "undefined") {
document.getElementById('SoilHeater').innerHTML = obj.SoilHeater;
} else {
document.getElementById('SoilHeater').innerHTML = "--";
}
if (typeof obj.SoilTemp_C != "undefined") {
document.getElementById('SoilTemp_C').innerHTML = ConvertTempToString(obj.SoilTemp_C, userF);
} else {
document.getElementById('SoilTemp_C').innerHTML = "--";
}
if (typeof obj.SoilTemp_C != "undefined") {
document.getElementById('SoilMoisture_X').innerHTML = obj.SoilMoisture_X;
} else {
document.getElementById('SoilMoisture_X').innerHTML = "--";
}
if (obj.DrumDoorIcon == 1) {
document.getElementById('DrumDoorIcon').style.display === "none";
} else {
document.getElementById('DrumDoorIcon').style.display === "block";
}
document.getElementById('DrumOpenSensor').innerHTML = obj.DrumOpenSensor;
document.getElementById('DrumClosedSensor').innerHTML = obj.DrumClosedSensor;
document.getElementById('DrumMotorStatus').innerHTML = obj.DrumMotorStatus;
document.getElementById('DrumMotorOn_sec').innerHTML = obj.DrumMotorOn_sec + "s";
document.getElementById('DrumMotor_V').innerHTML = parseFloat(obj.DrumMotor_V).toFixed(1) + "V";
document.getElementById('DrumMotor_I').innerHTML = parseFloat(obj.DrumMotor_I).toFixed(1) + "A";
document.getElementById('WaterInTank').innerHTML = obj.WaterInTank;
document.getElementById('WaterPumpStatus').innerHTML = obj.WaterPumpStatus;
document.getElementById('WaterMotor_V').innerHTML = parseFloat(obj.WaterMotor_V).toFixed(1) + "V";
document.getElementById('WaterCyclePeriod_sec').innerHTML = obj.WaterCyclePeriod_sec + "s";
document.getElementById('WaterCycleOn_sec').innerHTML = obj.WaterCycleOn_sec + "s";
document.getElementById('WaterCycle_sec').innerHTML = obj.WaterCycle_sec + "s";
}
);
}

View File

@@ -0,0 +1,5 @@
// Normally provided by the application intercepting this request,
// but for debug it can be handy to fix it.
//
var mySite = 'http://192.168.1.10'; // from myip.js

20
Firmware/Resources/nav.js Normal file
View File

@@ -0,0 +1,20 @@
//
//
function NavInit() {
nav = document.getElementById('nav');
var txt = "<table>";
txt += "<tr valign='top'>";
txt += " <td>NAV:</td>";
txt += " <td>";
txt += " <a href='index.htm'>Home</a> | ";
txt += " <a href='config'>Config</a> | ";
txt += " <a href='scan'>Scan</a> | ";
txt += " <a href='rssi.htm'>RSSI</a> | ";
txt += " <a href='curr.htm'>Current</a> | ";
txt += " <a href='config?ssid=reset&pass=reset' onclick=\\\"return confirm('Are you sure?')\\\">Factory Reset</a> | ";
txt += " <a href='about.htm'>About</a>";
txt += " </td>";
txt += "</tr>";
txt += "</table>";
nav.innerHTML = txt;
}

View File

@@ -0,0 +1,22 @@
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>
<table>
<tr valign="top">
<td>NAV:</td>
<td>
<a href='/'>Home</a> |
<a href='config'>Config</a> |
<a href='scan'>Scan</a> |
<a href='rssi'>RSSI</a> |
<a href='curr'>Current</a> |
<a href='config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> |
<a href='about'>About</a>
</td>
</tr>
</table>
</body>
</html>

View File

@@ -0,0 +1,249 @@
<style>
table {
width: 100%;
}
.box {
position: relative;
display: inline-block;
border-color: black;
border-style: solid;
border-width: 1px;
}
div.TimeOfDay {
position: absolute;
right: 0px;
top: 2px;
width: 40px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
}
div.AmbientTemp_C {
position: absolute;
left: 15px;
top: 2px;
width: 40px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
}
div.AmbientTempIcon {
position: absolute;
left: 0px;
top: 0px;
}
div.ChamberTempIcon {
position: absolute;
left: 142px;
top: 40px;
}
div.ChamberTemp_C {
position: absolute;
left: 160px;
top: 40px;
}
div.ChamberHumi {
position: absolute;
left: 160px;
top: 55px;
}
div.SoilMoisture_X {
position: absolute;
left: 130px;
top: 135px;
color: white;
}
div.SoilHumiIcon {
position: absolute;
left: 140px;
top: 95px;
}
div.SoilThermoIcon {
position: absolute;
left: 170px;
top: 100px;
}
div.SoilTemp_C {
position: absolute;
left: 165px;
top: 135px;
color: white;
}
div.SoilHeater {
position: absolute;
left: 105px;
top: 156px;
color: white;
}
div.SoilHeaterOnIcon {
position: absolute;
left: 76px;
top: 167px;
}
div.SoilHeaterOffIcon {
position: absolute;
left: 89px;
top: 181px;
}
div.DrumDoorIcon {
position: absolute;
transform: rotate(180deg);
left: 14px;
top: 0px;
}
div.DrumOpenSensor {
position: absolute;
left: 20px;
top: 96px;
}
div.DrumClosedSensor {
position: absolute;
right: 10px;
top: 96px;
}
div.DrumMotorLabel {
position: absolute;
left: 95px;
top: 270px;
width: 50px;
text-align: center;
color: white;
}
div.DrumMotorStatus {
position: absolute;
left: 95px;
top: 290px;
width: 50px;
text-align: center;
color: white;
}
div.DrumMotor_V {
position: absolute;
left: 180px;
top: 225px;
width: 50px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
//color: Red;
}
div.DrumMotor_I {
position: absolute;
left: 180px;
top: 245px;
width: 50px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
}
div.DrumMotorOn_sec {
position: absolute;
left: 180px;
top: 315px;
width: 50px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
}
div.WaterInTank {
position: absolute;
left: 55px;
top: 365px;
width: 80px;
text-align: center;
}
div.WaterPumpLabel {
position: absolute;
left: 124px;
top: 390px;
width: 80px;
text-align: center;
color: white;
}
div.WaterPumpStatus {
position: absolute;
left: 124px;
top: 410px;
width: 80px;
text-align: center;
color: white;
}
div.WaterLevelIcon {
position: absolute;
left: 42px;
top: 393px;
z-index: -55;
}
div.WaterMotor_V {
position: absolute;
left: 180px;
top: 350px;
width: 50px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
}
div.WaterCyclePeriod_sec {
position: absolute;
left: 182px;
top: 467px;
width: 50px;
text-align: right;
border-color: green;
//border-style: solid;
border-width: 1px;
}
div.WaterCycleOn_sec {
position: absolute;
left: 23px;
top: 467px;
width: 50px;
text-align: right;
border-color: green;
//border-style: solid;
border-width: 1px;
}
div.WaterCycle_sec {
position: absolute;
left: 180px;
top: 440px;
width: 50px;
text-align: right;
border-color: green;
border-style: solid;
border-width: 1px;
}
div.WaterCycleOnBox {
position: absolute;
left: 22px;
top: 464px;
width: 50px;
height: 20px;
background-color: #BDD7EE;
z-index: -35;
//border-color: red;
border-style: solid;
border-width: 1px;
}
div.WaterCycleStatusIcon {
position: absolute;
left: 80px;
top: 469px;
width: 25px;
text-align: center;
z-index: -25;
border-color: green;
//border-style: solid;
border-width: 1px;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

View File

@@ -2,11 +2,13 @@
<html>
<head>
<title>Grow Controller RSSI</title>
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, width=device-width">
<script type='text/javascript' src='nav.js'></script>
<script type='text/javascript' src='myip.js'></script>
<script type='text/javascript' src='rssi.js'></script>
</head>
<body onload='RSSIInit();'>
<body onload='RSSIInit(); NavInit();'>
<h1>Grow Controller - RSSI</h1>
<blockquote>
<table width='800' border='0'>
@@ -25,19 +27,6 @@
</tr>
</table>
</blockquote>
<table>
<tr valign="top">
<td>NAV:</td>
<td>
<a href='/'>Home</a> |
<a href='/config'>Config</a> |
<a href='/scan'>Scan</a> |
<a href='/rssi'>RSSI</a> |
<a href='/curr'>Current</a> |
<a href='/config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> |
<a href='/about'>About</a>
</td>
</tr>
</table>
<span id='nav'></span>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B