mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-03 19:21:38 +02:00
0.8.1030001-zero
Merge branch 'development03' into zero-export
This commit is contained in:
commit
a86a55e9de
35 changed files with 1394 additions and 1322 deletions
|
@ -100,7 +100,7 @@ class RestApi {
|
|||
else if(path == "setup") getSetup(request, root);
|
||||
#if !defined(ETHERNET)
|
||||
else if(path == "setup/networks") getNetworks(root);
|
||||
else if(path == "setup/getip") getWifiIp(root);
|
||||
else if(path == "setup/getip") getIp(root);
|
||||
#endif /* !defined(ETHERNET) */
|
||||
else if(path == "live") getLive(request,root);
|
||||
else if (path == "powerHistory") getPowerHistory(request, root);
|
||||
|
@ -166,7 +166,7 @@ class RestApi {
|
|||
#else
|
||||
DynamicJsonDocument json(12000); // does this work? I have no ESP32 :-(
|
||||
#endif
|
||||
DeserializationError err = deserializeJson(json, (const char *)mTmpBuf, mTmpSize);
|
||||
DeserializationError err = deserializeJson(json, static_cast<const char *>(mTmpBuf, mTmpSize));
|
||||
json.shrinkToFit();
|
||||
JsonObject obj = json.as<JsonObject>();
|
||||
|
||||
|
@ -375,9 +375,9 @@ class RestApi {
|
|||
}
|
||||
|
||||
void getSysInfo(AsyncWebServerRequest *request, JsonObject obj) {
|
||||
obj[F("ap_pwd")] = mConfig->sys.apPwd;
|
||||
#if !defined(ETHERNET)
|
||||
obj[F("ssid")] = mConfig->sys.stationSsid;
|
||||
obj[F("ap_pwd")] = mConfig->sys.apPwd;
|
||||
obj[F("hidd")] = mConfig->sys.isHidden;
|
||||
obj[F("mac")] = WiFi.macAddress();
|
||||
obj[F("wifi_channel")] = WiFi.channel();
|
||||
|
@ -762,6 +762,18 @@ class RestApi {
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(ETHERNET)
|
||||
void getEthernet(JsonObject obj) {
|
||||
obj[F("en")] = mConfig->sys.eth.enabled;
|
||||
obj[F("cs")] = mConfig->sys.eth.pinCs;
|
||||
obj[F("sclk")] = mConfig->sys.eth.pinSclk;
|
||||
obj[F("miso")] = mConfig->sys.eth.pinMiso;
|
||||
obj[F("mosi")] = mConfig->sys.eth.pinMosi;
|
||||
obj[F("irq")] = mConfig->sys.eth.pinIrq;
|
||||
obj[F("reset")] = mConfig->sys.eth.pinRst;
|
||||
}
|
||||
#endif
|
||||
|
||||
void getRadioNrf(JsonObject obj) {
|
||||
obj[F("en")] = (bool) mConfig->nrf.enabled;
|
||||
if(mConfig->nrf.enabled) {
|
||||
|
@ -920,6 +932,9 @@ class RestApi {
|
|||
#if defined(ESP32)
|
||||
getRadioCmt(obj.createNestedObject(F("radioCmt")));
|
||||
#endif
|
||||
#if defined(ETHERNET)
|
||||
getEthernet(obj.createNestedObject(F("eth")));
|
||||
#endif
|
||||
getRadioNrf(obj.createNestedObject(F("radioNrf")));
|
||||
getSerial(obj.createNestedObject(F("serial")));
|
||||
getStaticIp(obj.createNestedObject(F("static_ip")));
|
||||
|
@ -935,13 +950,14 @@ class RestApi {
|
|||
|
||||
#if !defined(ETHERNET)
|
||||
void getNetworks(JsonObject obj) {
|
||||
mApp->getAvailNetworks(obj);
|
||||
}
|
||||
void getWifiIp(JsonObject obj) {
|
||||
obj[F("ip")] = mApp->getStationIp();
|
||||
obj[F("success")] = mApp->getAvailNetworks(obj);
|
||||
}
|
||||
#endif /* !defined(ETHERNET) */
|
||||
|
||||
void getIp(JsonObject obj) {
|
||||
obj[F("ip")] = mApp->getIp();
|
||||
}
|
||||
|
||||
void getLive(AsyncWebServerRequest *request, JsonObject obj) {
|
||||
getGeneric(request, obj.createNestedObject(F("generic")));
|
||||
obj[F("refresh")] = mConfig->inst.sendInterval;
|
||||
|
@ -1054,7 +1070,7 @@ class RestApi {
|
|||
|
||||
accepted = iv->setDevControlRequest(ActivePowerContr);
|
||||
if(accepted)
|
||||
mApp->triggerTickSend();
|
||||
mApp->triggerTickSend(iv->id);
|
||||
} else if(F("dev") == jsonIn[F("cmd")]) {
|
||||
DPRINTLN(DBG_INFO, F("dev cmd"));
|
||||
iv->setDevCommand(jsonIn[F("val")].as<int>());
|
||||
|
@ -1075,11 +1091,6 @@ class RestApi {
|
|||
if(isProtected(jsonIn, jsonOut, clientIP))
|
||||
return false;
|
||||
|
||||
#if !defined(ETHERNET)
|
||||
if(F("scan_wifi") == jsonIn[F("cmd")])
|
||||
mApp->scanAvailNetworks();
|
||||
else
|
||||
#endif /* !defined(ETHERNET) */
|
||||
if(F("set_time") == jsonIn[F("cmd")])
|
||||
mApp->setTimestamp(jsonIn[F("val")]);
|
||||
else if(F("sync_ntp") == jsonIn[F("cmd")])
|
||||
|
@ -1093,9 +1104,19 @@ class RestApi {
|
|||
snprintf(mConfig->sys.stationSsid, SSID_LEN, "%s", jsonIn[F("ssid")].as<const char*>());
|
||||
snprintf(mConfig->sys.stationPwd, PWD_LEN, "%s", jsonIn[F("pwd")].as<const char*>());
|
||||
mApp->saveSettings(false); // without reboot
|
||||
mApp->setStopApAllowedMode(false);
|
||||
mApp->setupStation();
|
||||
}
|
||||
#else
|
||||
else if(F("save_eth") == jsonIn[F("cmd")]) {
|
||||
mConfig->sys.eth.enabled = jsonIn[F("en")].as<bool>();
|
||||
mConfig->sys.eth.pinCs = jsonIn[F("cs")].as<uint8_t>();
|
||||
mConfig->sys.eth.pinSclk = jsonIn[F("sclk")].as<uint8_t>();
|
||||
mConfig->sys.eth.pinMiso = jsonIn[F("miso")].as<uint8_t>();
|
||||
mConfig->sys.eth.pinMosi = jsonIn[F("mosi")].as<uint8_t>();
|
||||
mConfig->sys.eth.pinIrq = jsonIn[F("irq")].as<uint8_t>();
|
||||
mConfig->sys.eth.pinRst = jsonIn[F("reset")].as<uint8_t>();
|
||||
mApp->saveSettings(true);
|
||||
}
|
||||
#endif /* !defined(ETHERNET */
|
||||
else if(F("save_iv") == jsonIn[F("cmd")]) {
|
||||
Inverter<> *iv = mSys->getInverterByPos(jsonIn[F("id")], false);
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
return [
|
||||
mlNs("polyline", {stroke: "url(#gLine)", fill: "none", points: pts}),
|
||||
mlNs("polyline", {stroke: "none", fill: "url(#gFill)", points: pts2}),
|
||||
mlNs("text", {x: i*.8, y: 10}, "{#MAX_DAY}: " + String(obj.max) + "W"),
|
||||
mlNs("text", {x: i*.8, y: 10}, "{#MAXIMUM}: " + String(obj.max) + "W"),
|
||||
mlNs("text", {x: i*.8, y: 25}, "{#LAST_VALUE}: " + String(lastVal) + "W")
|
||||
]
|
||||
}
|
||||
|
@ -150,11 +150,11 @@
|
|||
parseRssi(obj.generic)
|
||||
window.setInterval("getAjax('/api/powerHistory', parsePowerHistory)", obj.refresh * 1000)
|
||||
setTimeout(() => {
|
||||
window.setInterval("getAjax('/api/powerHistoryDay', parsePowerHistoryDay)", refresh * 1000)
|
||||
window.setInterval("getAjax('/api/powerHistoryDay', parsePowerHistoryDay)", obj.refresh * 1000)
|
||||
}, 200)
|
||||
/*IF_ENABLE_HISTORY_YIELD_PER_DAY*/
|
||||
setTimeout(() => {
|
||||
window.setInterval("getAjax('/api/yieldDayHistory', parseYieldDayHistory)", refresh * 1000)
|
||||
window.setInterval("getAjax('/api/yieldDayHistory', parseYieldDayHistory)", obj.refresh * 1000)
|
||||
}, 400)
|
||||
/*ENDIF_ENABLE_HISTORY_YIELD_PER_DAY*/
|
||||
}
|
||||
|
|
|
@ -57,22 +57,9 @@
|
|||
<div class="col-12 col-sm-3 my-2">{#AP_PWD}</div>
|
||||
<div class="col-12 col-sm-9"><input type="text" name="ap_pwd" minlength="8" /></div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 col-sm-3 my-2">{#SEARCH_NETWORKS}</div>
|
||||
<div class="col-12 col-sm-9"><input type="button" name="scanbtn" id="scanbtn" class="btn" value="{#BTN_SCAN}" onclick="scan()"/></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2 mb-sm-3">
|
||||
<div class="col-12 col-sm-3 my-2">{#AVAIL_NETWORKS}</div>
|
||||
<div class="col-12 col-sm-9">
|
||||
<select name="networks" id="networks" onChange="selNet()">
|
||||
<option value="-1" selected disabled hidden>{#NETWORK_NOT_SCANNED}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2 mb-sm-3">
|
||||
<div class="col-12 col-sm-3 my-2">SSID</div>
|
||||
<div class="col-12 col-sm-9"><input type="text" name="ssid"/></div>
|
||||
<div class="col-12 col-sm-9"><input type="text" name="ssid"/><br/><a href="/wizard">{#SCAN_WIFI}</a></div>
|
||||
</div>
|
||||
<div class="row mb-2 mb-sm-3">
|
||||
<div class="col-12 col-sm-3">{#SSID_HIDDEN}</div>
|
||||
|
@ -247,7 +234,7 @@
|
|||
<p class="des">{#MQTT_NOTE}</p>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 col-sm-3 my-2">{#INTERVAL}</div>
|
||||
<div class="col-12 col-sm-9"><input type="number" name="mqttInterval" title="Invalid input" /></div>
|
||||
<div class="col-12 col-sm-9"><input tyCMT2300Ape="number" name="mqttInterval" title="Invalid input" /></div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 col-sm-3 my-2">Discovery Config (homeassistant)</div>
|
||||
|
@ -272,6 +259,10 @@
|
|||
<p class="des">{#RADIO} (CMT2300A)</p>
|
||||
<div id="cmt"></div>
|
||||
<!--ENDIF_ESP32-->
|
||||
<!--IF_ETHERNET-->
|
||||
<p class="des">Ethernet</p>
|
||||
<div id="eth"></div>
|
||||
<!--ENDIF_ETHERNET-->
|
||||
</fieldset>
|
||||
</div>
|
||||
<!--IF_PLUGIN_DISPLAY-->
|
||||
|
@ -625,12 +616,6 @@
|
|||
setTimeout(function() {getAjax('/api/index', apiCbNtp2)}, 2000)
|
||||
}
|
||||
|
||||
function scan() {
|
||||
var obj = {cmd: "scan_wifi", token: "*"}
|
||||
getAjax("/api/setup", apiCbWifi, "POST", JSON.stringify(obj));
|
||||
setTimeout(function() {getAjax('/api/setup/networks', listNetworks)}, 5000);
|
||||
}
|
||||
|
||||
function syncTime() {
|
||||
var obj = {cmd: "sync_ntp", token: "*"}
|
||||
getAjax("/api/setup", apiCbNtp, "POST", JSON.stringify(obj))
|
||||
|
@ -968,7 +953,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
function parsePinout(obj, type, system) {
|
||||
function parsePinout(obj) {
|
||||
var e = document.getElementById("pinout");
|
||||
/*IF_ESP32*/
|
||||
var pinList = esp32pins;
|
||||
|
@ -1009,7 +994,7 @@
|
|||
)
|
||||
}
|
||||
|
||||
function parseNrfRadio(obj, objPin, type, system) {
|
||||
function parseNrfRadio(obj, objPin) {
|
||||
var e = document.getElementById("rf24");
|
||||
var en = inp("nrfEnable", null, null, ["cb"], "nrfEnable", "checkbox");
|
||||
en.checked = obj["en"];
|
||||
|
@ -1036,11 +1021,11 @@
|
|||
])
|
||||
);
|
||||
|
||||
if ("ESP8266" == type) {
|
||||
pins = [['cs', 'pinCs'], ['ce', 'pinCe'], ['irq', 'pinIrq']];
|
||||
} else {
|
||||
pins = [['cs', 'pinCs'], ['ce', 'pinCe'], ['irq', 'pinIrq'], ['sclk', 'pinSclk'], ['mosi', 'pinMosi'], ['miso', 'pinMiso']];
|
||||
}
|
||||
/*IF_ESP32*/
|
||||
var pins = [['cs', 'pinCs'], ['ce', 'pinCe'], ['irq', 'pinIrq'], ['sclk', 'pinSclk'], ['mosi', 'pinMosi'], ['miso', 'pinMiso']];
|
||||
/*ELSE*/
|
||||
var pins = [['cs', 'pinCs'], ['ce', 'pinCe'], ['irq', 'pinIrq']];
|
||||
/*ENDIF_ESP32*/
|
||||
for(p of pins) {
|
||||
e.append(
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
|
@ -1054,7 +1039,7 @@
|
|||
}
|
||||
|
||||
/*IF_ESP32*/
|
||||
function parseCmtRadio(obj, type, system) {
|
||||
function parseCmtRadio(obj) {
|
||||
var e = document.getElementById("cmt");
|
||||
var en = inp("cmtEnable", null, null, ["cb"], "cmtEnable", "checkbox");
|
||||
var pinList = esp32pins;
|
||||
|
@ -1069,7 +1054,6 @@
|
|||
/*ENDIF_ESP32-C3*/
|
||||
|
||||
en.checked = obj["en"];
|
||||
|
||||
e.replaceChildren (
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
ml("div", {class: "col-8 col-sm-3 my-2"}, "{#CMT_ENABLE}"),
|
||||
|
@ -1096,6 +1080,42 @@
|
|||
}
|
||||
/*ENDIF_ESP32*/
|
||||
|
||||
/*IF_ETHERNET*/
|
||||
function parseEth(obj) {
|
||||
var e = document.getElementById("eth");
|
||||
var en = inp("ethEn", null, null, ["cb"], "ethEn", "checkbox");
|
||||
var pinList = esp32pins;
|
||||
/*IF_ESP32-S2*/
|
||||
pinList = esp32sXpins;
|
||||
/*ENDIF_ESP32-S2*/
|
||||
/*IF_ESP32-S3*/
|
||||
pinList = esp32sXpins;
|
||||
/*ENDIF_ESP32-S3*/
|
||||
/*IF_ESP32-C3*/
|
||||
pinList = esp32c3pins;
|
||||
/*ENDIF_ESP32-C3*/
|
||||
|
||||
en.checked = obj["en"];
|
||||
e.replaceChildren (
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
ml("div", {class: "col-8 col-sm-3 my-2"}, "{#ETH_ENABLE}"),
|
||||
ml("div", {class: "col-4 col-sm-9"}, en)
|
||||
])
|
||||
);
|
||||
pins = [['cs', 'ethCs'], ['sclk', 'ethSclk'], ['miso', 'ethMiso'], ['mosi', 'ethMosi'], ['irq', 'ethIrq'], ['reset', 'ethRst']];
|
||||
for(p of pins) {
|
||||
e.append(
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
ml("div", {class: "col-12 col-sm-3 my-2"}, p[0].toUpperCase()),
|
||||
ml("div", {class: "col-12 col-sm-9"},
|
||||
sel(p[1], pinList, obj[p[0]])
|
||||
)
|
||||
])
|
||||
);
|
||||
}
|
||||
}
|
||||
/*ENDIF_ETHERNET*/
|
||||
|
||||
function parseSerial(obj) {
|
||||
var e = document.getElementById("serialCb")
|
||||
var l = [["serEn", "show_live_data", "{#LOG_PRINT_INVERTER_DATA}"], ["serDbg", "debug", "{#LOG_SERIAL_DEBUG}"], ["priv", "priv", "{#LOG_PRIVACY_MODE}"], ["wholeTrace", "wholeTrace", "{#LOG_PRINT_TRACES}"], ["log2mqtt", "log2mqtt", "{#LOG_TO_MQTT}"]]
|
||||
|
@ -1442,10 +1462,10 @@
|
|||
modal("{#ZE_GROUP_EDIT_MODAL}: " + obj.id, html);
|
||||
// ser.dispatchEvent(new Event('change'));
|
||||
|
||||
// Inhalt f<EFBFBD>r pm_type aus config laden und in eine Funktion ausgliedern
|
||||
// Inhalt f?r pm_type aus config laden und in eine Funktion ausgliedern
|
||||
var e = document.getElementById("pm_type");
|
||||
selDelAllOpt(e);
|
||||
// TODO: <EFBFBD>bersetzen?
|
||||
// TODO: ?bersetzen?
|
||||
e.appendChild(opt("0", "---"));
|
||||
e.appendChild(opt("1", "Shelly"));
|
||||
e.appendChild(opt("2", "Tasmota"));
|
||||
|
@ -1482,7 +1502,7 @@
|
|||
for (var inv = 0; inv < maxInv; inv++) {
|
||||
var e = document.getElementById("invTarget"+inv);
|
||||
selDelAllOpt(e);
|
||||
// TODO: <EFBFBD>bersetzen?
|
||||
// TODO: ?bersetzen?
|
||||
e.appendChild(opt("-1", "---"));
|
||||
e.appendChild(opt("0", "Sum"));
|
||||
e.appendChild(opt("1", "L1"));
|
||||
|
@ -1719,13 +1739,15 @@
|
|||
parseMqtt(root["mqtt"]);
|
||||
parseNtp(root["ntp"]);
|
||||
parseSun(root["sun"]);
|
||||
parsePinout(root["pinout"], root["system"]["esp_type"], root["system"]);
|
||||
parseNrfRadio(root["radioNrf"], root["pinout"], root["system"]["esp_type"], root["system"]);
|
||||
parsePinout(root.pinout);
|
||||
parseNrfRadio(root["radioNrf"], root["pinout"]);
|
||||
|
||||
/*IF_ESP32*/
|
||||
parseCmtRadio(root["radioCmt"], root["system"]["esp_type"], root["system"]);
|
||||
parseCmtRadio(root.radioCmt);
|
||||
/*ENDIF_ESP32*/
|
||||
|
||||
/*IF_ETHERNET*/
|
||||
parseEth(root.eth)
|
||||
/*ENDIF_ETHERNET*/
|
||||
parseSerial(root["serial"]);
|
||||
/*IF_PLUGIN_DISPLAY*/
|
||||
parseDisplay(root["display"], root["system"]["esp_type"], root["system"]);
|
||||
|
@ -1748,13 +1770,6 @@
|
|||
s.appendChild(opt("-1", "{#NO_NETWORK_FOUND}"));
|
||||
}
|
||||
|
||||
function selNet() {
|
||||
var s = document.getElementById("networks");
|
||||
var e = document.getElementsByName("ssid")[0];
|
||||
if(-1 != s.value)
|
||||
e.value = s.value;
|
||||
}
|
||||
|
||||
getAjax("/api/setup", parse);
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -15,6 +15,165 @@
|
|||
var found = false;
|
||||
var c = document.getElementById("con");
|
||||
|
||||
/*IF_ESP32*/
|
||||
var pinList = [
|
||||
[255, "{#PIN_OFF}"],
|
||||
[0, "GPIO0"],
|
||||
[1, "TX (GPIO1)"],
|
||||
[2, "GPIO2 (LED)"],
|
||||
[3, "RX (GPIO3)"],
|
||||
[4, "GPIO4"],
|
||||
[5, "GPIO5"],
|
||||
[12, "GPIO12 (HSPI MISO)"],
|
||||
[13, "GPIO13 (HSPI MOSI)"],
|
||||
[14, "GPIO14 (HSPI SCLK)"],
|
||||
[15, "GPIO15"],
|
||||
[16, "GPIO16"],
|
||||
[17, "GPIO17"],
|
||||
[18, "GPIO18 (VSPI SCLK)"],
|
||||
[19, "GPIO19 (VSPI MISO)"],
|
||||
[21, "GPIO21 (SDA)"],
|
||||
[22, "GPIO22 (SCL)"],
|
||||
[23, "GPIO23 (VSPI MOSI)"],
|
||||
[25, "GPIO25"],
|
||||
[26, "GPIO26"],
|
||||
[27, "GPIO27"],
|
||||
[32, "GPIO32"],
|
||||
[33, "GPIO33"],
|
||||
[34, "GPIO34 ({#PIN_INPUT_ONLY})"],
|
||||
[35, "GPIO35 ({#PIN_INPUT_ONLY})"],
|
||||
[36, "VP (GPIO36, {#PIN_INPUT_ONLY})"],
|
||||
[39, "VN (GPIO39, {#PIN_INPUT_ONLY})"]
|
||||
];
|
||||
/*IF_ESP32-S2*/
|
||||
pinList = [
|
||||
[255, "off / default"],
|
||||
[0, "GPIO0 ({#PIN_DONT_USE} - BOOT)"],
|
||||
[1, "GPIO1"],
|
||||
[2, "GPIO2"],
|
||||
[3, "GPIO3"],
|
||||
[4, "GPIO4"],
|
||||
[5, "GPIO5"],
|
||||
[6, "GPIO6"],
|
||||
[7, "GPIO7"],
|
||||
[8, "GPIO8"],
|
||||
[9, "GPIO9"],
|
||||
[10, "GPIO10"],
|
||||
[11, "GPIO11"],
|
||||
[12, "GPIO12"],
|
||||
[13, "GPIO13"],
|
||||
[14, "GPIO14"],
|
||||
[15, "GPIO15"],
|
||||
[16, "GPIO16"],
|
||||
[17, "GPIO17"],
|
||||
[18, "GPIO18"],
|
||||
[19, "GPIO19 ({#PIN_DONT_USE} - USB-)"],
|
||||
[20, "GPIO20 ({#PIN_DONT_USE} - USB+)"],
|
||||
[21, "GPIO21"],
|
||||
[26, "GPIO26 (PSRAM - {#PIN_NOT_AVAIL})"],
|
||||
[27, "GPIO27 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[28, "GPIO28 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[29, "GPIO29 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[30, "GPIO30 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[31, "GPIO31 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[32, "GPIO32 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[33, "GPIO33 (not exposed on S3-WROOM modules)"],
|
||||
[34, "GPIO34 (not exposed on S3-WROOM modules)"],
|
||||
[35, "GPIO35"],
|
||||
[36, "GPIO36"],
|
||||
[37, "GPIO37"],
|
||||
[38, "GPIO38"],
|
||||
[39, "GPIO39"],
|
||||
[40, "GPIO40"],
|
||||
[41, "GPIO41"],
|
||||
[42, "GPIO42"],
|
||||
[43, "GPIO43"],
|
||||
[44, "GPIO44"],
|
||||
[45, "GPIO45 ({#PIN_DONT_USE} - STRAPPING PIN)"],
|
||||
[46, "GPIO46 ({#PIN_DONT_USE} - STRAPPING PIN)"],
|
||||
[47, "GPIO47"],
|
||||
[48, "GPIO48"],
|
||||
];
|
||||
/*ENDIF_ESP32-S2*/
|
||||
/*IF_ESP32-S3*/
|
||||
pinList = [
|
||||
[255, "off / default"],
|
||||
[0, "GPIO0 ({#PIN_DONT_USE} - BOOT)"],
|
||||
[1, "GPIO1"],
|
||||
[2, "GPIO2"],
|
||||
[3, "GPIO3"],
|
||||
[4, "GPIO4"],
|
||||
[5, "GPIO5"],
|
||||
[6, "GPIO6"],
|
||||
[7, "GPIO7"],
|
||||
[8, "GPIO8"],
|
||||
[9, "GPIO9"],
|
||||
[10, "GPIO10"],
|
||||
[11, "GPIO11"],
|
||||
[12, "GPIO12"],
|
||||
[13, "GPIO13"],
|
||||
[14, "GPIO14"],
|
||||
[15, "GPIO15"],
|
||||
[16, "GPIO16"],
|
||||
[17, "GPIO17"],
|
||||
[18, "GPIO18"],
|
||||
[19, "GPIO19 ({#PIN_DONT_USE} - USB-)"],
|
||||
[20, "GPIO20 ({#PIN_DONT_USE} - USB+)"],
|
||||
[21, "GPIO21"],
|
||||
[26, "GPIO26 (PSRAM - {#PIN_NOT_AVAIL})"],
|
||||
[27, "GPIO27 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[28, "GPIO28 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[29, "GPIO29 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[30, "GPIO30 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[31, "GPIO31 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[32, "GPIO32 (FLASH - {#PIN_NOT_AVAIL})"],
|
||||
[33, "GPIO33 (not exposed on S3-WROOM modules)"],
|
||||
[34, "GPIO34 (not exposed on S3-WROOM modules)"],
|
||||
[35, "GPIO35"],
|
||||
[36, "GPIO36"],
|
||||
[37, "GPIO37"],
|
||||
[38, "GPIO38"],
|
||||
[39, "GPIO39"],
|
||||
[40, "GPIO40"],
|
||||
[41, "GPIO41"],
|
||||
[42, "GPIO42"],
|
||||
[43, "GPIO43"],
|
||||
[44, "GPIO44"],
|
||||
[45, "GPIO45 ({#PIN_DONT_USE} - STRAPPING PIN)"],
|
||||
[46, "GPIO46 ({#PIN_DONT_USE} - STRAPPING PIN)"],
|
||||
[47, "GPIO47"],
|
||||
[48, "GPIO48"],
|
||||
];
|
||||
/*ENDIF_ESP32-S3*/
|
||||
/*IF_ESP32-C3*/
|
||||
pinList = [
|
||||
[255, "off / default"],
|
||||
[0, "GPIO0"],
|
||||
[1, "GPIO1"],
|
||||
[2, "GPIO2"],
|
||||
[3, "GPIO3"],
|
||||
[4, "GPIO4"],
|
||||
[5, "GPIO5"],
|
||||
[6, "GPIO6"],
|
||||
[7, "GPIO7"],
|
||||
[8, "GPIO8"],
|
||||
[9, "GPIO9"],
|
||||
[10, "GPIO10"],
|
||||
[11, "GPIO11"],
|
||||
[12, "GPIO12 (PSRAM/FLASH)"],
|
||||
[13, "GPIO13 (PSRAM/FLASH)"],
|
||||
[14, "GPIO14 (PSRAM/FLASH)"],
|
||||
[15, "GPIO15 (PSRAM/FLASH)"],
|
||||
[16, "GPIO16 (PSRAM/FLASH)"],
|
||||
[17, "GPIO17 (PSRAM/FLASH)"],
|
||||
[18, "GPIO18 ({#PIN_DONT_USE} - USB-)"],
|
||||
[19, "GPIO19 ({#PIN_DONT_USE} - USB+)"],
|
||||
[20, "GPIO20 (RX)"],
|
||||
[21, "GPIO21 (TX)"],
|
||||
];
|
||||
/*ENDIF_ESP32-C3*/
|
||||
/*ENDIF_ESP32*/
|
||||
|
||||
function sect(e1, e2) {
|
||||
return ml("div", {class: "row"}, [
|
||||
ml("div", {class: "col-12"}, ml("p", {}, e1)),
|
||||
|
@ -22,7 +181,36 @@
|
|||
])
|
||||
}
|
||||
|
||||
function wifi() {
|
||||
/*IF_ETHERNET*/
|
||||
var pins = ['cs', 'sclk', 'miso', 'mosi', 'irq', 'reset']
|
||||
function step1(obj) {
|
||||
console.log(obj)
|
||||
lst = []
|
||||
for(p of pins) {
|
||||
lst.push(
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
ml("div", {class: "col-12 col-sm-3 my-2"}, p.toUpperCase()),
|
||||
ml("div", {class: "col-12 col-sm-9"},
|
||||
sel(p, pinList, obj[p])
|
||||
)
|
||||
])
|
||||
)
|
||||
}
|
||||
let en = inp("en", null, null, ["cb"], "en", "checkbox");
|
||||
en.checked = obj["en"];
|
||||
|
||||
return sect("{#NETWORK_SETUP}", [
|
||||
ml("div", {class: "row mb-3"}, [
|
||||
ml("div", {class: "col-8"}, "{#ETH_ENABLE}"),
|
||||
ml("div", {class: "col-4"}, en)
|
||||
]),
|
||||
...lst,
|
||||
ml("div", {class: "row my-4"}, ml("div", {class: "col a-r"}, ml("input", {type: "button", class:"btn", value: "{#BTN_REBOOT}", onclick: () => {saveEth()}}, null))),
|
||||
ml("div", {class: "row mt-5"}, ml("div", {class: "col a-c"}, ml("a", {href: "http://192.168.4.1/"}, "{#STOP_WIZARD}")))
|
||||
])
|
||||
}
|
||||
/*ELSE*/
|
||||
function step1() {
|
||||
return ml("div", {}, [
|
||||
ml("div", {class: "row my-5"}, ml("div", {class: "col"}, ml("span", {class: "fs-1"}, "{#WELCOME}"))),
|
||||
ml("div", {class: "row"}, ml("div", {class: "col"}, ml("span", {class: "fs-5"}, "{#NETWORK_SETUP}"))),
|
||||
|
@ -30,9 +218,10 @@
|
|||
sect("{#WIFI_MANUAL}", ml("input", {id: "man", type: "text"})),
|
||||
sect("{#WIFI_PASSWORD}", ml("input", {id: "pwd", type: "password"})),
|
||||
ml("div", {class: "row my-4"}, ml("div", {class: "col a-r"}, ml("input", {type: "button", class:"btn", value: "{#BTN_NEXT}", onclick: () => {saveWifi()}}, null))),
|
||||
ml("div", {class: "row mt-5"}, ml("div", {class: "col a-c"}, ml("a", {href: "http://192.168.4.1/"}, "{#STOP_WIZARD}")))
|
||||
ml("div", {class: "row mt-5"}, ml("div", {class: "col a-c"}, ml("a", {href: "http://192.168.4.1/index"}, "{#STOP_WIZARD}")))
|
||||
])
|
||||
}
|
||||
/*ENDIF_ETHERNET*/
|
||||
|
||||
function checkWifi() {
|
||||
c.replaceChildren(
|
||||
|
@ -40,9 +229,9 @@
|
|||
ml("div", {class: "row"}, ml("div", {class: "col"}, ml("span", {class: "fs-5"}, "{#TEST_CONNECTION}"))),
|
||||
sect("{#TRY_TO_CONNECT}", ml("span", {id: "state"}, "{#CONNECTING}")),
|
||||
ml("div", {class: "row my-4"}, ml("div", {class: "col a-r"}, ml("input", {type: "button", class:"btn hide", id: "btn", value: "{#BTN_FINISH}", onclick: () => {redirect()}}, null))),
|
||||
ml("div", {class: "row mt-5"}, ml("div", {class: "col a-c"}, ml("a", {href: "http://192.168.4.1/"}, "{#STOP_WIZARD}")))
|
||||
ml("div", {class: "row mt-5"}, ml("div", {class: "col a-c"}, ml("a", {href: "http://192.168.4.1/index"}, "{#STOP_WIZARD}")))
|
||||
)
|
||||
v = setInterval(() => {getAjax('/api/setup/getip', printIp)}, 2500);
|
||||
v = setInterval(() => {getAjax('/api/setup/getip', printIp)}, 300);
|
||||
}
|
||||
|
||||
function redirect() {
|
||||
|
@ -57,14 +246,33 @@
|
|||
}
|
||||
}
|
||||
|
||||
/*IF_ETHERNET*/
|
||||
function saveEth() {
|
||||
let o = {
|
||||
cmd: "save_eth",
|
||||
en: document.getElementsByName("en")[0].checked
|
||||
}
|
||||
for(p of pins) {
|
||||
o[p] = document.getElementsByName(p)[0].value
|
||||
}
|
||||
getAjax("/api/setup", ((o) => {}), "POST", JSON.stringify(o));
|
||||
}
|
||||
/*ELSE*/
|
||||
function saveWifi() {
|
||||
var ssid = document.getElementById("net").value;
|
||||
if(-1 == ssid)
|
||||
ssid = document.getElementById("man").value;
|
||||
getAjax("/api/setup", ((o) => {if(!o.error) checkWifi()}), "POST", JSON.stringify({cmd: "save_wifi", ssid: ssid, pwd: document.getElementById("pwd").value}));
|
||||
}
|
||||
/*ENDIF_ETHERNET*/
|
||||
|
||||
/*IF_ETHERNET*/
|
||||
getAjax("/api/setup", ((o) => c.append(step1(o.eth))));
|
||||
/*ELSE*/
|
||||
function nets(obj) {
|
||||
if(!obj.success)
|
||||
return;
|
||||
|
||||
var e = document.getElementById("net");
|
||||
if(obj.networks.length > 0) {
|
||||
var a = []
|
||||
|
@ -75,13 +283,13 @@
|
|||
}
|
||||
e.replaceChildren(...a)
|
||||
}
|
||||
getAjax("/api/setup", ((o) => {}), "POST", JSON.stringify({cmd: "scan_wifi"}));
|
||||
}
|
||||
|
||||
getAjax("/api/setup", ((o) => {}), "POST", JSON.stringify({cmd: "scan_wifi"}));
|
||||
c.append(wifi())
|
||||
c.append(step1())
|
||||
getAjax('/api/setup/networks', nets)
|
||||
v = setInterval(() => {getAjax('/api/setup/networks', nets)}, 1000)
|
||||
/*ENDIF_ETHERNET*/
|
||||
|
||||
v = setInterval(() => {getAjax('/api/setup/networks', nets)}, 2500);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -81,12 +81,17 @@
|
|||
{
|
||||
"token": "BTN_NEXT",
|
||||
"en": "next >>",
|
||||
"de": "prüfen >>"
|
||||
"de": "prüfen >>"
|
||||
},
|
||||
{
|
||||
"token": "BTN_REBOOT",
|
||||
"en": "reboot >>",
|
||||
"de": "Ahoy neustarten >>"
|
||||
},
|
||||
{
|
||||
"token": "TEST_CONNECTION",
|
||||
"en": "Test Connection",
|
||||
"de": "Verbindung wird überprüft"
|
||||
"de": "Verbindung wird überprüft"
|
||||
},
|
||||
{
|
||||
"token": "TRY_TO_CONNECT",
|
||||
|
@ -112,6 +117,36 @@
|
|||
"token": "NUM_NETWORKS_FOUND",
|
||||
"en": "Network(s) found",
|
||||
"de": "Netzwerk(e) gefunden"
|
||||
},
|
||||
{
|
||||
"token": "PIN_OFF",
|
||||
"en": "off / default",
|
||||
"de": "aus / Standard"
|
||||
},
|
||||
{
|
||||
"token": "PIN_NO_IRQ",
|
||||
"en": "no IRQ!",
|
||||
"de": "kein Interrupt!"
|
||||
},
|
||||
{
|
||||
"token": "PIN_INPUT_ONLY",
|
||||
"en": "in only",
|
||||
"de": "nur Eingang"
|
||||
},
|
||||
{
|
||||
"token": "PIN_DONT_USE",
|
||||
"en": "DONT USE",
|
||||
"de": "nicht benutzen"
|
||||
},
|
||||
{
|
||||
"token": "PIN_NOT_AVAIL",
|
||||
"en": "not available",
|
||||
"de": "nicht verfügbar"
|
||||
},
|
||||
{
|
||||
"token": "ETH_ENABLE",
|
||||
"en": "Ethernet enable",
|
||||
"de": "Ethernet aktivieren"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -224,19 +259,9 @@
|
|||
"de": "Netzwerke suchen"
|
||||
},
|
||||
{
|
||||
"token": "BTN_SCAN",
|
||||
"en": "scan",
|
||||
"de": "Suche starten"
|
||||
},
|
||||
{
|
||||
"token": "AVAIL_NETWORKS",
|
||||
"en": "Avail Networks",
|
||||
"de": "Verfügbare Netzwerke"
|
||||
},
|
||||
{
|
||||
"token": "NETWORK_NOT_SCANNED",
|
||||
"en": "not scanned",
|
||||
"de": "nicht gesucht"
|
||||
"token": "SCAN_WIFI",
|
||||
"en": "scan for WiFi networks",
|
||||
"de": "nach WiFi Netzwerken suchen"
|
||||
},
|
||||
{
|
||||
"token": "SSID_HIDDEN",
|
||||
|
@ -596,7 +621,7 @@
|
|||
{
|
||||
"token": "BTN_INV_ADD",
|
||||
"en": "add Inverter",
|
||||
"de": "Wechselrichter hinzufuegen"
|
||||
"de": "Wechselrichter hinzuf\u00FCgen"
|
||||
},
|
||||
{
|
||||
"token": "INV_INPUT",
|
||||
|
@ -621,7 +646,7 @@
|
|||
{
|
||||
"token": "TAB_INPUTS",
|
||||
"en": "Inputs",
|
||||
"de": "Eingaenge"
|
||||
"de": "Eingänge"
|
||||
},
|
||||
{
|
||||
"token": "TAB_RADIO",
|
||||
|
@ -723,6 +748,11 @@
|
|||
"en": "CMT2300A radio enable",
|
||||
"de": "CMT2300A Funkmodul aktivieren"
|
||||
},
|
||||
{
|
||||
"token": "ETH_ENABLE",
|
||||
"en": "Ethernet enable",
|
||||
"de": "Ethernet aktivieren"
|
||||
},
|
||||
{
|
||||
"token": "DISP_NONE",
|
||||
"en": "None",
|
||||
|
@ -1769,9 +1799,9 @@
|
|||
"de": "Gesamtertrag pro Tag"
|
||||
},
|
||||
{
|
||||
"token": "MAX_DAY",
|
||||
"en": "Maximum day",
|
||||
"de": "Tagesmaximum"
|
||||
"token": "MAXIMUM",
|
||||
"en": "Maximum",
|
||||
"de": "Maximum"
|
||||
},
|
||||
{
|
||||
"token": "LAST_VALUE",
|
||||
|
|
|
@ -40,14 +40,19 @@
|
|||
//#define WEB_SERIAL_BUF_SIZE 2048
|
||||
#define WEB_SERIAL_BUF_SIZE 3072
|
||||
|
||||
const char* const pinArgNames[] = {"pinCs", "pinCe", "pinIrq", "pinSclk", "pinMosi", "pinMiso", "pinLed0", "pinLed1", "pinLed2", "pinLedHighActive", "pinLedLum", "pinCmtSclk", "pinSdio", "pinCsb", "pinFcsb", "pinGpio3"};
|
||||
const char* const pinArgNames[] = {
|
||||
"pinCs", "pinCe", "pinIrq", "pinSclk", "pinMosi", "pinMiso", "pinLed0",
|
||||
"pinLed1", "pinLed2", "pinLedHighActive", "pinLedLum", "pinCmtSclk",
|
||||
"pinSdio", "pinCsb", "pinFcsb", "pinGpio3"
|
||||
#if defined (ETHERNET)
|
||||
, "ethCs", "ethSclk", "ethMiso", "ethMosi", "ethIrq", "ethRst"
|
||||
#endif
|
||||
};
|
||||
|
||||
template <class HMSYSTEM>
|
||||
class Web {
|
||||
public:
|
||||
Web(void) : mWeb(80), mEvts("/events") {
|
||||
memset(mSerialBuf, 0, WEB_SERIAL_BUF_SIZE);
|
||||
}
|
||||
Web(void) : mWeb(80), mEvts("/events") {}
|
||||
|
||||
void setup(IApp *app, HMSYSTEM *sys, settings_t *config) {
|
||||
mApp = app;
|
||||
|
@ -55,7 +60,8 @@ class Web {
|
|||
mConfig = config;
|
||||
|
||||
DPRINTLN(DBG_VERBOSE, F("app::setup-on"));
|
||||
mWeb.on("/", HTTP_GET, std::bind(&Web::onIndex, this, std::placeholders::_1));
|
||||
mWeb.on("/", HTTP_GET, std::bind(&Web::onIndex, this, std::placeholders::_1, true));
|
||||
mWeb.on("/index", HTTP_GET, std::bind(&Web::onIndex, this, std::placeholders::_1, false));
|
||||
mWeb.on("/login", HTTP_ANY, std::bind(&Web::onLogin, this, std::placeholders::_1));
|
||||
mWeb.on("/logout", HTTP_GET, std::bind(&Web::onLogout, this, std::placeholders::_1));
|
||||
mWeb.on("/colors.css", HTTP_GET, std::bind(&Web::onColor, this, std::placeholders::_1));
|
||||
|
@ -105,11 +111,17 @@ class Web {
|
|||
|
||||
void tickSecond() {
|
||||
if (mSerialClientConnnected) {
|
||||
if(nullptr == mSerialBuf)
|
||||
return;
|
||||
|
||||
if (mSerialBufFill > 0) {
|
||||
mEvts.send(mSerialBuf, "serial", millis());
|
||||
memset(mSerialBuf, 0, WEB_SERIAL_BUF_SIZE);
|
||||
mSerialBufFill = 0;
|
||||
}
|
||||
} else if(nullptr != mSerialBuf) {
|
||||
delete[] mSerialBuf;
|
||||
mSerialBuf = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -181,6 +193,9 @@ class Web {
|
|||
if (!mSerialClientConnnected)
|
||||
return;
|
||||
|
||||
if(nullptr == mSerialBuf)
|
||||
return;
|
||||
|
||||
msg.replace("\r\n", "<rn>");
|
||||
if (mSerialAddTime) {
|
||||
if ((13 + mSerialBufFill) < WEB_SERIAL_BUF_SIZE) {
|
||||
|
@ -297,6 +312,10 @@ class Web {
|
|||
void onConnect(AsyncEventSourceClient *client) {
|
||||
DPRINTLN(DBG_VERBOSE, "onConnect");
|
||||
|
||||
if(nullptr == mSerialBuf) {
|
||||
mSerialBuf = new char[WEB_SERIAL_BUF_SIZE];
|
||||
memset(mSerialBuf, 0, WEB_SERIAL_BUF_SIZE);
|
||||
}
|
||||
mSerialClientConnnected = true;
|
||||
|
||||
if (client->lastId())
|
||||
|
@ -305,7 +324,11 @@ class Web {
|
|||
client->send("hello!", NULL, millis(), 1000);
|
||||
}
|
||||
|
||||
void onIndex(AsyncWebServerRequest *request) {
|
||||
void onIndex(AsyncWebServerRequest *request, bool checkAp = true) {
|
||||
if(mApp->isApActive() && checkAp) {
|
||||
onWizard(request);
|
||||
return;
|
||||
}
|
||||
getPage(request, PROT_MASK_INDEX, index_html, index_html_len);
|
||||
}
|
||||
|
||||
|
@ -388,6 +411,7 @@ class Web {
|
|||
|
||||
void showNotFound(AsyncWebServerRequest *request) {
|
||||
checkProtection(request);
|
||||
//DBGPRINTLN(request->url());
|
||||
request->redirect("/wizard");
|
||||
}
|
||||
|
||||
|
@ -433,10 +457,10 @@ class Web {
|
|||
request->arg("ssid").toCharArray(mConfig->sys.stationSsid, SSID_LEN);
|
||||
if (request->arg("pwd") != "{PWD}")
|
||||
request->arg("pwd").toCharArray(mConfig->sys.stationPwd, PWD_LEN);
|
||||
if (request->arg("ap_pwd") != "")
|
||||
request->arg("ap_pwd").toCharArray(mConfig->sys.apPwd, PWD_LEN);
|
||||
mConfig->sys.isHidden = (request->arg("hidd") == "on");
|
||||
#endif /* !defined(ETHERNET) */
|
||||
if (request->arg("ap_pwd") != "")
|
||||
request->arg("ap_pwd").toCharArray(mConfig->sys.apPwd, PWD_LEN);
|
||||
if (request->arg("device") != "")
|
||||
request->arg("device").toCharArray(mConfig->sys.deviceName, DEVNAME_LEN);
|
||||
mConfig->sys.darkMode = (request->arg("darkMode") == "on");
|
||||
|
@ -486,7 +510,12 @@ class Web {
|
|||
|
||||
|
||||
// pinout
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
#if defined(ETHERNET)
|
||||
for (uint8_t i = 0; i < 22; i++)
|
||||
#else
|
||||
for (uint8_t i = 0; i < 16; i++)
|
||||
#endif
|
||||
{
|
||||
uint8_t pin = request->arg(String(pinArgNames[i])).toInt();
|
||||
switch(i) {
|
||||
case 0: mConfig->nrf.pinCs = ((pin != 0xff) ? pin : DEF_NRF_CS_PIN); break;
|
||||
|
@ -505,11 +534,23 @@ class Web {
|
|||
case 13: mConfig->cmt.pinCsb = pin; break;
|
||||
case 14: mConfig->cmt.pinFcsb = pin; break;
|
||||
case 15: mConfig->cmt.pinIrq = pin; break;
|
||||
|
||||
#if defined(ETHERNET)
|
||||
case 16: mConfig->sys.eth.pinCs = pin; break;
|
||||
case 17: mConfig->sys.eth.pinSclk = pin; break;
|
||||
case 18: mConfig->sys.eth.pinMiso = pin; break;
|
||||
case 19: mConfig->sys.eth.pinMosi = pin; break;
|
||||
case 20: mConfig->sys.eth.pinIrq = pin; break;
|
||||
case 21: mConfig->sys.eth.pinRst = pin; break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
mConfig->nrf.enabled = (request->arg("nrfEnable") == "on");
|
||||
mConfig->cmt.enabled = (request->arg("cmtEnable") == "on");
|
||||
#if defined(ETHERNET)
|
||||
mConfig->sys.eth.enabled = (request->arg("ethEn") == "on");
|
||||
#endif
|
||||
|
||||
// ntp
|
||||
if (request->arg("ntpAddr") != "") {
|
||||
|
@ -953,7 +994,7 @@ class Web {
|
|||
settings_t *mConfig = nullptr;
|
||||
|
||||
bool mSerialAddTime = true;
|
||||
char mSerialBuf[WEB_SERIAL_BUF_SIZE];
|
||||
char *mSerialBuf = nullptr;
|
||||
uint16_t mSerialBufFill = 0;
|
||||
bool mSerialClientConnnected = false;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue