mirror of https://github.com/arendst/Tasmota.git
parent
14c0a42203
commit
6821293819
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -3,27 +3,20 @@ All notable changes to this project will be documented in this file.
|
|||
|
||||
## [Unreleased] - Development
|
||||
|
||||
## [14.3.0.7]
|
||||
## [14.3.0.6]
|
||||
### 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)
|
||||
|
|
|
@ -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.7
|
||||
## Changelog v14.3.0.6
|
||||
### Added
|
||||
- Add command ``WebColor20`` to control color of Button when Off
|
||||
- DALI support for short addresses (gear) and groups
|
||||
|
@ -157,8 +157,6 @@ 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
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// compressed by tools/unishox/compress-html-uncompressed.py
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
const size_t HTTP_SCRIPT_MODULE_TEMPLATE_SIZE = 589;
|
||||
const size_t HTTP_SCRIPT_MODULE_TEMPLATE_SIZE = 602;
|
||||
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\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";
|
||||
"\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";
|
||||
|
||||
#define HTTP_SCRIPT_MODULE_TEMPLATE Decompress(HTTP_SCRIPT_MODULE_TEMPLATE_COMPRESSED,HTTP_SCRIPT_MODULE_TEMPLATE_SIZE).c_str()
|
|
@ -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=0;i<=b;i++){ce(i+1,t);}" // Add index 1 to 32
|
||||
"for(i=1;i<=b;i++){ce((i<10)?(' '+i):i,t);}"
|
||||
"eb('h'+g).value=u+1;" // Set selected value
|
||||
"t.style.visibility=(b>0)?'':'hidden';"
|
||||
"}"
|
||||
|
|
|
@ -38,6 +38,7 @@ 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)
|
||||
|
@ -45,17 +46,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 = 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
|
||||
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
|
||||
#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 = 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_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_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
|
||||
|
|
|
@ -509,7 +509,7 @@ const char kSensorNamesFixed[] PROGMEM =
|
|||
D_SENSOR_USER;
|
||||
|
||||
// Max number of GPIOs
|
||||
#define MAX_I2C 1 // Display no index if one bus
|
||||
#define MAX_I2C 0 // 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 -1, // Device specific options
|
||||
AGPIO(GPIO_OPTION_A) + MAX_OPTIONS_A, // Device specific options
|
||||
#ifdef ESP32
|
||||
AGPIO(GPIO_OPTION_E) + MAX_OPTIONS_E -1, // Device module emulation
|
||||
AGPIO(GPIO_OPTION_E) + MAX_OPTIONS_E, // Device module emulation
|
||||
#endif
|
||||
AGPIO(GPIO_KEY1) + MAX_KEYS -1, // Buttons
|
||||
AGPIO(GPIO_KEY1_NP) + MAX_KEYS -1,
|
||||
AGPIO(GPIO_KEY1) + MAX_KEYS, // Buttons
|
||||
AGPIO(GPIO_KEY1_NP) + MAX_KEYS,
|
||||
#ifdef ESP32
|
||||
AGPIO(GPIO_KEY1_PD) + MAX_KEYS -1,
|
||||
AGPIO(GPIO_KEY1_PD) + MAX_KEYS,
|
||||
#endif
|
||||
AGPIO(GPIO_KEY1_INV) + MAX_KEYS -1,
|
||||
AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS -1,
|
||||
AGPIO(GPIO_KEY1_INV) + MAX_KEYS,
|
||||
AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS,
|
||||
#ifdef ESP32
|
||||
AGPIO(GPIO_KEY1_INV_PD) + MAX_KEYS -1,
|
||||
AGPIO(GPIO_KEY1_INV_PD) + MAX_KEYS,
|
||||
#if defined(SOC_TOUCH_VERSION_1) || defined(SOC_TOUCH_VERSION_2)
|
||||
AGPIO(GPIO_KEY1_TC) + MAX_KEYS -1, // Touch button
|
||||
AGPIO(GPIO_KEY1_TC) + MAX_KEYS, // Touch button
|
||||
#endif // ESP32 SOC_TOUCH_VERSION_1 or SOC_TOUCH_VERSION_2
|
||||
#endif
|
||||
AGPIO(GPIO_SWT1) + MAX_SWITCHES -1, // User connected external switches
|
||||
AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES -1,
|
||||
AGPIO(GPIO_SWT1) + MAX_SWITCHES, // User connected external switches
|
||||
AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES,
|
||||
#ifdef ESP32
|
||||
AGPIO(GPIO_SWT1_PD) + MAX_SWITCHES -1,
|
||||
AGPIO(GPIO_SWT1_PD) + MAX_SWITCHES,
|
||||
#endif
|
||||
#ifdef ROTARY_V1
|
||||
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
|
||||
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
|
||||
#endif
|
||||
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,
|
||||
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,
|
||||
#ifdef USE_COUNTER
|
||||
AGPIO(GPIO_CNTR1) + MAX_COUNTERS -1, // Counters
|
||||
AGPIO(GPIO_CNTR1_NP) + MAX_COUNTERS -1,
|
||||
AGPIO(GPIO_CNTR1) + MAX_COUNTERS, // Counters
|
||||
AGPIO(GPIO_CNTR1_NP) + MAX_COUNTERS,
|
||||
#endif
|
||||
AGPIO(GPIO_PWM1) + MAX_PWMS -1, // RGB Red or C Cold White
|
||||
AGPIO(GPIO_PWM1_INV) + MAX_PWMS -1, // or extended PWM for ESP32
|
||||
AGPIO(GPIO_PWM1) + MAX_PWMS, // RGB Red or C Cold White
|
||||
AGPIO(GPIO_PWM1_INV) + MAX_PWMS, // 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 -1, // Pure digital input to be read via Berry
|
||||
AGPIO(GPIO_INTERRUPT) + MAX_SWITCHES -1, // Interrupt pins to be catched by 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
|
||||
#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 -1, // I2C SCL
|
||||
AGPIO(GPIO_I2C_SDA) + MAX_I2C -1, // I2C SDA
|
||||
AGPIO(GPIO_I2C_SCL) + MAX_I2C, // I2C SCL
|
||||
AGPIO(GPIO_I2C_SDA) + MAX_I2C, // 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 -1, // I2C via Serial TX
|
||||
AGPIO(GPIO_I2C_SER_RX) + MAX_I2C -1, // I2C via Serial RX
|
||||
AGPIO(GPIO_I2C_SER_TX) + MAX_I2C, // I2C via Serial TX
|
||||
AGPIO(GPIO_I2C_SER_RX) + MAX_I2C, // I2C via Serial RX
|
||||
#endif // USE_I2C_SERIAL
|
||||
#endif
|
||||
|
||||
#if defined(USE_I2S_AUDIO) || defined (USE_I2S)
|
||||
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
|
||||
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
|
||||
#endif
|
||||
|
||||
#ifdef USE_SPI
|
||||
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
|
||||
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
|
||||
#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 -1,
|
||||
AGPIO(GPIO_MCP23SXX_CS) + MAX_MCP23XXX,
|
||||
#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 -1,
|
||||
AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S,
|
||||
#endif
|
||||
|
||||
#ifdef USE_MCP23XXX_DRV
|
||||
AGPIO(GPIO_MCP23XXX_INT) + MAX_MCP23XXX -1,
|
||||
AGPIO(GPIO_MCP23XXX_INT) + MAX_MCP23XXX,
|
||||
#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 -1, // Single wire DS18B20 or DS18S20
|
||||
AGPIO(GPIO_DSB_OUT) + MAX_DSB -1, // Pseudo Single wire DS18B20 or DS18S20
|
||||
AGPIO(GPIO_DSB) + MAX_DSB, // Single wire DS18B20 or DS18S20
|
||||
AGPIO(GPIO_DSB_OUT) + MAX_DSB, // 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 : 1) -1, // WS2812 Led string, using RMT on ESP32
|
||||
AGPIO(GPIO_WS2812) + (MAX_RMT ? MAX_RMT + 1 : 0), // 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 -1, // SM2135 DATA
|
||||
AGPIO(GPIO_SM2135_DAT) + MAX_SM2135_DAT, // SM2135 DATA
|
||||
#endif // USE_SM2135
|
||||
#ifdef USE_SM2335
|
||||
AGPIO(GPIO_SM2335_CLK), // SM2335 CLOCK
|
||||
AGPIO(GPIO_SM2335_DAT) + MAX_SM2335_DAT -1, // SM2335 DATA
|
||||
AGPIO(GPIO_SM2335_DAT) + MAX_SM2335_DAT, // SM2335 DATA
|
||||
#endif // USE_SM2335
|
||||
#ifdef USE_BP1658CJ
|
||||
AGPIO(GPIO_BP1658CJ_CLK), // BP1658CJ CLOCK
|
||||
AGPIO(GPIO_BP1658CJ_DAT) + MAX_BP1658CJ_DAT -1, // BP1658CJ DATA
|
||||
AGPIO(GPIO_BP1658CJ_DAT) + MAX_BP1658CJ_DAT, // 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 -1, // IR remote
|
||||
AGPIO(GPIO_IRSEND) + MAX_IRSEND, // 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 -1, // SR04 Tri/TXgger pin
|
||||
AGPIO(GPIO_SR04_ECHO) + MAX_SR04 -1, // SR04 Ech/RXo pin
|
||||
AGPIO(GPIO_SR04_TRIG) + MAX_SR04, // SR04 Tri/TXgger pin
|
||||
AGPIO(GPIO_SR04_ECHO) + MAX_SR04, // 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 -1, // ADE7880 IRQ - (1 = IRQ1, 2 = IRQ2)
|
||||
AGPIO(GPIO_ADE7880_IRQ) + 2, // ADE7880 IRQ - (1 = IRQ1, 2 = IRQ2)
|
||||
#endif
|
||||
#ifdef USE_ADE7953
|
||||
#if defined(USE_I2C) || defined(USE_SPI)
|
||||
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_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_RST), // ADE7953 Reset
|
||||
#ifdef USE_SPI
|
||||
AGPIO(GPIO_ADE7953_CS) + 2 -1, // ADE7953 SPI Chip Select (1 = CS1 (1PM, 2PM), 2 = CS2 (2PM))
|
||||
AGPIO(GPIO_ADE7953_CS) + 2, // 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 -1, // CSE7761 Serial interface (1 = Dual R3, 2 = POWCT)
|
||||
AGPIO(GPIO_CSE7761_RX) + MAX_CSE7761, // 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 -1, // BL0906 Serial interface (Athom EM6)
|
||||
AGPIO(GPIO_BL0906_RX) + MAX_BL0906_RX, // 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 -1, // BL0942 Serial interface
|
||||
AGPIO(GPIO_BL0942_RX) + MAX_BL0942_RX, // 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 -1, // Zigbee reset, pin 1 is reset, pin 2 is bootloader mode
|
||||
AGPIO(GPIO_ZIGBEE_RST) + 2, // 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 -1, //MAX31855 Serial interface
|
||||
AGPIO(GPIO_MAX31855CS) + MAX_MAX31855S, //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 -1, // A4988 microstep pin1 to pin3
|
||||
AGPIO(GPIO_A4988_MS1) + MAX_A4988_MSS, // 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 -1, // When using multiple VL53LXX.
|
||||
AGPIO(GPIO_VL53LXX_XSHUT1) + VL53LXX_MAX_SENSORS, // When using multiple VL53LXX.
|
||||
#endif
|
||||
#ifdef USE_FLOWRATEMETER
|
||||
AGPIO(GPIO_FLOWRATEMETER_IN) + MAX_FLOWRATEMETER -1, // Flow meter Pin
|
||||
AGPIO(GPIO_FLOWRATEMETER_IN) + MAX_FLOWRATEMETER, // 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 -1, // Dingtian Relay board - 8,16,24 or 32 relays & inputs
|
||||
AGPIO(GPIO_DINGTIAN_CLK) + MAX_DINGTIAN_SHIFT, // 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 -1,
|
||||
AGPIO(GPIO_MAGIC_SWITCH) + MAX_MAGIC_SWITCH_MODES,
|
||||
#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 -1, // Hall effect sensor connected to GPIO36 and 39
|
||||
AGPIO(GPIO_HALLEFFECT) + 2, // 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 -1,
|
||||
AGPIO(GPIO_WEBCAM_DATA) + MAX_WEBCAM_DATA,
|
||||
AGPIO(GPIO_WEBCAM_VSYNC),
|
||||
AGPIO(GPIO_WEBCAM_HREF),
|
||||
AGPIO(GPIO_WEBCAM_PCLK),
|
||||
AGPIO(GPIO_WEBCAM_PSCLK),
|
||||
AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD -1,
|
||||
AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD,
|
||||
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 -1,
|
||||
AGPIO(GPIO_BIOPDU_BIT) + 3,
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------------------------*\
|
||||
* ESP32 multiple Analog / Digital converter inputs
|
||||
\*-------------------------------------------------------------------------------------------*/
|
||||
|
||||
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
|
||||
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
|
||||
#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 -1, // Button
|
||||
AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS -1,
|
||||
AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button
|
||||
AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS,
|
||||
AGPIO(GPIO_ADC_RANGE), // Range
|
||||
AGPIO(GPIO_ADC_CT_POWER), // Current
|
||||
AGPIO(GPIO_ADC_JOY), // Joystick
|
||||
|
|
|
@ -679,24 +679,24 @@ typedef struct {
|
|||
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]; // 4C9 4C5 - Moved up by 4 bytes in v14.3.0.7
|
||||
uint16_t dns_timeout; // 4CC 4C8
|
||||
uint8_t ds3502_state[MAX_DS3502]; // 4CE 4CA
|
||||
uint16_t influxdb_port; // 4D2 4CE
|
||||
power_t interlock[MAX_INTERLOCKS_SET]; // 4D4 4D0 MAX_INTERLOCKS = MAX_RELAYS / 2
|
||||
int8_t shutter_tilt_config[5][MAX_SHUTTERS]; // 514 508 - Moved up 12 bytes in v14.3.0.7
|
||||
int8_t shutter_tilt_pos[MAX_SHUTTERS]; // 528 51C
|
||||
uint16_t influxdb_period; // 52C 520
|
||||
uint16_t rf_duplicate_time; // 52E 522
|
||||
int32_t weight_absconv_a; // 530 524
|
||||
int32_t weight_absconv_b; // 534 528
|
||||
uint16_t mqtt_keepalive; // 538 52C
|
||||
uint16_t mqtt_socket_timeout; // 53A 52E
|
||||
uint8_t mqtt_wifi_timeout; // 53C 530
|
||||
uint8_t ina219_mode; // 53D 531
|
||||
uint8_t weight_precision; // 53E 532
|
||||
uint8_t global_sensor_index[3]; // 4C5
|
||||
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
|
||||
int32_t weight_absconv_a; // 524
|
||||
int32_t weight_absconv_b; // 528
|
||||
uint16_t mqtt_keepalive; // 52C
|
||||
uint16_t mqtt_socket_timeout; // 52E
|
||||
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 free_53F; // 53F
|
||||
uint8_t free_533[13]; // 533
|
||||
|
||||
uint16_t tcp_baudrate; // 540
|
||||
uint16_t button_debounce; // 542
|
||||
|
|
|
@ -22,6 +22,6 @@
|
|||
|
||||
#define TASMOTA_SHA_SHORT // Filled by Github sed
|
||||
|
||||
const uint32_t TASMOTA_VERSION = 0x0E030007; // 14.3.0.7
|
||||
const uint32_t TASMOTA_VERSION = 0x0E030006; // 14.3.0.6
|
||||
|
||||
#endif // _TASMOTA_VERSION_H_
|
||||
|
|
|
@ -1855,16 +1855,6 @@ void SettingsDelta(void) {
|
|||
char scolor[10];
|
||||
WebHexCode(COL_BUTTON_OFF, GetTextIndexed(scolor, sizeof(scolor), COL_BUTTON_OFF, kWebColors));
|
||||
}
|
||||
if (Settings->version < 0x0E030007) { // 14.3.0.7
|
||||
memmove_P((uint8_t*)&Settings->shutter_tilt_config, (uint8_t*)&Settings->shutter_tilt_config - 12, 0x2B);
|
||||
for (uint32_t i = 14; i < MAX_INTERLOCKS_SET; i++) {
|
||||
Settings->interlock[i] = 0;
|
||||
}
|
||||
memmove_P((uint8_t*)&Settings->global_sensor_index, (uint8_t*)&Settings->global_sensor_index - 4, 0x43);
|
||||
for (uint32_t i = 28; i < MAX_SWITCHES_SET; i++) {
|
||||
Settings->switchmode[i] = SWITCH_MODE;
|
||||
}
|
||||
}
|
||||
|
||||
Settings->version = TASMOTA_VERSION;
|
||||
SettingsSave(1);
|
||||
|
|
|
@ -832,7 +832,6 @@ 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;
|
||||
|
|
|
@ -2882,11 +2882,11 @@ void CmndTouchCal(void) {
|
|||
if (XdrvMailbox.payload == 0) {
|
||||
TouchButton.calibration = 0;
|
||||
}
|
||||
else if (XdrvMailbox.payload < MAX_KEYS) {
|
||||
else if (XdrvMailbox.payload < MAX_KEYS + 1) {
|
||||
TouchButton.calibration = bitSet(TouchButton.calibration, XdrvMailbox.payload);
|
||||
}
|
||||
else if (XdrvMailbox.payload == 255) {
|
||||
TouchButton.calibration = 0xFFFFFFFF; // All MAX_KEYS pins
|
||||
TouchButton.calibration = 0x0FFFFFFF; // All MAX_KEYS pins
|
||||
}
|
||||
}
|
||||
ResponseCmndNumber(TouchButton.calibration);
|
||||
|
|
Loading…
Reference in New Issue