mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-29 13:46:37 +00:00
v6.0.0c - Add spare SetOptions
6.0.0c * Add support for bitflags SetOption50 .. SetOption81 (#3118)
This commit is contained in:
parent
d5a08077af
commit
c896437124
@ -15,7 +15,7 @@ If you like **Sonoff-Tasmota**, give it a star, or fork it and contribute!
|
|||||||
### Development
|
### Development
|
||||||
[](https://travis-ci.org/arendst/Sonoff-Tasmota)
|
[](https://travis-ci.org/arendst/Sonoff-Tasmota)
|
||||||
|
|
||||||
Current version is **6.0.0b** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
Current version is **6.0.0c** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
||||||
|
|
||||||
### Disclaimer
|
### Disclaimer
|
||||||
:warning: **DANGER OF ELECTROCUTION** :warning:
|
:warning: **DANGER OF ELECTROCUTION** :warning:
|
||||||
@ -123,6 +123,7 @@ Different firmware images are released based on Features and Sensors selection g
|
|||||||
| USE_SHT | x | x | - | x | x |
|
| USE_SHT | x | x | - | x | x |
|
||||||
| USE_SHT3X | x | x | - | x | x |
|
| USE_SHT3X | x | x | - | x | x |
|
||||||
| USE_HTU | x | x | - | x | x |
|
| USE_HTU | x | x | - | x | x |
|
||||||
|
| USE_LM75AD | x | - | - | x | x |
|
||||||
| USE_BMP | x | x | - | x | x |
|
| USE_BMP | x | x | - | x | x |
|
||||||
| USE_BME680 | - | - | - | - | x |
|
| USE_BME680 | - | - | - | - | x |
|
||||||
| USE_SGP30 | x | - | - | x | x |
|
| USE_SGP30 | x | - | - | x | x |
|
||||||
@ -133,6 +134,7 @@ Different firmware images are released based on Features and Sensors selection g
|
|||||||
| USE_ADS1115 | - | - | - | - | x |
|
| USE_ADS1115 | - | - | - | - | x |
|
||||||
| USE_ADS1115_I2CDEV | - | - | - | - | - |
|
| USE_ADS1115_I2CDEV | - | - | - | - | - |
|
||||||
| USE_INA219 | - | - | - | - | x |
|
| USE_INA219 | - | - | - | - | x |
|
||||||
|
| USE_APDS9960 | - | - | - | - | - |
|
||||||
| USE_MGS | - | - | - | - | x |
|
| USE_MGS | - | - | - | - | x |
|
||||||
| USE_SPI | - | - | - | - | - |
|
| USE_SPI | - | - | - | - | - |
|
||||||
| USE_MHZ19 | x | x | - | x | x |
|
| USE_MHZ19 | x | x | - | x | x |
|
||||||
@ -141,7 +143,8 @@ Different firmware images are released based on Features and Sensors selection g
|
|||||||
| USE_NOVA_SDS | x | - | - | x | x |
|
| USE_NOVA_SDS | x | - | - | x | x |
|
||||||
| USE_PZEM004T | x | x | - | x | x |
|
| USE_PZEM004T | x | x | - | x | x |
|
||||||
| USE_SERIAL_BRIDGE | x | - | - | x | x |
|
| USE_SERIAL_BRIDGE | x | - | - | x | x |
|
||||||
| USE_SDM120 | - | - | - | - | x |
|
| USE_SDM120 | x | - | - | - | x |
|
||||||
|
| USE_SDM630 | x | - | - | - | x |
|
||||||
| USE_IR_REMOTE | x | x | - | x | x |
|
| USE_IR_REMOTE | x | x | - | x | x |
|
||||||
| USE_IR_HVAC | - | - | - | - | x |
|
| USE_IR_HVAC | - | - | - | - | x |
|
||||||
| USE_IR_RECEIVE | x | - | - | x | x |
|
| USE_IR_RECEIVE | x | - | - | x | x |
|
||||||
@ -149,6 +152,8 @@ Different firmware images are released based on Features and Sensors selection g
|
|||||||
| USE_WS2812_DMA | - | - | - | - | - |
|
| USE_WS2812_DMA | - | - | - | - | - |
|
||||||
| USE_ARILUX_RF | x | x | - | x | x |
|
| USE_ARILUX_RF | x | x | - | x | x |
|
||||||
| USE_SR04 | x | - | - | x | x |
|
| USE_SR04 | x | - | - | x | x |
|
||||||
|
| USE_TM1638 | - | - | - | - | - |
|
||||||
|
| USE_RF_FLASH | x | - | - | x | x |
|
||||||
|
|
||||||
#### Typical File Size
|
#### Typical File Size
|
||||||
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
/* 6.0.0b
|
/* 6.0.0c
|
||||||
|
* Add support for bitflags SetOption50 .. SetOption81 (#3118)
|
||||||
|
*
|
||||||
|
* 6.0.0b
|
||||||
* Add support for BlitzWolf BW-SHP2 (and Homecube, Gosund SP1) Energy Monitoring Smart Socket (#2223)
|
* Add support for BlitzWolf BW-SHP2 (and Homecube, Gosund SP1) Energy Monitoring Smart Socket (#2223)
|
||||||
* Add support for Sonoff iFan02 as module 44 introducing command FanSpeed 0..3 (#2839)
|
* Add support for Sonoff iFan02 as module 44 introducing command FanSpeed 0..3 (#2839)
|
||||||
* Add support for Sonoff S26 Smart Socket (#2808)
|
* Add support for Sonoff S26 Smart Socket (#2808)
|
||||||
|
@ -20,21 +20,21 @@
|
|||||||
#ifndef _SETTINGS_H_
|
#ifndef _SETTINGS_H_
|
||||||
#define _SETTINGS_H_
|
#define _SETTINGS_H_
|
||||||
|
|
||||||
#define PARAM8_SIZE 18 // Number of param bytes
|
#define PARAM8_SIZE 18 // Number of param bytes (SetOption)
|
||||||
|
|
||||||
typedef union { // Restricted by MISRA-C Rule 18.4 but so usefull...
|
typedef union { // Restricted by MISRA-C Rule 18.4 but so usefull...
|
||||||
uint32_t data; // Allow bit manipulation using SetOption
|
uint32_t data; // Allow bit manipulation using SetOption
|
||||||
struct {
|
struct { // SetOption0 .. SetOption31
|
||||||
uint32_t save_state : 1; // bit 0
|
uint32_t save_state : 1; // bit 0
|
||||||
uint32_t button_restrict : 1; // bit 1
|
uint32_t button_restrict : 1; // bit 1
|
||||||
uint32_t value_units : 1; // bit 2
|
uint32_t value_units : 1; // bit 2
|
||||||
uint32_t mqtt_enabled : 1; // bit 3
|
uint32_t mqtt_enabled : 1; // bit 3
|
||||||
uint32_t mqtt_response : 1; // bit 4
|
uint32_t mqtt_response : 1; // bit 4
|
||||||
uint32_t mqtt_power_retain : 1;
|
uint32_t mqtt_power_retain : 1; // CMND_POWERRETAIN
|
||||||
uint32_t mqtt_button_retain : 1;
|
uint32_t mqtt_button_retain : 1; // CMND_BUTTONRETAIN
|
||||||
uint32_t mqtt_switch_retain : 1;
|
uint32_t mqtt_switch_retain : 1; // CMND_SWITCHRETAIN
|
||||||
uint32_t temperature_conversion : 1; // bit 8
|
uint32_t temperature_conversion : 1; // bit 8
|
||||||
uint32_t mqtt_sensor_retain : 1;
|
uint32_t mqtt_sensor_retain : 1; // CMND_SENSORRETAIN
|
||||||
uint32_t mqtt_offline : 1; // bit 10
|
uint32_t mqtt_offline : 1; // bit 10
|
||||||
uint32_t button_swap : 1; // bit 11 (v5.1.6)
|
uint32_t button_swap : 1; // bit 11 (v5.1.6)
|
||||||
uint32_t stop_flash_rotate : 1; // bit 12 (v5.2.0)
|
uint32_t stop_flash_rotate : 1; // bit 12 (v5.2.0)
|
||||||
@ -60,8 +60,46 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
|||||||
};
|
};
|
||||||
} SysBitfield;
|
} SysBitfield;
|
||||||
|
|
||||||
typedef union {
|
typedef union { // Restricted by MISRA-C Rule 18.4 but so usefull...
|
||||||
uint32_t data; // Allow bit manipulation using SetOption
|
uint32_t data; // Allow bit manipulation using SetOption
|
||||||
|
struct { // SetOption50 .. SetOption81
|
||||||
|
uint32_t spare00 : 1;
|
||||||
|
uint32_t spare01 : 1;
|
||||||
|
uint32_t spare02 : 1;
|
||||||
|
uint32_t spare03 : 1;
|
||||||
|
uint32_t spare04 : 1;
|
||||||
|
uint32_t spare05 : 1;
|
||||||
|
uint32_t spare06 : 1;
|
||||||
|
uint32_t spare07 : 1;
|
||||||
|
uint32_t spare08 : 1;
|
||||||
|
uint32_t spare09 : 1;
|
||||||
|
uint32_t spare10 : 1;
|
||||||
|
uint32_t spare11 : 1;
|
||||||
|
uint32_t spare12 : 1;
|
||||||
|
uint32_t spare13 : 1;
|
||||||
|
uint32_t spare14 : 1;
|
||||||
|
uint32_t spare15 : 1;
|
||||||
|
uint32_t spare16 : 1;
|
||||||
|
uint32_t spare17 : 1;
|
||||||
|
uint32_t spare18 : 1;
|
||||||
|
uint32_t spare19 : 1;
|
||||||
|
uint32_t spare20 : 1;
|
||||||
|
uint32_t spare21 : 1;
|
||||||
|
uint32_t spare22 : 1;
|
||||||
|
uint32_t spare23 : 1;
|
||||||
|
uint32_t spare24 : 1;
|
||||||
|
uint32_t spare25 : 1;
|
||||||
|
uint32_t spare26 : 1;
|
||||||
|
uint32_t spare27 : 1;
|
||||||
|
uint32_t spare28 : 1;
|
||||||
|
uint32_t spare29 : 1;
|
||||||
|
uint32_t spare30 : 1;
|
||||||
|
uint32_t spare31 : 1;
|
||||||
|
};
|
||||||
|
} SysBitfield3;
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
uint32_t data; // Allow bit manipulation
|
||||||
struct {
|
struct {
|
||||||
uint32_t spare00 : 1;
|
uint32_t spare00 : 1;
|
||||||
uint32_t spare01 : 1;
|
uint32_t spare01 : 1;
|
||||||
@ -192,7 +230,7 @@ struct SYSCFG {
|
|||||||
byte free_2fa[1]; // 2FA
|
byte free_2fa[1]; // 2FA
|
||||||
|
|
||||||
uint8_t ledstate; // 2FB
|
uint8_t ledstate; // 2FB
|
||||||
uint8_t param[PARAM8_SIZE]; // 2FC
|
uint8_t param[PARAM8_SIZE]; // 2FC SetOption32 .. SetOption49
|
||||||
int16_t toffset[2]; // 30E
|
int16_t toffset[2]; // 30E
|
||||||
|
|
||||||
byte free_312[1]; // 312
|
byte free_312[1]; // 312
|
||||||
@ -229,9 +267,7 @@ struct SYSCFG {
|
|||||||
uint16_t blinktime; // 39A
|
uint16_t blinktime; // 39A
|
||||||
uint16_t blinkcount; // 39C
|
uint16_t blinkcount; // 39C
|
||||||
uint16_t light_rotation; // 39E
|
uint16_t light_rotation; // 39E
|
||||||
|
SysBitfield3 flag3; // 3A0
|
||||||
byte free_3A0[4]; // 3A0
|
|
||||||
|
|
||||||
uint8_t switchmode[MAX_SWITCHES]; // 3A4 (6.0.0b - moved from 0x4CA)
|
uint8_t switchmode[MAX_SWITCHES]; // 3A4 (6.0.0b - moved from 0x4CA)
|
||||||
char friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC
|
char friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC
|
||||||
char switch_topic[33]; // 430
|
char switch_topic[33]; // 430
|
||||||
|
@ -777,6 +777,11 @@ void SettingsDelta()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Settings.version < 0x06000003) {
|
||||||
|
Settings.flag.rules_enabled = 0;
|
||||||
|
Settings.flag.rules_once = 0;
|
||||||
|
Settings.flag3.data = 0;
|
||||||
|
}
|
||||||
|
|
||||||
Settings.version = VERSION;
|
Settings.version = VERSION;
|
||||||
SettingsSave(1);
|
SettingsSave(1);
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
||||||
====================================================*/
|
====================================================*/
|
||||||
|
|
||||||
#define VERSION 0x06000002 // 6.0.0b
|
#define VERSION 0x06000003 // 6.0.0c
|
||||||
|
|
||||||
// Location specific includes
|
// Location specific includes
|
||||||
#include <core_version.h> // Arduino_Esp8266 version information (ARDUINO_ESP8266_RELEASE and ARDUINO_ESP8266_RELEASE_2_3_0)
|
#include <core_version.h> // Arduino_Esp8266 version information (ARDUINO_ESP8266_RELEASE and ARDUINO_ESP8266_RELEASE_2_3_0)
|
||||||
@ -402,7 +402,6 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
|||||||
char stemp1[TOPSZ];
|
char stemp1[TOPSZ];
|
||||||
char *p;
|
char *p;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
byte ptype = 0;
|
|
||||||
byte jsflg = 0;
|
byte jsflg = 0;
|
||||||
byte lines = 1;
|
byte lines = 1;
|
||||||
uint8_t grpflg = 0;
|
uint8_t grpflg = 0;
|
||||||
@ -602,75 +601,76 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len)
|
|||||||
XsnsCall(FUNC_COMMAND);
|
XsnsCall(FUNC_COMMAND);
|
||||||
// if (!XsnsCall(FUNC_COMMAND)) type = NULL;
|
// if (!XsnsCall(FUNC_COMMAND)) type = NULL;
|
||||||
}
|
}
|
||||||
else if ((CMND_SETOPTION == command_code) && (index <= P_MAX_PARAM8 + 31)) {
|
else if ((CMND_SETOPTION == command_code) && (index < 82)) {
|
||||||
if (index <= 31) {
|
byte ptype;
|
||||||
ptype = 0; // SetOption0 .. 31
|
byte pindex;
|
||||||
} else {
|
if (index <= 31) { // SetOption0 .. 31 = Settings.flag
|
||||||
ptype = 1; // SetOption32 ..
|
ptype = 0;
|
||||||
index = index -32;
|
pindex = index; // 0 .. 31
|
||||||
|
}
|
||||||
|
else if (index <= 49) { // SetOption32 .. 49 = Settings.param
|
||||||
|
ptype = 2;
|
||||||
|
pindex = index -32; // 0 .. 17 (= PARAM8_SIZE -1)
|
||||||
|
}
|
||||||
|
else { // SetOption50 .. 81 = Settings.flag3
|
||||||
|
ptype = 1;
|
||||||
|
pindex = index -50; // 0 .. 31
|
||||||
}
|
}
|
||||||
if (payload >= 0) {
|
if (payload >= 0) {
|
||||||
if (0 == ptype) { // SetOption0 .. 31
|
if (0 == ptype) { // SetOption0 .. 31
|
||||||
if (payload <= 1) {
|
if (payload <= 1) {
|
||||||
switch (index) {
|
switch (pindex) {
|
||||||
case 3: // mqtt
|
case 5: // mqtt_power_retain (CMND_POWERRETAIN)
|
||||||
case 15: // pwm_control
|
case 6: // mqtt_button_retain (CMND_BUTTONRETAIN)
|
||||||
|
case 7: // mqtt_switch_retain (CMND_SWITCHRETAIN)
|
||||||
|
case 9: // mqtt_sensor_retain (CMND_SENSORRETAIN)
|
||||||
|
case 22: // mqtt_serial (SerialSend and SerialLog)
|
||||||
|
ptype = 99; // Command Error
|
||||||
|
break; // Ignore command SetOption
|
||||||
|
case 3: // mqtt
|
||||||
|
case 15: // pwm_control
|
||||||
restart_flag = 2;
|
restart_flag = 2;
|
||||||
case 0: // save_state
|
default:
|
||||||
case 1: // button_restrict
|
bitWrite(Settings.flag.data, pindex, payload);
|
||||||
case 2: // value_units
|
|
||||||
case 4: // mqtt_response
|
|
||||||
case 8: // temperature_conversion
|
|
||||||
case 10: // mqtt_offline
|
|
||||||
case 11: // button_swap
|
|
||||||
case 12: // stop_flash_rotate
|
|
||||||
case 13: // button_single
|
|
||||||
case 14: // interlock
|
|
||||||
case 16: // ws_clock_reverse
|
|
||||||
case 17: // decimal_text
|
|
||||||
case 18: // light_signal
|
|
||||||
case 19: // hass_discovery
|
|
||||||
case 20: // not_power_linked
|
|
||||||
case 21: // no_power_on_check
|
|
||||||
// case 22: // mqtt_serial - use commands SerialSend and SerialLog
|
|
||||||
// case 23: // rules_enabled - use command Rule
|
|
||||||
// case 24: // rules_once
|
|
||||||
// case 25: // knx_enabled
|
|
||||||
case 26: // device_index_enable
|
|
||||||
// case 27: // knx_enable_enhancement
|
|
||||||
case 28: // rf_receive_decimal
|
|
||||||
case 29: // ir_receive_decimal
|
|
||||||
case 30: // hass_light
|
|
||||||
bitWrite(Settings.flag.data, index, payload);
|
|
||||||
}
|
}
|
||||||
if (12 == index) { // stop_flash_rotate
|
if (12 == pindex) { // stop_flash_rotate
|
||||||
stop_flash_rotate = payload;
|
stop_flash_rotate = payload;
|
||||||
SettingsSave(2);
|
SettingsSave(2);
|
||||||
}
|
}
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
if ((19 == index) || (30 == index)) { // hass_discovery or hass_light
|
if ((19 == pindex) || (30 == pindex)) {
|
||||||
HAssDiscovery(1);
|
HAssDiscovery(1); // hass_discovery or hass_light
|
||||||
}
|
}
|
||||||
#endif // USE_HOME_ASSISTANT
|
#endif // USE_HOME_ASSISTANT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // SetOption32 ..
|
else if (1 == ptype) { // SetOption50 .. 81
|
||||||
switch (index) {
|
if (payload <= 1) {
|
||||||
|
bitWrite(Settings.flag3.data, pindex, payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { // SetOption32 .. 49
|
||||||
|
/*
|
||||||
|
switch (pindex) {
|
||||||
case P_HOLD_TIME:
|
case P_HOLD_TIME:
|
||||||
if ((payload >= 1) && (payload <= 250)) {
|
|
||||||
Settings.param[P_HOLD_TIME] = payload;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case P_MAX_POWER_RETRY:
|
case P_MAX_POWER_RETRY:
|
||||||
if ((payload >= 1) && (payload <= 250)) {
|
if ((payload >= 1) && (payload <= 250)) {
|
||||||
Settings.param[P_MAX_POWER_RETRY] = payload;
|
Settings.param[pindex] = payload;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
ptype = 99; // Command Error
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if ((payload >= 1) && (payload <= 250)) {
|
||||||
|
Settings.param[pindex] = payload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ptype) snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), Settings.param[index]);
|
if (ptype < 99) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, (ptype) ? index +32 : index, (ptype) ? stemp1 : GetStateText(bitRead(Settings.flag.data, index)));
|
if (2 == ptype) snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), Settings.param[pindex]);
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, index, (2 == ptype) ? stemp1 : (1 == ptype) ? GetStateText(bitRead(Settings.flag3.data, pindex)) : GetStateText(bitRead(Settings.flag.data, pindex)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (CMND_TEMPERATURE_RESOLUTION == command_code) {
|
else if (CMND_TEMPERATURE_RESOLUTION == command_code) {
|
||||||
if ((payload >= 0) && (payload <= 3)) {
|
if ((payload >= 0) && (payload <= 3)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user