From 7a6cca6d20bc581164cacce2b47e966238b541b9 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 3 Dec 2023 15:52:44 +0100 Subject: [PATCH] Add command ``WebCanvas`` Add command ``WebCanvas linear-gradient(#FF0018 7%,#FFA52C,#FFFF41,#008018,#0000F9,#86007D 93%)`` to set GUI canvas --- CHANGELOG.md | 2 +- RELEASENOTES.md | 2 +- tasmota/include/i18n.h | 1 + tasmota/include/tasmota.h | 1 + tasmota/tasmota_support/settings.ino | 2 +- .../xdrv_01_9_webserver.ino | 38 +++++++++++++------ 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d45edda0..7fcd5022e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file. ## [13.2.0.3] ### Added - DeepSleep support through TIMERS (#20117) -- ESP32 show colorful background if ``WebColor2`` bit0 is not set. Bit0 is default set using #252525 +- Command ``WebCanvas linear-gradient(#FF0018 7%,#FFA52C,#FFFF41,#008018,#0000F9,#86007D 93%)`` to set GUI canvas ### Breaking Changed diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 247c41de6..91520a37e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -119,6 +119,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm ## Changelog v13.2.0.3 ### Added - Command ``GpioRead`` to show input state [#19810](https://github.com/arendst/Tasmota/issues/19810) +- Command ``WebCanvas linear-gradient(#FF0018 7%,#FFA52C,#FFFF41,#008018,#0000F9,#86007D 93%)`` to set GUI canvas - I2C bus2 support to iAQ core sensor [#19799](https://github.com/arendst/Tasmota/issues/19799) - I2C bus2 support to HTU temperature and humidity sensor - I2C bus2 support to BH1750 ambient light sensor @@ -140,7 +141,6 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm - DeepSleep support through TIMERS [#20117](https://github.com/arendst/Tasmota/issues/20117) - Support for ESP32-C2 and ESP32-C6 using Arduino core v3 - ESP32 core v3 auto TasConsole USB or Serial connection by @staars -- ESP32 show colorful background if ``WebColor2`` bit0 is not set. Bit0 is default set using #252525 - ESP32 Partition Wizard can be loaded dynamically [#19980](https://github.com/arendst/Tasmota/issues/19980) - ESP32 support for Avago Tech Bluetooth Buttons [#20088](https://github.com/arendst/Tasmota/issues/20088) - Berry ``debug.gcdebug()`` to enable GC debugging [#19936](https://github.com/arendst/Tasmota/issues/19936) diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index 66feb6fd5..e5cdb2f61 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -445,6 +445,7 @@ #define D_CMND_WEBQUERY "WebQuery" #define D_CMND_WEBCOLOR "WebColor" #define D_CMND_WEBBUTTON "WebButton" +#define D_CMND_WEBCANVAS "WebCanvas" #define D_CMND_WEBTIME "WebTime" #define D_CMND_WEBSENSOR "WebSensor" #define D_CMND_WEBGETCONFIG "WebGetConfig" diff --git a/tasmota/include/tasmota.h b/tasmota/include/tasmota.h index f3dc439c1..d6ff4b2b7 100644 --- a/tasmota/include/tasmota.h +++ b/tasmota/include/tasmota.h @@ -484,6 +484,7 @@ enum SettingsTextIndex { SET_OTAURL, SET_SHD_PARAM, SET_RGX_SSID, SET_RGX_PASSWORD, SET_INFLUXDB_HOST, SET_INFLUXDB_PORT, SET_INFLUXDB_ORG, SET_INFLUXDB_TOKEN, SET_INFLUXDB_BUCKET, SET_INFLUXDB_RP, + SET_CANVAS, SET_MAX, // limit of texts stored in Settings // Index above are not stored in Settings and should be handled specifically in SettingText() SET_BUTTON17, SET_BUTTON18, SET_BUTTON19, SET_BUTTON20, SET_BUTTON21, SET_BUTTON22, SET_BUTTON23, SET_BUTTON24, diff --git a/tasmota/tasmota_support/settings.ino b/tasmota/tasmota_support/settings.ino index 136b04a33..fd4c45708 100644 --- a/tasmota/tasmota_support/settings.ino +++ b/tasmota/tasmota_support/settings.ino @@ -1764,7 +1764,7 @@ void SettingsDelta(void) { } #if (LANGUAGE_LCID == 1049) if (Settings->version < 0x0D020003) { // 13.2.0.3 - Settings->web_color[1][2] &= 0xFE; // Reset WebColor2 bit0 once. Fix by user setting WebColor2 bit0 (like #252525) + SettingsUpdateText(SET_CANVAS, PSTR("linear-gradient(#FF0018 7%,#FFA52C,#FFFF41,#008018,#0000F9,#86007D 93%)")); } #endif diff --git a/tasmota/tasmota_xdrv_driver/xdrv_01_9_webserver.ino b/tasmota/tasmota_xdrv_driver/xdrv_01_9_webserver.ino index 274a52b8d..fccc1ad0e 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_01_9_webserver.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_01_9_webserver.ino @@ -900,13 +900,10 @@ void WSContentSendStyle_P(const char* formatP, ...) { _WSContentSendBuffer(false, formatP, arg); va_end(arg); } - -#if defined(ESP32) || (LANGUAGE_LCID == 1049) - if (0 == (WebColor(COL_BACKGROUND) & 1)) { // Show colorful background if WebColor2 bit0 is not set - WSContentSend_P(PSTR("body{background:linear-gradient(#FF0018 7%%,#FFA52C,#FFFF41,#008018,#0000F9,#86007D 93%%);background-repeat:no-repeat;background-attachment:fixed;background-size:cover;}")); + if (strlen(SettingsText(SET_CANVAS))) { +// WSContentSend_P(PSTR("body{background:%s;background-repeat:no-repeat;background-attachment:fixed;background-size:cover;}"), SettingsText(SET_CANVAS)); + WSContentSend_P(PSTR("body{background:%s 0 0 / cover no-repeat fixed;}"), SettingsText(SET_CANVAS)); } -#endif - WSContentSend_P(HTTP_HEAD_STYLE3, WebColor(COL_BACKGROUND), WebColor(COL_TEXT), #ifdef FIRMWARE_MINIMAL WebColor(COL_TEXT_WARNING), @@ -3514,6 +3511,10 @@ bool JsonWebColor(const char* dataBuf) return true; } +/*********************************************************************************************\ + * Commands +\*********************************************************************************************/ + const char kWebCmndStatus[] PROGMEM = D_JSON_DONE "|" D_JSON_WRONG_PARAMETERS "|" D_JSON_CONNECT_FAILED "|" D_JSON_HOST_NOT_FOUND "|" D_JSON_MEMORY_ERROR "|" #ifdef USE_WEBGETCONFIG "|" D_JSON_FILE_NOT_FOUND "|" D_JSON_OTHER_HTTP_ERROR "|" D_JSON_CONNECTION_LOST "|" D_JSON_INVALID_FILE_TYPE @@ -3531,7 +3532,7 @@ const char kWebCommands[] PROGMEM = "|" // No prefix D_CMND_SENDMAIL "|" #endif D_CMND_WEBSERVER "|" D_CMND_WEBPASSWORD "|" D_CMND_WEBREFRESH "|" D_CMND_WEBSEND "|" D_CMND_WEBQUERY "|" - D_CMND_WEBCOLOR "|" D_CMND_WEBSENSOR "|" D_CMND_WEBBUTTON + D_CMND_WEBCOLOR "|" D_CMND_WEBSENSOR "|" D_CMND_WEBBUTTON "|" D_CMND_WEBCANVAS #ifdef USE_WEBGETCONFIG "|" D_CMND_WEBGETCONFIG #endif @@ -3552,7 +3553,7 @@ void (* const WebCommand[])(void) PROGMEM = { &CmndSendmail, #endif &CmndWebServer, &CmndWebPassword, &CmndWebRefresh, &CmndWebSend, &CmndWebQuery, - &CmndWebColor, &CmndWebSensor, &CmndWebButton + &CmndWebColor, &CmndWebSensor, &CmndWebButton, &CmndWebCanvas #ifdef USE_WEBGETCONFIG , &CmndWebGetConfig #endif @@ -3562,9 +3563,7 @@ void (* const WebCommand[])(void) PROGMEM = { #endif // FIRMWARE_MINIMAL_ONLY }; -/*********************************************************************************************\ - * Commands -\*********************************************************************************************/ +/*********************************************************************************************/ void CmndWebTime(void) { // 2017-03-07T11:08:02-07:00 @@ -3771,6 +3770,23 @@ void CmndWebButton(void) } } +void CmndWebCanvas(void) { + /* + WebCanvas allows GUI body canvas configuration using either "url" or "gradient". + The provided text overrules the body CSS background property "body{background: 0 0 / cover no-repeat fixed;}" + - WebCanvas " // Reset canvas + - WebCanvas 0 // Reset canvas + - WebCanvas linear-gradient(#FF0018 7%,#FFA52C,#FFFF41,#008018,#0000F9,#86007D 93%) // Gradient pride flag + - WebCanvas linear-gradient(#FF0018 16%,#FFA52C 16% 33%,#FFFF41 33% 50%,#008018 50% 67%,#0000F9 67% 84%,#86007D 84%) // Pride flag + - WebCanvas url(http://ota.tasmota.com/tasmota/images/prf.png) // Pride flag + - WebCanvas url(http://ota.tasmota.com/tasmota/images/tasmota_logo.png) // Tasmota logo + */ + if (XdrvMailbox.data_len > 0) { + SettingsUpdateText(SET_CANVAS, (SC_CLEAR == Shortcut()) ? "" : XdrvMailbox.data); + } + ResponseCmndChar(SettingsText(SET_CANVAS)); +} + #ifdef USE_CORS void CmndCors(void) {