-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
xdrv_96_blacklist.ino - Blacklist for Tasmota | ||
SPDX-FileCopyrightText: 2022 Theo Arends | ||
SPDX-License-Identifier: GPL-3.0-only | ||
*/ | ||
|
||
#define USE_BLACKLIST | ||
|
||
#ifdef USE_BLACKLIST | ||
/*********************************************************************************************\ | ||
* Blacklist support | ||
* | ||
* Check language and user set latitude/longitude against blacklist table | ||
\*********************************************************************************************/ | ||
|
||
#define XDRV_96 96 | ||
|
||
typedef struct { | ||
int16_t latitude_tl; // - 8999 to 8999 | ||
int16_t longitude_tl; // -17999 to 17999 | ||
int16_t latitude_br; | ||
int16_t longitude_br; | ||
uint16_t lcid; | ||
} tBlArray; | ||
|
||
//const char BlacklistText[] PROGMEM = "Stop war - Free Ukrain|Stop war - Free Ukrain|"; | ||
const char BlacklistText[] PROGMEM = "Stop war, Free Ukrain"; | ||
|
||
// lat_tl lon_tl lat_br lon_br lcid | ||
tBlArray BlArray[] { 5900, 3200, 5300, 4400, 1049, // Around Moscow | ||
5450, 2633, 5280, 2900, 1049 // Around Minsk | ||
}; | ||
|
||
uint8_t blist_show = 0; | ||
|
||
void BListEverySecond(void) { | ||
if (Rtc.utc_time < 1648771200) { // Only until 2022-04-01 | ||
if (0 == (TasmotaGlobal.uptime % 20)) { // Only every 20 seconds | ||
if (TasmotaGlobal.power) { // Only if any power on | ||
uint32_t latitude = Settings->latitude / 10000; | ||
uint32_t longitude = Settings->longitude / 10000; | ||
uint32_t count = sizeof(BlArray) / sizeof(tBlArray); | ||
for (uint32_t i = 0; i < count; i++) { | ||
// Currently only supports top-right quarter of the earth | ||
if ((LANGUAGE_LCID == BlArray[i].lcid) && // Check language id | ||
(latitude < BlArray[i].latitude_tl) && // Check user set latitude and longitude against table | ||
(latitude > BlArray[i].latitude_br) && | ||
(longitude > BlArray[i].longitude_tl) && | ||
(longitude < BlArray[i].longitude_br)) { | ||
|
||
// char bl_text[100]; | ||
// snprintf_P(bl_text, sizeof(bl_text), PSTR("Power0 0")); // Turn all power off - annoying | ||
// snprintf_P(bl_text, sizeof(bl_text), PSTR("Restart 1")); // Restart - more annoying | ||
// snprintf_P(bl_text, sizeof(bl_text), PSTR("Reset 1")); // Reset - disastrous | ||
// ExecuteCommand(bl_text, SRC_IGNORE); | ||
|
||
// char bl_text[100]; | ||
// AddLog(LOG_LEVEL_NONE, PSTR("**** %s ****"), GetTextIndexed(bl_text, sizeof(bl_text), i, BlacklistText)); | ||
AddLog(LOG_LEVEL_NONE, PSTR("**** %s ****"), BlacklistText); | ||
blist_show = i +1; // Set GUI message id | ||
break; | ||
} | ||
} | ||
} | ||
} else if (0 == (TasmotaGlobal.uptime % 10)) { // Only every 10 seconds | ||
blist_show = 0; // Reset GUI message id after 10 seconds | ||
} | ||
} | ||
} | ||
|
||
void BListShow(bool json) { | ||
if (blist_show) { | ||
// char bl_text[100]; | ||
// WSContentSend_PD(PSTR("{s}**** %s ****{m}{e}"), GetTextIndexed(bl_text, sizeof(bl_text), blist_show -1, BlacklistText)); | ||
WSContentSend_P(PSTR("{s}**** %s ****{m}{e}"), BlacklistText); | ||
} | ||
} | ||
|
||
/*********************************************************************************************\ | ||
* Interface | ||
\*********************************************************************************************/ | ||
|
||
bool Xdrv96(uint8_t function) { | ||
bool result = false; | ||
|
||
switch (function) { | ||
case FUNC_EVERY_SECOND: | ||
BListEverySecond(); | ||
break; | ||
#ifdef USE_WEBSERVER | ||
case FUNC_WEB_SENSOR: | ||
BListShow(0); | ||
break; | ||
#endif // USE_WEBSERVER | ||
} | ||
|
||
return result; | ||
} | ||
|
||
#endif // USE_BLACKLIST |