diff --git a/platformio.ini b/platformio.ini
index c3d38b9a2..c74fe3c8d 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -13,8 +13,11 @@ src_dir = sonoff
; *** Uncomment one of the lines below to build/upload only one environment
;env_default = sonoff
;env_default = sonoff-minimal
-;env_default = sonoff-xxl
+;env_default = sonoff-classic
+;env_default = sonoff-knx
+;env_default = sonoff-allsensors
;env_default = sonoff-BG
+;env_default = sonoff-CN
;env_default = sonoff-CZ
;env_default = sonoff-DE
;env_default = sonoff-ES
@@ -26,7 +29,6 @@ src_dir = sonoff
;env_default = sonoff-PL
;env_default = sonoff-PT
;env_default = sonoff-RU
-;env_default = sonoff-CN
;env_default = sonoff-TW
[env:sonoff]
@@ -71,7 +73,35 @@ extra_scripts = pio/strip-floats.py
; Serial Monitor options
monitor_baud = 115200
-[env:sonoff-xxl]
+[env:sonoff-classic]
+;platform = espressif8266@1.5.0 ; v2.3.0
+;platform = espressif8266@1.6.0 ; v2.4.0
+platform = espressif8266
+framework = arduino
+board = esp01_1m
+board_flash_mode = dout
+build_flags = -Wl,-Tesp8266.flash.1m0.ld -DUSE_CLASSIC
+;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DUSE_CLASSIC -DUSE_CONFIG_OVERRIDE
+extra_scripts = pio/strip-floats.py
+
+; Serial Monitor options
+monitor_baud = 115200
+
+[env:sonoff-knx]
+;platform = espressif8266@1.5.0 ; v2.3.0
+;platform = espressif8266@1.6.0 ; v2.4.0
+platform = espressif8266
+framework = arduino
+board = esp01_1m
+board_flash_mode = dout
+build_flags = -Wl,-Tesp8266.flash.1m0.ld -DUSE_KNX_NO_EMULATION
+;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DUSE_KNX_NO_EMULATION -DUSE_CONFIG_OVERRIDE
+extra_scripts = pio/strip-floats.py
+
+; Serial Monitor options
+monitor_baud = 115200
+
+[env:sonoff-allsensors]
;platform = espressif8266@1.5.0 ; v2.3.0
;platform = espressif8266@1.6.0 ; v2.4.0
platform = espressif8266
@@ -85,20 +115,6 @@ extra_scripts = pio/strip-floats.py
; Serial Monitor options
monitor_baud = 115200
-[env:sonoff-CZ]
-;platform = espressif8266@1.5.0 ; v2.3.0
-;platform = espressif8266@1.6.0 ; v2.4.0
-platform = espressif8266
-framework = arduino
-board = esp01_1m
-board_flash_mode = dout
-build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=cs-CZ
-;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=cs-CZ -DUSE_CONFIG_OVERRIDE
-extra_scripts = pio/strip-floats.py
-
-; *** Serial Monitor options
-monitor_baud = 115200
-
[env:sonoff-BG]
;platform = espressif8266@1.5.0 ; v2.3.0
;platform = espressif8266@1.6.0 ; v2.4.0
@@ -113,6 +129,34 @@ extra_scripts = pio/strip-floats.py
; *** Serial Monitor options
monitor_baud = 115200
+[env:sonoff-CN]
+;platform = espressif8266@1.5.0 ; v2.3.0
+;platform = espressif8266@1.6.0 ; v2.4.0
+platform = espressif8266
+framework = arduino
+board = esp01_1m
+board_flash_mode = dout
+build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=zh-CN
+;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=zh-CN -DUSE_CONFIG_OVERRIDE
+extra_scripts = pio/strip-floats.py
+
+; *** Serial Monitor options
+monitor_baud = 115200
+
+[env:sonoff-CZ]
+;platform = espressif8266@1.5.0 ; v2.3.0
+;platform = espressif8266@1.6.0 ; v2.4.0
+platform = espressif8266
+framework = arduino
+board = esp01_1m
+board_flash_mode = dout
+build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=cs-CZ
+;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=cs-CZ -DUSE_CONFIG_OVERRIDE
+extra_scripts = pio/strip-floats.py
+
+; *** Serial Monitor options
+monitor_baud = 115200
+
[env:sonoff-DE]
;platform = espressif8266@1.5.0 ; v2.3.0
;platform = espressif8266@1.6.0 ; v2.4.0
@@ -253,20 +297,6 @@ extra_scripts = pio/strip-floats.py
; *** Serial Monitor options
monitor_baud = 115200
-[env:sonoff-CN]
-;platform = espressif8266@1.5.0 ; v2.3.0
-;platform = espressif8266@1.6.0 ; v2.4.0
-platform = espressif8266
-framework = arduino
-board = esp01_1m
-board_flash_mode = dout
-build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=zh-CN
-;build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMY_LANGUAGE=zh-CN -DUSE_CONFIG_OVERRIDE
-extra_scripts = pio/strip-floats.py
-
-; *** Serial Monitor options
-monitor_baud = 115200
-
[env:sonoff-TW]
;platform = espressif8266@1.5.0 ; v2.3.0
;platform = espressif8266@1.6.0 ; v2.4.0
diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino
index 1c2269538..454f24137 100644
--- a/sonoff/_releasenotes.ino
+++ b/sonoff/_releasenotes.ino
@@ -1,11 +1,16 @@
/* 5.12.0m
* Reinit timers to accomodate random window (#2447)
+ * Remove sonoff-xxl
+ * Add sonoff-classic, sonoff-allsensors and sonoff-knx
+ * Add some coloring to important web buttons
+ * Add user selectable defines for Sunrise/set Dawn option (#2378)
* Add random window to timers (#2447)
* Add optional KNX IP Protocol Support (#2402)
* Add Greek language file (#2491)
* Add Bulgarian language file
* Add support for sensor HC-SR04 ultrasonic (#113, #1964, #2444)
* Add support for Sonoff Pow R2 (#2340)
+ * Add GPIO_User to GPIO02 for all Sonoff T1 (#2524)
* Fix compile error when using ESP/Arduino library v2.3.0 by reverting KNX async UDP library to default UDP library (#2488, #2492, #2493)
* Fix configuration filename truncation when it contains spaces (#2484, #2490)
*
@@ -111,7 +116,7 @@
* Add support for sensor SHTC3 (#1967)
*
* 5.12.0a
- * Change platformio option sonoff-ds18x20 to sonoff-xxl enabling ds18x20 and all other sensors in one image
+ * Change platformio option sonoff-ds18x20 to sonoff-allsensors enabling ds18x20 and all other sensors in one image
* Fix providing web page configuratin option for Friendly Name when no device (relay or light) is configured (#1850)
* Change default parameters in user_config.h to undefined for easy installation (#1851)
* Change max user configurable hold time from 10 to 25 seconds (#1851)
diff --git a/sonoff/sonoff.h b/sonoff/sonoff.h
index 2a2bb58ce..296046c85 100644
--- a/sonoff/sonoff.h
+++ b/sonoff/sonoff.h
@@ -127,6 +127,12 @@ typedef unsigned long power_t; // Power (Relay) type
#define MQTT_TASMOTAMQTT 2 // Mqtt TasmotaMqtt library based on esp-mqtt-arduino
#define MQTT_ESPMQTTARDUINO 3 // Mqtt esp-mqtt-arduino library by Ingo Randolf
+// Sunrise and Sunset DawnType
+#define DAWN_NORMAL -0.8333
+#define DAWN_CIVIL -6.0
+#define DAWN_NAUTIC -12.0
+#define DAWN_ASTRONOMIC -18.0
+
/*********************************************************************************************\
* Enumeration
\*********************************************************************************************/
diff --git a/sonoff/sonoff_post.h b/sonoff/sonoff_post.h
index 09d68f89a..1d6ba7878 100644
--- a/sonoff/sonoff_post.h
+++ b/sonoff/sonoff_post.h
@@ -20,6 +20,10 @@
#ifndef _SONOFF_POST_H_
#define _SONOFF_POST_H_
+/*********************************************************************************************\
+ * Function declarations
+\*********************************************************************************************/
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -38,9 +42,18 @@ void WifiWpsStatusCallback(wps_cb_status status);
void KNX_CB_Action(message_t const &msg, void *arg);
//#endif // USE_KNX
+/*********************************************************************************************\
+ * Default global defines
+\*********************************************************************************************/
+
#define USE_DHT // Default DHT11 sensor needs no external library
-#ifdef USE_ALL_SENSORS // ===================== Configure sonoff-xxl.bin =========================
+/*********************************************************************************************\
+ * [sonoff-allsensors.bin]
+ * Provide an image with all supported sensors enabled
+\*********************************************************************************************/
+
+#ifdef USE_ALL_SENSORS
#define USE_ADC_VCC // Display Vcc in Power status. Disable for use as Analog input on selected devices
#define USE_DS18x20 // For more than one DS18x20 sensors with id sort, single scan and read retry (+1k3 code)
//#define USE_DS18x20_LEGACY // For more than one DS18x20 sensors with dynamic scan using library OneWire (+1k5 code)
@@ -80,14 +93,75 @@ void KNX_CB_Action(message_t const &msg, void *arg);
// #define USE_WS2812_DMA // DMA supports only GPIO03 (= Serial RXD) (+1k mem). When USE_WS2812_DMA is enabled expect Exceptions on Pow
#define USE_ARILUX_RF // Add support for Arilux RF remote controller (+0k8 code, 252 iram (non 2.3.0))
#define USE_SR04 // Add support for HC-SR04 ultrasonic devices (+1k code)
-#endif // USE_ALL_SENSORS =====================
+#endif // USE_ALL_SENSORS
+
+/*********************************************************************************************\
+ * [sonoff-classic.bin]
+ * Provide an image close to version 5.12.0 but still within 499k program space to allow one time OTA
+\*********************************************************************************************/
+
+#ifdef USE_CLASSIC
+#ifdef USE_KNX
+#undef USE_KNX
+#endif
+#ifdef USE_TIMERS
+#undef USE_TIMERS
+#endif
+#ifdef USE_TIMERS_WEB
+#undef USE_TIMERS_WEB
+#endif
+#ifdef USE_SUNRISE
+#undef USE_SUNRISE
+#endif
+#ifdef USE_RULES
+#undef USE_RULES
+#endif
+#ifdef USE_SGP30
+#undef USE_SGP30
+#endif
+#ifdef USE_NOVA_SDS
+#undef USE_NOVA_SDS
+#endif
+#ifdef USE_IR_RECEIVE
+#undef USE_IR_RECEIVE
+#endif
+#ifdef USE_SERIAL_BRIDGE
+#undef USE_SERIAL_BRIDGE
+#endif
+#ifdef USE_SR04
+#undef USE_SR04
+#endif
+#endif // USE_CLASSIC
+
+/*********************************************************************************************\
+ * [sonoff-knx.bin]
+ * Provide a dedicated KNX image allowing enough code and memory space
+\*********************************************************************************************/
+
+#ifdef USE_KNX_NO_EMULATION
+#ifndef USE_KNX
+#define USE_KNX // Enable KNX IP Protocol Support (+23k code, +3k3 mem)
+#endif
+#ifdef USE_EMULATION
+#undef USE_EMULATION // Disable Belkin WeMo and Hue Bridge emulation for Alexa (-16k code, -2k mem)
+#endif
+#endif // USE_KNX_NO_EMULATION
+
+/*********************************************************************************************\
+ * Mandatory define for DS18x20 if changed by above image selections
+\*********************************************************************************************/
#if defined(USE_DS18x20) || defined(USE_DS18x20_LEGACY)
#else
#define USE_DS18B20 // Default DS18B20 sensor needs no external library
#endif
-#ifdef BE_MINIMAL // ========================== Configure sonoff-minimal.bin =====================
+/*********************************************************************************************\
+ * [sonoff-minimal.bin]
+ * Provide the smallest image possible while still enabling a webserver for intermediate image load
+\*********************************************************************************************/
+
+#ifdef BE_MINIMAL
#ifdef USE_MQTT_TLS
#undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set
#endif
@@ -169,7 +243,11 @@ void KNX_CB_Action(message_t const &msg, void *arg);
#ifdef DEBUG_THEO
#undef DEBUG_THEO // Disable debug code
#endif
-#endif // BE_MINIMAL ==========================
+#endif // BE_MINIMAL
+
+/*********************************************************************************************\
+ * Mandatory defines satisfying possible disabled defines
+\*********************************************************************************************/
#ifndef SWITCH_MODE
#define SWITCH_MODE TOGGLE // TOGGLE, FOLLOW or FOLLOW_INV (the wall switch state)
diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h
index b3f95152f..dc0746ec7 100644
--- a/sonoff/sonoff_template.h
+++ b/sonoff/sonoff_template.h
@@ -608,7 +608,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
{ "Sonoff T1 1CH", // Sonoff T1 1CH (ESP8285)
GPIO_KEY1, // GPIO00 Button 1
GPIO_USER, // GPIO01 Serial RXD and Optional sensor
- 0,
+ GPIO_USER, // GPIO02 Optional Sensor (J3 Pin 5)
GPIO_USER, // GPIO03 Serial TXD and Optional sensor
0, 0,
0, 0, 0, // Flash connection
@@ -621,7 +621,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
{ "Sonoff T1 2CH", // Sonoff T1 2CH (ESP8285)
GPIO_KEY1, // GPIO00 Button 1
GPIO_USER, // GPIO01 Serial RXD and Optional sensor
- 0,
+ GPIO_USER, // GPIO02 Optional Sensor (J3 Pin 5)
GPIO_USER, // GPIO03 Serial TXD and Optional sensor
0,
GPIO_REL2, // GPIO05 Blue Led and Relay 2 (0 = Off, 1 = On)
@@ -636,7 +636,7 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
{ "Sonoff T1 3CH", // Sonoff T1 3CH (ESP8285)
GPIO_KEY1, // GPIO00 Button 1
GPIO_USER, // GPIO01 Serial RXD and Optional sensor
- 0,
+ GPIO_USER, // GPIO02 Optional Sensor (J3 Pin 5)
GPIO_USER, // GPIO03 Serial TXD and Optional sensor
GPIO_REL3, // GPIO04 Blue Led and Relay 3 (0 = Off, 1 = On)
GPIO_REL2, // GPIO05 Blue Led and Relay 2 (0 = Off, 1 = On)
diff --git a/sonoff/user_config.h b/sonoff/user_config.h
index 05950abd0..92dd23dda 100644
--- a/sonoff/user_config.h
+++ b/sonoff/user_config.h
@@ -228,6 +228,7 @@
#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 SUNRISE_DAWN_ANGLE DAWN_NORMAL // Select desired Dawn Angle from (DAWN_NORMAL, DAWN_CIVIL, DAWN_NAUTIC, DAWN_ASTRONOMIC)
// -- Rules ---------------------------------------
#define USE_RULES // Add support for rules (+4k4 code)
@@ -288,11 +289,23 @@
#define USE_SR04 // Add support for HC-SR04 ultrasonic devices (+1k code)
+/*********************************************************************************************\
+ * Select features and sensors enabled in previous version saving space
+\*********************************************************************************************/
+
+//#define USE_CLASSIC // Create sonoff-classic (See sonoff_post.h for selected features)
+
/*********************************************************************************************\
* Select all sensors - overrides above undefines!!
\*********************************************************************************************/
-//#define USE_ALL_SENSORS // Create sonoff-xxl with all sensors enabled (See sonoff_post.h for selected sensors)
+//#define USE_ALL_SENSORS // Create sonoff-allsensors with all sensors enabled (See sonoff_post.h for selected sensors)
+
+/*********************************************************************************************\
+ * Select KNX without Emulation to save space
+\*********************************************************************************************/
+
+//#define USE_KNX_NO_EMULATION // Create sonoff-knx with KNX but without Emulation (See sonoff_post.h)
/*********************************************************************************************\
* Compile a minimal version if upgrade memory gets tight ONLY TO BE USED FOR UPGRADE STEP 1!
diff --git a/sonoff/webserver.ino b/sonoff/webserver.ino
index c6dcab568..e7d9262be 100644
--- a/sonoff/webserver.ino
+++ b/sonoff/webserver.ino
@@ -89,7 +89,11 @@ const char HTTP_HEAD_STYLE[] PROGMEM =
"body{text-align:center;font-family:verdana;}"
"td{padding:0px;}"
"button{border:0;border-radius:0.3rem;background-color:#1fa3ec;color:#fff;line-height:2.4rem;font-size:1.2rem;width:100%;-webkit-transition-duration:0.4s;transition-duration:0.4s;cursor:pointer;}"
- "button:hover{background-color:#006cba;}"
+ "button:hover{background-color:#0e70a4;}"
+ ".bred{background-color:#d43535;}"
+ ".bred:hover{background-color:#931f1f;}"
+ ".bgrn{background-color:#47c266;}"
+ ".bgrn:hover{background-color:#5aaf6f;}"
"a{text-decoration:none;}"
".p{float:left;text-align:left;}"
".q{float:right;text-align:right;}"
@@ -180,7 +184,7 @@ const char HTTP_BTN_MENU1[] PROGMEM =
"