diff --git a/.github/workflows/Tasmota_build_devel.yml b/.github/workflows/Tasmota_build_devel.yml
index 3f9fe9e06..a1f6204b4 100644
--- a/.github/workflows/Tasmota_build_devel.yml
+++ b/.github/workflows/Tasmota_build_devel.yml
@@ -32,13 +32,18 @@ jobs:
- tasmota-zbbridge
- tasmota-zigbee
- tasmota32
+ - tasmota32-zbbrdgpro
- tasmota32-webcam
- tasmota32-bluetooth
+ - tasmota32-nspanel
- tasmota32-display
- tasmota32-ir
- tasmota32-lvgl
- tasmota32c3
- tasmota32c3usb
+ - tasmota32s2
+ - tasmota32s3
+ - tasmota32s3usb
- tasmota32solo1
- tasmota32solo1-safeboot
- tasmota32-safeboot
@@ -46,6 +51,7 @@ jobs:
- tasmota32c3usb-safeboot
- tasmota32s2-safeboot
- tasmota32s3-safeboot
+ - tasmota32s3usb-safeboot
steps:
- uses: actions/checkout@v3
with:
@@ -121,9 +127,13 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-lvgl.* ] || mv ./mv_firmware/firmware/tasmota32-lvgl.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32-zbbrdgpro.* ] || mv ./mv_firmware/firmware/tasmota32-zbbrdgpro.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32-nspanel.* ] || mv ./mv_firmware/firmware/tasmota32-nspanel.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32c3*.* ] || mv ./mv_firmware/firmware/tasmota32c3*.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s2*.* ] || mv ./mv_firmware/firmware/tasmota32s2*.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s3*.* ] || mv ./mv_firmware/firmware/tasmota32s3*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-safeboot* ] || mv ./mv_firmware/firmware/tasmota32-safeboot* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-* ] || mv ./mv_firmware/firmware/tasmota32-* ./firmware/tasmota32/languages/
[ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/
diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml
index d39246639..8cc057300 100644
--- a/.github/workflows/Tasmota_build_master.yml
+++ b/.github/workflows/Tasmota_build_master.yml
@@ -31,20 +31,26 @@ jobs:
- tasmota-zbbridge
- tasmota-zigbee
- tasmota32
+ - tasmota32-zbbrdgpro
- tasmota32-webcam
- tasmota32-bluetooth
+ - tasmota32-nspanel
- tasmota32-display
- tasmota32-ir
- tasmota32-lvgl
- tasmota32c3
- tasmota32c3usb
+ - tasmota32s2
+ - tasmota32s3
+ - tasmota32s3usb
- tasmota32solo1
- tasmota32solo1-safeboot
- tasmota32-safeboot
- tasmota32c3-safeboot
+ - tasmota32c3usb-safeboot
- tasmota32s2-safeboot
- tasmota32s3-safeboot
- - tasmota32c3usb-safeboot
+ - tasmota32s3usb-safeboot
steps:
- uses: actions/checkout@v3
with:
@@ -128,10 +134,14 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-display.* ] || mv ./mv_firmware/firmware/tasmota32-display.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-lvgl.* ] || mv ./mv_firmware/firmware/tasmota32-lvgl.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./release-firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32-zbbrdgpro.* ] || mv ./mv_firmware/firmware/tasmota32-zbbrdgpro.* ./release-firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32-nspanel.* ] || mv ./mv_firmware/firmware/tasmota32-nspanel.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32c3*.* ] || mv ./mv_firmware/firmware/tasmota32c3*.* ./release-firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s2*.* ] || mv ./mv_firmware/firmware/tasmota32s2*.* ./release-firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s3*.* ] || mv ./mv_firmware/firmware/tasmota32s3*.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-safeboot* ] || mv ./mv_firmware/firmware/tasmota32-safeboot* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-* ] || mv ./mv_firmware/firmware/tasmota32-* ./release-firmware/tasmota32/languages/
[ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./release-firmware/tasmota32/languages/
diff --git a/.github/workflows/build_all_the_things.yml b/.github/workflows/build_all_the_things.yml
index 3303759f4..c5ba5ae12 100644
--- a/.github/workflows/build_all_the_things.yml
+++ b/.github/workflows/build_all_the_things.yml
@@ -32,17 +32,21 @@ jobs:
- tasmota-minimal
- tasmota-sensors
- tasmota-zbbridge
+ - tasmota32-zbbrdgpro
- tasmota-zigbee
- tasmota32
- tasmota32-webcam
- tasmota32-bluetooth
- tasmota32-core2
+ - tasmota32-nspanel
- tasmota32-display
- tasmota32-ir
- tasmota32-lvgl
- - tasmota32s2
- tasmota32c3
- tasmota32c3usb
+ - tasmota32s2
+ - tasmota32s3
+ - tasmota32s3usb
- tasmota32solo1
- tasmota32solo1-safeboot
- tasmota32-safeboot
@@ -50,6 +54,7 @@ jobs:
- tasmota32c3usb-safeboot
- tasmota32s2-safeboot
- tasmota32s3-safeboot
+ - tasmota32s3usb-safeboot
steps:
- uses: actions/checkout@v2
- name: Set up Python
diff --git a/.travis.yml.off b/.travis.yml.off
deleted file mode 100644
index 02f97e5b5..000000000
--- a/.travis.yml.off
+++ /dev/null
@@ -1,47 +0,0 @@
-language: python
-python:
- - '3.7'
-sudo: false
-install:
- - pip install -U platformio
- - platformio upgrade --dev
- - platformio update
-
-cache: false
-
-env:
- - ENV=tasmota
- - ENV=tasmota-minimal
- - ENV=tasmota-lite
- - ENV=tasmota-knx
- - ENV=tasmota-sensors
- - ENV=tasmota-display
- - ENV=tasmota-ir
- - ENV=tasmota-BG
- - ENV=tasmota-BR
- - ENV=tasmota-CN
- - ENV=tasmota-CZ
- - ENV=tasmota-DE
- - ENV=tasmota-ES
- - ENV=tasmota-FR
- - ENV=tasmota-GR
- - ENV=tasmota-HE
- - ENV=tasmota-HU
- - ENV=tasmota-IT
- - ENV=tasmota-KO
- - ENV=tasmota-NL
- - ENV=tasmota-PL
- - ENV=tasmota-PT
- - ENV=tasmota-RO
- - ENV=tasmota-RU
- - ENV=tasmota-SE
- - ENV=tasmota-SK
- - ENV=tasmota-TR
- - ENV=tasmota-TW
- - ENV=tasmota-UK
- - ENV=tasmota-VN
-
-script:
- - platformio run -e $ENV
-before_deploy:
- - for file in .pioenvs/*/firmware.bin; do cp $file ${file%/*}.bin; done
diff --git a/BUILDS.md b/BUILDS.md
index c3d70ad51..89f522bce 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -65,6 +65,7 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up
| USE_MY92X1 | - | x / - | x | x | - | x |
| USE_SM16716 | - | x / - | x | x | - | x |
| USE_SM2135 | - | x / - | x | x | - | x |
+| USE_BP5758D | - | x / - | x | x | - | x |
| USE_SONOFF_L1 | - | x / - | x | x | - | x |
| USE_ELECTRIQ_MOODL | - | x / - | x | x | - | x |
| | | | | | | |
@@ -170,6 +171,7 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up
| USE_HDC2010 | - | - / - | - | - | - | - |
| USE_PCF85363 | - | - / - | - | - | - | - |
| USE_DS3502 | - | - / - | - | - | - | - |
+| USE_HYT | - | - / - | - | - | - | - |
| | | | | | | |
| Feature or Sensor | l | t | k | s | i | d | Remarks
| USE_SPI | - | - / - | - | - | - | x |
@@ -241,6 +243,7 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up
| USE_MI_ESP32 | | / x | | | | | See SetOption115
| USE_IBEACON_ESP32 | | / - | | | | |
| USE_WEBCAM | | / - | | | | |
-| USE_ETHERNET | | / - | | | | |
+| USE_ETHERNET | | / x | | | | |
| USE_I2S_AUDIO | | / - | | | | |
| USE_TTGO_WATCH | | / - | | | | |
+| USE_SONOFF_SPM | | / x | | | | |
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aac70f934..d12c0dcf7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,19 +3,30 @@ All notable changes to this project will be documented in this file.
## [Unreleased] - Development
-## [11.1.0.3]
+## [11.1.0.4]
### Added
-- Support for Sonoff SPM v1.2.0
+- Support for HYTxxx temperature and humidity sensor (#15715)
+- Support for Sensirion SHT4X using define USE_SHT3X (#15349)
### Changed
-
+- Restructured tasmota source directories taking benefit from PlatformIO Core v6.0.2
### Fixed
-
### Removed
+## [11.1.0.3] 20220602
+### Added
+- Support for Sonoff SPM v1.2.0
+- Support for Sonoff Zigbee Bridge Pro by Stephan Hadinger (#15701)
+- Command ``SspmDisplay 2`` to display Sonoff SPM energy data in GUI for user tab-selected relay modules (#13447)
+- Command ``SetOption141 1`` to disable display of module name in GUI header
+- Support for 5-channel light dimmer driver BP5758D used in Tuya bulbs (#15713)
+
+### Fixed
+- Possible pin output toggle after power on (#15630)
+
## [11.1.0.2] 20220514
### Added
- ESP32 Command ``Restart 3`` to switch between SafeBoot and Production
diff --git a/I2CDEVICES.md b/I2CDEVICES.md
index cb3d0ab83..59bc03065 100644
--- a/I2CDEVICES.md
+++ b/I2CDEVICES.md
@@ -31,7 +31,8 @@ Index | Define | Driver | Device | Address(es) | Description
13 | USE_ADS1115 | xsns_12 | ADS1115 | 0x48 - 0x4B | 4-channel 16-bit A/D converter
14 | USE_INA219 | xsns_13 | INA219 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
15 | USE_SHT3X | xsns_14 | SHT3X | 0x44 - 0x45 | Temperature and Humidity sensor
- 15 | USE_SHT3X | xsns_14 | SHTC3 | 0x70 | Temperature and Humidity sensor
+ 15 | USE_SHT3X | xsns_14 | SHT4X | 0x44 - 0x45 | Temperature and Humidity sensor
+ 15 | USE_SHT3X | xsns_14 | SHTCX | 0x70 | Temperature and Humidity sensor
16 | USE_TSL2561 | xsns_16 | TSL2561 | 0x29, 0x39, 0x49 | Light intensity sensor
17 | USE_MGS | xsns_19 | Grove | 0x04 | Multichannel gas sensor
18 | USE_SGP30 | xsns_21 | SGP30 | 0x58 | Gas (TVOC) and air quality sensor
@@ -101,3 +102,4 @@ Index | Define | Driver | Device | Address(es) | Description
65 | USE_ADE7880 | xnrg_23 | ADE7880 | 0x38 | Energy monitor
66 | USE_PCF85363 | xsns_99 | PCF85363 | 0x51 | Real time clock
67 | USE_DS3502 | xdrv_61 | DS3502 | 0x28 - 0x2B | Digital potentiometer
+ 68 | USE_HYT | xsns_97 | HYTxxx | 0x28 | Temperature and Humidity sensor
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 24af1c458..cbc4b42af 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -104,22 +104,29 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
[Complete list](BUILDS.md) of available feature and sensors.
-## Changelog v11.1.0.3
+## Changelog v11.1.0.4
### Added
- Command ``SetOption139 0/1`` to switch between pressure unit "mmHg" (0) or "inHg" (1) when ``SO24 1`` [#15350](https://github.com/arendst/Tasmota/issues/15350)
- Command ``SetOption140 0/1`` to switch between MQTT Clean Session (0) or Persistent Session (1) [#15530](https://github.com/arendst/Tasmota/issues/15530)
+- Command ``SetOption141 1`` to disable display of module name in GUI header
- Command ``EnergyExportActive`` to (p)reset energy export active for supported devices. Currently ADE7880 only [#13515](https://github.com/arendst/Tasmota/issues/13515)
- Command ``IfxRp ""|`` adds optional InfluxDb Retention Policy [#15513](https://github.com/arendst/Tasmota/issues/15513)
+- Command ``SspmDisplay 2`` to display Sonoff SPM energy data in GUI for user tab-selected relay modules [#13447](https://github.com/arendst/Tasmota/issues/13447)
- Support for Sonoff MS01 soil moisture sensor [#15335](https://github.com/arendst/Tasmota/issues/15335)
- Support for daisy chaining MAX7219 displays [#15345](https://github.com/arendst/Tasmota/issues/15345)
+- Support for Sensirion SHT4X using define USE_SHT3X [#15349](https://github.com/arendst/Tasmota/issues/15349)
- Sonoff SPM delayed SetPowerOnState [#13447](https://github.com/arendst/Tasmota/issues/13447)
- Support for Sonoff SPM v1.2.0
+- Support for Sonoff Zigbee Bridge Pro by Stephan Hadinger [#15701](https://github.com/arendst/Tasmota/issues/15701)
- Support for flowrate meters like YF-DN50 and similary [#15474](https://github.com/arendst/Tasmota/issues/15474)
+- Support for 5-channel light dimmer driver BP5758D used in Tuya bulbs [#15713](https://github.com/arendst/Tasmota/issues/15713)
+- Support for HYTxxx temperature and humidity sensor [#15715](https://github.com/arendst/Tasmota/issues/15715)
- ESP32 Command ``Restart 3`` to switch between SafeBoot and Production
### Breaking Changed
### Changed
+- Restructured tasmota source directories taking benefit from PlatformIO Core v6.0.2
- Prepare to remove dedicated Home Assistant discovery in favour of Tasmota Discovery and hatasmota
- ESP32 Tasmota SafeBoot with changed partition scheme allowing larger binaries
@@ -127,6 +134,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
- Improv initial or erase device installation failing to provide Configure WiFi option
- SCD40 start low power command [#15361](https://github.com/arendst/Tasmota/issues/15361)
- BL09xx negative power presentation [#15374](https://github.com/arendst/Tasmota/issues/15374)
+- Possible pin output toggle after power on [#15630](https://github.com/arendst/Tasmota/issues/15630)
### Removed
- Arduino IDE support
diff --git a/boards/esp32s3usb.json b/boards/esp32s3usb.json
new file mode 100644
index 000000000..f495bc5d8
--- /dev/null
+++ b/boards/esp32s3usb.json
@@ -0,0 +1,46 @@
+{
+ "build": {
+ "arduino":{
+ "ldscript": "esp32s3_out.ld",
+ "memory_type": "qspi_qspi"
+ },
+ "core": "esp32",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DUSE_USB_SERIAL_CONSOLE -DESP32_4M -DESP32S3",
+ "f_cpu": "240000000L",
+ "f_flash": "80000000L",
+ "flash_mode": "dio",
+ "mcu": "esp32s3",
+ "variant": "esp32s3",
+ "partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
+ },
+ "connectivity": [
+ "wifi",
+ "bluetooth",
+ "ethernet"
+ ],
+ "debug": {
+ "openocd_target": "esp32s3.cfg"
+ },
+ "frameworks": [
+ "espidf",
+ "arduino"
+ ],
+ "name": "Espressif Generic ESP32-S3 4M Flash, Tasmota 2880k Code/OTA, 320k FS",
+ "upload": {
+ "arduino": {
+ "flash_extra_images": [
+ [
+ "0x10000",
+ "variants/tasmota/tasmota32s3usb-safeboot.bin"
+ ]
+ ]
+ },
+ "flash_size": "4MB",
+ "maximum_ram_size": 327680,
+ "maximum_size": 4194304,
+ "require_upload_port": true,
+ "speed": 460800
+ },
+ "url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
+ "vendor": "Espressif"
+}
diff --git a/include/tasmota_options.h b/include/tasmota_options.h
index 840daf379..ebfc69019 100644
--- a/include/tasmota_options.h
+++ b/include/tasmota_options.h
@@ -21,6 +21,6 @@
#define __TASMOTA_INCLUDE__
#include "../tasmota/my_user_config.h"
-#include "../tasmota/tasmota_configurations.h"
+#include "../tasmota/include/tasmota_configurations.h"
#endif // __TASMOTA_INCLUDE__
\ No newline at end of file
diff --git a/lib/default/Ext-printf/src/SBuffer.hpp b/lib/default/Ext-printf/src/SBuffer.hpp
index 67bbbcd48..9c545add0 100644
--- a/lib/default/Ext-printf/src/SBuffer.hpp
+++ b/lib/default/Ext-printf/src/SBuffer.hpp
@@ -48,7 +48,7 @@ public:
inline uint8_t *buf(size_t i = 0) const { return &_buf->buf[i]; }
inline char *charptr(size_t i = 0) const { return (char*) &_buf->buf[i]; }
- virtual ~SBuffer(void) {
+ ~SBuffer(void) {
delete[] _buf;
}
@@ -258,6 +258,12 @@ public:
return buf2;
}
+ static SBuffer SBufferFromBytes(const uint8_t *bytes, size_t len2) {
+ SBuffer buf2(len2);
+ buf2.addBuffer(bytes, len2);
+ return buf2;
+ }
+
// nullptr accepted
static bool equalsSBuffer(const class SBuffer * buf1, const class SBuffer * buf2) {
if (buf1 == buf2) { return true; }
@@ -290,18 +296,3 @@ protected:
SBuffer_impl * _buf;
} SBuffer;
-
-typedef class PreAllocatedSBuffer : public SBuffer {
-
-public:
- PreAllocatedSBuffer(const size_t size, void * buffer) {
- _buf = (SBuffer_impl*) buffer;
- _buf->size = size - 4;
- _buf->len = 0;
- }
-
- ~PreAllocatedSBuffer(void) {
- // don't deallocate
- _buf = nullptr;
- }
-} PreAllocatedSBuffer;
diff --git a/lib/default/Unishox-1.0-shadinger/src/unishox.cpp b/lib/default/Unishox-1.0-shadinger/src/unishox.cpp
index 1c0fd7142..64b18f3c2 100644
--- a/lib/default/Unishox-1.0-shadinger/src/unishox.cpp
+++ b/lib/default/Unishox-1.0-shadinger/src/unishox.cpp
@@ -252,7 +252,6 @@ int32_t Unishox::unishox_compress(const char *p_in, size_t p_len, char *p_out, s
out = p_out;
len_out = p_len_out;
- char *ptr;
byte bits;
int ll;
diff --git a/lib/default/jsmn-shadinger-1.0/src/jsmn.cpp b/lib/default/jsmn-shadinger-1.0/src/jsmn.cpp
index bfd0e11bb..80da28f07 100644
--- a/lib/default/jsmn-shadinger-1.0/src/jsmn.cpp
+++ b/lib/default/jsmn-shadinger-1.0/src/jsmn.cpp
@@ -391,7 +391,7 @@ static uint32_t json_encode_utf8(char* str, uint32_t val) {
void json_unescape(char* string) {
size_t outlength = 0;
- uint32_t hexval, numbytes;
+ uint32_t numbytes;
char c;
for (uint32_t i = 0; (c = string[i]) != 0; i++) {
diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c
index 5ed4a99e6..8f7addd94 100644
--- a/lib/libesp32/berry/default/be_modtab.c
+++ b/lib/libesp32/berry/default/be_modtab.c
@@ -48,13 +48,16 @@ be_extern_native_module(uuid);
be_extern_native_module(animate);
be_extern_native_module(partition_core);
be_extern_native_module(crc);
+#ifdef USE_ZIGBEE
+be_extern_native_module(zigbee);
+#endif // USE_ZIGBEE
#ifdef USE_LVGL
be_extern_native_module(lv);
be_extern_native_module(lv_extra);
be_extern_native_module(lv_tasmota);
-#ifdef USE_LVGL_OPENHASP
-be_extern_native_module(openhasp);
-#endif // USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
+be_extern_native_module(haspmota);
+#endif // USE_LVGL_HASPMOTA
#endif // USE_LVGL
/* user-defined modules declare start */
@@ -137,9 +140,9 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = {
&be_native_module(lv),
&be_native_module(lv_extra),
&be_native_module(lv_tasmota),
-#ifdef USE_LVGL_OPENHASP
- &be_native_module(openhasp),
-#endif // USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
+ &be_native_module(haspmota),
+#endif // USE_LVGL_HASPMOTA
#endif // USE_LVGL
#ifdef USE_ENERGY_SENSOR
&be_native_module(energy),
@@ -147,6 +150,9 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = {
#ifdef USE_WEBSERVER
&be_native_module(webserver),
#endif // USE_WEBSERVER
+#ifdef USE_ZIGBEE
+ &be_native_module(zigbee),
+#endif // USE_ZIGBEE
&be_native_module(flash),
&be_native_module(partition_core),
&be_native_module(crc),
diff --git a/lib/libesp32/berry/default/berry_conf.h b/lib/libesp32/berry/default/berry_conf.h
index 84255936b..c70af7945 100644
--- a/lib/libesp32/berry/default/berry_conf.h
+++ b/lib/libesp32/berry/default/berry_conf.h
@@ -12,7 +12,7 @@
#ifdef COMPILE_BERRY_LIB
#include "my_user_config.h"
- #include "tasmota_configurations.h"
+ #include "include/tasmota_configurations.h"
#endif
/* Macro: BE_DEBUG
diff --git a/lib/libesp32/berry/gen.sh b/lib/libesp32/berry/gen.sh
index 7156e8719..ee97feeef 100755
--- a/lib/libesp32/berry/gen.sh
+++ b/lib/libesp32/berry/gen.sh
@@ -1,2 +1,8 @@
#!/bin/bash
+#
+# generate all precompiled Berry structures from multiple modules
+#
+# Should be eventually included in the build process
+#
+rm generate/be_*.h
python3 tools/pycoc/main.py -o generate src default ../berry_tasmota/src ../berry_mapping/src ../berry_int64/src ../../libesp32_lvgl/lv_binding_berry/src ../../libesp32_lvgl/lv_binding_berry/generate -c default/berry_conf.h
diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h
index d9cdc2394..7ef8af957 100644
--- a/lib/libesp32/berry/generate/be_const_strtab.h
+++ b/lib/libesp32/berry/generate/be_const_strtab.h
@@ -1,5 +1,6 @@
extern const bcstring be_const_str_;
extern const bcstring be_const_str_00;
+extern const bcstring be_const_str_0x_X2502X;
extern const bcstring be_const_str_AA50;
extern const bcstring be_const_str_AES_GCM;
extern const bcstring be_const_str_ALIGN_BOTTOM_MID;
@@ -245,6 +246,7 @@ extern const bcstring be_const_str__energy;
extern const bcstring be_const_str__error;
extern const bcstring be_const_str__filename;
extern const bcstring be_const_str__fl;
+extern const bcstring be_const_str__get_bytes;
extern const bcstring be_const_str__global_addr;
extern const bcstring be_const_str__global_def;
extern const bcstring be_const_str__lvgl;
@@ -255,6 +257,7 @@ extern const bcstring be_const_str__read;
extern const bcstring be_const_str__request_from;
extern const bcstring be_const_str__rmt;
extern const bcstring be_const_str__rules;
+extern const bcstring be_const_str__set_bytes;
extern const bcstring be_const_str__settings_def;
extern const bcstring be_const_str__settings_ptr;
extern const bcstring be_const_str__splash;
@@ -264,6 +267,7 @@ extern const bcstring be_const_str__timers;
extern const bcstring be_const_str__validate;
extern const bcstring be_const_str__write;
extern const bcstring be_const_str_a;
+extern const bcstring be_const_str_abort;
extern const bcstring be_const_str_abs;
extern const bcstring be_const_str_acos;
extern const bcstring be_const_str_active_otadata;
@@ -486,6 +490,7 @@ extern const bcstring be_const_str_format;
extern const bcstring be_const_str_from_to;
extern const bcstring be_const_str_fromb64;
extern const bcstring be_const_str_frombytes;
+extern const bcstring be_const_str_fromhex;
extern const bcstring be_const_str_fromptr;
extern const bcstring be_const_str_fromstring;
extern const bcstring be_const_str_full_state;
@@ -567,6 +572,7 @@ extern const bcstring be_const_str_imax;
extern const bcstring be_const_str_img;
extern const bcstring be_const_str_imin;
extern const bcstring be_const_str_import;
+extern const bcstring be_const_str_info;
extern const bcstring be_const_str_init;
extern const bcstring be_const_str_init_draw_arc_dsc;
extern const bcstring be_const_str_init_draw_line_dsc;
@@ -917,6 +923,7 @@ extern const bcstring be_const_str_subscribe;
extern const bcstring be_const_str_subtype;
extern const bcstring be_const_str_subtype_to_string;
extern const bcstring be_const_str_success;
+extern const bcstring be_const_str_sum;
extern const bcstring be_const_str_super;
extern const bcstring be_const_str_switch_factory;
extern const bcstring be_const_str_sys;
@@ -940,6 +947,7 @@ extern const bcstring be_const_str_timer_cb;
extern const bcstring be_const_str_to_gamma;
extern const bcstring be_const_str_tob64;
extern const bcstring be_const_str_tobytes;
+extern const bcstring be_const_str_tohex;
extern const bcstring be_const_str_toint;
extern const bcstring be_const_str_tolower;
extern const bcstring be_const_str_tomap;
@@ -1029,5 +1037,9 @@ extern const bcstring be_const_str_y;
extern const bcstring be_const_str_y1;
extern const bcstring be_const_str_year;
extern const bcstring be_const_str_yield;
+extern const bcstring be_const_str_zb_coord_ntv;
+extern const bcstring be_const_str_zb_device;
+extern const bcstring be_const_str_zcl_frame;
+extern const bcstring be_const_str_zcl_frame_ntv;
extern const bcstring be_const_str_zero;
extern const bcstring be_const_str_zip;
diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h
index a2d290c79..7448f971b 100644
--- a/lib/libesp32/berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/berry/generate/be_const_strtab_def.h
@@ -1,967 +1,975 @@
-be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E);
-be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20);
-be_define_const_str(_X0A_X29_X3E, "\n)>", 804061574u, 0, 3, &be_const_str_CFG_X3A_X20running_X20);
-be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_Auto_X2Dconfiguration);
-be_define_const_str(_X20_X20, " ", 2982523533u, 0, 2, NULL);
-be_define_const_str(_X20_X28, " (", 2848302581u, 0, 2, &be_const_str_show);
-be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, NULL);
-be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, NULL);
+be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_zb_device);
+be_define_const_str(_X0A, "\n", 252472541u, 0, 1, NULL);
+be_define_const_str(_X0A_X29_X3E, "\n)>", 804061574u, 0, 3, &be_const_str_SERIAL_8O2);
+be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_time_str);
+be_define_const_str(_X20_X20, " ", 2982523533u, 0, 2, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E);
+be_define_const_str(_X20_X28, " (", 2848302581u, 0, 2, &be_const_str_find_key_i);
+be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_exec_tele);
+be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_add_anim);
be_define_const_str(_X22, "\"", 655135397u, 0, 1, NULL);
-be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_gamma8);
-be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_finish);
-be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_set_alternate);
-be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_pc);
-be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, NULL);
-be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, NULL);
-be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_clock_icon);
-be_define_const_str(_X25, "%", 537692064u, 0, 1, NULL);
-be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_get_free_heap);
-be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_before_del);
-be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_BLE);
-be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_EVENT_DRAW_PART_BEGIN);
-be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_exec_cmd);
-be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X3F);
-be_define_const_str(_X27_X20_X2D_X20, "' - ", 3420378487u, 0, 4, &be_const_str_set_light);
-be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str__X2Elen);
+be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E);
+be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_gamma8);
+be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str__X25);
+be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_load_templates);
+be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_argument_X20must_X20be_X20a_X20list);
+be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E);
+be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_find);
+be_define_const_str(_X25, "%", 537692064u, 0, 1, &be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D);
+be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_web_sensor);
+be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str___iterator__);
+be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_base_class);
+be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_ALIGN_BOTTOM_MID);
+be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_get_warning_level);
+be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_atan2);
+be_define_const_str(_X27_X20_X2D_X20, "' - ", 3420378487u, 0, 4, &be_const_str_I2C_X3A);
+be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_clock);
be_define_const_str(_X29, ")", 739023492u, 0, 1, NULL);
-be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_widget_event_cb);
-be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_add);
-be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files);
-be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, NULL);
-be_define_const_str(_X2D, "-", 671913016u, 0, 1, NULL);
-be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, &be_const_str_MI32);
-be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_get_coords);
-be_define_const_str(_X2E, ".", 722245873u, 0, 1, NULL);
+be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_while);
+be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29);
+be_define_const_str(_X2C, ",", 688690635u, 0, 1, NULL);
+be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_lv_wifi_arcs);
+be_define_const_str(_X2D, "-", 671913016u, 0, 1, &be_const_str__global_addr);
+be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, NULL);
+be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_listdir);
+be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_obj);
be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, NULL);
-be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_check_privileged_access);
-be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_addr);
-be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, NULL);
-be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, NULL);
-be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, NULL);
-be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_CT);
-be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_setfloat);
-be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_set_huesat);
-be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X2Ew);
-be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_get_string);
-be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_add_anim);
-be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_AudioOpusDecoder);
-be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_pow);
-be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_AudioGeneratorMP3);
-be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_keys);
-be_define_const_str(00, "00", 569209421u, 0, 2, &be_const_str_find_op);
-be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_compile);
-be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_instance_X20required);
-be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "
", 3546571739u, 0, 11, NULL);
-be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_get_bat_power);
-be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_draw_line_dsc_init);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_tag);
-be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 2052843416u, 0, 25, NULL);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 2058443583u, 0, 110, &be_const_str_json_fdump);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "