diff --git a/sonoff/user_config.h b/sonoff/user_config.h
index 0f6cd9940..6803d5289 100644
--- a/sonoff/user_config.h
+++ b/sonoff/user_config.h
@@ -1,18 +1,14 @@
/*
user_config.h - user specific configuration for Sonoff-Tasmota
-
Copyright (C) 2018 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 .
*/
@@ -21,35 +17,33 @@
#define _USER_CONFIG_H_
/*********************************************************************************************\
- * ATTENTION: Changes to most PARAMETER defines will only override flash settings if you change
- * define CFG_HOLDER.
- * Most parameters can be changed online using commands via MQTT, WebConsole or serial
+ * This file consists of TWO sections.
*
- * Corresponding MQTT/Serial/Console commands in [brackets]
+ * SECTION 1:
+ * The first section contains PARAMETERS overriding flash settings if define CFG_HOLDER is CHANGED.
+ * All parameters can be persistent changed online using commands via MQTT, WebConsole or Serial.
+ * Corresponding MQTT/Serial/Console commands are shown in [brackets]
+ *
+ * SECTION 2:
+ * The second section contains Enabled and Disabled FEATURES allowing different program size.
+ * Changes in this section do NOT need a change of define CFG_HOLDER.
+ *
+ * ATTENTION:
+ * Users are advised to use the user_config_override.h file for most changes.
\*********************************************************************************************/
-// -- Localization --------------------------------
-//#define MY_LANGUAGE cs-CZ // Czech in Czech
-//#define MY_LANGUAGE de-DE // German in Germany
-//#define MY_LANGUAGE en-GB // English in Great Britain. Enabled by Default
-//#define MY_LANGUAGE es-AR // Spanish in Argentina
-//#define MY_LANGUAGE fr-FR // French in France
-//#define MY_LANGUAGE hu-HU // Hungarian in Hungary
-//#define MY_LANGUAGE it-IT // Italian in Italy
-//#define MY_LANGUAGE nl-NL // Dutch in the Netherlands
-//#define MY_LANGUAGE pl-PL // Polish in Poland
-//#define MY_LANGUAGE pt-PT // Portuguese in Portugal
-//#define MY_LANGUAGE ru-RU // Russian in Russia
-//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
-//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
+//#define USE_CONFIG_OVERRIDE // Uncomment to use user_config_override.h file. See README.md
+
+/*********************************************************************************************\
+ * SECTION 1
+ * - After initial load any change here only take effect if CFG_HOLDER is changed too
+\*********************************************************************************************/
+
+// -- Master parameter control --------------------
+#define CFG_HOLDER 0x20161209 // [Reset 1] Change this value to load SECTION1 configuration parameters to flash
// -- Project -------------------------------------
-#define PROJECT "sonoff" // PROJECT is used as the default topic delimiter and OTA file name
- // As an IDE restriction it needs to be the same as the main .ino file
-
-#define CFG_HOLDER 0x20161209 // [Reset 1] Change this value to load following default configuration parameters
-
-//#define USE_CONFIG_OVERRIDE // Uncomment to use your own user_config_override.h file. See README.md
+#define PROJECT "sonoff" // PROJECT is used as the default topic delimiter
#define SAVE_DATA 1 // [SaveData] Save changed parameters to Flash (0 = disable, 1 - 3600 seconds)
#define SAVE_STATE 1 // [SetOption0] Save changed power state to Flash (0 = disable, 1 = enable)
@@ -64,49 +58,28 @@
#define STA_PASS1 "" // [Password1] Wifi password
#define STA_SSID2 "" // [Ssid2] Optional alternate AP Wifi SSID
#define STA_PASS2 "" // [Password2] Optional alternate AP Wifi password
-#define WIFI_CONFIG_TOOL WIFI_MANAGER // [WifiConfig] Default tool if wifi fails to connect
+#define WIFI_CONFIG_TOOL WIFI_WPSCONFIG // [WifiConfig] Default tool if wifi fails to connect
// (WIFI_RESTART, WIFI_SMARTCONFIG, WIFI_MANAGER, WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT)
// -- Syslog --------------------------------------
#define SYS_LOG_HOST "" // [LogHost] (Linux) syslog host
#define SYS_LOG_PORT 514 // [LogPort] default syslog UDP port
-#define SYS_LOG_LEVEL LOG_LEVEL_NONE // [SysLog] LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE
-#define SERIAL_LOG_LEVEL LOG_LEVEL_NONE // [SerialLog] LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE
-#define WEB_LOG_LEVEL LOG_LEVEL_INFO // [WebLog] LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE
+#define SYS_LOG_LEVEL LOG_LEVEL_NONE // [SysLog]
+#define SERIAL_LOG_LEVEL LOG_LEVEL_INFO // [SerialLog]
+#define WEB_LOG_LEVEL LOG_LEVEL_INFO // [WebLog]
// -- Ota -----------------------------------------
#define OTA_URL "http://sonoff.maddox.co.uk/tasmota/sonoff.ino.bin" // [OtaUrl]
-//#define USE_ARDUINO_OTA // Add optional support for Arduino OTA (+4k5 code)
-
-/*********************************************************************************************\
- * Select ONE of possible MQTT library types below
-\*********************************************************************************************/
-// Default MQTT driver for both non-TLS and TLS connections. Blocks network if MQTT server is unavailable.
-//#define MQTT_LIBRARY_TYPE MQTT_PUBSUBCLIENT // Use PubSubClient library
-// Alternative MQTT driver does not block network when MQTT server is unavailable. No TLS support
-#define MQTT_LIBRARY_TYPE MQTT_TASMOTAMQTT // Use TasmotaMqtt library (+4k4 code, +4k mem) - non-TLS only
-// Alternative MQTT driver does not block network when MQTT server is unavailable. No TLS support
-//#define MQTT_LIBRARY_TYPE MQTT_ESPMQTTARDUINO // Use (patched) esp-mqtt-arduino library (+4k8 code, +4k mem) - non-TLS only
// -- MQTT ----------------------------------------
#define MQTT_USE 1 // [SetOption3] Select default MQTT use (0 = Off, 1 = On)
-// !!! TLS uses a LOT OF MEMORY (20k) so be careful to enable other options at the same time !!!
-//#define USE_MQTT_TLS // Use TLS for MQTT connection (+53k code, +15k mem) - Disable by //
- // Needs Fingerprint, TLS Port, UserId and Password
-#ifdef USE_MQTT_TLS
- #define MQTT_HOST "" // [MqttHost]
- #define MQTT_FINGERPRINT1 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint1]
- #define MQTT_FINGERPRINT2 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint2]
- #define MQTT_PORT 20123 // [MqttPort] MQTT TLS port
- #define MQTT_USER "cloudmqttuser" // [MqttUser] Mandatory user
- #define MQTT_PASS "cloudmqttpassword" // [MqttPassword] Mandatory password
-#else
- #define MQTT_HOST "" // [MqttHost]
- #define MQTT_PORT 1883 // [MqttPort] MQTT port (10123 on CloudMQTT)
- #define MQTT_USER "DVES_USER" // [MqttUser] Optional user
- #define MQTT_PASS "DVES_PASS" // [MqttPassword] Optional password
-#endif
+#define MQTT_HOST "" // [MqttHost]
+#define MQTT_FINGERPRINT1 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint1]
+#define MQTT_FINGERPRINT2 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint2]
+#define MQTT_PORT 1883 // [MqttPort] MQTT port (10123 on CloudMQTT)
+#define MQTT_USER "DVES_USER" // [MqttUser] MQTT user
+#define MQTT_PASS "DVES_PASS" // [MqttPassword] MQTT password
#define MQTT_BUTTON_RETAIN 0 // [ButtonRetain] Button may send retain flag (0 = off, 1 = on)
#define MQTT_POWER_RETAIN 0 // [PowerRetain] Power status message may send retain flag (0 = off, 1 = on)
@@ -118,7 +91,7 @@
#define MQTT_CMND_HOLD "HOLD" // [StateText4] Command to send when button is kept down for over KEY_HOLD_TIME * 0.1 seconds (needs to be a string like "HOLD")
// -- MQTT topics ---------------------------------
-//#define MQTT_FULLTOPIC "tasmota/bedroom/%topic%/%prefix%/" // Up to max 80 characers
+ // Example "tasmota/bedroom/%topic%/%prefix%/" up to 80 characers
#define MQTT_FULLTOPIC "%prefix%/%topic%/" // [FullTopic] Subscribe and Publish full topic name - Legacy topic
// %prefix% token options
@@ -135,63 +108,40 @@
#define TELE_PERIOD 300 // [TelePeriod] Telemetry (0 = disable, 10 - 3600 seconds)
// -- MQTT - Domoticz -----------------------------
-#define USE_DOMOTICZ // Enable Domoticz (+6k code, +0.3k mem) - Disable by //
- #define DOMOTICZ_IN_TOPIC "domoticz/in" // Domoticz Input Topic
- #define DOMOTICZ_OUT_TOPIC "domoticz/out" // Domoticz Output Topic
- #define DOMOTICZ_UPDATE_TIMER 0 // [DomoticzUpdateTimer] Send relay status (0 = disable, 1 - 3600 seconds) (Optional)
-
-// -- KNX IP Protocol -----------------------------
-#define USE_KNX // Enable KNX IP Protocol Support (+14.7k code)
+#define DOMOTICZ_UPDATE_TIMER 0 // [DomoticzUpdateTimer] Send relay status (0 = disable, 1 - 3600 seconds)
// -- MQTT - Home Assistant Discovery -------------
-#define USE_HOME_ASSISTANT // Enable Home Assistant Discovery Support (+2k code)
- #define HOME_ASSISTANT_DISCOVERY_PREFIX "homeassistant" // Home Assistant discovery prefix
- #define HOME_ASSISTANT_DISCOVERY_ENABLE 0 // [SetOption19] Home Assistant Discovery (0 = Disable, 1 = Enable)
+#define HOME_ASSISTANT_DISCOVERY_ENABLE 0 // [SetOption19] Home Assistant Discovery (0 = Disable, 1 = Enable)
// -- HTTP ----------------------------------------
-#define USE_WEBSERVER // Enable web server and wifi manager (+66k code, +8k mem) - Disable by //
- #define WEB_SERVER 2 // [WebServer] Web server (0 = Off, 1 = Start as User, 2 = Start as Admin)
- #define WEB_PORT 80 // Web server Port for User and Admin mode
- #define WEB_USERNAME "admin" // Web server Admin mode user name
- #define WEB_PASSWORD "" // [WebPassword] Web server Admin mode Password for WEB_USERNAME (empty string = Disable)
- #define FRIENDLY_NAME "Sonoff" // [FriendlyName] Friendlyname up to 32 characters used by webpages and Alexa
- #define USE_EMULATION // Enable Belkin WeMo and Hue Bridge emulation for Alexa (+16k code, +2k mem)
- #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)
-
-// -- mDNS ----------------------------------------
-#define USE_DISCOVERY // Enable mDNS for the following services (+8k code, +0.3k mem) - Disable by //
- #define WEBSERVER_ADVERTISE // Provide access to webserver by name .local/
- #define MQTT_HOST_DISCOVERY // Find MQTT host server (overrides MQTT_HOST if found)
+#define WEB_SERVER 2 // [WebServer] Web server (0 = Off, 1 = Start as User, 2 = Start as Admin)
+#define WEB_PASSWORD "" // [WebPassword] Web server Admin mode Password for WEB_USERNAME (empty string = Disable)
+#define FRIENDLY_NAME "Sonoff" // [FriendlyName] Friendlyname up to 32 characters used by webpages and Alexa
+#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)
// -- Time - Up to three NTP servers in your region
#define NTP_SERVER1 "pool.ntp.org" // [NtpServer1] Select first NTP server by name or IP address (129.250.35.250)
#define NTP_SERVER2 "nl.pool.ntp.org" // [NtpServer2] Select second NTP server by name or IP address (5.39.184.5)
#define NTP_SERVER3 "0.nl.pool.ntp.org" // [NtpServer3] Select third NTP server by name or IP address (93.94.224.67)
-#define USE_TIMERS // Add support for up to 16 timers (+2k2 code)
- #define USE_TIMERS_WEB // Add timer webpage support (+4k5 code)
- #define USE_SUNRISE // Add support for Sunrise and sunset tools (+16k)
- #define LATITUDE 48.858360 // [Latitude] Your location to be used with sunrise and sunset
- #define LONGITUDE 2.294442 // [Longitude] Your location to be used with sunrise and sunset
-
-// -- Time - Start Daylight Saving Time and timezone offset from UTC in minutes
-#define TIME_DST North, Last, Sun, Mar, 2, +120 // Northern Hemisphere, Last sunday in march at 02:00 +120 minutes
-
-// -- Time - Start Standard Time and timezone offset from UTC in minutes
-#define TIME_STD North, Last, Sun, Oct, 3, +60 // Northern Hemisphere, Last sunday in october 02:00 +60 minutes
+// -- Location ------------------------------------
+#define LATITUDE 48.858360 // [Latitude] Your location to be used with sunrise and sunset
+#define LONGITUDE 2.294442 // [Longitude] Your location to be used with sunrise and sunset
// -- Application ---------------------------------
-#define APP_TIMEZONE 1 // [Timezone] +1 hour (Amsterdam) (-12 .. 12 = hours from UTC, 99 = use TIME_DST/TIME_STD)
-#define APP_LEDSTATE LED_POWER // [LedState] Function of led (LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT)
+#define APP_TIMEZONE 1 // [Timezone] +1 hour (Amsterdam) (-13 .. 14 = hours from UTC, 99 = use TIME_DST/TIME_STD)
+#define APP_LEDSTATE LED_POWER // [LedState] Function of led
+ // (LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT)
#define APP_PULSETIME 0 // [PulseTime] Time in 0.1 Sec to turn off power for relay 1 (0 = disabled)
-#define APP_POWERON_STATE 3 // [PowerOnState] Power On Relay state (0 = Off, 1 = On, 2 = Toggle Saved state, 3 = Saved state)
+#define APP_POWERON_STATE POWER_ALL_SAVED // [PowerOnState] Power On Relay state
+ // (POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON)
#define APP_BLINKTIME 10 // [BlinkTime] Time in 0.1 Sec to blink/toggle power for relay 1
#define APP_BLINKCOUNT 10 // [BlinkCount] Number of blinks (0 = 32000)
#define APP_SLEEP 0 // [Sleep] Sleep time to lower energy consumption (0 = Off, 1 - 250 mSec)
#define KEY_HOLD_TIME 40 // [SetOption32] Number of 0.1 seconds to hold Button or external Pushbutton before sending HOLD message
-#define SWITCH_MODE TOGGLE // [SwitchMode] TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV or PUSHBUTTON_TOGGLE (the wall switch state)
-#define WS2812_LEDS 30 // [Pixels] Number of WS2812 LEDs to start with
+#define SWITCH_MODE TOGGLE // [SwitchMode] TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE (the wall switch state)
+#define WS2812_LEDS 30 // [Pixels] Number of WS2812 LEDs to start with (max is 512)
#define TEMP_CONVERSION 0 // [SetOption8] Return temperature in (0 = Celsius or 1 = Fahrenheit)
#define TEMP_RESOLUTION 1 // [TempRes] Maximum number of decimals (0 - 3) showing sensor Temperature
@@ -199,6 +149,77 @@
#define PRESSURE_RESOLUTION 1 // [PressRes] Maximum number of decimals (0 - 3) showing sensor Pressure
#define ENERGY_RESOLUTION 3 // [EnergyRes] Maximum number of decimals (0 - 5) showing energy usage in kWh
+/*********************************************************************************************\
+ * END OF SECTION 1
+ *
+ * SECTION 2
+ * - Enable a feature by removing both // in front of it
+ * - Disable a feature by preceding it with //
+\*********************************************************************************************/
+
+//#define USE_ARDUINO_OTA // Add optional support for Arduino OTA (+4k5 code)
+
+// -- Localization --------------------------------
+ // If non selected the default en-GB will be used
+//#define MY_LANGUAGE cs-CZ // Czech in Czech
+//#define MY_LANGUAGE de-DE // German in Germany
+//#define MY_LANGUAGE en-GB // English in Great Britain. Enabled by Default
+//#define MY_LANGUAGE es-AR // Spanish in Argentina
+//#define MY_LANGUAGE fr-FR // French in France
+//#define MY_LANGUAGE hu-HU // Hungarian in Hungary
+//#define MY_LANGUAGE it-IT // Italian in Italy
+//#define MY_LANGUAGE nl-NL // Dutch in the Netherlands
+//#define MY_LANGUAGE pl-PL // Polish in Poland
+//#define MY_LANGUAGE pt-PT // Portuguese in Portugal
+//#define MY_LANGUAGE ru-RU // Russian in Russia
+//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
+//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
+
+/*-------------------------------------------------------------------------------------------*\
+ * Select ONE of possible three MQTT library types below
+\*-------------------------------------------------------------------------------------------*/
+ // Default MQTT driver for both non-TLS and TLS connections. Blocks network if MQTT server is unavailable.
+#define MQTT_LIBRARY_TYPE MQTT_PUBSUBCLIENT // Use PubSubClient library
+ // Alternative MQTT driver does not block network when MQTT server is unavailable. No TLS support
+//#define MQTT_LIBRARY_TYPE MQTT_TASMOTAMQTT // Use TasmotaMqtt library (+4k4 code, +4k mem) - non-TLS only
+ // Alternative MQTT driver does not block network when MQTT server is unavailable. No TLS support
+//#define MQTT_LIBRARY_TYPE MQTT_ESPMQTTARDUINO // Use (patched) esp-mqtt-arduino library (+4k8 code, +4k mem) - non-TLS only
+
+// -- MQTT - Domoticz -----------------------------
+#define USE_DOMOTICZ // Enable Domoticz (+6k code, +0.3k mem)
+ #define DOMOTICZ_IN_TOPIC "domoticz/in" // Domoticz Input Topic
+ #define DOMOTICZ_OUT_TOPIC "domoticz/out" // Domoticz Output Topic
+
+// -- MQTT - Home Assistant Discovery -------------
+#define USE_HOME_ASSISTANT // Enable Home Assistant Discovery Support (+2k code)
+ #define HOME_ASSISTANT_DISCOVERY_PREFIX "homeassistant" // Home Assistant discovery prefix
+
+// -- MQTT - TLS ----------------------------------
+ // !!! TLS uses a LOT OF MEMORY so be careful to enable other options at the same time !!!
+//#define USE_MQTT_TLS // Use TLS for MQTT connection (+53k code, +15k mem)
+
+// -- HTTP ----------------------------------------
+#define USE_WEBSERVER // Enable web server and wifi manager (+66k code, +8k mem)
+ #define WEB_PORT 80 // Web server Port for User and Admin mode
+ #define WEB_USERNAME "admin" // Web server Admin mode user name
+ #define USE_EMULATION // Enable Belkin WeMo and Hue Bridge emulation for Alexa (+16k code, +2k mem)
+
+// -- mDNS ----------------------------------------
+#define USE_DISCOVERY // Enable mDNS for the following services (+8k code, +0.3k mem)
+ #define WEBSERVER_ADVERTISE // Provide access to webserver by name .local/
+ #define MQTT_HOST_DISCOVERY // Find MQTT host server (overrides MQTT_HOST if found)
+
+// -- Time - Start Daylight Saving Time and timezone offset from UTC in minutes
+#define TIME_DST North, Last, Sun, Mar, 2, +120 // Northern Hemisphere, Last sunday in march at 02:00 +120 minutes
+
+// -- Time - Start Standard Time and timezone offset from UTC in minutes
+#define TIME_STD North, Last, Sun, Oct, 3, +60 // Northern Hemisphere, Last sunday in october 02:00 +60 minutes
+
+// -- Time ----------------------------------------
+#define USE_TIMERS // Add support for up to 16 timers (+2k2 code)
+ #define USE_TIMERS_WEB // Add timer webpage support (+4k5 code)
+ #define USE_SUNRISE // Add support for Sunrise and sunset tools (+16k)
+
// -- Internal Analog input -----------------------
#define USE_ADC_VCC // Display Vcc in Power status. Disable for use as Analog input on selected devices
@@ -226,6 +247,12 @@
#define MGS_SENSOR_ADDR 0x04 // Default Mutichannel Gas sensor i2c address
#endif // USE_I2C
+// -- SPI sensors ---------------------------------
+//#define USE_SPI // SPI using default library
+#ifdef USE_SPI
+
+#endif // USE_SPI
+
// -- Serial sensors ------------------------------
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
@@ -257,7 +284,6 @@
* Compile a minimal version if upgrade memory gets tight ONLY TO BE USED FOR UPGRADE STEP 1!
* To be used as step 1 during upgrade.
* Step 2 is re-compile with option BE_MINIMAL commented out.
- * !!! Needed for next release of Arduino/ESP8266 (+22k code, +2k mem) !!!
\*********************************************************************************************/
//#define BE_MINIMAL // Minimal version if upgrade memory gets tight (-45k code, -2k mem)