2022-02-22 20:16:33 +01:00
|
|
|
|
#include "EventsAndOrders.h"
|
2022-02-23 00:37:37 +03:00
|
|
|
|
#include "classes/IoTScenario.h"
|
|
|
|
|
|
|
|
|
|
|
|
extern IoTScenario iotScen; // объект управления сценарием
|
2022-02-22 20:16:33 +01:00
|
|
|
|
|
2022-02-23 01:39:05 +01:00
|
|
|
|
// orderBuf - буфер прямых команд, которые нужно выпонить сразу, нажали на кнопку в приложении
|
2022-02-22 20:16:33 +01:00
|
|
|
|
//необходимо тут же изменить параметр, записать новое значение
|
|
|
|
|
|
|
|
|
|
|
|
// eventBuf - буфер событий, в нем как на конвеере едут события, и каждое событие проверяется через все условия сценариев
|
|
|
|
|
|
//его главное отличие от orderBuf в том что события в нем не для выполнения, а для проверки в условиях сценариев
|
|
|
|
|
|
//события в нем лишь вызывают другие команды, помещенные в блоке сценария, если условие совпало.
|
|
|
|
|
|
|
|
|
|
|
|
//эта функция будет вызываться:
|
|
|
|
|
|
// 1.на приеме сообщений в mqtt (см mqttCallback строку 142 в mqttClient.cpp)
|
|
|
|
|
|
// 2.на приеме сообщений в ws
|
|
|
|
|
|
// 3.в сценарях когда надо выполнить команды
|
|
|
|
|
|
void generateOrder(const String& id, const String& value) {
|
|
|
|
|
|
String event = id + " " + value + ",";
|
|
|
|
|
|
orderBuf += event;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//эта функция будет вызываться в loop()
|
|
|
|
|
|
void handleOrder() {
|
|
|
|
|
|
if (orderBuf.length()) {
|
|
|
|
|
|
String order = selectToMarker(orderBuf, ",");
|
2022-08-11 18:32:56 +02:00
|
|
|
|
SerialPrint("i", F("ORDER"), order);
|
2022-02-23 01:39:05 +01:00
|
|
|
|
|
2022-02-22 20:16:33 +01:00
|
|
|
|
//здесь нужно перебрать все методы execute всех векторов и выполнить те id которых совпали с id события
|
2022-02-22 23:58:35 +03:00
|
|
|
|
IoTItem* item = findIoTItem(selectToMarker(order, " "));
|
|
|
|
|
|
if (item) {
|
2022-08-11 18:32:56 +02:00
|
|
|
|
SerialPrint("i", F("ORDER"), "order matched " + order);
|
2022-02-22 23:58:35 +03:00
|
|
|
|
String valStr = selectToMarkerLast(order, " ");
|
2022-04-25 10:48:44 +03:00
|
|
|
|
item->setValue(valStr);
|
2022-02-22 23:58:35 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-02-22 20:16:33 +01:00
|
|
|
|
orderBuf = deleteBeforeDelimiter(orderBuf, ",");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//эта функция будет вызываться:
|
|
|
|
|
|
// 1.в местах где событие только что произошло (IoTItem::regEvent)
|
|
|
|
|
|
void generateEvent(const String& id, const String& value) {
|
|
|
|
|
|
String event = id + " " + value + ",";
|
|
|
|
|
|
eventBuf += event;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//эта функция будет вызываться в loop()
|
|
|
|
|
|
void handleEvent() {
|
|
|
|
|
|
if (eventBuf.length()) {
|
|
|
|
|
|
String event = selectToMarker(eventBuf, ",");
|
2022-08-14 17:13:25 +02:00
|
|
|
|
SerialPrint("i", F("EVENT"), event);
|
2022-02-23 01:39:05 +01:00
|
|
|
|
|
2022-02-22 20:16:33 +01:00
|
|
|
|
//здесь нужно пропускать данное событие через условия сценариев
|
|
|
|
|
|
//и если оно есть в условии сценария и совподает
|
2022-08-30 14:00:22 +03:00
|
|
|
|
iotScen.exec(selectToMarker(event, " "));
|
2022-02-23 00:37:37 +03:00
|
|
|
|
|
2022-02-22 20:16:33 +01:00
|
|
|
|
eventBuf = deleteBeforeDelimiter(eventBuf, ",");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|