добавил два главных буфера, передаю эстафету Илье!!!

This commit is contained in:
Dmitry Borisenko
2022-02-22 20:16:33 +01:00
parent a4648fd075
commit 69d46815cd
8 changed files with 70 additions and 16 deletions

View File

@@ -0,0 +1,8 @@
#pragma once
#include "Global.h"
extern void generateOrder(const String& id, const String& value);
extern void handleOrder();
extern void generateEvent(const String& id, const String& value);
extern void handleEvent();

View File

@@ -12,3 +12,4 @@
#include "DeviceList.h" #include "DeviceList.h"
#include "PeriodicTasks.h" #include "PeriodicTasks.h"
#include "classes/IoTScenario.h" #include "classes/IoTScenario.h"
#include "EventsAndOrders.h"

View File

@@ -3,6 +3,7 @@
#include "classes/NotAsync.h" #include "classes/NotAsync.h"
#include "Global.h" #include "Global.h"
#include "utils/WiFiUtils.h" #include "utils/WiFiUtils.h"
#include "EventsAndOrders.h"
void mqttInit(); void mqttInit();
void selectBroker(); void selectBroker();

View File

@@ -38,7 +38,7 @@ void asyncUdpInit() {
String data = uint8tToString(packet.data(), packet.length()); String data = uint8tToString(packet.data(), packet.length());
// Serial.println(data); // Serial.println(data);
if (udpPacketValidation(data)) { if (udpPacketValidation(data)) {
SerialPrint("i", F("UDP"), "Udp packet received, IP: " + packet.remoteIP().toString() + ":" + String(packet.remotePort())); SerialPrint("i", F("UDP"), "IP: " + packet.remoteIP().toString() + ":" + String(packet.remotePort()));
// Serial.println(data); // Serial.println(data);
jsonMergeArrays(devListHeapJson, data); jsonMergeArrays(devListHeapJson, data);
// Serial.println(devListHeapJson); // Serial.println(devListHeapJson);

47
src/EventsAndOrders.cpp Normal file
View File

@@ -0,0 +1,47 @@
#include "EventsAndOrders.h"
// orderBuf - буфер прямых команд, которые нужно выпонить сразу, нажали на кнопку в приложении, сработало условие сценария
//необходимо тут же изменить параметр, записать новое значение
// 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, ",");
Serial.println("order: " + order);
//здесь нужно перебрать все методы execute всех векторов и выполнить те id которых совпали с id события
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, ",");
Serial.println("event: " + event);
//здесь нужно пропускать данное событие через условия сценариев
//и если оно есть в условии сценария и совподает
//то нужно поместить все команды этого блока сценария в generateOrder(order1, order2, ....)
//который в свою очередь их выполнит
eventBuf = deleteBeforeDelimiter(eventBuf, ",");
}
}

View File

@@ -98,5 +98,9 @@ void loop() {
IoTItems[i]->loop(); IoTItems[i]->loop();
} }
handleOrder();
handleEvent();
// iotScen.ExecScenario(); // iotScen.ExecScenario();
} }

View File

@@ -139,20 +139,12 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
#endif #endif
} }
// else if (topicStr.indexOf("control") != -1) { else if (topicStr.indexOf("control") != -1) {
// String key = selectFromMarkerToMarker(topicStr, "/", 3); String key = selectFromMarkerToMarker(topicStr, "/", 3);
// generateOrder(key, payloadStr);
// String order; SerialPrint("i", F("=>MQTT"), "Msg from iotmanager app: " + key + " " + payloadStr);
// order += key; }
// order += " ";
// order += payloadStr;
// order += ",";
//
// loopCmdAdd(order);
//
// SerialPrint("i", F("=>MQTT"), "Msg from iotmanager app: " + key + " " + payloadStr);
//}
//
// else if (topicStr.indexOf("event") != -1) { // else if (topicStr.indexOf("event") != -1) {
// if (!jsonReadBool(settingsFlashJson, "MqttIn")) { // if (!jsonReadBool(settingsFlashJson, "MqttIn")) {
// return; // return;

View File

@@ -4,6 +4,7 @@
#include "classes/IoTItem.h" #include "classes/IoTItem.h"
#include "WsServer.h" #include "WsServer.h"
#include "ESPConfiguration.h" #include "ESPConfiguration.h"
#include "EventsAndOrders.h"
IoTItem::IoTItem(String parameters) { IoTItem::IoTItem(String parameters) {
jsonRead(parameters, F("int"), _interval); jsonRead(parameters, F("int"), _interval);
@@ -43,7 +44,7 @@ void IoTItem::loop() {
} }
void IoTItem::regEvent(String value, String consoleInfo = "") { void IoTItem::regEvent(String value, String consoleInfo = "") {
eventGen2(_id, value); generateEvent(_id, value);
jsonWriteStr(paramsHeapJson, _id, value); jsonWriteStr(paramsHeapJson, _id, value);
publishStatusMqtt(_id, value); publishStatusMqtt(_id, value);
publishStatusWs(_id, value); publishStatusWs(_id, value);