From d1b1585d1c3fe02b11b2a53a502c424c9a36d62c Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 9 Apr 2020 15:32:23 +0200 Subject: [PATCH] Prep for easier preconfigurations --- tasmota/settings.ino | 160 --------- tasmota/tasmota.h | 34 +- tasmota/tasmota.ino | 2 +- ...asmota_post.h => tasmota_configurations.h} | 176 +-------- tasmota/tasmota_globals.h | 335 ++++++++++++++++++ 5 files changed, 359 insertions(+), 348 deletions(-) rename tasmota/{tasmota_post.h => tasmota_configurations.h} (90%) create mode 100644 tasmota/tasmota_globals.h diff --git a/tasmota/settings.ino b/tasmota/settings.ino index caa87eb05..20c5d87c8 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -17,166 +17,6 @@ along with this program. If not, see . */ -#ifndef DOMOTICZ_UPDATE_TIMER -#define DOMOTICZ_UPDATE_TIMER 0 // [DomoticzUpdateTimer] Send relay status (0 = disable, 1 - 3600 seconds) (Optional) -#endif - -#ifndef EMULATION -#define EMULATION EMUL_NONE // [Emulation] Select Belkin WeMo (single relay/light) or Hue Bridge emulation (multi relay/light) (EMUL_NONE, EMUL_WEMO or EMUL_HUE) -#endif - -#ifndef MTX_ADDRESS1 // Add Display Support for up to eigth Matrices -#define MTX_ADDRESS1 0 -#endif -#ifndef MTX_ADDRESS2 -#define MTX_ADDRESS2 0 -#endif -#ifndef MTX_ADDRESS3 -#define MTX_ADDRESS3 0 -#endif -#ifndef MTX_ADDRESS4 -#define MTX_ADDRESS4 0 -#endif -#ifndef MTX_ADDRESS5 -#define MTX_ADDRESS5 0 -#endif -#ifndef MTX_ADDRESS6 -#define MTX_ADDRESS6 0 -#endif -#ifndef MTX_ADDRESS7 -#define MTX_ADDRESS7 0 -#endif -#ifndef MTX_ADDRESS8 -#define MTX_ADDRESS8 0 -#endif - -#ifndef HOME_ASSISTANT_DISCOVERY_ENABLE -#define HOME_ASSISTANT_DISCOVERY_ENABLE 0 -#endif - -#ifndef LATITUDE -#define LATITUDE 48.858360 // [Latitude] Your location to be used with sunrise and sunset -#endif -#ifndef LONGITUDE -#define LONGITUDE 2.294442 // [Longitude] Your location to be used with sunrise and sunset -#endif - -#ifndef WORKING_PERIOD -#define WORKING_PERIOD 5 // Working period of the SDS Sensor, Takes a reading every X Minutes -#endif - -#ifndef COLOR_TEXT -#define COLOR_TEXT "#000" // Global text color - Black -#endif -#ifndef COLOR_BACKGROUND -#define COLOR_BACKGROUND "#fff" // Global background color - White -#endif -#ifndef COLOR_FORM -#define COLOR_FORM "#f2f2f2" // Form background color - Greyish -#endif -#ifndef COLOR_INPUT_TEXT -#define COLOR_INPUT_TEXT "#000" // Input text color - Black -#endif -#ifndef COLOR_INPUT -#define COLOR_INPUT "#fff" // Input background color - White -#endif -#ifndef COLOR_CONSOLE_TEXT -#define COLOR_CONSOLE_TEXT "#000" // Console text color - Black -#endif -#ifndef COLOR_CONSOLE -#define COLOR_CONSOLE "#fff" // Console background color - White -#endif -#ifndef COLOR_TEXT_WARNING -#define COLOR_TEXT_WARNING "#f00" // Warning text color - Red -#endif -#ifndef COLOR_TEXT_SUCCESS -#define COLOR_TEXT_SUCCESS "#008000" // Success text color - Green -#endif -#ifndef COLOR_BUTTON_TEXT -#define COLOR_BUTTON_TEXT "#fff" // Button text color - White -#endif -#ifndef COLOR_BUTTON -#define COLOR_BUTTON "#1fa3ec" // Button color - Blueish -#endif -#ifndef COLOR_BUTTON_HOVER -#define COLOR_BUTTON_HOVER "#0e70a4" // Button color when hovered over - Darker blueish -#endif -#ifndef COLOR_BUTTON_RESET -#define COLOR_BUTTON_RESET "#d43535" // Restart/Reset/Delete button color - Redish -#endif -#ifndef COLOR_BUTTON_RESET_HOVER -#define COLOR_BUTTON_RESET_HOVER "#931f1f" // Restart/Reset/Delete button color when hovered over - Darker redish -#endif -#ifndef COLOR_BUTTON_SAVE -#define COLOR_BUTTON_SAVE "#47c266" // Save button color - Greenish -#endif -#ifndef COLOR_BUTTON_SAVE_HOVER -#define COLOR_BUTTON_SAVE_HOVER "#5aaf6f" // Save button color when hovered over - Darker greenish -#endif -#ifndef COLOR_TIMER_TAB_TEXT -#define COLOR_TIMER_TAB_TEXT "#fff" // Config timer tab text color - White -#endif -#ifndef COLOR_TIMER_TAB_BACKGROUND -#define COLOR_TIMER_TAB_BACKGROUND "#999" // Config timer tab background color - Light grey -#endif -#ifndef COLOR_TITLE_TEXT -#define COLOR_TITLE_TEXT COLOR_TEXT // Title text color defaults to global text color either dark or light -#endif -#ifndef IR_RCV_MIN_UNKNOWN_SIZE -#define IR_RCV_MIN_UNKNOWN_SIZE 6 // Set the smallest sized "UNKNOWN" message packets we actually care about (default 6, max 255) -#endif -#ifndef ENERGY_OVERTEMP -#define ENERGY_OVERTEMP 90 // Overtemp in Celsius -#endif -#ifndef DEFAULT_DIMMER_MAX -#define DEFAULT_DIMMER_MAX 100 -#endif -#ifndef DEFAULT_DIMMER_MIN -#define DEFAULT_DIMMER_MIN 0 -#endif -#ifndef DEFAULT_LIGHT_DIMMER -#define DEFAULT_LIGHT_DIMMER 10 -#endif -#ifndef DEFAULT_LIGHT_COMPONENT -#define DEFAULT_LIGHT_COMPONENT 255 -#endif -#ifndef CORS_ENABLED_ALL -#define CORS_ENABLED_ALL "*" -#endif - - -enum WebColors { - COL_TEXT, COL_BACKGROUND, COL_FORM, - COL_INPUT_TEXT, COL_INPUT, COL_CONSOLE_TEXT, COL_CONSOLE, - COL_TEXT_WARNING, COL_TEXT_SUCCESS, - COL_BUTTON_TEXT, COL_BUTTON, COL_BUTTON_HOVER, COL_BUTTON_RESET, COL_BUTTON_RESET_HOVER, COL_BUTTON_SAVE, COL_BUTTON_SAVE_HOVER, - COL_TIMER_TAB_TEXT, COL_TIMER_TAB_BACKGROUND, COL_TITLE, - COL_LAST }; - -const char kWebColors[] PROGMEM = - COLOR_TEXT "|" COLOR_BACKGROUND "|" COLOR_FORM "|" - COLOR_INPUT_TEXT "|" COLOR_INPUT "|" COLOR_CONSOLE_TEXT "|" COLOR_CONSOLE "|" - COLOR_TEXT_WARNING "|" COLOR_TEXT_SUCCESS "|" - COLOR_BUTTON_TEXT "|" COLOR_BUTTON "|" COLOR_BUTTON_HOVER "|" COLOR_BUTTON_RESET "|" COLOR_BUTTON_RESET_HOVER "|" COLOR_BUTTON_SAVE "|" COLOR_BUTTON_SAVE_HOVER "|" - COLOR_TIMER_TAB_TEXT "|" COLOR_TIMER_TAB_BACKGROUND "|" COLOR_TITLE_TEXT; - -enum TasmotaSerialConfig { - TS_SERIAL_5N1, TS_SERIAL_6N1, TS_SERIAL_7N1, TS_SERIAL_8N1, - TS_SERIAL_5N2, TS_SERIAL_6N2, TS_SERIAL_7N2, TS_SERIAL_8N2, - TS_SERIAL_5E1, TS_SERIAL_6E1, TS_SERIAL_7E1, TS_SERIAL_8E1, - TS_SERIAL_5E2, TS_SERIAL_6E2, TS_SERIAL_7E2, TS_SERIAL_8E2, - TS_SERIAL_5O1, TS_SERIAL_6O1, TS_SERIAL_7O1, TS_SERIAL_8O1, - TS_SERIAL_5O2, TS_SERIAL_6O2, TS_SERIAL_7O2, TS_SERIAL_8O2 }; - -const uint8_t kTasmotaSerialConfig[] PROGMEM = { - SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1, - SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, - SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, - SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, - SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, - SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2 -}; - /*********************************************************************************************\ * RTC memory \*********************************************************************************************/ diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index 4b2e218b3..57fdc60ff 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -30,7 +30,6 @@ * Default sensor states \*********************************************************************************************/ -#define CODE_IMAGE 0 #define CODE_IMAGE_STR "tasmota" #define USE_LIGHT // Enable light control @@ -155,19 +154,6 @@ const uint32_t LOOP_SLEEP_DELAY = 50; // Lowest number of milliseconds to #define MAX_RULE_TIMERS 8 // Max number of rule timers (4 bytes / timer) #define MAX_RULE_VARS 16 // Max number of rule variables (33 bytes / variable) -/* -// Removed from esp8266 core since 20171105 -#define min(a,b) ((a)<(b)?(a):(b)) -#define max(a,b) ((a)>(b)?(a):(b)) -*/ -#define tmin(a,b) ((a)<(b)?(a):(b)) -#define tmax(a,b) ((a)>(b)?(a):(b)) - -#define STR_HELPER(x) #x -#ifndef STR -#define STR(x) STR_HELPER(x) -#endif - //enum ws2812NeopixelbusFeature { NEO_RGB, NEO_GRB, NEO_BRG, NEO_RBG, NEO_3LED, NEO_RGBW, NEO_GRBW }; // Doesn't work #define NEO_RGB 0 // Neopixel RGB leds #define NEO_GRB 1 // Neopixel GRB leds @@ -303,7 +289,8 @@ enum SettingsTextIndex { SET_OTAURL, SET_BUTTON1, SET_BUTTON2, SET_BUTTON3, SET_BUTTON4, SET_BUTTON5, SET_BUTTON6, SET_BUTTON7, SET_BUTTON8, SET_BUTTON9, SET_BUTTON10, SET_BUTTON11, SET_BUTTON12, SET_BUTTON13, SET_BUTTON14, SET_BUTTON15, SET_BUTTON16, SET_MQTT_GRP_TOPIC2, SET_MQTT_GRP_TOPIC3, SET_MQTT_GRP_TOPIC4, - SET_TEMPLATE_NAME, SET_DEV_GROUP_NAME1, SET_DEV_GROUP_NAME2, SET_DEV_GROUP_NAME3, SET_DEV_GROUP_NAME4, + SET_TEMPLATE_NAME, + SET_DEV_GROUP_NAME1, SET_DEV_GROUP_NAME2, SET_DEV_GROUP_NAME3, SET_DEV_GROUP_NAME4, SET_MAX }; enum DevGroupMessageType { DGR_MSGTYP_FULL_STATUS, DGR_MSGTYP_PARTIAL_UPDATE, DGR_MSGTYP_UPDATE, DGR_MSGTYP_UPDATE_MORE_TO_COME, DGR_MSGTYP_UPDATE_DIRECT, DGR_MSGTYPE_UPDATE_COMMAND }; @@ -336,4 +323,21 @@ const char kCommandSource[] PROGMEM = "I|MQTT|Restart|Button|Switch|Backlog|Seri const uint8_t kDefaultRfCode[9] PROGMEM = { 0x21, 0x16, 0x01, 0x0E, 0x03, 0x48, 0x2E, 0x1A, 0x00 }; +enum TasmotaSerialConfig { + TS_SERIAL_5N1, TS_SERIAL_6N1, TS_SERIAL_7N1, TS_SERIAL_8N1, + TS_SERIAL_5N2, TS_SERIAL_6N2, TS_SERIAL_7N2, TS_SERIAL_8N2, + TS_SERIAL_5E1, TS_SERIAL_6E1, TS_SERIAL_7E1, TS_SERIAL_8E1, + TS_SERIAL_5E2, TS_SERIAL_6E2, TS_SERIAL_7E2, TS_SERIAL_8E2, + TS_SERIAL_5O1, TS_SERIAL_6O1, TS_SERIAL_7O1, TS_SERIAL_8O1, + TS_SERIAL_5O2, TS_SERIAL_6O2, TS_SERIAL_7O2, TS_SERIAL_8O2 }; + +const uint8_t kTasmotaSerialConfig[] PROGMEM = { + SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1, + SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, + SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, + SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, + SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, + SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2 +}; + #endif // _TASMOTA_H_ diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 6572be777..7b5580ac3 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -38,7 +38,7 @@ #ifdef USE_MQTT_TLS #include // we need to include before "tasmota_post.h" to take precedence over the BearSSL version in Arduino #endif // USE_MQTT_TLS -#include "tasmota_post.h" // Configuration overrides for all previous includes +#include "tasmota_globals.h" // Function prototypes and global configuration #include "i18n.h" // Language support configured by my_user_config.h #include "tasmota_template.h" // Hardware configuration diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_configurations.h similarity index 90% rename from tasmota/tasmota_post.h rename to tasmota/tasmota_configurations.h index 1bba02172..f002ef15d 100644 --- a/tasmota/tasmota_post.h +++ b/tasmota/tasmota_configurations.h @@ -1,5 +1,5 @@ /* - tasmota_post.h - Post header file for Tasmota + tasmota_configurations.h - Configurations for Tasmota Copyright (C) 2020 Theo Arends @@ -17,73 +17,8 @@ along with this program. If not, see . */ -#ifndef _TASMOTA_POST_H_ -#define _TASMOTA_POST_H_ - -/*********************************************************************************************\ - * Function prototypes -\*********************************************************************************************/ - -// Needed for core 2.3.0 compilation (#6721) -#ifdef __cplusplus -extern "C" { -#endif -#include "user_interface.h" -#ifdef __cplusplus -} -#endif - -//#ifdef USE_KNX // Enabling this will fail compilation. It has no impact if not used. (20180417) -#include -void KNX_CB_Action(message_t const &msg, void *arg); -//#endif // USE_KNX - -void DomoticzTempHumPressureSensor(float temp, float hum, float baro = -1); -char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, char inbetween = '\0'); -extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end); -extern "C" void resetPins(); - -/*********************************************************************************************\ - * Default global defines -\*********************************************************************************************/ - -#ifndef ENERGY_OVERTEMP -#define ENERGY_OVERTEMP 90 // Overtemp in Celsius -#endif - -#ifdef USE_EMULATION_HUE -#define USE_EMULATION -#endif -#ifdef USE_EMULATION_WEMO -#define USE_EMULATION -#endif -#ifdef USE_DEVICE_GROUPS -#define USE_EMULATION -#endif - -#ifdef USE_MQTT_TLS - const uint16_t WEB_LOG_SIZE = 2000; // Max number of characters in weblog -#else - const uint16_t WEB_LOG_SIZE = 4000; // Max number of characters in weblog -#endif - -#if defined(USE_MQTT_TLS) && defined(ARDUINO_ESP8266_RELEASE_2_3_0) - #error "TLS is no more supported on Core 2.3.0, use 2.4.2 or higher." -#endif - -#ifndef MODULE -#define MODULE SONOFF_BASIC // [Module] Select default model -#endif - -#ifdef USE_PWM_DIMMER_REMOTE -#ifdef USE_PWM_DIMMER -#ifndef USE_DEVICE_GROUPS -#define USE_DEVICE_GROUPS -#endif // USE_DEVICE_GROUPS -#else // USE_PWM_DIMMER -#undef USE_PWM_DIMMER_REMOTE -#endif // USE_PWM_DIMMER -#endif // USE_PWM_DIMMER_REMOTE +#ifndef _TASMOTA_CONFIGURATIONS_H_ +#define _TASMOTA_CONFIGURATIONS_H_ /*********************************************************************************************\ * [tasmota-sensors.bin] @@ -92,8 +27,6 @@ extern "C" void resetPins(); #ifdef FIRMWARE_SENSORS -#undef CODE_IMAGE -#define CODE_IMAGE 2 #undef CODE_IMAGE_STR #define CODE_IMAGE_STR "sensors" @@ -257,8 +190,6 @@ extern "C" void resetPins(); #ifdef FIRMWARE_KNX_NO_EMULATION -#undef CODE_IMAGE -#define CODE_IMAGE 3 #undef CODE_IMAGE_STR #define CODE_IMAGE_STR "knx" @@ -282,8 +213,6 @@ extern "C" void resetPins(); #ifdef FIRMWARE_DISPLAYS -#undef CODE_IMAGE -#define CODE_IMAGE 5 #undef CODE_IMAGE_STR #define CODE_IMAGE_STR "display" @@ -355,8 +284,6 @@ extern "C" void resetPins(); #ifdef FIRMWARE_IR -#undef CODE_IMAGE -#define CODE_IMAGE 6 #undef CODE_IMAGE_STR #define CODE_IMAGE_STR "ir" @@ -462,8 +389,6 @@ extern "C" void resetPins(); #ifdef FIRMWARE_LITE -#undef CODE_IMAGE -#define CODE_IMAGE 4 #undef CODE_IMAGE_STR #define CODE_IMAGE_STR "lite" @@ -579,8 +504,6 @@ extern "C" void resetPins(); #ifdef FIRMWARE_MINIMAL -#undef CODE_IMAGE -#define CODE_IMAGE 1 #undef CODE_IMAGE_STR #define CODE_IMAGE_STR "minimal" @@ -692,95 +615,4 @@ extern "C" void resetPins(); #undef USE_DEBUG_DRIVER // Disable debug code #endif // FIRMWARE_MINIMAL -/*********************************************************************************************\ - * Mandatory defines satisfying possible disabled defines -\*********************************************************************************************/ - - // See https://github.com/esp8266/Arduino/pull/4889 -#undef NO_EXTRA_4K_HEAP // Allocate 4k heap for WPS in ESP8166/Arduino core v2.4.2 (was always allocated in previous versions) - -#ifndef USE_SONOFF_RF -#undef USE_RF_FLASH // Disable RF firmware flash when SOnoff Rf is disabled -#endif - -#ifndef SWITCH_MODE -#define SWITCH_MODE TOGGLE // TOGGLE, FOLLOW or FOLLOW_INV (the wall switch state) -#endif - -#ifndef STARTING_OFFSET // NOVA SDS parameter used in settings -#define STARTING_OFFSET 30 -#endif - -#ifndef MQTT_FINGERPRINT1 -// Set an all-zeros default fingerprint to activate auto-learning on first connection (AWS IoT) -#define MQTT_FINGERPRINT1 "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" -#endif - -#ifndef MQTT_FINGERPRINT2 -#define MQTT_FINGERPRINT2 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" -#endif - -#ifndef WS2812_LEDS -#define WS2812_LEDS 30 // [Pixels] Number of LEDs -#endif - -#ifndef MQTT_MAX_PACKET_SIZE -#define MQTT_MAX_PACKET_SIZE 1200 // Bytes -#endif -#ifndef MQTT_KEEPALIVE -#define MQTT_KEEPALIVE 30 // Seconds -#endif -#ifndef MQTT_TIMEOUT -#define MQTT_TIMEOUT 10000 // milli seconds -#endif -#ifndef MQTT_CLEAN_SESSION -#define MQTT_CLEAN_SESSION 1 // 0 = No clean session, 1 = Clean session (default) -#endif - -#ifndef MESSZ -//#define MESSZ 1040 // Max number of characters in JSON message string (Hass discovery and nice MQTT_MAX_PACKET_SIZE = 1200) -#define MESSZ (MQTT_MAX_PACKET_SIZE -TOPSZ -7) // Max number of characters in JSON message string -#endif - -//#include // Arduino_Esp8266 version information (ARDUINO_ESP8266_RELEASE and ARDUINO_ESP8266_RELEASE_2_3_0) -#ifndef ARDUINO_ESP8266_RELEASE -#define ARDUINO_ESP8266_RELEASE "STAGE" -#endif - -#ifdef ARDUINO_ESP8266_RELEASE_2_3_0 // Disable not supported features in core 2.3.0 -#undef USE_MQTT_TLS_CA_CERT -#endif - -#ifdef USE_DEVICE_GROUPS -#define SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, ...) _SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, __VA_ARGS__, 0) -#define SendLocalDeviceGroupMessage(REQUEST_TYPE, ...) _SendDeviceGroupMessage(0, REQUEST_TYPE, __VA_ARGS__, 0) -#define DEVICE_GROUP_MESSAGE "M-TASMOTA_DGR/" -const char kDeviceGroupMessage[] PROGMEM = DEVICE_GROUP_MESSAGE; -uint8_t device_group_count = 1; -#endif // USE_DEVICE_GROUPS - -#ifdef DEBUG_TASMOTA_CORE -#define DEBUG_CORE_LOG(...) AddLog_Debug(__VA_ARGS__) -#else -#define DEBUG_CORE_LOG(...) -#endif - -#ifdef DEBUG_TASMOTA_DRIVER -#define DEBUG_DRIVER_LOG(...) AddLog_Debug(__VA_ARGS__) -#else -#define DEBUG_DRIVER_LOG(...) -#endif - -#ifdef DEBUG_TASMOTA_SENSOR -#define DEBUG_SENSOR_LOG(...) AddLog_Debug(__VA_ARGS__) -#else -#define DEBUG_SENSOR_LOG(...) -#endif - -#ifdef DEBUG_TASMOTA_TRACE -#define DEBUG_TRACE_LOG(...) AddLog_Debug(__VA_ARGS__) -#else -#define DEBUG_TRACE_LOG(...) -#endif - -#endif // _TASMOTA_POST_H_ +#endif // _TASMOTA_CONFIGURATIONS_H_ diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h new file mode 100644 index 000000000..d05db0efd --- /dev/null +++ b/tasmota/tasmota_globals.h @@ -0,0 +1,335 @@ +/* + tasmota_globals.h - Function prototypes and global configurations for Tasmota + + Copyright (C) 2020 Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _TASMOTA_GLOBALS_H_ +#define _TASMOTA_GLOBALS_H_ + +/*********************************************************************************************\ + * Function prototypes +\*********************************************************************************************/ + +// Needed for core 2.3.0 compilation (#6721) +#ifdef __cplusplus +extern "C" { +#endif +#include "user_interface.h" +#ifdef __cplusplus +} +#endif + +//#ifdef USE_KNX // Enabling this will fail compilation. It has no impact if not used. (20180417) +#include +void KNX_CB_Action(message_t const &msg, void *arg); +//#endif // USE_KNX + +void DomoticzTempHumPressureSensor(float temp, float hum, float baro = -1); +char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, char inbetween = '\0'); +extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end); +extern "C" void resetPins(); + +/*********************************************************************************************\ + * Preconfigured configurations +\*********************************************************************************************/ + +#include "tasmota_configurations.h" // Preconfigured configurations + +/*********************************************************************************************\ + * Mandatory defines satisfying disabled defines +\*********************************************************************************************/ + +#ifndef MODULE +#define MODULE SONOFF_BASIC // [Module] Select default model +#endif + +#ifdef USE_EMULATION_HUE +#define USE_EMULATION +#endif +#ifdef USE_EMULATION_WEMO +#define USE_EMULATION +#endif +#ifdef USE_DEVICE_GROUPS +#define USE_EMULATION +#endif + // See https://github.com/esp8266/Arduino/pull/4889 +#undef NO_EXTRA_4K_HEAP // Allocate 4k heap for WPS in ESP8166/Arduino core v2.4.2 (was always allocated in previous versions) + +#ifndef USE_SONOFF_RF +#undef USE_RF_FLASH // Disable RF firmware flash when Sonoff Rf is disabled +#endif + +#ifndef SWITCH_MODE +#define SWITCH_MODE TOGGLE // TOGGLE, FOLLOW or FOLLOW_INV (the wall switch state) +#endif + +#ifndef MQTT_FINGERPRINT1 +// Set an all-zeros default fingerprint to activate auto-learning on first connection (AWS IoT) +#define MQTT_FINGERPRINT1 "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" +#endif +#ifndef MQTT_FINGERPRINT2 +#define MQTT_FINGERPRINT2 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" +#endif + +#ifndef WS2812_LEDS +#define WS2812_LEDS 30 // [Pixels] Number of LEDs +#endif + +#ifdef USE_MQTT_TLS + const uint16_t WEB_LOG_SIZE = 2000; // Max number of characters in weblog +#else + const uint16_t WEB_LOG_SIZE = 4000; // Max number of characters in weblog +#endif + +#if defined(USE_MQTT_TLS) && defined(ARDUINO_ESP8266_RELEASE_2_3_0) + #error "TLS is no more supported on Core 2.3.0, use 2.4.2 or higher." +#endif + +#ifndef MQTT_MAX_PACKET_SIZE +#define MQTT_MAX_PACKET_SIZE 1200 // Bytes +#endif +#ifndef MQTT_KEEPALIVE +#define MQTT_KEEPALIVE 30 // Seconds +#endif +#ifndef MQTT_TIMEOUT +#define MQTT_TIMEOUT 10000 // milli seconds +#endif +#ifndef MQTT_CLEAN_SESSION +#define MQTT_CLEAN_SESSION 1 // 0 = No clean session, 1 = Clean session (default) +#endif + +#ifndef MESSZ +//#define MESSZ 1040 // Max number of characters in JSON message string (Hass discovery and nice MQTT_MAX_PACKET_SIZE = 1200) +#define MESSZ (MQTT_MAX_PACKET_SIZE -TOPSZ -7) // Max number of characters in JSON message string +#endif + +#ifndef ARDUINO_ESP8266_RELEASE +#define ARDUINO_ESP8266_RELEASE "STAGE" +#endif + +#ifdef USE_PWM_DIMMER_REMOTE +#ifdef USE_PWM_DIMMER +#ifndef USE_DEVICE_GROUPS +#define USE_DEVICE_GROUPS +#endif // USE_DEVICE_GROUPS +#else // USE_PWM_DIMMER +#undef USE_PWM_DIMMER_REMOTE +#endif // USE_PWM_DIMMER +#endif // USE_PWM_DIMMER_REMOTE + +#ifndef DOMOTICZ_UPDATE_TIMER +#define DOMOTICZ_UPDATE_TIMER 0 // [DomoticzUpdateTimer] Send relay status (0 = disable, 1 - 3600 seconds) (Optional) +#endif + +#ifndef EMULATION +#define EMULATION EMUL_NONE // [Emulation] Select Belkin WeMo (single relay/light) or Hue Bridge emulation (multi relay/light) (EMUL_NONE, EMUL_WEMO or EMUL_HUE) +#endif + +#ifndef MTX_ADDRESS1 // Add Display Support for up to eigth Matrices +#define MTX_ADDRESS1 0 +#endif +#ifndef MTX_ADDRESS2 +#define MTX_ADDRESS2 0 +#endif +#ifndef MTX_ADDRESS3 +#define MTX_ADDRESS3 0 +#endif +#ifndef MTX_ADDRESS4 +#define MTX_ADDRESS4 0 +#endif +#ifndef MTX_ADDRESS5 +#define MTX_ADDRESS5 0 +#endif +#ifndef MTX_ADDRESS6 +#define MTX_ADDRESS6 0 +#endif +#ifndef MTX_ADDRESS7 +#define MTX_ADDRESS7 0 +#endif +#ifndef MTX_ADDRESS8 +#define MTX_ADDRESS8 0 +#endif + +#ifndef HOME_ASSISTANT_DISCOVERY_ENABLE +#define HOME_ASSISTANT_DISCOVERY_ENABLE 0 +#endif + +#ifndef LATITUDE +#define LATITUDE 48.858360 // [Latitude] Your location to be used with sunrise and sunset +#endif +#ifndef LONGITUDE +#define LONGITUDE 2.294442 // [Longitude] Your location to be used with sunrise and sunset +#endif + +#ifndef IR_RCV_MIN_UNKNOWN_SIZE +#define IR_RCV_MIN_UNKNOWN_SIZE 6 // Set the smallest sized "UNKNOWN" message packets we actually care about (default 6, max 255) +#endif + +#ifndef ENERGY_OVERTEMP +#define ENERGY_OVERTEMP 90 // Overtemp in Celsius +#endif + +#ifndef DEFAULT_DIMMER_MAX +#define DEFAULT_DIMMER_MAX 100 +#endif +#ifndef DEFAULT_DIMMER_MIN +#define DEFAULT_DIMMER_MIN 0 +#endif +#ifndef DEFAULT_LIGHT_DIMMER +#define DEFAULT_LIGHT_DIMMER 10 +#endif +#ifndef DEFAULT_LIGHT_COMPONENT +#define DEFAULT_LIGHT_COMPONENT 255 +#endif + +#ifndef CORS_ENABLED_ALL +#define CORS_ENABLED_ALL "*" +#endif + +#ifndef WORKING_PERIOD +#define WORKING_PERIOD 5 // Working period of the SDS Sensor, Takes a reading every X Minutes +#endif +#ifndef STARTING_OFFSET +#define STARTING_OFFSET 30 // NOVA SDS parameter used in settings +#endif + +/*********************************************************************************************\ + * UserConfig related parameters +\*********************************************************************************************/ + +#ifndef COLOR_TEXT +#define COLOR_TEXT "#000" // Global text color - Black +#endif +#ifndef COLOR_BACKGROUND +#define COLOR_BACKGROUND "#fff" // Global background color - White +#endif +#ifndef COLOR_FORM +#define COLOR_FORM "#f2f2f2" // Form background color - Greyish +#endif +#ifndef COLOR_INPUT_TEXT +#define COLOR_INPUT_TEXT "#000" // Input text color - Black +#endif +#ifndef COLOR_INPUT +#define COLOR_INPUT "#fff" // Input background color - White +#endif +#ifndef COLOR_CONSOLE_TEXT +#define COLOR_CONSOLE_TEXT "#000" // Console text color - Black +#endif +#ifndef COLOR_CONSOLE +#define COLOR_CONSOLE "#fff" // Console background color - White +#endif +#ifndef COLOR_TEXT_WARNING +#define COLOR_TEXT_WARNING "#f00" // Warning text color - Red +#endif +#ifndef COLOR_TEXT_SUCCESS +#define COLOR_TEXT_SUCCESS "#008000" // Success text color - Green +#endif +#ifndef COLOR_BUTTON_TEXT +#define COLOR_BUTTON_TEXT "#fff" // Button text color - White +#endif +#ifndef COLOR_BUTTON +#define COLOR_BUTTON "#1fa3ec" // Button color - Blueish +#endif +#ifndef COLOR_BUTTON_HOVER +#define COLOR_BUTTON_HOVER "#0e70a4" // Button color when hovered over - Darker blueish +#endif +#ifndef COLOR_BUTTON_RESET +#define COLOR_BUTTON_RESET "#d43535" // Restart/Reset/Delete button color - Redish +#endif +#ifndef COLOR_BUTTON_RESET_HOVER +#define COLOR_BUTTON_RESET_HOVER "#931f1f" // Restart/Reset/Delete button color when hovered over - Darker redish +#endif +#ifndef COLOR_BUTTON_SAVE +#define COLOR_BUTTON_SAVE "#47c266" // Save button color - Greenish +#endif +#ifndef COLOR_BUTTON_SAVE_HOVER +#define COLOR_BUTTON_SAVE_HOVER "#5aaf6f" // Save button color when hovered over - Darker greenish +#endif +#ifndef COLOR_TIMER_TAB_TEXT +#define COLOR_TIMER_TAB_TEXT "#fff" // Config timer tab text color - White +#endif +#ifndef COLOR_TIMER_TAB_BACKGROUND +#define COLOR_TIMER_TAB_BACKGROUND "#999" // Config timer tab background color - Light grey +#endif +#ifndef COLOR_TITLE_TEXT +#define COLOR_TITLE_TEXT COLOR_TEXT // Title text color defaults to global text color either dark or light +#endif + +enum WebColors { + COL_TEXT, COL_BACKGROUND, COL_FORM, + COL_INPUT_TEXT, COL_INPUT, COL_CONSOLE_TEXT, COL_CONSOLE, + COL_TEXT_WARNING, COL_TEXT_SUCCESS, + COL_BUTTON_TEXT, COL_BUTTON, COL_BUTTON_HOVER, COL_BUTTON_RESET, COL_BUTTON_RESET_HOVER, COL_BUTTON_SAVE, COL_BUTTON_SAVE_HOVER, + COL_TIMER_TAB_TEXT, COL_TIMER_TAB_BACKGROUND, COL_TITLE, + COL_LAST }; + +const char kWebColors[] PROGMEM = + COLOR_TEXT "|" COLOR_BACKGROUND "|" COLOR_FORM "|" + COLOR_INPUT_TEXT "|" COLOR_INPUT "|" COLOR_CONSOLE_TEXT "|" COLOR_CONSOLE "|" + COLOR_TEXT_WARNING "|" COLOR_TEXT_SUCCESS "|" + COLOR_BUTTON_TEXT "|" COLOR_BUTTON "|" COLOR_BUTTON_HOVER "|" COLOR_BUTTON_RESET "|" COLOR_BUTTON_RESET_HOVER "|" COLOR_BUTTON_SAVE "|" COLOR_BUTTON_SAVE_HOVER "|" + COLOR_TIMER_TAB_TEXT "|" COLOR_TIMER_TAB_BACKGROUND "|" COLOR_TITLE_TEXT; + +/*********************************************************************************************\ + * Macros +\*********************************************************************************************/ + +/* +// Removed from esp8266 core since 20171105 +#define min(a,b) ((a)<(b)?(a):(b)) +#define max(a,b) ((a)>(b)?(a):(b)) +*/ +#define tmin(a,b) ((a)<(b)?(a):(b)) +#define tmax(a,b) ((a)>(b)?(a):(b)) + +#define STR_HELPER(x) #x +#ifndef STR +#define STR(x) STR_HELPER(x) +#endif + +#ifdef USE_DEVICE_GROUPS +#define SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, ...) _SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, __VA_ARGS__, 0) +#define SendLocalDeviceGroupMessage(REQUEST_TYPE, ...) _SendDeviceGroupMessage(0, REQUEST_TYPE, __VA_ARGS__, 0) +#define DEVICE_GROUP_MESSAGE "M-TASMOTA_DGR/" +const char kDeviceGroupMessage[] PROGMEM = DEVICE_GROUP_MESSAGE; +uint8_t device_group_count = 1; +#endif // USE_DEVICE_GROUPS + +#ifdef DEBUG_TASMOTA_CORE +#define DEBUG_CORE_LOG(...) AddLog_Debug(__VA_ARGS__) +#else +#define DEBUG_CORE_LOG(...) +#endif +#ifdef DEBUG_TASMOTA_DRIVER +#define DEBUG_DRIVER_LOG(...) AddLog_Debug(__VA_ARGS__) +#else +#define DEBUG_DRIVER_LOG(...) +#endif +#ifdef DEBUG_TASMOTA_SENSOR +#define DEBUG_SENSOR_LOG(...) AddLog_Debug(__VA_ARGS__) +#else +#define DEBUG_SENSOR_LOG(...) +#endif +#ifdef DEBUG_TASMOTA_TRACE +#define DEBUG_TRACE_LOG(...) AddLog_Debug(__VA_ARGS__) +#else +#define DEBUG_TRACE_LOG(...) +#endif + +/*********************************************************************************************/ + +#endif // _TASMOTA_GLOBALS_H_