Bump version v14.3.0.7 - again

- ESP32 max number of supported switches/buttons/relays from 28 to 32
- ESP32 max number of interlocks from 14 to 16
This commit is contained in:
Theo Arends 2024-11-17 14:03:04 +01:00
parent 099c68678a
commit 4e40bbf3b6
11 changed files with 151 additions and 123 deletions

View File

@ -3,20 +3,27 @@ All notable changes to this project will be documented in this file.
## [Unreleased] - Development
## [14.3.0.6]
## [14.3.0.7]
### Added
- Add command ``WebColor20`` to control color of Button when Off
### Breaking Changed
### Fixed
### Removed
### Changed
- ESP32 max number of supported switches/buttons/relays from 28 to 32
- ESP32 max number of interlocks from 14 to 16
## [14.3.0.6] 20241116
### Added
- Add command ``WebColor20`` to control color of Button when Off
### Fixed
- Matter provisioning with matter.js controller (#22470)
- Prevent crashing when `display.ini` is missing end `#` (#22471)
### Removed
## [14.3.0.5] 20241111
### Added
- ESP32 MI32 legacy add config operations (#22458)

View File

@ -114,7 +114,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
[Complete list](BUILDS.md) of available feature and sensors.
## Changelog v14.3.0.6
## Changelog v14.3.0.7
### Added
- Add command ``WebColor20`` to control color of Button when Off
- DALI support for short addresses (gear) and groups
@ -157,6 +157,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- DALI renamed commands `DaliCommission` to `DaliScan` and `DaliWeb` to `DaliLight`
- DALI set Tasmota light control as default
- Shutter optimized behavior to publish shutter data with sensor request [#22353](https://github.com/arendst/Tasmota/issues/22353)
- ESP32 max number of supported switches/buttons/relays from 28 to 32
- ESP32 max number of interlocks from 14 to 16
- HASPmota support for page delete and object updates [#22311](https://github.com/arendst/Tasmota/issues/22311)
### Fixed

View File

@ -2,7 +2,7 @@
// compressed by tools/unishox/compress-html-uncompressed.py
/////////////////////////////////////////////////////////////////////
const size_t HTTP_SCRIPT_MODULE_TEMPLATE_SIZE = 602;
const size_t HTTP_SCRIPT_MODULE_TEMPLATE_SIZE = 589;
const char HTTP_SCRIPT_MODULE_TEMPLATE_COMPRESSED[] PROGMEM = "\x33\xBF\xAC\xF1\xD4\x2B\xC7\x83\x02\xF8\x3A\xDC\xE4\x1B\x3B\xBA\x75\x1A\x8E\xF1"
"\xED\x33\xBF\xAC\x3E\x09\x81\x8B\x1A\xFA\x8E\x81\xFD\xDD\x32\x61\x31\xAF\xA8\xEE"
"\x9F\x78\x32\xB7\x38\xFB\x3B\xC7\x8C\x3A\x53\x36\x51\x07\x9D\x4F\xA8\xF9\xA7\x83"
@ -15,16 +15,16 @@ const char HTTP_SCRIPT_MODULE_TEMPLATE_COMPRESSED[] PROGMEM = "\x33\xBF\xAC\xF1\
"\x0C\x3A\x7D\x8D\xC3\x36\x08\x3B\x70\x24\xE0\x87\x78\xF0\x7B\x82\x3E\x0A\x04\xAC"
"\xC8\xE3\x3C\x16\x9E\x81\x1E\x34\xED\x9D\xB3\xBC\x7B\x43\x3E\x0A\xF1\xEF\x69\xEF"
"\x82\x17\x2A\x01\xE7\x8D\x30\x77\x6C\xF8\x7C\x0C\xEF\x1E\xD1\xC0\x89\x50\xE3\x70"
"\x8C\x1E\x07\x7D\xD9\xA1\xE0\xF7\x1E\xEF\x1F\x87\xE1\xF0\xE6\x90\x21\x64\x47\x21"
"\xE0\xB4\xF4\x3E\x0E\x04\x2C\x8D\x9D\xD3\xBB\xA7\xA1\xC8\xCE\xF1\xDA\x3B\xA7\xD9"
"\xDC\x3E\xCE\xD9\x69\xDE\x3C\xF4\xEA\xA3\xBC\x78\x3D\xCC\x71\xDD\x3E\xC5\x1F\x67"
"\x6C\x78\xEF\x1D\x0C\xEC\x21\x6C\xF8\x2C\xED\x9C\x87\x82\xA3\xA7\xA8\xC8\x26\x74"
"\x33\xDF\x68\xED\x0B\x68\xC8\xF8\x77\x47\x1F\x87\x19\xDE\x3B\x47\xD9\xF6\x79\x9F"
"\x64\x2B\x44\x11\xF1\xF6\x08\xDC\x58\xF8\xD0\xEE\xF8\xEA\x1E\x04\x3E\x42\xF3\xC7"
"\x4F\xB1\x81\x58\x6C\xEE\x9D\x87\xB8\xE5\x1D\x84\x3C\x75\x1E\xC3\xD0\x10\x78\x4B"
"\x40\x83\x9E\x9F\x67\xB0\xEF\x02\x35\xD3\x96\x76\x10\xF1\xD4\x7B\x0F\x43\xB0\x10"
"\x6F\x1F\x87\xB0\xEF\x1E\x18\xE3\xBA\x7D\x8F\x1F\x67\x6C\x78\xEF\x1D\x37\xB9\xFC"
"\x85\x15\x10\xD2\x08\xF9\x80\x8D\x48\x10\x72\x13\xBA\x3C\x7A\x1C\x48\xEF\x1D\xA2"
"\x04\x3E\x47\x4F\x3F\x1E\x34\xC0\x20\xD0\x3D\xA0\x85\xC9\xF9\xE0\xF7\x1E\xE3";
"\x8C\x1E\x07\x7D\xD9\xA1\xE0\xF7\x1E\xEF\x1F\x87\xE1\xF0\xE6\x90\x23\x64\x47\xC1"
"\xC0\x85\x91\xB3\xBB\xA7\x6C\xE4\x3A\x8A\x8E\xF1\xE0\xF7\x31\xC7\x74\xFB\x14\x7D"
"\x9D\xB1\xE3\xBC\x74\x33\xB0\x85\xB3\xE0\xB3\xB6\x72\x1E\x0A\x8E\x9E\xA3\x20\x99"
"\xD0\xCF\x7D\xA3\xB4\x2D\xA3\x23\xE1\xDD\x1C\x7E\x1C\x67\x78\xED\x1F\x67\xD9\xE6"
"\x7D\x90\xAD\x10\x47\xC7\xD8\x23\x71\x49\xE3\x43\xBB\xE3\xA8\x78\x10\xF8\xFE\xCF"
"\x1D\x3E\xC6\x05\x61\xB3\xBA\x76\x1E\xE3\x94\x76\x10\xF1\xD4\x7B\x0F\x40\x41\xE0"
"\xF9\x02\x0E\x7A\x7D\x9E\xC3\xBC\x08\xD7\x4E\x59\xD8\x43\xC7\x51\xEC\x3D\x0E\xC0"
"\x41\xBC\x7E\x1E\xC3\xBC\x78\x63\x8E\xE9\xF6\x3C\x7D\x9D\xB1\xE3\xBC\x74\xDE\xE7"
"\xF2\x14\x54\x43\x48\x23\xE6\x02\x35\x20\x41\xC8\x4E\xE8\xF1\xE8\x71\x23\xBC\x76"
"\x88\x10\xF9\x10\x3C\xFC\x78\xD3\x2A\x01\x83\x40\xF6\x82\x17\x26\x47\x83\xDC\x7B"
"\x8D";
#define HTTP_SCRIPT_MODULE_TEMPLATE Decompress(HTTP_SCRIPT_MODULE_TEMPLATE_COMPRESSED,HTTP_SCRIPT_MODULE_TEMPLATE_SIZE).c_str()

View File

@ -12,7 +12,7 @@ const char HTTP_SCRIPT_MODULE_TEMPLATE[] PROGMEM =
"l=hs.length;" // Find max indexes for s
"for(i=0;i<l;i++){c=hs[i]&0xffe0;if(a==c){b=hs[i]&0x001f;break;}}"
"s>>=5;" // Add options
"for(i=1;i<=b;i++){ce((i<10)?(' '+i):i,t);}"
"for(i=0;i<=b;i++){ce(i+1,t);}" // Add index 1 to 32
"eb('h'+g).value=u+1;" // Set selected value
"t.style.visibility=(b>0)?'':'hidden';"
"}"

View File

@ -38,7 +38,6 @@ const uint32_t POWER_SIZE = 32; // Power (relay) bit count
* Constants
\*********************************************************************************************/
// Why 28? Because in addition to relays there may be lights and uint32_t bitmap can hold up to 32 devices
#ifdef ESP8266
const uint8_t MAX_RELAYS = 8; // Max number of relays selectable on GPIO
const uint8_t MAX_INTERLOCKS = 4; // Max number of interlock groups (up to MAX_INTERLOCKS_SET)
@ -46,17 +45,17 @@ const uint8_t MAX_SWITCHES = 8; // Max number of switches selectable
const uint8_t MAX_KEYS = 8; // Max number of keys or buttons selectable on GPIO
#endif // ESP8266
#ifdef ESP32
const uint8_t MAX_RELAYS = 28; // Max number of relays selectable on GPIO
const uint8_t MAX_INTERLOCKS = 14; // Max number of interlock groups (up to MAX_INTERLOCKS_SET)
const uint8_t MAX_SWITCHES = 28; // Max number of switches selectable on GPIO
const uint8_t MAX_KEYS = 28; // Max number of keys or buttons selectable on GPIO
const uint8_t MAX_RELAYS = 32; // Max number of relays selectable on GPIO
const uint8_t MAX_INTERLOCKS = 16; // Max number of interlock groups (up to MAX_INTERLOCKS_SET)
const uint8_t MAX_SWITCHES = 32; // Max number of switches selectable on GPIO
const uint8_t MAX_KEYS = 32; // Max number of keys or buttons selectable on GPIO
#endif // ESP32
const uint8_t MAX_RELAYS_SET = 32; // Max number of relays
const uint8_t MAX_KEYS_SET = 32; // Max number of keys
// Changes to the following MAX_ defines will impact settings layout
const uint8_t MAX_INTERLOCKS_SET = 14; // Max number of interlock groups (MAX_RELAYS_SET / 2)
const uint8_t MAX_SWITCHES_SET = 28; // Max number of switches
const uint8_t MAX_INTERLOCKS_SET = 16; // Max number of interlock groups (MAX_RELAYS_SET / 2)
const uint8_t MAX_SWITCHES_SET = 32; // Max number of switches
const uint8_t MAX_LEDS = 4; // Max number of leds
const uint8_t MAX_PWMS_LEGACY = 5; // Max number of PWM channels in first settings block - Legacy limit for ESP8266, but extended for ESP32 (see below)
#ifdef ESP32 // Max number of PWM channels (total including extended) - ESP32 only

View File

@ -509,7 +509,7 @@ const char kSensorNamesFixed[] PROGMEM =
D_SENSOR_USER;
// Max number of GPIOs
#define MAX_I2C 0 // Display no index if one bus
#define MAX_I2C 1 // Display no index if one bus
#ifdef USE_I2C_BUS2
#undef MAX_I2C
#define MAX_I2C 2
@ -533,46 +533,46 @@ const char kSensorNamesFixed[] PROGMEM =
const uint16_t kGpioNiceList[] PROGMEM = {
GPIO_NONE, // Not used
AGPIO(GPIO_OPTION_A) + MAX_OPTIONS_A, // Device specific options
AGPIO(GPIO_OPTION_A) + MAX_OPTIONS_A -1, // Device specific options
#ifdef ESP32
AGPIO(GPIO_OPTION_E) + MAX_OPTIONS_E, // Device module emulation
AGPIO(GPIO_OPTION_E) + MAX_OPTIONS_E -1, // Device module emulation
#endif
AGPIO(GPIO_KEY1) + MAX_KEYS, // Buttons
AGPIO(GPIO_KEY1_NP) + MAX_KEYS,
AGPIO(GPIO_KEY1) + MAX_KEYS -1, // Buttons
AGPIO(GPIO_KEY1_NP) + MAX_KEYS -1,
#ifdef ESP32
AGPIO(GPIO_KEY1_PD) + MAX_KEYS,
AGPIO(GPIO_KEY1_PD) + MAX_KEYS -1,
#endif
AGPIO(GPIO_KEY1_INV) + MAX_KEYS,
AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS,
AGPIO(GPIO_KEY1_INV) + MAX_KEYS -1,
AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS -1,
#ifdef ESP32
AGPIO(GPIO_KEY1_INV_PD) + MAX_KEYS,
AGPIO(GPIO_KEY1_INV_PD) + MAX_KEYS -1,
#if defined(SOC_TOUCH_VERSION_1) || defined(SOC_TOUCH_VERSION_2)
AGPIO(GPIO_KEY1_TC) + MAX_KEYS, // Touch button
AGPIO(GPIO_KEY1_TC) + MAX_KEYS -1, // Touch button
#endif // ESP32 SOC_TOUCH_VERSION_1 or SOC_TOUCH_VERSION_2
#endif
AGPIO(GPIO_SWT1) + MAX_SWITCHES, // User connected external switches
AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES,
AGPIO(GPIO_SWT1) + MAX_SWITCHES -1, // User connected external switches
AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES -1,
#ifdef ESP32
AGPIO(GPIO_SWT1_PD) + MAX_SWITCHES,
AGPIO(GPIO_SWT1_PD) + MAX_SWITCHES -1,
#endif
#ifdef ROTARY_V1
AGPIO(GPIO_ROT1A) + MAX_ROTARIES, // Rotary A Pin
AGPIO(GPIO_ROT1B) + MAX_ROTARIES, // Rotary B Pin
AGPIO(GPIO_ROT1A_NP) + MAX_ROTARIES, // Rotary A Pin No Pullup
AGPIO(GPIO_ROT1B_NP) + MAX_ROTARIES, // Rotary B Pin No Pullup
AGPIO(GPIO_ROT1A) + MAX_ROTARIES -1, // Rotary A Pin
AGPIO(GPIO_ROT1B) + MAX_ROTARIES -1, // Rotary B Pin
AGPIO(GPIO_ROT1A_NP) + MAX_ROTARIES -1, // Rotary A Pin No Pullup
AGPIO(GPIO_ROT1B_NP) + MAX_ROTARIES -1, // Rotary B Pin No Pullup
#endif
AGPIO(GPIO_REL1) + MAX_RELAYS, // Relays
AGPIO(GPIO_REL1_INV) + MAX_RELAYS,
AGPIO(GPIO_REL1_BI) + MAX_RELAYS, // Bistable (Latching) two coil relays
AGPIO(GPIO_REL1_BI_INV) + MAX_RELAYS,
AGPIO(GPIO_LED1) + MAX_LEDS, // Leds
AGPIO(GPIO_LED1_INV) + MAX_LEDS,
AGPIO(GPIO_REL1) + MAX_RELAYS -1, // Relays
AGPIO(GPIO_REL1_INV) + MAX_RELAYS -1,
AGPIO(GPIO_REL1_BI) + MAX_RELAYS -1, // Bistable (Latching) two coil relays
AGPIO(GPIO_REL1_BI_INV) + MAX_RELAYS -1,
AGPIO(GPIO_LED1) + MAX_LEDS -1, // Leds
AGPIO(GPIO_LED1_INV) + MAX_LEDS -1,
#ifdef USE_COUNTER
AGPIO(GPIO_CNTR1) + MAX_COUNTERS, // Counters
AGPIO(GPIO_CNTR1_NP) + MAX_COUNTERS,
AGPIO(GPIO_CNTR1) + MAX_COUNTERS -1, // Counters
AGPIO(GPIO_CNTR1_NP) + MAX_COUNTERS -1,
#endif
AGPIO(GPIO_PWM1) + MAX_PWMS, // RGB Red or C Cold White
AGPIO(GPIO_PWM1_INV) + MAX_PWMS, // or extended PWM for ESP32
AGPIO(GPIO_PWM1) + MAX_PWMS -1, // RGB Red or C Cold White
AGPIO(GPIO_PWM1_INV) + MAX_PWMS -1, // or extended PWM for ESP32
#ifdef USE_BUZZER
AGPIO(GPIO_BUZZER), // Buzzer
AGPIO(GPIO_BUZZER_INV), // Inverted buzzer
@ -580,8 +580,8 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_LEDLNK), // Link led
AGPIO(GPIO_LEDLNK_INV), // Inverted link led
#ifdef USE_BERRY
AGPIO(GPIO_INPUT) + MAX_SWITCHES, // Pure digital input to be read via Berry
AGPIO(GPIO_INTERRUPT) + MAX_SWITCHES, // Interrupt pins to be catched by Berry
AGPIO(GPIO_INPUT) + MAX_SWITCHES -1, // Pure digital input to be read via Berry
AGPIO(GPIO_INTERRUPT) + MAX_SWITCHES -1, // Interrupt pins to be catched by Berry
#endif
AGPIO(GPIO_OUTPUT_HI), // Fixed output high
AGPIO(GPIO_OUTPUT_LO), // Fixed output low
@ -601,32 +601,32 @@ const uint16_t kGpioNiceList[] PROGMEM = {
\*-------------------------------------------------------------------------------------------*/
#ifdef USE_I2C
AGPIO(GPIO_I2C_SCL) + MAX_I2C, // I2C SCL
AGPIO(GPIO_I2C_SDA) + MAX_I2C, // I2C SDA
AGPIO(GPIO_I2C_SCL) + MAX_I2C -1, // I2C SCL
AGPIO(GPIO_I2C_SDA) + MAX_I2C -1, // I2C SDA
#ifdef USE_PCF8574
AGPIO(GPIO_PCF8574_INT), // PCF8574 Interrupt
#endif // USE_PCF8574
#ifdef USE_I2C_SERIAL
AGPIO(GPIO_I2C_SER_TX) + MAX_I2C, // I2C via Serial TX
AGPIO(GPIO_I2C_SER_RX) + MAX_I2C, // I2C via Serial RX
AGPIO(GPIO_I2C_SER_TX) + MAX_I2C -1, // I2C via Serial TX
AGPIO(GPIO_I2C_SER_RX) + MAX_I2C -1, // I2C via Serial RX
#endif // USE_I2C_SERIAL
#endif
#if defined(USE_I2S_AUDIO) || defined (USE_I2S)
AGPIO(GPIO_I2S_MCLK) + MAX_I2S, // I2S master clock
AGPIO(GPIO_I2S_BCLK) + MAX_I2S, // I2S bit clock
AGPIO(GPIO_I2S_DOUT) + MAX_I2S, // I2S Out Data
AGPIO(GPIO_I2S_DAC) + 2, // I2S DAC Output
AGPIO(GPIO_I2S_WS) + MAX_I2S, // I2S word select
AGPIO(GPIO_I2S_DIN) + MAX_I2S, // I2S IN Data
AGPIO(GPIO_I2S_MCLK) + MAX_I2S -1, // I2S master clock
AGPIO(GPIO_I2S_BCLK) + MAX_I2S -1, // I2S bit clock
AGPIO(GPIO_I2S_DOUT) + MAX_I2S -1, // I2S Out Data
AGPIO(GPIO_I2S_DAC) + 2 -1, // I2S DAC Output
AGPIO(GPIO_I2S_WS) + MAX_I2S -1, // I2S word select
AGPIO(GPIO_I2S_DIN) + MAX_I2S -1, // I2S IN Data
#endif
#ifdef USE_SPI
AGPIO(GPIO_SPI_MISO) + MAX_SPI, // SPI MISO
AGPIO(GPIO_SPI_MOSI) + MAX_SPI, // SPI MOSI
AGPIO(GPIO_SPI_CLK) + MAX_SPI, // SPI Clk
AGPIO(GPIO_SPI_CS) + MAX_SPI, // SPI Chip Select
AGPIO(GPIO_SPI_DC) + MAX_SPI, // SPI Data Direction
AGPIO(GPIO_SPI_MISO) + MAX_SPI -1, // SPI MISO
AGPIO(GPIO_SPI_MOSI) + MAX_SPI -1, // SPI MOSI
AGPIO(GPIO_SPI_CLK) + MAX_SPI -1, // SPI Clk
AGPIO(GPIO_SPI_CS) + MAX_SPI -1, // SPI Chip Select
AGPIO(GPIO_SPI_DC) + MAX_SPI -1, // SPI Data Direction
#ifdef USE_NRF24
AGPIO(GPIO_NRF24_CS),
AGPIO(GPIO_NRF24_DC),
@ -642,7 +642,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_MCP2515_CS),
#endif // USE_MCP2515
#ifdef USE_MCP23XXX_DRV
AGPIO(GPIO_MCP23SXX_CS) + MAX_MCP23XXX,
AGPIO(GPIO_MCP23SXX_CS) + MAX_MCP23XXX -1,
#endif // USE_MCP23XXX_DRV
#ifdef USE_SPI_LORA
AGPIO(GPIO_LORA_CS),
@ -754,11 +754,11 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif // USE_DISPLAY_TM1621_SONOFF
#ifdef USE_MAX31865
AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S,
AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S -1,
#endif
#ifdef USE_MCP23XXX_DRV
AGPIO(GPIO_MCP23XXX_INT) + MAX_MCP23XXX,
AGPIO(GPIO_MCP23XXX_INT) + MAX_MCP23XXX -1,
#endif
#ifdef USE_HDMI_CEC
@ -780,8 +780,8 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_DHT11_OUT), // Pseudo Single wire DHT11, DHT21, DHT22, AM2301, AM2302, AM2321
#endif
#ifdef USE_DS18x20
AGPIO(GPIO_DSB) + MAX_DSB, // Single wire DS18B20 or DS18S20
AGPIO(GPIO_DSB_OUT) + MAX_DSB, // Pseudo Single wire DS18B20 or DS18S20
AGPIO(GPIO_DSB) + MAX_DSB -1, // Single wire DS18B20 or DS18S20
AGPIO(GPIO_DSB_OUT) + MAX_DSB -1, // Pseudo Single wire DS18B20 or DS18S20
#endif // USE_DS18x20
#ifdef USE_LMT01
AGPIO(GPIO_LMT01), // LMT01, count pulses on GPIO
@ -797,7 +797,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_P9813_CLK), // P9813 CLOCK
AGPIO(GPIO_P9813_DAT), // P9813 DATA
#else
AGPIO(GPIO_WS2812) + (MAX_RMT ? MAX_RMT + 1 : 0), // WS2812 Led string, using RMT on ESP32
AGPIO(GPIO_WS2812) + (MAX_RMT ? MAX_RMT + 1 : 1) -1, // WS2812 Led string, using RMT on ESP32
#endif // NEO_HW_P9813
#endif
#ifdef USE_ARILUX_RF
@ -815,15 +815,15 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif // USE_SM16716
#ifdef USE_SM2135
AGPIO(GPIO_SM2135_CLK), // SM2135 CLOCK
AGPIO(GPIO_SM2135_DAT) + MAX_SM2135_DAT, // SM2135 DATA
AGPIO(GPIO_SM2135_DAT) + MAX_SM2135_DAT -1, // SM2135 DATA
#endif // USE_SM2135
#ifdef USE_SM2335
AGPIO(GPIO_SM2335_CLK), // SM2335 CLOCK
AGPIO(GPIO_SM2335_DAT) + MAX_SM2335_DAT, // SM2335 DATA
AGPIO(GPIO_SM2335_DAT) + MAX_SM2335_DAT -1, // SM2335 DATA
#endif // USE_SM2335
#ifdef USE_BP1658CJ
AGPIO(GPIO_BP1658CJ_CLK), // BP1658CJ CLOCK
AGPIO(GPIO_BP1658CJ_DAT) + MAX_BP1658CJ_DAT, // BP1658CJ DATA
AGPIO(GPIO_BP1658CJ_DAT) + MAX_BP1658CJ_DAT -1, // BP1658CJ DATA
#endif // USE_BP1658CJ
#ifdef USE_BP5758D
AGPIO(GPIO_BP5758D_CLK), // BP5758D CLOCK
@ -857,7 +857,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
\*-------------------------------------------------------------------------------------------*/
#if defined(USE_IR_REMOTE) || defined(USE_IR_REMOTE_FULL)
AGPIO(GPIO_IRSEND) + MAX_IRSEND, // IR remote
AGPIO(GPIO_IRSEND) + MAX_IRSEND -1, // IR remote
#if defined(USE_IR_RECEIVE) || defined(USE_IR_REMOTE_FULL)
AGPIO(GPIO_IRRECV), // IR receiver
#endif
@ -870,8 +870,8 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_RF_SENSOR), // Rf receiver with sensor decoding
#endif
#ifdef USE_SR04
AGPIO(GPIO_SR04_TRIG) + MAX_SR04, // SR04 Tri/TXgger pin
AGPIO(GPIO_SR04_ECHO) + MAX_SR04, // SR04 Ech/RXo pin
AGPIO(GPIO_SR04_TRIG) + MAX_SR04 -1, // SR04 Tri/TXgger pin
AGPIO(GPIO_SR04_ECHO) + MAX_SR04 -1, // SR04 Ech/RXo pin
#endif
#ifdef USE_ME007
AGPIO(GPIO_ME007_TRIG), // ME007 Trigger pin (xsns_23_me007.ino)
@ -904,20 +904,20 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_HJL_CF), // HJL-01/BL0937 CF power
#endif
#if defined(USE_I2C) && defined(USE_ADE7880)
AGPIO(GPIO_ADE7880_IRQ) + 2, // ADE7880 IRQ - (1 = IRQ1, 2 = IRQ2)
AGPIO(GPIO_ADE7880_IRQ) + 2 -1, // ADE7880 IRQ - (1 = IRQ1, 2 = IRQ2)
#endif
#ifdef USE_ADE7953
#if defined(USE_I2C) || defined(USE_SPI)
AGPIO(GPIO_ADE7953_IRQ) + 6, // ADE7953 IRQ - (1 = Shelly 2.5, 2 = Shelly EM, 3 = Shelly Plus 2PM, 4 = Shelly Pro 1PM, 5 = Shelly Pro 2PM, 6 = Shelly Pro 4PM)
AGPIO(GPIO_ADE7953_IRQ) + 6 -1, // ADE7953 IRQ - (1 = Shelly 2.5, 2 = Shelly EM, 3 = Shelly Plus 2PM, 4 = Shelly Pro 1PM, 5 = Shelly Pro 2PM, 6 = Shelly Pro 4PM)
AGPIO(GPIO_ADE7953_RST), // ADE7953 Reset
#ifdef USE_SPI
AGPIO(GPIO_ADE7953_CS) + 2, // ADE7953 SPI Chip Select (1 = CS1 (1PM, 2PM), 2 = CS2 (2PM))
AGPIO(GPIO_ADE7953_CS) + 2 -1, // ADE7953 SPI Chip Select (1 = CS1 (1PM, 2PM), 2 = CS2 (2PM))
#endif // USE_SPI
#endif // USE_I2C or USE_SPI
#endif // USE_ADE7953
#ifdef USE_CSE7761
AGPIO(GPIO_CSE7761_TX), // CSE7761 Serial interface (Dual R3)
AGPIO(GPIO_CSE7761_RX) + MAX_CSE7761, // CSE7761 Serial interface (1 = Dual R3, 2 = POWCT)
AGPIO(GPIO_CSE7761_RX) + MAX_CSE7761 -1, // CSE7761 Serial interface (1 = Dual R3, 2 = POWCT)
#endif
#ifdef USE_CSE7766
AGPIO(GPIO_CSE7766_TX), // CSE7766 Serial interface (S31 and Pow R2)
@ -972,13 +972,13 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif // USE_LE01MR
#ifdef ESP32
#ifdef USE_BL0906
AGPIO(GPIO_BL0906_RX) + MAX_BL0906_RX, // BL0906 Serial interface (Athom EM6)
AGPIO(GPIO_BL0906_RX) + MAX_BL0906_RX -1, // BL0906 Serial interface (Athom EM6)
#endif // USE_BL0906
#endif // ESP32
#if defined(USE_BL0940) || defined(USE_BL09XX)
AGPIO(GPIO_BL0939_RX), // BL0939 Serial interface (Dual R3 v2)
AGPIO(GPIO_BL0940_RX), // BL0940 Serial interface
AGPIO(GPIO_BL0942_RX) + MAX_BL0942_RX, // BL0942 Serial interface
AGPIO(GPIO_BL0942_RX) + MAX_BL0942_RX -1, // BL0942 Serial interface
#endif
#ifdef USE_IEM3000
AGPIO(GPIO_IEM3000_TX), // IEM3000 Serial interface
@ -1024,7 +1024,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#ifdef USE_ZIGBEE
AGPIO(GPIO_ZIGBEE_TX), // Zigbee Serial interface
AGPIO(GPIO_ZIGBEE_RX), // Zigbee Serial interface
AGPIO(GPIO_ZIGBEE_RST) + 2, // Zigbee reset, pin 1 is reset, pin 2 is bootloader mode
AGPIO(GPIO_ZIGBEE_RST) + 2 -1, // Zigbee reset, pin 1 is reset, pin 2 is bootloader mode
#endif
#ifdef USE_MHZ19
AGPIO(GPIO_MHZ_TXD), // MH-Z19 Serial interface
@ -1147,7 +1147,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_MGC3130_RESET),
#endif
#ifdef USE_MAX31855
AGPIO(GPIO_MAX31855CS) + MAX_MAX31855S, //MAX31855 Serial interface
AGPIO(GPIO_MAX31855CS) + MAX_MAX31855S -1, //MAX31855 Serial interface
AGPIO(GPIO_MAX31855CLK), // MAX31855 Serial interface
AGPIO(GPIO_MAX31855DO), // MAX31855 Serial interface
#endif
@ -1160,7 +1160,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_A4988_STP), // A4988 step pin
// folowing are not mandatory
AGPIO(GPIO_A4988_ENA), // A4988 enabled pin
AGPIO(GPIO_A4988_MS1) + MAX_A4988_MSS, // A4988 microstep pin1 to pin3
AGPIO(GPIO_A4988_MS1) + MAX_A4988_MSS -1, // A4988 microstep pin1 to pin3
#endif
#ifdef USE_DEEPSLEEP
AGPIO(GPIO_DEEPSLEEP),
@ -1203,10 +1203,10 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_PROJECTOR_CTRL_RX), // LCD/DLP Projector Serial Control
#endif
#if defined(USE_VL53L0X) or defined (USE_VL53L1X)
AGPIO(GPIO_VL53LXX_XSHUT1) + VL53LXX_MAX_SENSORS, // When using multiple VL53LXX.
AGPIO(GPIO_VL53LXX_XSHUT1) + VL53LXX_MAX_SENSORS -1, // When using multiple VL53LXX.
#endif
#ifdef USE_FLOWRATEMETER
AGPIO(GPIO_FLOWRATEMETER_IN) + MAX_FLOWRATEMETER, // Flow meter Pin
AGPIO(GPIO_FLOWRATEMETER_IN) + MAX_FLOWRATEMETER -1, // Flow meter Pin
#endif
#ifdef USE_SHIFT595
@ -1217,7 +1217,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif
#if defined (ESP32) && defined(USE_DINGTIAN_RELAY)
AGPIO(GPIO_DINGTIAN_CLK) + MAX_DINGTIAN_SHIFT, // Dingtian Relay board - 8,16,24 or 32 relays & inputs
AGPIO(GPIO_DINGTIAN_CLK) + MAX_DINGTIAN_SHIFT -1, // Dingtian Relay board - 8,16,24 or 32 relays & inputs
AGPIO(GPIO_DINGTIAN_SDI),
AGPIO(GPIO_DINGTIAN_Q7),
AGPIO(GPIO_DINGTIAN_PL),
@ -1226,7 +1226,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif
#ifdef USE_MAGIC_SWITCH
AGPIO(GPIO_MAGIC_SWITCH) + MAX_MAGIC_SWITCH_MODES,
AGPIO(GPIO_MAGIC_SWITCH) + MAX_MAGIC_SWITCH_MODES -1,
#endif
#ifdef USE_PIPSOLAR // xdrv_92_pipsolar.ino
@ -1240,7 +1240,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32
AGPIO(GPIO_HALLEFFECT) + 2, // Hall effect sensor connected to GPIO36 and 39
AGPIO(GPIO_HALLEFFECT) + 2 -1, // Hall effect sensor connected to GPIO36 and 39
#endif // CONFIG_IDF_TARGET_ESP32
#ifdef USE_WEBCAM
AGPIO(GPIO_WEBCAM_PWDN),
@ -1248,12 +1248,12 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_WEBCAM_XCLK),
AGPIO(GPIO_WEBCAM_SIOD),
AGPIO(GPIO_WEBCAM_SIOC),
AGPIO(GPIO_WEBCAM_DATA) + MAX_WEBCAM_DATA,
AGPIO(GPIO_WEBCAM_DATA) + MAX_WEBCAM_DATA -1,
AGPIO(GPIO_WEBCAM_VSYNC),
AGPIO(GPIO_WEBCAM_HREF),
AGPIO(GPIO_WEBCAM_PCLK),
AGPIO(GPIO_WEBCAM_PSCLK),
AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD,
AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD -1,
AGPIO(GPIO_WEBCAM_PSRCS),
#endif // USE_WEBCAM
#ifdef USE_ETHERNET
@ -1264,25 +1264,25 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#ifdef USE_BIOPDU
AGPIO(GPIO_BIOPDU_PZEM0XX_TX), // Biomine BioPDU pins
AGPIO(GPIO_BIOPDU_PZEM016_RX),
AGPIO(GPIO_BIOPDU_BIT) + 3,
AGPIO(GPIO_BIOPDU_BIT) + 3 -1,
#endif
/*-------------------------------------------------------------------------------------------*\
* ESP32 multiple Analog / Digital converter inputs
\*-------------------------------------------------------------------------------------------*/
AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs
AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor
AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor
AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button
AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS,
AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range
AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current
AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick
AGPIO(GPIO_ADC_PH) + MAX_ADCS, // Analog PH Sensor
AGPIO(GPIO_ADC_MQ) + MAX_ADCS, // Analog MQ Sensor
AGPIO(GPIO_ADC_VOLTAGE) + MAX_ADCS, // Voltage
AGPIO(GPIO_ADC_CURRENT) + MAX_ADCS, // Current
AGPIO(GPIO_ADC_INPUT) + MAX_ADCS -1, // Analog inputs
AGPIO(GPIO_ADC_TEMP) + MAX_ADCS -1, // Thermistor
AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS -1, // Light sensor
AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS -1, // Button
AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS -1,
AGPIO(GPIO_ADC_RANGE) + MAX_ADCS -1, // Range
AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS -1, // Current
AGPIO(GPIO_ADC_JOY) + MAX_ADCS -1, // Joystick
AGPIO(GPIO_ADC_PH) + MAX_ADCS -1, // Analog PH Sensor
AGPIO(GPIO_ADC_MQ) + MAX_ADCS -1, // Analog MQ Sensor
AGPIO(GPIO_ADC_VOLTAGE) + MAX_ADCS -1, // Voltage
AGPIO(GPIO_ADC_CURRENT) + MAX_ADCS -1, // Current
#endif // ESP32
};
@ -1296,8 +1296,8 @@ const uint16_t kAdcNiceList[] PROGMEM = {
AGPIO(GPIO_ADC_INPUT), // Analog inputs
AGPIO(GPIO_ADC_TEMP), // Thermistor
AGPIO(GPIO_ADC_LIGHT), // Light sensor
AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button
AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS,
AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS -1, // Button
AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS -1,
AGPIO(GPIO_ADC_RANGE), // Range
AGPIO(GPIO_ADC_CT_POWER), // Current
AGPIO(GPIO_ADC_JOY), // Joystick

View File

@ -677,17 +677,12 @@ typedef struct {
uint8_t light_width; // 4A4
uint8_t knx_GA_registered; // 4A5 Number of Group Address to read
uint16_t light_wakeup; // 4A6
uint8_t knx_CB_registered; // 4A8 Number of Group Address to write
uint8_t switchmode[MAX_SWITCHES_SET]; // 4A9
uint8_t global_sensor_index[3]; // 4C5
uint8_t switchmode[MAX_SWITCHES_SET]; // 4A8 4A9 - Moved dn by 1 byte in v14.3.0.7
uint16_t dns_timeout; // 4C8
uint8_t ds3502_state[MAX_DS3502]; // 4CA
uint16_t influxdb_port; // 4CE
power_t interlock[MAX_INTERLOCKS_SET]; // 4D0 MAX_INTERLOCKS = MAX_RELAYS / 2
int8_t shutter_tilt_config[5][MAX_SHUTTERS]; //508
int8_t shutter_tilt_pos[MAX_SHUTTERS]; //51C
uint16_t influxdb_period; // 520
uint16_t rf_duplicate_time; // 522
int8_t shutter_tilt_config[5][MAX_SHUTTERS]; // 510 508 - - Moved up by 8 bytes in v14.3.0.7
int32_t weight_absconv_a; // 524
int32_t weight_absconv_b; // 528
uint16_t mqtt_keepalive; // 52C
@ -695,8 +690,13 @@ typedef struct {
uint8_t mqtt_wifi_timeout; // 530
uint8_t ina219_mode; // 531
uint8_t weight_precision; // 532 ex_pulse_timer free since 11.0.0.3
uint8_t knx_CB_registered; // 533 4A8 Number of Group Address to write
int8_t shutter_tilt_pos[MAX_SHUTTERS]; // 534 51C
uint16_t influxdb_period; // 538 520
uint16_t rf_duplicate_time; // 53A 522
uint8_t global_sensor_index[3]; // 53C 4C5
uint8_t free_533[13]; // 533
uint8_t free_53F[1]; // 53F
uint16_t tcp_baudrate; // 540
uint16_t button_debounce; // 542

View File

@ -22,6 +22,6 @@
#define TASMOTA_SHA_SHORT // Filled by Github sed
const uint32_t TASMOTA_VERSION = 0x0E030006; // 14.3.0.6
const uint32_t TASMOTA_VERSION = 0x0E030007; // 14.3.0.7
#endif // _TASMOTA_VERSION_H_

View File

@ -1856,6 +1856,25 @@ void SettingsDelta(void) {
WebHexCode(COL_BUTTON_OFF, GetTextIndexed(scolor, sizeof(scolor), COL_BUTTON_OFF, kWebColors));
}
if (Settings->version < 0x0E030007) { // 14.3.0.7
// move up uint8_t knx_CB_registered from 4A8 to 533
memmove_P((uint8_t*)&Settings->knx_CB_registered, (uint8_t*)&Settings->switchmode, 1);
// move up uint8_t global_sensor_index[3] from 4C5 to 53C
memmove_P((uint8_t*)&Settings->global_sensor_index, (uint8_t*)&Settings->switchmode +29, 3);
// move dn uint8_t switchmode[MAX_SWITCHES_SET] from 4A9 to 4A8
memmove_P((uint8_t*)&Settings->switchmode, (uint8_t*)&Settings->switchmode +1, 28);
for (uint32_t i = 28; i < MAX_SWITCHES_SET; i++) {
Settings->switchmode[i] = SWITCH_MODE;
}
// move up int8_t shutter_tilt_pos[MAX_SHUTTERS], uint16_t influxdb_period and uint16_t rf_duplicate_timefrom 51C to 534
memmove_P((uint8_t*)&Settings->shutter_tilt_pos, (uint8_t*)&Settings->shutter_tilt_config +12, 8);
// move up int8_t shutter_tilt_config[5][MAX_SHUTTERS] from 508 to 510
memmove_P((uint8_t*)&Settings->shutter_tilt_config, (uint8_t*)&Settings->shutter_tilt_config -8, 20);
for (uint32_t i = 14; i < MAX_INTERLOCKS_SET; i++) {
Settings->interlock[i] = 0;
}
}
Settings->version = TASMOTA_VERSION;
SettingsSave(1);
}

View File

@ -832,6 +832,7 @@ int32_t UpdateDevicesPresent(int32_t change) {
else if (devices_present >= POWER_SIZE) { // Support up to uint32_t as bitmask
difference = devices_present - POWER_SIZE;
devices_present = POWER_SIZE;
AddLog(LOG_LEVEL_DEBUG, PSTR("APP: Max number of devices reached"));
}
TasmotaGlobal.devices_present = devices_present;
return difference;

View File

@ -2882,11 +2882,11 @@ void CmndTouchCal(void) {
if (XdrvMailbox.payload == 0) {
TouchButton.calibration = 0;
}
else if (XdrvMailbox.payload < MAX_KEYS + 1) {
else if (XdrvMailbox.payload < MAX_KEYS) {
TouchButton.calibration = bitSet(TouchButton.calibration, XdrvMailbox.payload);
}
else if (XdrvMailbox.payload == 255) {
TouchButton.calibration = 0x0FFFFFFF; // All MAX_KEYS pins
TouchButton.calibration = 0xFFFFFFFF; // All MAX_KEYS pins
}
}
ResponseCmndNumber(TouchButton.calibration);