diff --git a/CHANGELOG.md b/CHANGELOG.md index 002b208ac..e5b9cf643 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - Berry expose `esp_http_server` for websockets (#23206) - AlpineJS 2.8.2 - optional for now (#23259) - Support for XMODEM over serial and telnet if enabled with `#define USE_XYZMODEM` +- PZEM_AC device address in JSON and GUI (#23268) ### Breaking Changed - HASPmota added `y2_min` and `y2_max` to control the second series of `chart` (#23287) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a3d8edd7f..24675a949 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -121,6 +121,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm - Support for HLK-LD2402 24GHz smart wave motion sensor [#23133](https://github.com/arendst/Tasmota/issues/23133) - Support for Telnet server using command `Telnet <0|1|port>[,]` if enabled with `#define USE_TELNET` - Support for XMODEM over serial and telnet if enabled with `#define USE_XYZMODEM` +- PZEM_AC device address in JSON and GUI [#23268](https://github.com/arendst/Tasmota/issues/23268) - Allow acl in mqtt when client certificate is in use with `#define USE_MQTT_CLIENT_CERT` [#22998](https://github.com/arendst/Tasmota/issues/22998) - AlpineJS 2.8.2 - optional for now [#23259](https://github.com/arendst/Tasmota/issues/23259) - Berry experimental driver for AXP2101 for M5Core2v1.1 [#23039](https://github.com/arendst/Tasmota/issues/23039) diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index 4429f9532..a99ae590b 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -1040,6 +1040,8 @@ const char HTTP_SNS_IMPORT_REACTIVE[] PROGMEM = "{s}" D_IMPORT_REACTIVE const char HTTP_SNS_EXPORT_REACTIVE[] PROGMEM = "{s}" D_EXPORT_REACTIVE "{m}%s " D_UNIT_KWARH "{e}"; const char HTTP_SNS_TOTAL_REACTIVE[] PROGMEM = "{s}" D_TOTAL_REACTIVE "{m}%s " D_UNIT_KWARH "{e}"; const char HTTP_SNS_PHASE_ANGLE[] PROGMEM = "{s}" D_PHASE_ANGLE "{m}%s " D_UNIT_ANGLE "{e}"; +const char HTTP_SNS_ADDRESS[] PROGMEM = "{s}" D_ADDRESS "{m}%s" "{e}"; + #endif // USE_WEBSERVER #endif // _I18N_H_ diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index b9ce56bb7..bb1d22d8d 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Luggehalte" #define D_AP "AP" // Access Point diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 8bcf0ed11..8c62d2273 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Качество на въздуха" #define D_AP "Точка за достъп" // Access Point diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index 61501b131..0d318eda4 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Qualitat Aire" #define D_AP "PA" // Access Point diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index ef7f3ef19..bf36d123d 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Kvalita vzduchu" #define D_AP "AP" // Access Point diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index f00f11fcf..ec0bc5a77 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs․ Feuchtigkeit" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Luftqualität" #define D_AP "AP" // Access Point diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 0521ed281..e2d2a39b8 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Διαχειριστής" #define D_AIR_QUALITY "Ποιότητα αέρα" #define D_AP "AP" // Access Point diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index ede817f25..d25a4a0be 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Air quality" #define D_AP "AP" // Access Point diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index d59695f99..1ca645658 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Calidad del Aire" #define D_AP "AP" // Access Point diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 51529ee98..60903fe25 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Qualité de l'Air" #define D_AP "AP" // Access Point diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index e381ce01f..a5191befc 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Luchtkwaliteit" #define D_AP "AP" // Access Point diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 7fee7c024..620585068 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "מנהל" #define D_AIR_QUALITY "איכות אוויר" #define D_AP "AP" // Access Point diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 6a27e71f6..1115853cc 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Levegőminőség" #define D_AP "AP" // Access Point diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index c0de6a46c..b9a124b23 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Umidità ass" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Qualità dell'aria" #define D_AP "AP" // Access Point diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 27204a1d5..2f5db90cb 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "공기질" #define D_AP "AP" // Access Point diff --git a/tasmota/language/lt_LT.h b/tasmota/language/lt_LT.h index ffb2488ff..bb578be17 100644 --- a/tasmota/language/lt_LT.h +++ b/tasmota/language/lt_LT.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Absoliuti drėgmė" +#define D_ADDRESS "Address" #define D_ADMIN "Administratoriaus" #define D_AIR_QUALITY "Oro kokybė" #define D_AP "AP" // Access Point diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 6e3fcb7f9..a4fdfc5da 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Lucht kwaliteit" #define D_AP "AP" // Access Point diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 0bba643ab..ab2506cf4 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Wilgotność" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Jakość powietrza" #define D_AP "AP" // Access Point diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 68002b940..2db2b5695 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Qualidade do ar" #define D_AP "Ponto de acesso" // Ponto de Acesso diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 9b0800b13..59ef7da01 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Qualidade do Ar" #define D_AP "AP" // Ponto de Acesso diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index fcd19e50e..0f946c546 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Calitatea aerului" #define D_AP "AP" // Access Point diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index df1fa52c8..da42fe800 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -53,6 +53,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Качество воздуха" #define D_AP "AP" // Access Point diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 3a62082de..a215a0326 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Kvalita vzduchu" #define D_AP "AP" // Access Point diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index f21ed90d1..31874de29 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Luftkvalitet" #define D_AP "AP" // Access Point diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 6795e5e84..4c00320cc 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "Hava Kalitesi" #define D_AP "AP" // Access Point diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index f1c49089d..e72a0d319 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Адміністратор" #define D_AIR_QUALITY "Якість повітря" #define D_AP "Точка доступу" // Access Point diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 968cb05b4..420c773d5 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Quản trị" #define D_AIR_QUALITY "Chất lượng không khí" #define D_AP "Mạng wifi" // Access Point diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 20523c5d5..93d454a54 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "空气质量" #define D_AP "AP" // Access Point diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 0d96ca41f..3523085b5 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -52,6 +52,7 @@ // Common #define D_ABSOLUTE_HUMIDITY "Abs Humidity" +#define D_ADDRESS "Address" #define D_ADMIN "Admin" #define D_AIR_QUALITY "空氣品質" #define D_AP "存取點" // Access Point diff --git a/tasmota/tasmota_xnrg_energy/xnrg_05_pzem_ac.ino b/tasmota/tasmota_xnrg_energy/xnrg_05_pzem_ac.ino index e3ef964fd..13fac440f 100644 --- a/tasmota/tasmota_xnrg_energy/xnrg_05_pzem_ac.ino +++ b/tasmota/tasmota_xnrg_energy/xnrg_05_pzem_ac.ino @@ -44,6 +44,7 @@ struct PZEMAC { uint8_t send_retry = 0; uint8_t phase = 0; uint8_t address = 0; + uint8_t addr[ENERGY_MAX_PHASES]; uint8_t address_step = ADDR_IDLE; } PzemAc; @@ -68,6 +69,7 @@ void PzemAcEverySecond(void) } else { Energy->data_valid[PzemAc.phase] = 0; if (10 == registers) { + PzemAc.addr[PzemAc.phase] = PZEM_AC_DEVICE_ADDRESS + PzemAc.phase; // 0 1 2 3 4 5 6 7 8 9 = ModBus register // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 = Buffer index @@ -147,6 +149,20 @@ bool PzemAcCommand(void) return serviced; } +void PzemAcShow(bool json) { + float address[ENERGY_MAX_PHASES]; + for (uint32_t i = 0; i < ENERGY_MAX_PHASES; i++) { + address[i] = PzemAc.addr[i]; + } + if (json) { + ResponseAppend_P(PSTR(",\"Address\":%s"), EnergyFmt(address, 0)); +#ifdef USE_WEBSERVER + } else { + WSContentSend_PD(HTTP_SNS_ADDRESS, WebEnergyFmt(address, 0, 2)); +#endif // USE_WEBSERVER + } +} + /*********************************************************************************************\ * Interface \*********************************************************************************************/ @@ -159,6 +175,14 @@ bool Xnrg05(uint32_t function) case FUNC_ENERGY_EVERY_SECOND: if (TasmotaGlobal.uptime > 4) { PzemAcEverySecond(); } // Fix start up issue #5875 break; + case FUNC_JSON_APPEND: + PzemAcShow(1); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_COL_SENSOR: + PzemAcShow(0); + break; +#endif // USE_WEBSERVER case FUNC_COMMAND: result = PzemAcCommand(); break;