|
@ -274,7 +274,7 @@ |
|
|
<!--ENDIF_ESP32--> |
|
|
<!--ENDIF_ESP32--> |
|
|
</fieldset> |
|
|
</fieldset> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<!--IF_PLUGIN_DISPLAY--> |
|
|
<button type="button" class="s_collapsible">{#DISPLAY_CONFIG}</button> |
|
|
<button type="button" class="s_collapsible">{#DISPLAY_CONFIG}</button> |
|
|
<div class="s_content"> |
|
|
<div class="s_content"> |
|
|
<fieldset class="mb-4"> |
|
|
<fieldset class="mb-4"> |
|
@ -303,6 +303,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
</fieldset> |
|
|
</fieldset> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<!--ENDIF_PLUGIN_DISPLAY--> |
|
|
|
|
|
|
|
|
<!-- Plugin ZeroExport --> |
|
|
<!-- Plugin ZeroExport --> |
|
|
<button type="button" class="s_collapsible" id="zeroExport_button">{#ZE}</button> |
|
|
<button type="button" class="s_collapsible" id="zeroExport_button">{#ZE}</button> |
|
@ -358,6 +359,7 @@ |
|
|
var maxInv = 0; |
|
|
var maxInv = 0; |
|
|
var ts = 0; |
|
|
var ts = 0; |
|
|
|
|
|
|
|
|
|
|
|
/*IF_ESP8266*/ |
|
|
var esp8266pins = [ |
|
|
var esp8266pins = [ |
|
|
[255, "{#PIN_OFF}"], |
|
|
[255, "{#PIN_OFF}"], |
|
|
[0, "D3 (GPIO0)"], |
|
|
[0, "D3 (GPIO0)"], |
|
@ -378,6 +380,7 @@ |
|
|
[15, "D8 (GPIO15)"], |
|
|
[15, "D8 (GPIO15)"], |
|
|
[16, "D0 (GPIO16 - {#PIN_NO_IRQ})"] |
|
|
[16, "D0 (GPIO16 - {#PIN_NO_IRQ})"] |
|
|
]; |
|
|
]; |
|
|
|
|
|
/*ENDIF_ESP8266*/ |
|
|
|
|
|
|
|
|
/*IF_ESP32*/ |
|
|
/*IF_ESP32*/ |
|
|
var esp32pins = [ |
|
|
var esp32pins = [ |
|
@ -409,6 +412,7 @@ |
|
|
[36, "VP (GPIO36, {#PIN_INPUT_ONLY})"], |
|
|
[36, "VP (GPIO36, {#PIN_INPUT_ONLY})"], |
|
|
[39, "VN (GPIO39, {#PIN_INPUT_ONLY})"] |
|
|
[39, "VN (GPIO39, {#PIN_INPUT_ONLY})"] |
|
|
]; |
|
|
]; |
|
|
|
|
|
/*IF_ESP32-S2*/ |
|
|
var esp32sXpins = [ |
|
|
var esp32sXpins = [ |
|
|
[255, "off / default"], |
|
|
[255, "off / default"], |
|
|
[0, "GPIO0 ({#PIN_DONT_USE} - BOOT)"], |
|
|
[0, "GPIO0 ({#PIN_DONT_USE} - BOOT)"], |
|
@ -457,6 +461,58 @@ |
|
|
[47, "GPIO47"], |
|
|
[47, "GPIO47"], |
|
|
[48, "GPIO48"], |
|
|
[48, "GPIO48"], |
|
|
]; |
|
|
]; |
|
|
|
|
|
/*ENDIF_ESP32-S2*/ |
|
|
|
|
|
/*IF_ESP32-S3*/ |
|
|
|
|
|
var esp32sXpins = [ |
|
|
|
|
|
[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*/ |
|
|
var esp32c3pins = [ |
|
|
var esp32c3pins = [ |
|
|
[255, "off / default"], |
|
|
[255, "off / default"], |
|
|
[0, "GPIO0"], |
|
|
[0, "GPIO0"], |
|
@ -482,6 +538,7 @@ |
|
|
[20, "GPIO20 (RX)"], |
|
|
[20, "GPIO20 (RX)"], |
|
|
[21, "GPIO21 (TX)"], |
|
|
[21, "GPIO21 (TX)"], |
|
|
]; |
|
|
]; |
|
|
|
|
|
/*ENDIF_ESP32-C3*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
var nrfPa = [ |
|
|
var nrfPa = [ |
|
|
[0, "MIN ({#PIN_RECOMMENDED})"], |
|
|
[0, "MIN ({#PIN_RECOMMENDED})"], |
|
@ -907,11 +964,19 @@ |
|
|
|
|
|
|
|
|
function parsePinout(obj, type, system) { |
|
|
function parsePinout(obj, type, system) { |
|
|
var e = document.getElementById("pinout"); |
|
|
var e = document.getElementById("pinout"); |
|
|
var pinList = esp8266pins; |
|
|
|
|
|
/*IF_ESP32*/ |
|
|
/*IF_ESP32*/ |
|
|
var pinList = esp32pins; |
|
|
var pinList = esp32pins; |
|
|
if ("ESP32-S3" == system.chip_model || "ESP32-S2" == system.chip_model) pinList = esp32sXpins; |
|
|
/*IF_ESP32-S2*/ |
|
|
else if("ESP32-C3" == system["chip_model"]) pinList = esp32c3pins; |
|
|
pinList = esp32sXpins; |
|
|
|
|
|
/*ENDIF_ESP32-S2*/ |
|
|
|
|
|
/*IF_ESP32-S3*/ |
|
|
|
|
|
pinList = esp32sXpins; |
|
|
|
|
|
/*ENDIF_ESP32-S3*/ |
|
|
|
|
|
/*IF_ESP32-C3*/ |
|
|
|
|
|
pinList = esp32c3pins; |
|
|
|
|
|
/*ENDIF_ESP32-C3*/ |
|
|
|
|
|
/*ELSE*/ |
|
|
|
|
|
var pinList = esp8266pins; |
|
|
/*ENDIF_ESP32*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
pins = [['led0', 'pinLed0', '{#LED_AT_LEAST_ONE_PRODUCING}'], ['led1', 'pinLed1', '{#LED_MQTT_CONNECTED}'], ['led2', 'pinLed2', '{#LED_NIGHT_TIME}']]; |
|
|
pins = [['led0', 'pinLed0', '{#LED_AT_LEAST_ONE_PRODUCING}'], ['led1', 'pinLed1', '{#LED_MQTT_CONNECTED}'], ['led2', 'pinLed2', '{#LED_NIGHT_TIME}']]; |
|
|
for(p of pins) { |
|
|
for(p of pins) { |
|
@ -943,11 +1008,19 @@ |
|
|
var en = inp("nrfEnable", null, null, ["cb"], "nrfEnable", "checkbox"); |
|
|
var en = inp("nrfEnable", null, null, ["cb"], "nrfEnable", "checkbox"); |
|
|
en.checked = obj["en"]; |
|
|
en.checked = obj["en"]; |
|
|
|
|
|
|
|
|
var pinList = esp8266pins; |
|
|
|
|
|
/*IF_ESP32*/ |
|
|
/*IF_ESP32*/ |
|
|
var pinList = esp32pins; |
|
|
var pinList = esp32pins; |
|
|
if ("ESP32-S3" == system.chip_model || "ESP32-S2" == system.chip_model) pinList = esp32sXpins; |
|
|
/*IF_ESP32-S2*/ |
|
|
else if("ESP32-C3" == system["chip_model"]) pinList = esp32c3pins; |
|
|
pinList = esp32sXpins; |
|
|
|
|
|
/*ENDIF_ESP32-S2*/ |
|
|
|
|
|
/*IF_ESP32-S3*/ |
|
|
|
|
|
pinList = esp32sXpins; |
|
|
|
|
|
/*ENDIF_ESP32-S3*/ |
|
|
|
|
|
/*IF_ESP32-C3*/ |
|
|
|
|
|
pinList = esp32c3pins; |
|
|
|
|
|
/*ENDIF_ESP32-C3*/ |
|
|
|
|
|
/*ELSE*/ |
|
|
|
|
|
var pinList = esp8266pins; |
|
|
/*ENDIF_ESP32*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
|
|
|
|
|
|
e.replaceChildren ( |
|
|
e.replaceChildren ( |
|
@ -979,8 +1052,15 @@ |
|
|
var e = document.getElementById("cmt"); |
|
|
var e = document.getElementById("cmt"); |
|
|
var en = inp("cmtEnable", null, null, ["cb"], "cmtEnable", "checkbox"); |
|
|
var en = inp("cmtEnable", null, null, ["cb"], "cmtEnable", "checkbox"); |
|
|
var pinList = esp32pins; |
|
|
var pinList = esp32pins; |
|
|
if ("ESP32-S3" == system.chip_model || "ESP32-S2" == system.chip_model) pinList = esp32sXpins; |
|
|
/*IF_ESP32-S2*/ |
|
|
else if("ESP32-C3" == system["chip_model"]) pinList = esp32c3pins; |
|
|
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"]; |
|
|
en.checked = obj["en"]; |
|
|
|
|
|
|
|
@ -1025,12 +1105,20 @@ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*IF_PLUGIN_DISPLAY*/ |
|
|
function parseDisplay(obj, type, system) { |
|
|
function parseDisplay(obj, type, system) { |
|
|
var pinList = esp8266pins; |
|
|
var pinList = esp8266pins; |
|
|
/*IF_ESP32*/ |
|
|
/*IF_ESP32*/ |
|
|
var pinList = esp32pins; |
|
|
var pinList = esp32pins; |
|
|
if ("ESP32-S3" == system.chip_model || "ESP32-S2" == system.chip_model) pinList = esp32sXpins; |
|
|
/*IF_ESP32-S2*/ |
|
|
else if("ESP32-C3" == system["chip_model"]) pinList = esp32c3pins; |
|
|
pinList = esp32sXpins; |
|
|
|
|
|
/*ENDIF_ESP32-S2*/ |
|
|
|
|
|
/*IF_ESP32-S3*/ |
|
|
|
|
|
pinList = esp32sXpins; |
|
|
|
|
|
/*ENDIF_ESP32-S3*/ |
|
|
|
|
|
/*IF_ESP32-C3*/ |
|
|
|
|
|
pinList = esp32c3pins; |
|
|
|
|
|
/*ENDIF_ESP32-C3*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
|
|
|
|
|
|
for(var i of ["disp_pwr"]) |
|
|
for(var i of ["disp_pwr"]) |
|
@ -1166,6 +1254,7 @@ |
|
|
setHide("screenSaver", !optionsMap.get(dispType)[2]); |
|
|
setHide("screenSaver", !optionsMap.get(dispType)[2]); |
|
|
setHide("pirPin", !(optionsMap.get(dispType)[2] && (screenSaver==2))); // show pir pin only for motion screensaver |
|
|
setHide("pirPin", !(optionsMap.get(dispType)[2] && (screenSaver==2))); // show pir pin only for motion screensaver |
|
|
} |
|
|
} |
|
|
|
|
|
/*ENDIF_PLUGIN_DISPLAY*/ |
|
|
|
|
|
|
|
|
function tick() { |
|
|
function tick() { |
|
|
document.getElementById("date").innerHTML = toIsoDateStr((new Date((++ts) * 1000))); |
|
|
document.getElementById("date").innerHTML = toIsoDateStr((new Date((++ts) * 1000))); |
|
@ -1248,7 +1337,7 @@ |
|
|
), |
|
|
), |
|
|
divRow("{#ZE_GROUP_TAB_POWERMETER_URL}", [ |
|
|
divRow("{#ZE_GROUP_TAB_POWERMETER_URL}", [ |
|
|
ml("input", {name: "pm_url", class: "text", type: "text", value: obj.pm_url, maxlength: "100"}, null), |
|
|
ml("input", {name: "pm_url", class: "text", type: "text", value: obj.pm_url, maxlength: "100"}, null), |
|
|
// TODO: Hilfstexte -> übersetzen mit lang.json |
|
|
// TODO: Hilfstexte -> übersetzen mit lang.json |
|
|
ml("p", {}, "(3em) - http://IP/status"), |
|
|
ml("p", {}, "(3em) - http://IP/status"), |
|
|
ml("p", {}, "(pro3em) - http://IP/rpc/Shelly.GetStatus"), |
|
|
ml("p", {}, "(pro3em) - http://IP/rpc/Shelly.GetStatus"), |
|
|
ml("p", {}, "(plus1pm) - http://IP/rpc/Shelly.GetStatus"), |
|
|
ml("p", {}, "(plus1pm) - http://IP/rpc/Shelly.GetStatus"), |
|
@ -1259,7 +1348,7 @@ |
|
|
]), |
|
|
]), |
|
|
divRow("{#ZE_GROUP_TAB_POWERMETER_JSONPATH}", [ |
|
|
divRow("{#ZE_GROUP_TAB_POWERMETER_JSONPATH}", [ |
|
|
ml("input", {name: "pm_jsonPath", class: "text", type: "text", value: obj.pm_jsonPath}, null), |
|
|
ml("input", {name: "pm_jsonPath", class: "text", type: "text", value: obj.pm_jsonPath}, null), |
|
|
// TODO: Hilfstexte -> übersetzen mit lang.json |
|
|
// TODO: Hilfstexte -> übersetzen mit lang.json |
|
|
// ml("p", {}, "Only for HICHI needed!"), |
|
|
// ml("p", {}, "Only for HICHI needed!"), |
|
|
]), |
|
|
]), |
|
|
divRow("{#ZE_GROUP_TAB_POWERMETER_USER}", |
|
|
divRow("{#ZE_GROUP_TAB_POWERMETER_USER}", |
|
@ -1296,10 +1385,10 @@ |
|
|
modal("{#ZE_GROUP_EDIT_MODAL}: " + obj.id, html); |
|
|
modal("{#ZE_GROUP_EDIT_MODAL}: " + obj.id, html); |
|
|
// ser.dispatchEvent(new Event('change')); |
|
|
// ser.dispatchEvent(new Event('change')); |
|
|
|
|
|
|
|
|
// Inhalt fü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"); |
|
|
var e = document.getElementById("pm_type"); |
|
|
selDelAllOpt(e); |
|
|
selDelAllOpt(e); |
|
|
// TODO: übersetzen? |
|
|
// TODO: übersetzen? |
|
|
e.appendChild(opt("0", "---")); |
|
|
e.appendChild(opt("0", "---")); |
|
|
e.appendChild(opt("1", "Shelly")); |
|
|
e.appendChild(opt("1", "Shelly")); |
|
|
e.appendChild(opt("2", "Tasmota")); |
|
|
e.appendChild(opt("2", "Tasmota")); |
|
@ -1336,7 +1425,7 @@ |
|
|
for (var inv = 0; inv < maxInv; inv++) { |
|
|
for (var inv = 0; inv < maxInv; inv++) { |
|
|
var e = document.getElementById("invTarget"+inv); |
|
|
var e = document.getElementById("invTarget"+inv); |
|
|
selDelAllOpt(e); |
|
|
selDelAllOpt(e); |
|
|
// TODO: übersetzen? |
|
|
// TODO: übersetzen? |
|
|
e.appendChild(opt("-1", "---")); |
|
|
e.appendChild(opt("-1", "---")); |
|
|
e.appendChild(opt("0", "Sum")); |
|
|
e.appendChild(opt("0", "Sum")); |
|
|
e.appendChild(opt("1", "L1")); |
|
|
e.appendChild(opt("1", "L1")); |
|
@ -1425,7 +1514,7 @@ |
|
|
modal("{#ZE_GROUP_DELETE_MODAL}: " + obj.name, html); |
|
|
modal("{#ZE_GROUP_DELETE_MODAL}: " + obj.name, html); |
|
|
|
|
|
|
|
|
function del() { |
|
|
function del() { |
|
|
// TODO: Es wäre gut, wenn die Defaultwerte nicht hier sondern wie in der settings.h gesetzt würden. |
|
|
// TODO: Es wäre gut, wenn die Defaultwerte nicht hier sondern wie in der settings.h gesetzt würden. |
|
|
var o = new Object(); |
|
|
var o = new Object(); |
|
|
o.cmd = "ze_save_group"; |
|
|
o.cmd = "ze_save_group"; |
|
|
// General |
|
|
// General |
|
@ -1515,7 +1604,7 @@ |
|
|
])); |
|
|
])); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// TODO: Das Add sollte anders / überhaupt gelöst werden |
|
|
// TODO: Das Add sollte anders / überhaupt gelöst werden |
|
|
var add = new Object(); |
|
|
var add = new Object(); |
|
|
add.enabled = true; |
|
|
add.enabled = true; |
|
|
add.id = obj.groups.length; |
|
|
add.id = obj.groups.length; |
|
@ -1546,7 +1635,7 @@ |
|
|
// e.textContent += " (only for ESP32-S3 available)"; |
|
|
// e.textContent += " (only for ESP32-S3 available)"; |
|
|
// e.disabled = true; |
|
|
// e.disabled = true; |
|
|
// element.classList.add("disabled"); |
|
|
// element.classList.add("disabled"); |
|
|
// TODO: übersetzen? / Überflüssig? Das Modul ist so immer sichtbar und zeigt was es braucht. |
|
|
// TODO: übersetzen? / Überflüssig? Das Modul ist so immer sichtbar und zeigt was es braucht. |
|
|
/*ENDIF_PLUGIN_ZEROEXPORT*/ |
|
|
/*ENDIF_PLUGIN_ZEROEXPORT*/ |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
@ -1567,7 +1656,9 @@ |
|
|
/*ENDIF_ESP32*/ |
|
|
/*ENDIF_ESP32*/ |
|
|
|
|
|
|
|
|
parseSerial(root["serial"]); |
|
|
parseSerial(root["serial"]); |
|
|
|
|
|
/*IF_PLUGIN_DISPLAY*/ |
|
|
parseDisplay(root["display"], root["system"]["esp_type"], root["system"]); |
|
|
parseDisplay(root["display"], root["system"]["esp_type"], root["system"]); |
|
|
|
|
|
/*ENDIF_PLUGIN_DISPLAY*/ |
|
|
parseZeroExport(root["zeroExport"], root["system"]["esp_type"]); |
|
|
parseZeroExport(root["zeroExport"], root["system"]["esp_type"]); |
|
|
|
|
|
|
|
|
getAjax("/api/inverter/list", parseIv); |
|
|
getAjax("/api/inverter/list", parseIv); |
|
|