From 5243b17a1a49de6b09871340260a809d2c64fb93 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 3 Nov 2021 11:58:05 +0100 Subject: [PATCH] Add 1 second heartbeat GPIO --- CHANGELOG.md | 1 + RELEASENOTES.md | 1 + tasmota/language/af_AF.h | 1 + tasmota/language/bg_BG.h | 1 + tasmota/language/cs_CZ.h | 1 + tasmota/language/de_DE.h | 1 + tasmota/language/el_GR.h | 1 + tasmota/language/en_GB.h | 1 + tasmota/language/es_ES.h | 1 + tasmota/language/fr_FR.h | 1 + tasmota/language/fy_NL.h | 1 + tasmota/language/he_HE.h | 1 + tasmota/language/hu_HU.h | 1 + tasmota/language/it_IT.h | 1 + tasmota/language/ko_KO.h | 1 + tasmota/language/nl_NL.h | 1 + tasmota/language/pl_PL.h | 1 + tasmota/language/pt_BR.h | 1 + tasmota/language/pt_PT.h | 1 + tasmota/language/ro_RO.h | 1 + tasmota/language/ru_RU.h | 1 + tasmota/language/sk_SK.h | 1 + tasmota/language/sv_SE.h | 1 + tasmota/language/tr_TR.h | 1 + tasmota/language/uk_UA.h | 1 + tasmota/language/vi_VN.h | 1 + tasmota/language/zh_CN.h | 1 + tasmota/language/zh_TW.h | 1 + tasmota/support_rtc.ino | 6 ++++++ tasmota/support_tasmota.ino | 9 +++++++++ tasmota/tasmota.h | 2 ++ tasmota/tasmota.ino | 4 ++++ tasmota/tasmota_template.h | 6 +++++- 33 files changed, 54 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff6a13515..4a85f404d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ## [10.0.0.1] ### Added - Berry add module ``python_compat`` to be closer to Python syntax (#13428) +- 1 second heartbeat GPIO ### Changed - File editor no-wrap (#13427) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e1c2708a5..4c85900cd 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -102,6 +102,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo ## Changelog v10.0.0.1 ### Added +- 1 second heartbeat GPIO - ESP32 Berry add module ``python_compat`` to be closer to Python syntax [#13428](https://github.com/arendst/Tasmota/issues/13428) ### Breaking Changed diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 5c1a80e48..62ffd8920 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index f74e03c24..4c8478ea0 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 17d163560..08e72f1ea 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 1e0f05225..eeed35a6c 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index f40d5108c..df517a383 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 26e0d57d6..79eb011f1 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index a12da16ec..6ef4fa653 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 205c73c4b..5dad0c998 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 77f0f7582..569a0a830 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 43464a51c..b77b75a23 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 04a22efa8..713979b48 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 7759f4710..21ec94bdd 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 - RX" #define D_SENSOR_HRG15_TX "HRG15 - TX" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 444e36c34..a4ce5eae0 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index af90f2c06..7076b545f 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 8b9f119c2..52802b75c 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index c1b937a4f..4b59fce59 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 3bd0d530c..a5bdc4974 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index b6dd915e0..d4ca37c23 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index d90cacc8d..25942817c 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "А" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index c7d4fb659..aa77fbaef 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 7109033d3..1ff6c8108 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index b2a8a0fb3..301feed7e 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 1bc9908c1..044eaf47e 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "А" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 160e6d236..f31be5015 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 26cf0606f..3bfed5647 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 1991ba908..a82028e71 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -842,6 +842,7 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" +#define D_SENSOR_HEARTBEAT "Heartbeat" // Units #define D_UNIT_AMPERE "安培" diff --git a/tasmota/support_rtc.ino b/tasmota/support_rtc.ino index fe5fd10ec..03b7164fa 100644 --- a/tasmota/support_rtc.ino +++ b/tasmota/support_rtc.ino @@ -377,6 +377,12 @@ void RtcSecond(void) static uint32_t last_sync = 0; static bool mutex = false; + if ((TasmotaGlobal.init_state >= INIT_GPIOS) && PinUsed(GPIO_HEARTBEAT)) { + digitalWrite(Pin(GPIO_HEARTBEAT), ~TasmotaGlobal.heartbeat_inverted &1); + delayMicroseconds(50); + digitalWrite(Pin(GPIO_HEARTBEAT), TasmotaGlobal.heartbeat_inverted); + } + if (mutex) { return; } if (Rtc.time_synced) { diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index 4e30671d6..97fba4b6c 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -1766,6 +1766,10 @@ void GpioInit(void) TasmotaGlobal.ledlnk_inverted = 1; mpin -= (AGPIO(GPIO_LEDLNK_INV) - AGPIO(GPIO_LEDLNK)); } + else if (mpin == AGPIO(GPIO_HEARTBEAT_INV)) { + TasmotaGlobal.heartbeat_inverted = 1; + mpin -= (AGPIO(GPIO_HEARTBEAT_INV) - AGPIO(GPIO_HEARTBEAT)); + } else if ((mpin >= AGPIO(GPIO_PWM1_INV)) && (mpin < (AGPIO(GPIO_PWM1_INV) + MAX_PWMS))) { bitSet(TasmotaGlobal.pwm_inverted, mpin - AGPIO(GPIO_PWM1_INV)); mpin -= (AGPIO(GPIO_PWM1_INV) - AGPIO(GPIO_PWM1)); @@ -1891,6 +1895,11 @@ void GpioInit(void) #endif // ESP8266 } + if (PinUsed(GPIO_HEARTBEAT)) { + pinMode(Pin(GPIO_HEARTBEAT), OUTPUT); + digitalWrite(Pin(GPIO_HEARTBEAT), TasmotaGlobal.heartbeat_inverted); + } + // Digital input for (uint32_t i = 0; i < MAX_SWITCHES; i++) { if (PinUsed(GPIO_INPUT, i)) { diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index ea858c21b..d63d2db80 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -278,6 +278,8 @@ enum GetDateAndTimeOptions { DT_LOCAL, DT_UTC, DT_LOCALNOTZ, DT_DST, DT_STD, DT_ enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE}; +enum InitStates {INIT_NONE, INIT_GPIOS, INIT_DONE}; + enum WifiConfigOptions {WIFI_RESTART, EX_WIFI_SMARTCONFIG, WIFI_MANAGER, EX_WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY, MAX_WIFI_OPTION}; enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI, diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index b4e13dc30..f873a9fd2 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -148,6 +148,8 @@ struct TasmotaGlobal_t { bool enable_logging; // Enable logging StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits) + uint8_t init_state; // Tasmota init state + uint8_t heartbeat_inverted; // Heartbeat pulse inverted flag uint8_t spi_enabled; // SPI configured uint8_t soft_spi_enabled; // Software SPI configured uint8_t blinks; // Number of LED blinks @@ -430,6 +432,8 @@ void setup(void) { XdrvCall(FUNC_PRE_INIT); XsnsCall(FUNC_PRE_INIT); + TasmotaGlobal.init_state = INIT_GPIOS; + SetPowerOnState(); WifiConnect(); diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 8b5ffae8a..0de887e9c 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -175,6 +175,7 @@ enum UserSelectablePins { GPIO_BL0939_RX, // BL0939 Serial interface (Dual R3 v2) GPIO_BL0942_RX, // BL0942 Serial interface GPIO_HM330X_SET, // HM330X SET pin (sleep when low) + GPIO_HEARTBEAT, GPIO_HEARTBEAT_INV, GPIO_SENSOR_END }; enum ProgramSelectablePins { @@ -369,7 +370,8 @@ const char kSensorNames[] PROGMEM = D_SENSOR_VINDRIKTNING_RX "|" D_SENSOR_BL0939_RX "|" D_SENSOR_BL0942_RX "|" - D_SENSOR_HM330X_SET + D_SENSOR_HM330X_SET "|" + D_SENSOR_HEARTBEAT "|" D_SENSOR_HEARTBEAT "_i|" ; const char kSensorNamesFixed[] PROGMEM = @@ -428,6 +430,8 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif AGPIO(GPIO_OUTPUT_HI), // Fixed output high AGPIO(GPIO_OUTPUT_LO), // Fixed output low + AGPIO(GPIO_HEARTBEAT), // Every second pulsed high + AGPIO(GPIO_HEARTBEAT_INV), // Every second pulsed low #ifdef USE_FTC532 AGPIO(GPIO_FTC532), // FTC532 touch input #endif