Major update/rewrite/recombine to get SSDP, and GrowController UI and application shell.
@@ -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;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 443 B |
|
Before Width: | Height: | Size: 655 B After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 22 KiB |
@@ -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 © 2018-2021 by Smartware Computing, all rights reserved.</li>
|
||||
<li>Library for WEMO emulation, Copyright © 2016 by Xose Pérez</li>
|
||||
<li>Libraries; Copyright © 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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
// -------------------------
|
||||
|
||||
|
||||
@@ -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°F</div>
|
||||
<div class="soilmoisture">8%</div>
|
||||
<div class="soiltemp">74°F</div>
|
||||
<div class="heater">ON</div>
|
||||
<div class="ambtemp">65°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' >--.- °F</div>
|
||||
<div class='AmbientTempIcon' id='AmbientTempIcon' ><img src='thermometer.png' title='Ambient Temperature' /></div>
|
||||
|
||||
<div class='ChamberTemp_C' id='ChamberTemp_C' >--.- °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' >--.- °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>
|
||||
|
||||
@@ -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) + "°F";
|
||||
else
|
||||
return tempC.toFixed(1) + "°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";
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
5
Firmware/Resources/myip.js
Normal 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
@@ -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;
|
||||
}
|
||||
22
Firmware/Resources/navigation.htm
Normal 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>
|
||||
249
Firmware/Resources/plantmodel.css
Normal 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>
|
||||
BIN
Firmware/Resources/pointer.png
Normal file
|
After Width: | Height: | Size: 418 B |
@@ -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>
|
||||
|
||||
BIN
Firmware/Resources/soilheater_off.png
Normal file
|
After Width: | Height: | Size: 488 B |
BIN
Firmware/Resources/soilheater_on.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
Firmware/Resources/soilmoisture.png
Normal file
|
After Width: | Height: | Size: 249 B |
BIN
Firmware/Resources/thermometer.png
Normal file
|
After Width: | Height: | Size: 777 B |