diff --git a/.gitignore b/.gitignore
index e1d4488..71338e9 100755
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,6 @@ website-source-copy
website-zipped
website-zipped_bak
.vscode
+target
+/data/
+/data2/
diff --git a/data/NotoSansBold15.vlw b/data/NotoSansBold15.vlw
deleted file mode 100755
index 803a1bd..0000000
Binary files a/data/NotoSansBold15.vlw and /dev/null differ
diff --git a/data/NotoSansBold36.vlw b/data/NotoSansBold36.vlw
deleted file mode 100755
index 66003f6..0000000
Binary files a/data/NotoSansBold36.vlw and /dev/null differ
diff --git a/data/Nunito-Light20.vlw b/data/Nunito-Light20.vlw
deleted file mode 100755
index 55a6e41..0000000
Binary files a/data/Nunito-Light20.vlw and /dev/null differ
diff --git a/data/Nunito-Light28.vlw b/data/Nunito-Light28.vlw
deleted file mode 100755
index 97c6a07..0000000
Binary files a/data/Nunito-Light28.vlw and /dev/null differ
diff --git a/data/Nunito-Light32.vlw b/data/Nunito-Light32.vlw
deleted file mode 100755
index a2e3b07..0000000
Binary files a/data/Nunito-Light32.vlw and /dev/null differ
diff --git a/data/Nunito-Regular20.vlw b/data/Nunito-Regular20.vlw
deleted file mode 100755
index 7ea87fd..0000000
Binary files a/data/Nunito-Regular20.vlw and /dev/null differ
diff --git a/data/WebSocket.js.gz b/data/WebSocket.js.gz
deleted file mode 100755
index 07678ba..0000000
Binary files a/data/WebSocket.js.gz and /dev/null differ
diff --git a/data/colors.css.gz b/data/colors.css.gz
deleted file mode 100644
index 749506f..0000000
Binary files a/data/colors.css.gz and /dev/null differ
diff --git a/data/edit.html.gz b/data/edit.html.gz
deleted file mode 100644
index 3198285..0000000
Binary files a/data/edit.html.gz and /dev/null differ
diff --git a/data/favicon.ico.gz b/data/favicon.ico.gz
deleted file mode 100755
index 126c8e1..0000000
Binary files a/data/favicon.ico.gz and /dev/null differ
diff --git a/data/index.html.gz b/data/index.html.gz
deleted file mode 100755
index 5ed3922..0000000
Binary files a/data/index.html.gz and /dev/null differ
diff --git a/data/ledcontrol.html.gz b/data/ledcontrol.html.gz
deleted file mode 100755
index ae99f86..0000000
Binary files a/data/ledcontrol.html.gz and /dev/null differ
diff --git a/data/loadMenu.js.gz b/data/loadMenu.js.gz
deleted file mode 100644
index d20f950..0000000
Binary files a/data/loadMenu.js.gz and /dev/null differ
diff --git a/data/main.css.gz b/data/main.css.gz
deleted file mode 100644
index e606c35..0000000
Binary files a/data/main.css.gz and /dev/null differ
diff --git a/data/main.js.gz b/data/main.js.gz
deleted file mode 100644
index 2eb7731..0000000
Binary files a/data/main.js.gz and /dev/null differ
diff --git a/data/manifest.json.gz b/data/manifest.json.gz
deleted file mode 100755
index 46e5319..0000000
Binary files a/data/manifest.json.gz and /dev/null differ
diff --git a/data/manualMode-ajax.html.gz b/data/manualMode-ajax.html.gz
deleted file mode 100755
index 2ce7910..0000000
Binary files a/data/manualMode-ajax.html.gz and /dev/null differ
diff --git a/data/manualMode.html.gz b/data/manualMode.html.gz
deleted file mode 100755
index 1365e16..0000000
Binary files a/data/manualMode.html.gz and /dev/null differ
diff --git a/data/menu.html.gz b/data/menu.html.gz
deleted file mode 100755
index 39e4bce..0000000
Binary files a/data/menu.html.gz and /dev/null differ
diff --git a/data/nunito-regular-webfont.woff b/data/nunito-regular-webfont.woff
deleted file mode 100755
index 2735281..0000000
Binary files a/data/nunito-regular-webfont.woff and /dev/null differ
diff --git a/data/nunito-regular-webfont.woff2 b/data/nunito-regular-webfont.woff2
deleted file mode 100755
index 3dcf532..0000000
Binary files a/data/nunito-regular-webfont.woff2 and /dev/null differ
diff --git a/data/settings-ajax.html.gz b/data/settings-ajax.html.gz
deleted file mode 100755
index cb025de..0000000
Binary files a/data/settings-ajax.html.gz and /dev/null differ
diff --git a/data/settings-success.html.gz b/data/settings-success.html.gz
deleted file mode 100755
index 55cfbc0..0000000
Binary files a/data/settings-success.html.gz and /dev/null differ
diff --git a/data/settings.html.gz b/data/settings.html.gz
deleted file mode 100755
index fb034c4..0000000
Binary files a/data/settings.html.gz and /dev/null differ
diff --git a/data/settings.js.gz b/data/settings.js.gz
deleted file mode 100644
index 6093525..0000000
Binary files a/data/settings.js.gz and /dev/null differ
diff --git a/data/settingsFile1.txt b/data/settingsFile1.txt
deleted file mode 100755
index c508163..0000000
--- a/data/settingsFile1.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "shour1": 16,
- "fadePeriod1": 30,
- "smin1": 0,
- "ehour": 22,
- "emin": 0
-}
diff --git a/data/settingsFile2.txt b/data/settingsFile2.txt
deleted file mode 100755
index 8bf54c1..0000000
--- a/data/settingsFile2.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "shour2": 16,
- "fadePeriod2": 30,
- "smin2": 0,
- "ehour": 22,
- "emin": 0
-}
diff --git a/data/settingsFile3.txt b/data/settingsFile3.txt
deleted file mode 100755
index 0da83a5..0000000
--- a/data/settingsFile3.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "shour3": 16,
- "fadePeriod3": 30,
- "smin3": 0,
- "ehour": 22,
- "emin": 0
-}
diff --git a/data/success.html.gz b/data/success.html.gz
deleted file mode 100755
index 584a0ef..0000000
Binary files a/data/success.html.gz and /dev/null differ
diff --git a/data/temperatures.txt.gz b/data/temperatures.txt.gz
deleted file mode 100644
index 642784c..0000000
Binary files a/data/temperatures.txt.gz and /dev/null differ
diff --git a/data/uploadButtonStyle.js.gz b/data/uploadButtonStyle.js.gz
deleted file mode 100644
index 0407911..0000000
Binary files a/data/uploadButtonStyle.js.gz and /dev/null differ
diff --git a/frontend-build.sh b/frontend-build.sh
new file mode 100755
index 0000000..705e568
--- /dev/null
+++ b/frontend-build.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+rm -r frontend/target/
+rm -r data/
+
+rsync -avz --progress frontend/src/** frontend/target/
+cd frontend/target/
+
+find . \( \
+-name '*.css' \
+-o -name '*.html' \
+-o -name '*.js' \
+-o -name '*.jpg' \
+-o -name '*.png' \
+-o -name '*.ico' \
+\) -exec pigz --force --verbose {} \;
+
+cd ../..
+rsync -avz --progress frontend/target/** data/
\ No newline at end of file
diff --git a/frontend/src/colors.css b/frontend/src/colors.css
new file mode 100644
index 0000000..f399844
--- /dev/null
+++ b/frontend/src/colors.css
@@ -0,0 +1,159 @@
+/*------------------------------------
+- COLOR ternary
+------------------------------------*/
+
+.alert-ternary {
+ color: #001b1e;
+ background-color: #65edff;
+ border-color: #51eaff;
+}
+
+.alert-ternary hr {
+ border-top-color: #38e7ff;
+}
+
+.alert-ternary .alert-link {
+ color: #000000;
+}
+
+.badge-ternary {
+ color: #fff;
+ background-color: #008799;
+}
+
+.badge-ternary[href]:hover,
+.badge-ternary[href]:focus {
+ color: #fff;
+ background-color: #005965;
+}
+
+.bg-ternary {
+ background-color: #008799 !important;
+}
+
+a.bg-ternary:hover,
+a.bg-ternary:focus,
+button.bg-ternary:hover,
+button.bg-ternary:focus {
+ background-color: #005965 !important;
+}
+
+.border-ternary {
+ border-color: #008799 !important;
+}
+
+.btn-ternary {
+ color: #fff;
+ background-color: #008799;
+ border-color: #008799;
+}
+
+.btn-ternary:hover {
+ color: #fff;
+ background-color: #006775;
+ border-color: #005965;
+}
+
+.btn-ternary:focus,
+.btn-ternary.focus {
+ box-shadow: 0 0 0 0.2rem rgba(0, 135, 153, 0.5);
+}
+
+.btn-ternary.disabled,
+.btn-ternary:disabled {
+ color: #fff;
+ background-color: #008799;
+ border-color: #008799;
+}
+
+.btn-ternary:not(:disabled):not(.disabled):active,
+.btn-ternary:not(:disabled):not(.disabled).active,
+.show>.btn-ternary.dropdown-toggle {
+ color: #fff;
+ background-color: #005965;
+ border-color: #004c56;
+}
+
+.btn-ternary:not(:disabled):not(.disabled):active:focus,
+.btn-ternary:not(:disabled):not(.disabled).active:focus,
+.show>.btn-ternary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 0.2rem rgba(0, 135, 153, 0.5);
+}
+
+.btn-outline-ternary {
+ color: #008799;
+ background-color: transparent;
+ border-color: #008799;
+}
+
+.btn-outline-ternary:hover {
+ color: #fff;
+ background-color: #008799;
+ border-color: #008799;
+}
+
+.btn-outline-ternary:focus,
+.btn-outline-ternary.focus {
+ box-shadow: 0 0 0 0.2rem rgba(0, 135, 153, 0.5);
+}
+
+.btn-outline-ternary.disabled,
+.btn-outline-ternary:disabled {
+ color: #008799;
+ background-color: transparent;
+}
+
+.btn-outline-ternary:not(:disabled):not(.disabled):active,
+.btn-outline-ternary:not(:disabled):not(.disabled).active,
+.show>.btn-outline-ternary.dropdown-toggle {
+ color: #fff;
+ background-color: #008799;
+ border-color: #008799;
+}
+
+.btn-outline-ternary:not(:disabled):not(.disabled):active:focus,
+.btn-outline-ternary:not(:disabled):not(.disabled).active:focus,
+.show>.btn-outline-ternary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 0.2rem rgba(0, 135, 153, 0.5);
+}
+
+.list-group-item-ternary {
+ color: #001b1e;
+ background-color: #51eaff;
+}
+
+.list-group-item-ternary.list-group-item-action:hover,
+.list-group-item-ternary.list-group-item-action:focus {
+ color: #001b1e;
+ background-color: #38e7ff;
+}
+
+.list-group-item-ternary.list-group-item-action.active {
+ color: #fff;
+ background-color: #001b1e;
+ border-color: #001b1e;
+}
+
+.table-ternary,
+.table-ternary>th,
+.table-ternary>td {
+ background-color: #51eaff;
+}
+
+.table-hover .table-ternary:hover {
+ background-color: #38e7ff;
+}
+
+.table-hover .table-ternary:hover>td,
+.table-hover .table-ternary:hover>th {
+ background-color: #38e7ff;
+}
+
+.text-ternary {
+ color: #008799 !important;
+}
+
+a.text-ternary:hover,
+a.text-ternary:focus {
+ color: #005965 !important;
+}
\ No newline at end of file
diff --git a/data/combinedSettingsFile.txt b/frontend/src/combinedSettingsFile.txt
similarity index 100%
rename from data/combinedSettingsFile.txt
rename to frontend/src/combinedSettingsFile.txt
diff --git a/frontend/src/edit.html b/frontend/src/edit.html
new file mode 100644
index 0000000..c6435be
--- /dev/null
+++ b/frontend/src/edit.html
@@ -0,0 +1,61 @@
+
+
+
+
+ ESP8266 SPIFFS File Upload
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ESP8266 SPIFFS File Upload
+
+
+
+
Select a new file to upload to the ESP8266. Existing files will be replaced.
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/index.html b/frontend/src/index.html
new file mode 100755
index 0000000..fe0917e
--- /dev/null
+++ b/frontend/src/index.html
@@ -0,0 +1,109 @@
+
+
+
+
+ Home
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome
+
Welcome to the planted aquarium controller.
+
+
+
+
+
+
+
+
+
+
Settings at a glance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/ledcontrol.html b/frontend/src/ledcontrol.html
new file mode 100755
index 0000000..e2d80b1
--- /dev/null
+++ b/frontend/src/ledcontrol.html
@@ -0,0 +1,39 @@
+
+
+
+ LED Control
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/loadMenu.js b/frontend/src/loadMenu.js
new file mode 100644
index 0000000..39493b1
--- /dev/null
+++ b/frontend/src/loadMenu.js
@@ -0,0 +1,3 @@
+$(document).ready(function() {
+ $('#navigation').load('menu.html');
+});
\ No newline at end of file
diff --git a/frontend/src/main.css b/frontend/src/main.css
new file mode 100644
index 0000000..2747ae2
--- /dev/null
+++ b/frontend/src/main.css
@@ -0,0 +1,29 @@
+/* .navbar-light .nav-item.active .nav-link,
+.navbar-light .nav-item:focus .nav-link,
+.navbar-light .nav-item:hover .nav-link {
+ color: #ffffff;
+} */
+
+.navbar-dark .navbar-nav .nav-link {
+ color: rgba(255, 255, 255, .5);
+ color: #ffffff;
+}
+
+
+/* #form-section {
+ width: 30%;
+ margin: auto;
+}
+
+#manual-card {
+ width: 40%;
+} */
+
+@media only screen and (max-width: 900px) {
+ /* #form-section {
+ width: 90%;
+ }
+ #manual-card {
+ width: 90%;
+ } */
+}
\ No newline at end of file
diff --git a/frontend/src/main.js b/frontend/src/main.js
new file mode 100644
index 0000000..66e0051
--- /dev/null
+++ b/frontend/src/main.js
@@ -0,0 +1,177 @@
+function incHeight() {
+ var el = document.getElementById('mySection');
+ var height = el.offsetHeight;
+ console.log("Height = " + height);
+ var newHeight = height + 250;
+ el.style.height = newHeight + 'px';
+}
+
+var header = document.querySelector('header');
+var section = document.querySelector('section');
+
+function handleErrors(response) {
+ if (!response.ok) {
+ throw Error(response.statusText);
+ }
+ return response;
+}
+
+
+async function getData() {
+ //await the response of the fetch call
+ let response = await fetch('combinedSettingsFile.txt');
+ //proceed once the first promise is resolved.
+ let data = await response.json()
+ //proceed only when the second promise is resolved
+ return data;
+}
+
+async function getTemperatures() {
+ //await the response of the fetch call
+ let response = await fetch('temperatures.txt');
+ //proceed once the first promise is resolved.
+ let data = await response.json()
+ //proceed only when the second promise is resolved
+ return data;
+}
+async function getTemperatures2() {
+ //await the response of the fetch call
+ let response = await fetch('api/get/temperatures');
+ //proceed once the first promise is resolved.
+ let data = await response.json()
+ //proceed only when the second promise is resolved
+ return data;
+}
+getTemperatures()
+ .then(data => {
+ data.temperatures.forEach(function(temperature) {
+ console.log(temperature);
+ })
+ })
+
+// .then(result => {
+// //Here body is not ready yet, throw promise
+// if (!result.ok) throw result;
+// return result.json();
+// })
+// .then(result => {
+// //Successful request processing
+// console.log(result);
+// }).catch(error => {
+// //Here is still promise
+// console.log(error);
+// error.json().then((body) => {
+// //Here is already the payload from API
+// console.log(body);
+// });
+// })
+
+setInterval(function() {
+ let temperaturesSwitch = document.getElementById('temperatures-switch');
+ if (temperaturesSwitch.checked) {
+ // getTemperatures2()
+ fetch('api/get/temperatures')
+ // .then(handleErrors)
+ .then(result => {
+ //Here body is not ready yet, throw promise
+ if (!result.ok) throw result;
+ return result.json();
+ })
+ .then(data => {
+ let p = document.getElementById('temperature');
+ if (data.status == 'failed') {
+ let errorMessage = sprintf('status = %s reason = %s', data.status, data.message)
+ p.textContent = errorMessage;
+ console.log(errorMessage);
+ } else {
+
+ p.textContent = "";
+ data.temperatures.forEach(function(temperature) {
+
+ console.log("Temperature = " + temperature);
+ temp = sprintf("%05.2f", temperature);
+ p.textContent += temp + ' ';
+
+ })
+ // let temp = sprintf("%.2f", 36.72);
+ // p.textContent += temp + ' ';
+ }
+ })
+ .catch(error => {
+ //Here is still promise
+ // console.log(error);
+ // if (error.status == 404) {
+ // console.log('error = ' + 404);
+ // }
+ // else {
+ // error.json().then((body) => {
+ //Here is already the payload from API
+ // let errorMessage = sprintf('status = %s reason = %s', body.status, body.message)
+ // console.log(errorMessage);
+ // });
+ // }
+ let p = document.getElementById('temperature');
+ p.textContent = 'Network Error';
+ })
+ }
+ },
+ 2000
+);
+
+//call getData function
+getData()
+ //.then(data => console.log(data))//log the data
+ .then(function showSettings(data) {
+ var ballasts = data['settings'];
+ console.log(ballasts);
+ for (let i = 0; i < 3; i++) {
+ // var myArticle = document.createElement('article');
+ // var myH2 = document.createElement('h3');
+ // var myPara1 = document.createElement('p');
+ // var myPara2 = document.createElement('p');
+ // var myPara3 = document.createElement('p');
+ // var myPara4 = document.createElement('p');
+ // var myPara5 = document.createElement('p');
+ // // var myList = document.createElement('ul');
+
+ // myH2.textContent = 'Ballast' + ' #' + (i + 1);
+ // myPara1.textContent = 'Start Hour: ' + ballasts[i].shour;
+ // myPara2.textContent = 'Start Minute: ' + ballasts[i].smin;
+ // myPara3.textContent = 'Fade Period: ' + ballasts[i].fadePeriod;
+ // myPara4.textContent = 'End Hour: ' + ballasts[i].ehour;
+ // myPara5.textContent = 'End Minute: ' + ballasts[i].emin;
+ // console.log(ballasts[i].shour);
+ // myArticle.appendChild(myH2);
+ // myArticle.appendChild(myPara1);
+ // myArticle.appendChild(myPara2);
+ // myArticle.appendChild(myPara3);
+ // myArticle.appendChild(myPara4);
+ // myArticle.appendChild(myPara5);
+ // // myArticle.appendChild(myList);
+ // section.appendChild(myArticle);
+ let myDiv = document.getElementById('ballast' + (i + 1));
+ // let myH2 = document.createElement('h3');
+ let myPara1 = document.createElement('p');
+ let myPara2 = document.createElement('p');
+ let myPara3 = document.createElement('p');
+ let myPara4 = document.createElement('p');
+ let myPara5 = document.createElement('p');
+
+ // myH2.textContent = 'Ballast' + ' #' + (i + 1);
+ myPara1.textContent = 'Start Hour: ' + ballasts[i].shour;
+ myPara2.textContent = 'Start Minute: ' + ballasts[i].smin;
+ myPara3.textContent = 'Fade Period: ' + ballasts[i].fadePeriod;
+ myPara4.textContent = 'End Hour: ' + ballasts[i].ehour;
+ myPara5.textContent = 'End Minute: ' + ballasts[i].emin;
+
+ // myDiv.appendChild(myH2);
+ myDiv.appendChild(myPara1);
+ myDiv.appendChild(myPara2);
+ myDiv.appendChild(myPara3);
+ myDiv.appendChild(myPara4);
+ myDiv.appendChild(myPara5);
+ }
+ return data;
+ })
+ .then(data => console.log(data))
+ // .then(incHeight());
\ No newline at end of file
diff --git a/frontend/src/main_bak.css b/frontend/src/main_bak.css
new file mode 100755
index 0000000..7c9be60
--- /dev/null
+++ b/frontend/src/main_bak.css
@@ -0,0 +1,186 @@
+.nav-pills .nav-link.active,
+.nav-pills .show>.nav-link {
+ color: #fff;
+ background-color: #00878F;
+}
+
+@font-face {
+ font-family: 'nunitoregular';
+ src: url('nunito-regular-webfont.woff2') format('woff2'), url('nunito-regular-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
+
+iframe {
+ border: none;
+ align-self: center;
+ align-content: center;
+ align-items: center;
+}
+
+center {
+ width: 70%;
+ max-width: 100%;
+ margin: 0px auto;
+ font-family: 'Roboto', sans-serif;
+ color: #444;
+}
+
+header {
+ background-color: #00878F;
+ color: white;
+ padding: 6px;
+ font-family: 'Roboto', sans-serif;
+ box-shadow: 1px 1px 5px #555555;
+ position: relative;
+}
+
+h1 {
+ margin: 0px;
+ font-family: 'Roboto', sans-serif;
+ font-size: 32;
+}
+
+h2 {
+ color: #00878f;
+}
+
+h3 {
+ color: #00878f;
+}
+
+.shadow {
+ box-shadow: 1px 1px 5px #555555;
+ /* height: 500px; */
+}
+
+.navmenu {
+ margin-top: 10px;
+ margin-left: 0px;
+}
+
+.navm {
+ margin: 2px;
+}
+
+radio {
+ float: left;
+}
+
+.content {
+ margin: 10px 10px 10px 10px
+}
+
+table {
+ margin: 5px 24px 5px 12px;
+ border: #000000
+}
+
+.tbl {
+ margin-top: 10px;
+ margin-bottom: 5px;
+ border: #000000
+}
+
+td {
+ color: #555;
+}
+
+
+/* tr {
+ width: 100%;
+} */
+
+.button {
+ text-decoration: none;
+ border: none;
+ color: white;
+ background-color: #00878F;
+ padding: 6px 24px;
+ font-size: 16px;
+ cursor: pointer;
+ box-shadow: 1px 1px 6px #555;
+ outline: none;
+ margin: 12px auto 0px auto;
+ display: inline-block;
+}
+
+.button:hover {
+ box-shadow: 1px 1px 3px #444;
+}
+
+hr {
+ width: 97%;
+ margin-right: 10px;
+}
+
+input[type=range] {
+ -webkit-appearance: none;
+ outline: none;
+ width: auto;
+ margin: 6px;
+}
+
+input {
+ width: 95px;
+ height: 20px;
+}
+
+input[type=range]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ border: 0px;
+ height: 15px;
+ width: 15px;
+ margin-top: -6px;
+ border-radius: 7.5px;
+}
+
+input.disabled[type=range]::-webkit-slider-thumb {
+ background: #999;
+}
+
+input.enabled[type=range]::-webkit-slider-thumb {
+ background: #00878F;
+ cursor: pointer;
+ box-shadow: 1px 1px 2px #777, 0px 0px 1px #777;
+}
+
+input[type=range]::-webkit-slider-runnable-track {
+ width: inherit;
+ height: 4px;
+ background: #ccc;
+ border-radius: 1px;
+}
+
+input.enabled[type=range]::-webkit-slider-runnable-track {
+ cursor: pointer;
+}
+
+p {
+ font-family: 'Nunito', sans-serif;
+}
+
+
+/* section styles */
+
+section article {
+ width: 33%;
+ float: left;
+}
+
+section p {
+ margin: 5px 0;
+}
+
+section ul {
+ margin-top: 0;
+}
+
+@media screen and (max-width: 900px) {
+ center {
+ width: 90%;
+ }
+ .content {
+ height: 600px;
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/manifest.json b/frontend/src/manifest.json
new file mode 100755
index 0000000..f80d658
--- /dev/null
+++ b/frontend/src/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name": "LED Control",
+ "icons": [
+ {
+ "src": "\/favicon-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ }
+ ]
+}
diff --git a/frontend/src/manualMode-ajax.html b/frontend/src/manualMode-ajax.html
new file mode 100755
index 0000000..5b97a55
--- /dev/null
+++ b/frontend/src/manualMode-ajax.html
@@ -0,0 +1,122 @@
+
+
+
+
+ Manual Mode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Manual Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/manualMode.html b/frontend/src/manualMode.html
new file mode 100755
index 0000000..94968e9
--- /dev/null
+++ b/frontend/src/manualMode.html
@@ -0,0 +1,78 @@
+
+
+
+
+ Manual Mode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data/manualMode.txt b/frontend/src/manualMode.txt
similarity index 100%
rename from data/manualMode.txt
rename to frontend/src/manualMode.txt
diff --git a/frontend/src/menu.html b/frontend/src/menu.html
new file mode 100755
index 0000000..2850342
--- /dev/null
+++ b/frontend/src/menu.html
@@ -0,0 +1,26 @@
+
\ No newline at end of file
diff --git a/frontend/src/settings-ajax.html b/frontend/src/settings-ajax.html
new file mode 100755
index 0000000..006bb74
--- /dev/null
+++ b/frontend/src/settings-ajax.html
@@ -0,0 +1,88 @@
+
+
+
+
+ Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/settings-success.html b/frontend/src/settings-success.html
new file mode 100755
index 0000000..52a6e6f
--- /dev/null
+++ b/frontend/src/settings-success.html
@@ -0,0 +1,23 @@
+
+
+ Settings update successful
+
+
+
+
+
+
+
+
+
+
+
+
+
Settings changed successfully.
+
Back
+
+
+
+
diff --git a/frontend/src/settings.html b/frontend/src/settings.html
new file mode 100755
index 0000000..82aba0c
--- /dev/null
+++ b/frontend/src/settings.html
@@ -0,0 +1,88 @@
+
+
+
+ Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/settings.js b/frontend/src/settings.js
new file mode 100644
index 0000000..2801fd1
--- /dev/null
+++ b/frontend/src/settings.js
@@ -0,0 +1,39 @@
+var myForm = document.getElementById('myForm')
+myForm.addEventListener('submit', function(e) {
+ e.preventDefault();
+ //var data = JSON.stringify(formData(myForm));
+ loadJSON(formData(myForm))
+})
+
+function formData(form) {
+let el = form.querySelectorAll('input[type="text"]');
+let ballast = document.getElementById('myBallasts').value;
+let myData = '';
+ myData += 'ballast' + '=' + ballast + '&';
+ for (var x = 0; x < el.length; x++) {
+ let name = el[x].name;
+ let value = el[x].value;
+ //myData[name] = value;
+ myData += name + '=' + value + '&'
+ }
+ return myData.slice(0, -1);
+}
+
+function loadJSON(data) {
+ const url = '/settings.html';
+ console.log(data)
+ const myData = data
+ fetch(url, {
+ method: 'post',
+ headers: {
+ "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
+ },
+ body: myData
+ })
+ // .then(function (response) {
+ // return response.json()
+ // }).then(function (data) {
+ // console.log(data)
+ // })
+ .catch(error => console.log(error))
+}
\ No newline at end of file
diff --git a/frontend/src/settingsFile1.txt b/frontend/src/settingsFile1.txt
new file mode 100755
index 0000000..fc54fe7
--- /dev/null
+++ b/frontend/src/settingsFile1.txt
@@ -0,0 +1,7 @@
+{
+ "shour": 16,
+ "fadePeriod": 30,
+ "smin": 0,
+ "ehour": 22,
+ "emin": 0
+}
diff --git a/frontend/src/settingsFile2.txt b/frontend/src/settingsFile2.txt
new file mode 100755
index 0000000..fc54fe7
--- /dev/null
+++ b/frontend/src/settingsFile2.txt
@@ -0,0 +1,7 @@
+{
+ "shour": 16,
+ "fadePeriod": 30,
+ "smin": 0,
+ "ehour": 22,
+ "emin": 0
+}
diff --git a/frontend/src/settingsFile3.txt b/frontend/src/settingsFile3.txt
new file mode 100755
index 0000000..fc54fe7
--- /dev/null
+++ b/frontend/src/settingsFile3.txt
@@ -0,0 +1,7 @@
+{
+ "shour": 16,
+ "fadePeriod": 30,
+ "smin": 0,
+ "ehour": 22,
+ "emin": 0
+}
diff --git a/frontend/src/success.html b/frontend/src/success.html
new file mode 100755
index 0000000..a552e98
--- /dev/null
+++ b/frontend/src/success.html
@@ -0,0 +1,23 @@
+
+
+ HTML Upload successful
+
+
+
+
+
+
+
+
+
+
+
+
+
The upload was successful.
+
Back
+
+
+
+
diff --git a/frontend/src/temperatures.txt b/frontend/src/temperatures.txt
new file mode 100644
index 0000000..cbcb0fe
--- /dev/null
+++ b/frontend/src/temperatures.txt
@@ -0,0 +1,6 @@
+{
+ "temperatures": [
+ 48,
+ 2
+ ]
+}
\ No newline at end of file
diff --git a/frontend/src/uploadButtonStyle.js b/frontend/src/uploadButtonStyle.js
new file mode 100644
index 0000000..6f9b0a1
--- /dev/null
+++ b/frontend/src/uploadButtonStyle.js
@@ -0,0 +1,8 @@
+$('#upload-button').filestyle({
+
+ buttonName: 'btn-success',
+
+ buttonText: ' File selection',
+ btnClass: "btn-ternary",
+ dragDrop: true
+});
\ No newline at end of file
diff --git a/include.js b/include.js
deleted file mode 100755
index 4d49a8b..0000000
--- a/include.js
+++ /dev/null
@@ -1,10 +0,0 @@
-$(function(){
- var includes = $('[data-include]');
- jQuery.each(includes, function(){
- var file = '/' + $(this).data('include') + '.html';
- $(this).load(file);
- });
- });
-// $(document).ready(function(){
-// $( "#header" ).load( "/menu.html" );
-// });
\ No newline at end of file
diff --git a/platformio.ini b/platformio.ini
index 3f4edb5..8f8fb62 100755
--- a/platformio.ini
+++ b/platformio.ini
@@ -29,6 +29,6 @@ board_build.f_cpu = 160000000L
; --ip=192.168.1.103
; --port=8266
; --auth=esp8266
-build_flags =
- -DLC_WIFI_SSID=${sysenv.WIFI_SSID}
- -DLC_WIFI_PASS=${sysenv.WIFI_PASS}
+; build_flags =
+; -DLC_WIFI_SSID=${sysenv.WIFI_SSID}
+; -DLC_WIFI_PASS=${sysenv.WIFI_PASS}
diff --git a/src/main.cpp b/src/main.cpp
index e2ad080..1d6b2d5 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -358,6 +358,8 @@ void startServer()
server.send(200, "text/plain", rtcDate);
});
+ server.serveStatic("/", SPIFFS, "www", "no-cache");
+
server.begin(); // start the HTTP server
Serial.println("HTTP server started.");
}
@@ -366,6 +368,9 @@ void startServer()
void handleNotFound()
{ // if the requested file or page doesn't exist, return a 404 not found error
+ server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
+ server.sendHeader("Pragma", "no-cache");
+ server.sendHeader("Expires", "-1");
if (!handleFileRead(server.uri()))
{ // check if the file exists in the flash memory (SPIFFS), if so, send it
server.send(404, "application/json", "{\"status\":\"failed\",\"message\":\"Resource not found\"}");
@@ -498,21 +503,24 @@ void combineSettings()
StaticJsonBuffer<100> jsonBuffer10;
JsonObject &root1 = jsonBuffer10.parseObject(buf1.get());
- if (root1 == JsonObject::invalid())
+ if (!root1.success())
{
- Serial.println("Error1");
+ Log.error("Error parsing JSON");
+ return;
}
StaticJsonBuffer<100> jsonBuffer11;
JsonObject &root2 = jsonBuffer11.parseObject(buf2.get());
- if (root2 == JsonObject::invalid())
+ if (!root2.success())
{
- Serial.println("Error2");
+ Log.error("Error parsing JSON");
+ return;
}
StaticJsonBuffer<100> jsonBuffer12;
JsonObject &root3 = jsonBuffer12.parseObject(buf3.get());
- if (root3 == JsonObject::invalid())
+ if (!root3.success())
{
- Serial.println("Error3");
+ Log.error("Error parsing JSON");
+ return;
}
StaticJsonBuffer<50> jsonBuffer16;
JsonObject &root5 = jsonBuffer16.parseObject(buf5.get());
@@ -574,6 +582,7 @@ void combineSettings()
file5.close();
}
+//FIXME borked - has strange/undefined behaviour
void combineSettings_new()
{
const File file1 = SPIFFS.open("/settingsFile1.txt", "r");
diff --git a/website-zipped_bak/index.html.gz b/website-zipped_bak/index.html.gz
deleted file mode 100755
index 83c4b6c..0000000
Binary files a/website-zipped_bak/index.html.gz and /dev/null differ
diff --git a/website-zipped_bak/ledcontrol.html.gz b/website-zipped_bak/ledcontrol.html.gz
deleted file mode 100755
index ae99f86..0000000
Binary files a/website-zipped_bak/ledcontrol.html.gz and /dev/null differ
diff --git a/website-zipped_bak/main.css.gz b/website-zipped_bak/main.css.gz
deleted file mode 100755
index 9e97edc..0000000
Binary files a/website-zipped_bak/main.css.gz and /dev/null differ
diff --git a/website-zipped_bak/manifest.json.gz b/website-zipped_bak/manifest.json.gz
deleted file mode 100755
index 46e5319..0000000
Binary files a/website-zipped_bak/manifest.json.gz and /dev/null differ
diff --git a/website-zipped_bak/manualMode-ajax.html.gz b/website-zipped_bak/manualMode-ajax.html.gz
deleted file mode 100755
index 0724d78..0000000
Binary files a/website-zipped_bak/manualMode-ajax.html.gz and /dev/null differ
diff --git a/website-zipped_bak/manualMode.html.gz b/website-zipped_bak/manualMode.html.gz
deleted file mode 100755
index 89f0937..0000000
Binary files a/website-zipped_bak/manualMode.html.gz and /dev/null differ
diff --git a/website-zipped_bak/menu.html.gz b/website-zipped_bak/menu.html.gz
deleted file mode 100755
index 9f74f21..0000000
Binary files a/website-zipped_bak/menu.html.gz and /dev/null differ
diff --git a/website-zipped_bak/nunito-regular-webfont.woff.gz b/website-zipped_bak/nunito-regular-webfont.woff.gz
deleted file mode 100755
index 4d82150..0000000
Binary files a/website-zipped_bak/nunito-regular-webfont.woff.gz and /dev/null differ
diff --git a/website-zipped_bak/nunito-regular-webfont.woff2.gz b/website-zipped_bak/nunito-regular-webfont.woff2.gz
deleted file mode 100755
index ded3e34..0000000
Binary files a/website-zipped_bak/nunito-regular-webfont.woff2.gz and /dev/null differ
diff --git a/website-zipped_bak/settings-ajax.html.gz b/website-zipped_bak/settings-ajax.html.gz
deleted file mode 100755
index e807f44..0000000
Binary files a/website-zipped_bak/settings-ajax.html.gz and /dev/null differ
diff --git a/website-zipped_bak/settings-success.html.gz b/website-zipped_bak/settings-success.html.gz
deleted file mode 100755
index 55cfbc0..0000000
Binary files a/website-zipped_bak/settings-success.html.gz and /dev/null differ
diff --git a/website-zipped_bak/settings.html.gz b/website-zipped_bak/settings.html.gz
deleted file mode 100755
index fb034c4..0000000
Binary files a/website-zipped_bak/settings.html.gz and /dev/null differ
diff --git a/website-zipped_bak/success.html.gz b/website-zipped_bak/success.html.gz
deleted file mode 100755
index 584a0ef..0000000
Binary files a/website-zipped_bak/success.html.gz and /dev/null differ