diff --git a/BUILDS.md b/BUILDS.md index bd2b96049..db4a723ca 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -230,6 +230,7 @@ Note: the `minimal` variant is not listed as it shouldn't be used outside of the | USE_TCP_BRIDGE | - | - / - | - | - | - | - | zbbridge / zbbrdgpro | | USE_HC8 | - | - / - | - | - | - | - | | USE_PIPSOLAR | - | - / - | - | - | - | - | +| USE_WOOLIIS | - | - / - | - | - | - | - | | | | | | | | | | USE_NRF24 | - | - / - | - | - | - | - | | USE_MIBLE | - | - / - | - | - | - | - | diff --git a/CHANGELOG.md b/CHANGELOG.md index aec0d2afe..26c90e478 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to this project will be documented in this file. - Berry cam module and img class (#21743) - Skip MQTT response if command is prefixed with underscore (#21740) - Skip MQTT response if commands are executed prefixed with ``Backlog2`` (no delay) or ``Backlog3`` (#21740) +- Support for Wooliis Hall Effect Coulometer or Battery capacity monitor (#21732) ### Breaking Changed diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 160da8eac..19f868fd9 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -124,6 +124,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm - Support for QMP6988 temperature and pressure sensor - Support for Sonoff WTS01 temperature sensor using SerialBridge in ``SSerialMode 3`` - Support for Sonoff POWCT Ring [#21131](https://github.com/arendst/Tasmota/issues/21131) +- Support for Wooliis Hall Effect Coulometer or Battery capacity monitor [#21732](https://github.com/arendst/Tasmota/issues/21732) - Skip MQTT response if command is prefixed with underscore [#21740](https://github.com/arendst/Tasmota/issues/21740) - Skip MQTT response if commands are executed prefixed with ``Backlog2`` (no delay) or ``Backlog3`` [#21740](https://github.com/arendst/Tasmota/issues/21740) - Extend command ``SetOption147 1`` to disable publish of IRReceived MQTT messages [#21574](https://github.com/arendst/Tasmota/issues/21574) diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index d0ed3e128..08f3628ce 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -46,7 +46,9 @@ #define D_JSON_BSSID "BSSId" #define D_JSON_BUTTON "Button" #define D_JSON_BUILDDATETIME "BuildDateTime" +#define D_JSON_CAPACITY "Capacity" #define D_JSON_CHANNEL "Channel" +#define D_JSON_CHARGING "Charging" #define D_JSON_CO2 "CarbonDioxide" #define D_JSON_CODINGRATE4 "CodingRate4" #define D_JSON_COMMAND "Command" diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 500f1f430..9418defc2 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 3856e5d88..d417e5277 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index 31bcd6b7c..884ec2801 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index ba9d81016..f37b34d11 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 8274d77b4..376b76d11 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Aufladen" #define D_CAPACITY "Kapazität" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 226a46170..e1acea42e 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 9a3fedc45..5cee6cabb 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -1272,6 +1272,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 1a1bef25e..d6e684e6f 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Cargando" #define D_CAPACITY "Capacidad" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index f0d757644..0cb251777 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -1272,6 +1272,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "En charge" #define D_CAPACITY "Capacité" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 24c9e5d16..895aa3c2e 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index a9575056b..08dc58b3b 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index cd88f5cb1..fb80a10dd 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -1274,6 +1274,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 2a3ea03ef..7d99745ad 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -1272,6 +1272,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar - RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "In carica" #define D_CAPACITY "Capacità" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index e1b0c4dff..3df859d14 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index ac0922c17..16e6019e4 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 15bce353a..43778efe0 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 770c668c9..77575b807 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 972e107e5..875c2f0ca 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 96c5fabda..bc9193511 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 5b803c344..348b1ae93 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -1272,6 +1272,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 742906602..22614f5d7 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 9c5583e23..84ef0df3b 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 23b50706d..d3e74b550 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 50a17d552..07c836441 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 69d5e821e..56847d382 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index b99a96c83..7cc247d77 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 86ed3e233..340b18f1b 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -1271,6 +1271,8 @@ #define D_SENSOR_PIPSOLAR_RX "Pipsolar RX" // xsns_115_wooliis.ino +#define D_IMPORT "Import" +#define D_EXPORT "Export" #define D_CHARGING "Charging" #define D_CAPACITY "Capacity" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 60efbee49..9a825f403 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -882,6 +882,7 @@ //#define USE_GM861 // Add support for GM861 1D and 2D Bar Code Reader (+1k3 code) // #define GM861_DECODE_AIM // Decode AIM-id (+0k3 code) // #define GM861_HEARTBEAT // Enable heartbeat (+0k2 code) +//#define USE_WOOLIIS // Add support for Wooliis Hall Effect Coulometer or Battery capacity monitor (+1k6 code) // -- Power monitoring sensors -------------------- #define USE_ENERGY_SENSOR // Add support for Energy Monitors (+14k code) diff --git a/tasmota/tasmota_xsns_sensor/xsns_115_wooliis.ino b/tasmota/tasmota_xsns_sensor/xsns_115_wooliis.ino index 2d6444be8..a3890d177 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_115_wooliis.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_115_wooliis.ino @@ -37,6 +37,7 @@ * * magic % Ah V A Wh_in Wh_out status ck * b55b0101 64 03e8 0088 001d 00032b 0002b6 0000a8 6b + * 0 1 2 3 4 5 6 7 8 910 111213 141516 171819 20 * * And decoded as: * - Charge = 100 % @@ -50,14 +51,9 @@ * Hardware Serial will be selected if GPIO3 = [Wooliis RX] \*********************************************************************************************/ -#define D_WOOLIIS "Wooliis" - #define XSNS_115 115 -#define D_IMPORT "Import" -#define D_EXPORT "Export" -#define D_JSON_CAPACITY "Capacity" -#define D_JSON_CHARGING "Charging" +#define D_WOOLIIS "Wooliis" #include @@ -71,7 +67,6 @@ typedef struct wooliis_data_t { float energy_out; uint8_t status; uint8_t valid = 0; - uint8_t ready = 0; uint8_t charge_percent; } wooliis_data_t; @@ -79,7 +74,7 @@ wooliis_data_t *Wooliis = nullptr; /*********************************************************************************************/ -void WooliisReadData() // process the data sent by Wooliis battery capacity monitors +void WooliisReadData() // process the data sent by Wooliis battery capacity monitors every second { while (WooliisSerial->available() && WooliisSerial->peek() != 0xb5) { WooliisSerial->read(); @@ -90,9 +85,8 @@ void WooliisReadData() // process the data sent by Wooliis battery capacity moni uint8_t buffer[21]; WooliisSerial->readBytes(buffer, 21); if (buffer[0] != 0xb5 && buffer[1] != 0x5b && buffer[2] == 0x01 && buffer[3] == 0x01) { - AddLog(LOG_LEVEL_DEBUG, PSTR("WLS: Flushing serial")); + AddLog(LOG_LEVEL_DEBUG, PSTR("WLS: Flush %21_H"), buffer); WooliisSerial->flush(); // Out of sync or wrong sensor connected - AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, 21); return; } @@ -106,8 +100,7 @@ void WooliisReadData() // process the data sent by Wooliis battery capacity moni return; } - AddLog(LOG_LEVEL_DEBUG, PSTR("WLS: message received correctly!")); - AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, 21); + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("WLS: Rcvd %21_H"), buffer); Wooliis->charge_percent = buffer[4]; Wooliis->remaining_capacity = 0.1f * ((uint16_t)buffer[5]<<8 | buffer[6]); @@ -118,16 +111,6 @@ void WooliisReadData() // process the data sent by Wooliis battery capacity moni Wooliis->status = buffer[19]; Wooliis->valid = 1; - - return; -} - -/*********************************************************************************************/ - -void WooliisSecond(void) // Every second -{ - if (Wooliis->ready) - WooliisReadData(); } /*********************************************************************************************/ @@ -140,35 +123,34 @@ void WooliisInit(void) { WooliisSerial->flush(); // Clear serial buffer Wooliis = (wooliis_data_t*)calloc(sizeof(wooliis_data_t), 1); if (nullptr == Wooliis) { return; } - Wooliis->ready = 1; AddLog(LOG_LEVEL_DEBUG, PSTR("WLS: Serial ready")); } } } #ifdef USE_WEBSERVER -const char HTTP_SNS_WOOLIIS_BCP[] = "{s}%s " D_BATTERY_CHARGE "{m}%d " D_UNIT_PERCENT "{e}"; -const char HTTP_SNS_WOOLIIS_CAP[] = "{s}%s " D_CAPACITY "{m}%*_f " D_UNIT_CHARGE "{e}"; -const char HTTP_SNS_WOOLIIS_CHG[] = "{s}%s " D_CHARGING "{m}%s{e}"; -const char HTTP_SNS_WOOLIIS_VOL[] = "{s}%s " D_VOLTAGE "{m}%*_f " D_UNIT_VOLT "{e}"; -const char HTTP_SNS_WOOLIIS_CUR[] = "{s}%s " D_CURRENT "{m}%*_f " D_UNIT_AMPERE "{e}"; -const char HTTP_SNS_WOOLIIS_POW[] = "{s}%s " D_POWERUSAGE "{m}%*_f " D_UNIT_WATT "{e}"; -const char HTTP_SNS_WOOLIIS_IMP[] = "{s}%s " D_IMPORT "{m}%*_f " D_UNIT_WATTHOUR "{e}"; -const char HTTP_SNS_WOOLIIS_EXP[] = "{s}%s " D_EXPORT "{m}%*_f " D_UNIT_WATTHOUR "{e}"; +const char HTTP_SNS_WOOLIIS_BCP[] = "{s}" D_BATTERY " " D_BATTERY_CHARGE "{m}%d " D_UNIT_PERCENT "{e}"; +const char HTTP_SNS_WOOLIIS_CAP[] = "{s}" D_BATTERY " " D_CAPACITY "{m}%*_f " D_UNIT_CHARGE "{e}"; +const char HTTP_SNS_WOOLIIS_CHG[] = "{s}" D_BATTERY " " D_CHARGING "{m}%s{e}"; +const char HTTP_SNS_WOOLIIS_VOL[] = "{s}" D_BATTERY " " D_VOLTAGE "{m}%*_f " D_UNIT_VOLT "{e}"; +const char HTTP_SNS_WOOLIIS_CUR[] = "{s}" D_BATTERY " " D_CURRENT "{m}%*_f " D_UNIT_AMPERE "{e}"; +const char HTTP_SNS_WOOLIIS_POW[] = "{s}" D_BATTERY " " D_POWERUSAGE "{m}%*_f " D_UNIT_WATT "{e}"; +const char HTTP_SNS_WOOLIIS_IMP[] = "{s}" D_BATTERY " " D_IMPORT "{m}%*_f " D_UNIT_WATTHOUR "{e}"; +const char HTTP_SNS_WOOLIIS_EXP[] = "{s}" D_BATTERY " " D_EXPORT "{m}%*_f " D_UNIT_WATTHOUR "{e}"; #endif // USE_WEBSERVER void WooliisShow(bool json) { if (Wooliis->valid) { float power = Wooliis->voltage*Wooliis->current; if (json) { - ResponseAppend_P(PSTR(",\"%s\":{"), D_WOOLIIS); - ResponseAppend_P(PSTR("\"%s\":%*_f,"), D_JSON_CAPACITY, Settings->flag2.energy_resolution, &Wooliis->remaining_capacity); - ResponseAppend_P(PSTR("\"%s\":%d,"), D_JSON_CHARGING, (Wooliis->status ? 1 : 0)); - ResponseAppend_P(PSTR("\"%s\":%*_f,"), D_JSON_VOLTAGE, Settings->flag2.voltage_resolution, &Wooliis->voltage); - ResponseAppend_P(PSTR("\"%s\":%*_f,"), D_JSON_CURRENT, Settings->flag2.current_resolution, &Wooliis->current); - ResponseAppend_P(PSTR("\"%s\":%*_f,"), D_JSON_POWERUSAGE, Settings->flag2.wattage_resolution, &power); - ResponseAppend_P(PSTR("\"%s\":%*_f,"), D_JSON_IMPORT, Settings->flag2.energy_resolution, &Wooliis->energy_in); - ResponseAppend_P(PSTR("\"%s\":%*_f"), D_JSON_EXPORT, Settings->flag2.energy_resolution, &Wooliis->energy_out); + ResponseAppend_P(PSTR(",\"" D_WOOLIIS "\":{")); + ResponseAppend_P(PSTR("\"" D_JSON_CAPACITY "\":%*_f,"), Settings->flag2.energy_resolution, &Wooliis->remaining_capacity); + ResponseAppend_P(PSTR("\"" D_JSON_CHARGING "\":%d,"), (Wooliis->status ? 1 : 0)); + ResponseAppend_P(PSTR("\"" D_JSON_VOLTAGE "\":%*_f,"), Settings->flag2.voltage_resolution, &Wooliis->voltage); + ResponseAppend_P(PSTR("\"" D_JSON_CURRENT "\":%*_f,"), Settings->flag2.current_resolution, &Wooliis->current); + ResponseAppend_P(PSTR("\"" D_JSON_POWERUSAGE "\":%*_f,"), Settings->flag2.wattage_resolution, &power); + ResponseAppend_P(PSTR("\"" D_JSON_IMPORT "\":%*_f,"), Settings->flag2.energy_resolution, &Wooliis->energy_in); + ResponseAppend_P(PSTR("\"" D_JSON_EXPORT "\":%*_f"), Settings->flag2.energy_resolution, &Wooliis->energy_out); ResponseJsonEnd(); #ifdef USE_DOMOTICZ if (0 == TasmotaGlobal.tele_period) { @@ -183,14 +165,14 @@ void WooliisShow(bool json) { } // if json #ifdef USE_WEBSERVER else { - WSContentSend_PD(HTTP_SNS_WOOLIIS_BCP, D_BATTERY, Wooliis->charge_percent); - WSContentSend_PD(HTTP_SNS_WOOLIIS_CAP, D_BATTERY, Settings->flag2.energy_resolution, &Wooliis->remaining_capacity); - WSContentSend_PD(HTTP_SNS_WOOLIIS_CHG, D_BATTERY, (Wooliis->status ? D_TRUE : D_FALSE)); - WSContentSend_PD(HTTP_SNS_WOOLIIS_VOL, D_BATTERY, Settings->flag2.voltage_resolution, &Wooliis->voltage); - WSContentSend_PD(HTTP_SNS_WOOLIIS_CUR, D_BATTERY, Settings->flag2.current_resolution, &Wooliis->current); - WSContentSend_PD(HTTP_SNS_WOOLIIS_POW, D_BATTERY, Settings->flag2.wattage_resolution, &power); - WSContentSend_PD(HTTP_SNS_WOOLIIS_IMP, D_BATTERY, Settings->flag2.energy_resolution, &Wooliis->energy_in); - WSContentSend_PD(HTTP_SNS_WOOLIIS_EXP, D_BATTERY, Settings->flag2.energy_resolution, &Wooliis->energy_out); + WSContentSend_PD(HTTP_SNS_WOOLIIS_BCP, Wooliis->charge_percent); + WSContentSend_PD(HTTP_SNS_WOOLIIS_CAP, Settings->flag2.energy_resolution, &Wooliis->remaining_capacity); + WSContentSend_PD(HTTP_SNS_WOOLIIS_CHG, (Wooliis->status ? D_TRUE : D_FALSE)); + WSContentSend_PD(HTTP_SNS_WOOLIIS_VOL, Settings->flag2.voltage_resolution, &Wooliis->voltage); + WSContentSend_PD(HTTP_SNS_WOOLIIS_CUR, Settings->flag2.current_resolution, &Wooliis->current); + WSContentSend_PD(HTTP_SNS_WOOLIIS_POW, Settings->flag2.wattage_resolution, &power); + WSContentSend_PD(HTTP_SNS_WOOLIIS_IMP, Settings->flag2.energy_resolution, &Wooliis->energy_in); + WSContentSend_PD(HTTP_SNS_WOOLIIS_EXP, Settings->flag2.energy_resolution, &Wooliis->energy_out); } #endif // USE_WEBSERVER } @@ -210,7 +192,7 @@ bool Xsns115(uint32_t function) else if (Wooliis) { switch (function) { case FUNC_EVERY_SECOND: - WooliisSecond(); + WooliisReadData(); break; case FUNC_JSON_APPEND: WooliisShow(1);