Add PZEM_AC device address in JSON and GUI (#23268)

This commit is contained in:
Theo Arends 2025-04-14 15:24:02 +02:00
parent 3baa110f9d
commit 117e503aaa
32 changed files with 56 additions and 0 deletions

View File

@ -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)

View File

@ -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>[,<IP filter>]` 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)

View File

@ -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_

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;