Исправляем ошибку удаления сетевых элементов с истекшим сроком жизни

включая сообщения об ошибках
This commit is contained in:
2023-02-08 11:20:58 +03:00
parent e10dd9a569
commit 6bc3355cbe
5 changed files with 10 additions and 7 deletions

View File

@@ -73,8 +73,8 @@ class IoTItem {
String _id = "errorId"; // если будет попытка создания Item без указания id, то элемент оставит это значение
long _interval = 0;
int _intFromNet = -2; // количество секунд доверия, пришедших из сети вместе с данными для текущего ИД
// -2 - данные не приходили, скорее всего, элемент локальный, доверие есть
// -1 - данные приходили и обратный отсчет дошел до нуля, значит доверия нет
// -2 - данные не приходили, скорее всего, элемент локальный, доверие есть, в случае прихода сетевого значения с int=0, будет выключен механизм проверки доверия
// -1 - данные приходили и обратный отсчет дошел до нуля, значит доверия нет и элемент будет удален при следующем такте loop
float _multiply; // умножаем на значение
float _plus; // увеличиваем на значение

View File

@@ -91,7 +91,7 @@ void setup() {
iotScen.loadScenario("/scenario.txt");
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
createItemFromNet("onStart", "1", -4);
createItemFromNet("onStart", "1", 1);
stInit();

View File

@@ -119,7 +119,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
configure("/config.json");
iotScen.loadScenario("/scenario.txt");
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
createItemFromNet("onStart", "1", -4);
createItemFromNet("onStart", "1", 1);
}
//----------------------------------------------------------------------//

View File

@@ -7,7 +7,7 @@
IoTItem::IoTItem(const String& parameters) {
jsonRead(parameters, F("int"), _interval, false);
if (_interval = 0) enableDoByInt = false; // выключаем использование периодического выполнения в модуле
if (_interval == 0) enableDoByInt = false; // выключаем использование периодического выполнения в модуле
if (_interval > 0) _interval = _interval * 1000; // если int положителен, то считаем, что получены секунды
if (_interval < 0) _interval = _interval * -1; // если int отрицательный, то миллисекунды
jsonRead(parameters, F("subtype"), _subtype, false);
@@ -171,7 +171,7 @@ void IoTItem::setIntFromNet(int interval) {
void IoTItem::checkIntFromNet() {
// проверяем элемент на доверие данным.
if (_intFromNet >= 0) {
// если время жизни истекло, то удаляем элемент
// если время жизни истекло, то удаляем элемент чуть позже на следующем такте loop
// если это было уведомление не об ошибке или начале работы, то сообщаем, что сетевое событие давно не приходило
if (_intFromNet == 0 && _id.indexOf("onError") == -1 && _id.indexOf("onStart") == -1) {
SerialPrint("E", _id, "The new data did not come from the network. The level of trust is low.", _id);
@@ -271,6 +271,9 @@ IoTItem* createItemFromNet(const String& itemId, const String& value, int interv
// создаем временную копию элемента из сети на основе события
IoTItem* createItemFromNet(const String& msgFromNet) {
IoTItem* tmpp = new IoTItem(msgFromNet);
Serial.println("vvvvvvvvvvv " + msgFromNet + " " + (String)tmpp->getInterval());
if (tmpp->getInterval()) tmpp->setIntFromNet(tmpp->getInterval() / 1000 + 5);
tmpp->iAmLocal = false;
IoTItems.push_back(tmpp);

View File

@@ -21,7 +21,7 @@ void SerialPrint(const String& errorLevel, const String& module, const String& m
cleanString(tosend);
// создаем событие об ошибке для возможной реакции в сценарии
if (itemId != "") {
createItemFromNet(itemId + F("_onError"), tosend, -4);
createItemFromNet(itemId + F("_onError"), tosend, 1);
} else {
// createItemFromNet("onError", tosend, -4);
}