mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-04-19 01:27:26 +00:00
Merge branch 'master' into use11b
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
$:{
|
||||
showFull = Math.abs(new Date().getTime()-timestamp.getTime()) < 300000;
|
||||
if(!isNaN(offset))
|
||||
addHours(timestamp, offset - ((timestamp.getHours() - timestamp.getUTCHours())%24));
|
||||
addHours(timestamp, offset - ((24 + timestamp.getHours() - timestamp.getUTCHours())%24));
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
min = max = 0;
|
||||
let cur = addHours(new Date(), -24);
|
||||
let currentHour = new Date().getUTCHours();
|
||||
addHours(cur, sysinfo.clock_offset - ((cur.getHours() - cur.getUTCHours())%24));
|
||||
addHours(cur, sysinfo.clock_offset - ((24 + cur.getHours() - cur.getUTCHours())%24));
|
||||
for(i = currentHour; i<24; i++) {
|
||||
let imp = json["i"+zeropad(i)];
|
||||
let exp = json["e"+zeropad(i)];
|
||||
@@ -63,24 +63,27 @@
|
||||
addHours(cur, 1);
|
||||
};
|
||||
|
||||
let boundary = Math.ceil(Math.max(min, max));
|
||||
|
||||
max = boundary;
|
||||
min = min == 0 ? 0 : boundary*-1;
|
||||
min *= -1;
|
||||
let range = Math.max(max, Math.abs(min));
|
||||
|
||||
if(min < 0) {
|
||||
let yTickDistDown = min/4;
|
||||
for(i = 1; i < 5; i++) {
|
||||
min = Math.min((range/4)*-1, min);
|
||||
let yTicksNum = Math.ceil((Math.abs(min)/range) * 4);
|
||||
let yTickDistDown = min/yTicksNum;
|
||||
for(i = 1; i < yTicksNum+1; i++) {
|
||||
let val = (yTickDistDown*i);
|
||||
yTicks.push({
|
||||
value: val,
|
||||
label: (val/10).toFixed(1)
|
||||
});
|
||||
}
|
||||
console.log(yTicksNum);
|
||||
}
|
||||
|
||||
let yTickDistUp = max/4;
|
||||
for(i = 0; i < 5; i++) {
|
||||
max = Math.max((range/4), max);
|
||||
let xTicksNum = Math.ceil((max/range) * 4);
|
||||
let yTickDistUp = max/xTicksNum;
|
||||
for(i = 0; i < xTicksNum+1; i++) {
|
||||
let val = (yTickDistUp*i);
|
||||
yTicks.push({
|
||||
value: val,
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
min = max = 0;
|
||||
let cur = new Date();
|
||||
let lm = new Date();
|
||||
addHours(cur, sysinfo.clock_offset - ((cur.getHours() - cur.getUTCHours())%24));
|
||||
addHours(lm, sysinfo.clock_offset - ((lm.getHours() - lm.getUTCHours())%24));
|
||||
addHours(cur, sysinfo.clock_offset - ((24 + cur.getHours() - cur.getUTCHours())%24));
|
||||
addHours(lm, sysinfo.clock_offset - ((24 + lm.getHours() - lm.getUTCHours())%24));
|
||||
lm.setDate(0);
|
||||
|
||||
for(i = cur.getDate(); i<=lm.getDate(); i++) {
|
||||
@@ -64,14 +64,14 @@
|
||||
max = Math.max(max, imp);
|
||||
}
|
||||
|
||||
let boundary = Math.ceil(Math.max(min, max)/10)*10;
|
||||
|
||||
max = boundary;
|
||||
min = min == 0 ? 0 : boundary*-1;
|
||||
min *= -1;
|
||||
let range = Math.max(max, Math.abs(min));
|
||||
|
||||
if(min < 0) {
|
||||
let yTickDistDown = min/4;
|
||||
for(i = 0; i < 5; i++) {
|
||||
min = Math.min((range/4)*-1, min);
|
||||
let yTicksNum = Math.ceil((Math.abs(min)/range) * 4);
|
||||
let yTickDistDown = min/yTicksNum;
|
||||
for(i = 1; i < yTicksNum+1; i++) {
|
||||
let val = (yTickDistDown*i);
|
||||
yTicks.push({
|
||||
value: val,
|
||||
@@ -80,8 +80,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
let yTickDistUp = max/4;
|
||||
for(i = 0; i < 5; i++) {
|
||||
max = Math.max((range/4), max);
|
||||
let xTicksNum = Math.ceil((max/range) * 4);
|
||||
let yTickDistUp = max/xTicksNum;
|
||||
for(i = 0; i < xTicksNum+1; i++) {
|
||||
let val = (yTickDistUp*i);
|
||||
yTicks.push({
|
||||
value: val,
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
<div class="cnt">
|
||||
<strong class="text-sm">Device information</strong>
|
||||
<div class="my-2">
|
||||
Chip: {sysinfo.chip}
|
||||
Chip: {sysinfo.chip} ({sysinfo.cpu}MHz)
|
||||
</div>
|
||||
<div class="my-2">
|
||||
Device: <Link to="/vendor">{boardtype(sysinfo.chip, sysinfo.board)}</Link>
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
static const char HEADER_CACHE_CONTROL[] PROGMEM = "Cache-Control";
|
||||
static const char HEADER_CONTENT_ENCODING[] PROGMEM = "Content-Encoding";
|
||||
static const char HEADER_PRAGMA[] PROGMEM = "Pragma";
|
||||
static const char HEADER_EXPIRES[] PROGMEM = "Expires";
|
||||
static const char HEADER_AUTHENTICATE[] PROGMEM = "WWW-Authenticate";
|
||||
static const char HEADER_LOCATION[] PROGMEM = "Location";
|
||||
|
||||
static const char CACHE_CONTROL_NO_CACHE[] PROGMEM = "no-cache, no-store, must-revalidate";
|
||||
static const char CONTENT_ENCODING_GZIP[] PROGMEM = "gzip";
|
||||
static const char CACHE_1HR[] PROGMEM = "public, max-age=3600";
|
||||
static const char CACHE_1MO[] PROGMEM = "public, max-age=2592000";
|
||||
static const char CACHE_1MO[] PROGMEM = "public, max-age=2630000";
|
||||
static const char CACHE_1YR[] PROGMEM = "public, max-age=31536000";
|
||||
static const char PRAGMA_NO_CACHE[] PROGMEM = "no-cache";
|
||||
static const char EXPIRES_OFF[] PROGMEM = "-1";
|
||||
static const char AUTHENTICATE_BASIC[] PROGMEM = "Basic realm=\"Secure Area\"";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"version": "%s",
|
||||
"chip": "%s",
|
||||
"chipId": "%s",
|
||||
"cpu": %d,
|
||||
"mac": "%s",
|
||||
"apmac": "%s",
|
||||
"board": %d,
|
||||
|
||||
@@ -2,6 +2,7 @@ import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import gzip
|
||||
|
||||
try:
|
||||
from css_html_js_minify import html_minify, js_minify, css_minify
|
||||
@@ -65,16 +66,24 @@ for webroot in ["lib/SvelteUi/app/dist", "lib/SvelteUi/json"]:
|
||||
content = js_minify(content)
|
||||
except:
|
||||
print("WARN: Unable to minify")
|
||||
|
||||
|
||||
content_bytes = content.encode("utf-8")
|
||||
if filename in ["index.js", "index.css"]:
|
||||
content_bytes = gzip.compress(content_bytes, compresslevel=9)
|
||||
content_len = len(content_bytes)
|
||||
else:
|
||||
content_len = len(content_bytes)
|
||||
content_bytes += b"\0"
|
||||
|
||||
with open(dstfile, "w") as dst:
|
||||
dst.write("static const char ")
|
||||
dst.write(varname)
|
||||
dst.write("[] PROGMEM = R\"==\"==(")
|
||||
dst.write(content)
|
||||
dst.write(")==\"==\";\n")
|
||||
dst.write("[] PROGMEM = {")
|
||||
dst.write(", ".join([str(c) for c in content_bytes]))
|
||||
dst.write("};\n")
|
||||
dst.write("const int ");
|
||||
dst.write(varname)
|
||||
dst.write("_LEN PROGMEM = ");
|
||||
dst.write(str(len(content)))
|
||||
dst.write(str(content_len))
|
||||
dst.write(";");
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#if defined(ESP32)
|
||||
#include <esp_task_wdt.h>
|
||||
#include <esp_wifi.h>
|
||||
#include <esp_clk.h>
|
||||
#endif
|
||||
|
||||
|
||||
@@ -190,14 +191,14 @@ void AmsWebServer::notFound() {
|
||||
void AmsWebServer::githubSvg() {
|
||||
if(debugger->isActive(RemoteDebug::DEBUG)) debugger->printf_P(PSTR("Serving /github.svg over http...\n"));
|
||||
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1HR);
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1MO);
|
||||
server.send_P(200, "image/svg+xml", GITHUB_SVG);
|
||||
}
|
||||
|
||||
void AmsWebServer::faviconSvg() {
|
||||
if(debugger->isActive(RemoteDebug::DEBUG)) debugger->printf_P(PSTR("Serving /favicon.ico over http...\n"));
|
||||
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1HR);
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1MO);
|
||||
server.send_P(200, "image/svg+xml", FAVICON_SVG);
|
||||
}
|
||||
|
||||
@@ -239,9 +240,11 @@ void AmsWebServer::sysinfoJson() {
|
||||
#if defined(ESP8266)
|
||||
wifi_get_macaddr(STATION_IF, mac);
|
||||
wifi_get_macaddr(SOFTAP_IF, apmac);
|
||||
uint32_t cpu_freq = 80;
|
||||
#elif defined(ESP32)
|
||||
esp_wifi_get_mac((wifi_interface_t)ESP_IF_WIFI_STA, mac);
|
||||
esp_wifi_get_mac((wifi_interface_t)ESP_IF_WIFI_AP, apmac);
|
||||
uint32_t cpu_freq = esp_clk_cpu_freq();
|
||||
#endif
|
||||
|
||||
sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||
@@ -277,6 +280,7 @@ void AmsWebServer::sysinfoJson() {
|
||||
"esp8266",
|
||||
#endif
|
||||
chipIdStr.c_str(),
|
||||
cpu_freq / 1000000,
|
||||
macStr,
|
||||
apMacStr,
|
||||
sys.boardType,
|
||||
@@ -764,9 +768,9 @@ void AmsWebServer::indexCss() {
|
||||
if(!checkSecurity(2))
|
||||
return;
|
||||
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1MO);
|
||||
server.setContentLength(INDEX_CSS_LEN);
|
||||
server.send_P(200, MIME_CSS, INDEX_CSS);
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1YR);
|
||||
server.sendHeader(HEADER_CONTENT_ENCODING, CONTENT_ENCODING_GZIP);
|
||||
server.send_P(200, MIME_CSS, INDEX_CSS, INDEX_CSS_LEN);
|
||||
}
|
||||
|
||||
void AmsWebServer::indexJs() {
|
||||
@@ -775,8 +779,9 @@ void AmsWebServer::indexJs() {
|
||||
if(!checkSecurity(2))
|
||||
return;
|
||||
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1MO);
|
||||
server.send_P(200, MIME_JS, INDEX_JS);
|
||||
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_1YR);
|
||||
server.sendHeader(HEADER_CONTENT_ENCODING, CONTENT_ENCODING_GZIP);
|
||||
server.send_P(200, MIME_JS, INDEX_JS, INDEX_JS_LEN);
|
||||
}
|
||||
|
||||
void AmsWebServer::configurationJson() {
|
||||
@@ -1005,6 +1010,13 @@ void AmsWebServer::handleSave() {
|
||||
gpioConfig->ledPin = 15;
|
||||
gpioConfig->ledInverted = false;
|
||||
gpioConfig->apPin = 0;
|
||||
gpioConfig->hanPin = hanPin > 0 ? hanPin : 18;
|
||||
if(gpioConfig->hanPin != 18) {
|
||||
gpioConfig->vccPin = 18;
|
||||
gpioConfig->vccResistorGnd = 45;
|
||||
gpioConfig->vccResistorVcc = 10;
|
||||
}
|
||||
break;
|
||||
case 50: // Generic ESP32-S2
|
||||
gpioConfig->hanPin = hanPin > 0 ? hanPin : 18;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user