Prep Shelly Pro 4PM

This commit is contained in:
Theo Arends 2023-01-20 14:28:58 +01:00
parent 498b0e55b8
commit aa78ffb733
6 changed files with 30 additions and 45 deletions

View File

@ -386,18 +386,27 @@ enum LightSubtypes { LST_NONE, LST_SINGLE, LST_COLDWARM, LST_RGB, LST_RGBW, LS
enum LightTypes { LT_BASIC, LT_PWM1, LT_PWM2, LT_PWM3, LT_PWM4, LT_PWM5, LT_PWM6, LT_PWM7, enum LightTypes { LT_BASIC, LT_PWM1, LT_PWM2, LT_PWM3, LT_PWM4, LT_PWM5, LT_PWM6, LT_PWM7,
LT_NU8, LT_SERIAL1, LT_SERIAL2, LT_RGB, LT_RGBW, LT_RGBWC, LT_NU14, LT_NU15 }; // Do not insert new fields LT_NU8, LT_SERIAL1, LT_SERIAL2, LT_RGB, LT_RGBW, LT_RGBWC, LT_NU14, LT_NU15 }; // Do not insert new fields
enum XsnsFunctions {FUNC_SETTINGS_OVERRIDE, FUNC_PIN_STATE, FUNC_I2C_INIT, FUNC_MODULE_INIT, FUNC_PRE_INIT, FUNC_INIT, enum XsnsFunctions { FUNC_SETTINGS_OVERRIDE, FUNC_I2C_INIT, FUNC_PRE_INIT, FUNC_INIT,
FUNC_LOOP, FUNC_SLEEP_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_200_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND, FUNC_LOOP, FUNC_SLEEP_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_200_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND,
FUNC_SAVE_SETTINGS, FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_INTERRUPT_STOP, FUNC_INTERRUPT_START, FUNC_SAVE_SETTINGS, FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_INTERRUPT_STOP, FUNC_INTERRUPT_START,
FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_WEB_COL_SENSOR, FUNC_COMMAND, FUNC_COMMAND_SENSOR, FUNC_COMMAND_DRIVER, FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_WEB_COL_SENSOR,
FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT, FUNC_MQTT_DATA, FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT,
FUNC_SET_POWER, FUNC_SET_DEVICE_POWER, FUNC_SHOW_SENSOR, FUNC_ANY_KEY, FUNC_LED_LINK, FUNC_SET_POWER, FUNC_SHOW_SENSOR, FUNC_ANY_KEY, FUNC_LED_LINK,
FUNC_ENERGY_EVERY_SECOND, FUNC_ENERGY_RESET, FUNC_ENERGY_EVERY_SECOND, FUNC_ENERGY_RESET,
FUNC_RULES_PROCESS, FUNC_TELEPERIOD_RULES_PROCESS, FUNC_SERIAL, FUNC_FREE_MEM, FUNC_BUTTON_PRESSED, FUNC_BUTTON_MULTI_PRESSED, FUNC_TELEPERIOD_RULES_PROCESS, FUNC_FREE_MEM,
FUNC_WEB_ADD_BUTTON, FUNC_WEB_ADD_CONSOLE_BUTTON, FUNC_WEB_ADD_MANAGEMENT_BUTTON, FUNC_WEB_ADD_MAIN_BUTTON, FUNC_WEB_ADD_BUTTON, FUNC_WEB_ADD_CONSOLE_BUTTON, FUNC_WEB_ADD_MANAGEMENT_BUTTON, FUNC_WEB_ADD_MAIN_BUTTON,
FUNC_WEB_GET_ARG, FUNC_WEB_ADD_HANDLER, FUNC_SET_CHANNELS, FUNC_SET_SCHEME, FUNC_HOTPLUG_SCAN, FUNC_TIME_SYNCED, FUNC_WEB_GET_ARG, FUNC_WEB_ADD_HANDLER, FUNC_SET_SCHEME, FUNC_HOTPLUG_SCAN, FUNC_TIME_SYNCED,
FUNC_DEVICE_GROUP_ITEM, FUNC_DEVICE_GROUP_ITEM,
FUNC_NETWORK_UP, FUNC_NETWORK_DOWN }; FUNC_NETWORK_UP, FUNC_NETWORK_DOWN,
FUNC_return_result = 200, // Insert function WITHOUT return results before here. Following functions return results
FUNC_PIN_STATE, FUNC_MODULE_INIT, FUNC_ADD_BUTTON, FUNC_ADD_SWITCH, FUNC_BUTTON_PRESSED, FUNC_BUTTON_MULTI_PRESSED,
FUNC_SET_DEVICE_POWER,
FUNC_MQTT_DATA, FUNC_SERIAL,
FUNC_COMMAND, FUNC_COMMAND_SENSOR, FUNC_COMMAND_DRIVER,
FUNC_RULES_PROCESS,
FUNC_SET_CHANNELS,
FUNC_last_function // Insert functions with return results before here
};
enum AddressConfigSteps { ADDR_IDLE, ADDR_RECEIVE, ADDR_SEND }; enum AddressConfigSteps { ADDR_IDLE, ADDR_RECEIVE, ADDR_SEND };

View File

@ -812,7 +812,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif #endif
#ifdef USE_ADE7953 #ifdef USE_ADE7953
#if defined(USE_I2C) || defined(USE_SPI) #if defined(USE_I2C) || defined(USE_SPI)
AGPIO(GPIO_ADE7953_IRQ) + 5, // ADE7953 IRQ - (1 = Shelly 2.5, 2 = Shelly EM, 3 = Shelly Plus 2PM, 4 = Shelly Pro 1PM, 5 = Shelly Pro 2PM) 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 AGPIO(GPIO_ADE7953_RST), // ADE7953 Reset
#ifdef USE_SPI #ifdef USE_SPI
AGPIO(GPIO_ADE7953_CS) + 2, // 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))

View File

@ -83,14 +83,6 @@ void ButtonTouchFlag(uint32_t button_bit) {
} }
#endif // ESP32 SOC_TOUCH_VERSION_1 or SOC_TOUCH_VERSION_2 #endif // ESP32 SOC_TOUCH_VERSION_1 or SOC_TOUCH_VERSION_2
uint32_t ButtonGetVirtualOffset(void) {
return Button.present;
}
void ButtonSetVirtual(uint32_t index, uint32_t state) {
Button.virtual_state[index] = state;
}
/*********************************************************************************************/ /*********************************************************************************************/
void ButtonProbe(void) { void ButtonProbe(void) {
@ -283,7 +275,7 @@ uint8_t ButtonSerial(uint8_t serial_in_byte) {
* SetOption73 (0) - Decouple button from relay and send just mqtt topic * SetOption73 (0) - Decouple button from relay and send just mqtt topic
\*********************************************************************************************/ \*********************************************************************************************/
void ButtonHandler(uint32_t mode) { void ButtonHandler(void) {
if (TasmotaGlobal.uptime < 4) { return; } // Block GPIO for 4 seconds after poweron to workaround Wemos D1 / Obi RTS circuit if (TasmotaGlobal.uptime < 4) { return; } // Block GPIO for 4 seconds after poweron to workaround Wemos D1 / Obi RTS circuit
uint8_t hold_time_extent = IMMINENT_RESET_FACTOR; // Extent hold time factor in case of iminnent Reset command uint8_t hold_time_extent = IMMINENT_RESET_FACTOR; // Extent hold time factor in case of iminnent Reset command
@ -308,7 +300,7 @@ void ButtonHandler(uint32_t mode) {
} }
} else } else
#endif // ESP8266 #endif // ESP8266
if (PinUsed(GPIO_KEY1, button_index) || (mode)) { if (PinUsed(GPIO_KEY1, button_index)) {
#if defined(SOC_TOUCH_VERSION_1) || defined(SOC_TOUCH_VERSION_2) #if defined(SOC_TOUCH_VERSION_1) || defined(SOC_TOUCH_VERSION_2)
if (bitRead(TouchButton.touch_mask, button_index) && bitRead(TouchButton.calibration, button_index +1)) { // Touch if (bitRead(TouchButton.touch_mask, button_index) && bitRead(TouchButton.calibration, button_index +1)) { // Touch
@ -536,7 +528,7 @@ void ButtonLoop(void) {
if (Button.present) { if (Button.present) {
if (TimeReached(Button.debounce)) { if (TimeReached(Button.debounce)) {
SetNextTimeInterval(Button.debounce, Settings->button_debounce); // ButtonDebounce (50) SetNextTimeInterval(Button.debounce, Settings->button_debounce); // ButtonDebounce (50)
ButtonHandler(0); ButtonHandler();
} }
} }
} }

View File

@ -65,10 +65,6 @@ void SwitchPulldownFlag(uint32 switch_bit) {
bitSet(Switch.pulldown_mask, switch_bit); bitSet(Switch.pulldown_mask, switch_bit);
} }
uint32_t SwitchGetVirtualOffset(void) {
return Switch.present;
}
void SwitchSetVirtual(uint32_t index, uint32_t state) { void SwitchSetVirtual(uint32_t index, uint32_t state) {
Switch.virtual_state[index] = state; Switch.virtual_state[index] = state;
} }

View File

@ -1143,24 +1143,14 @@ bool XdrvCall(uint32_t function) {
#ifdef USE_PROFILE_FUNCTION #ifdef USE_PROFILE_FUNCTION
#ifdef XFUNC_PTR_IN_ROM #ifdef XFUNC_PTR_IN_ROM
uint32_t index = pgm_read_byte(kXdrvList + x); uint32_t index = pgm_read_byte(kXdrvList + x);
#else #else
uint32_t index = kXdrvList[x]; uint32_t index = kXdrvList[x];
#endif #endif
PROFILE_FUNCTION("drv", index, function, profile_function_start); PROFILE_FUNCTION("drv", index, function, profile_function_start);
#endif // USE_PROFILE_FUNCTION #endif // USE_PROFILE_FUNCTION
if (result && ((FUNC_COMMAND == function) || if (result && (function > FUNC_return_result)) {
(FUNC_COMMAND_DRIVER == function) ||
(FUNC_MQTT_DATA == function) ||
(FUNC_RULES_PROCESS == function) ||
(FUNC_BUTTON_PRESSED == function) ||
(FUNC_SERIAL == function) ||
(FUNC_MODULE_INIT == function) ||
(FUNC_SET_CHANNELS == function) ||
(FUNC_PIN_STATE == function) ||
(FUNC_SET_DEVICE_POWER == function)
)) {
break; break;
} }
} }

View File

@ -1135,12 +1135,10 @@ bool XsnsCall(uint32_t function) {
PROFILE_FUNCTION("sns", index, function, profile_function_start); PROFILE_FUNCTION("sns", index, function, profile_function_start);
#endif // USE_PROFILE_FUNCTION #endif // USE_PROFILE_FUNCTION
if (result && ((FUNC_COMMAND == function) || if (result && (function > FUNC_return_result)) {
(FUNC_PIN_STATE == function) ||
(FUNC_COMMAND_SENSOR == function)
)) {
break; break;
} }
} }
} }