mirror of https://github.com/arendst/Tasmota.git
Add blacklist
This commit is contained in:
parent
e152d8ffe0
commit
98cbf2587a
|
@ -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
|
Loading…
Reference in New Issue