mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
добавил два главных буфера, передаю эстафету Илье!!!
This commit is contained in:
8
include/EventsAndOrders.h
Normal file
8
include/EventsAndOrders.h
Normal 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();
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
47
src/EventsAndOrders.cpp
Normal 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, ",");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -98,5 +98,9 @@ void loop() {
|
|||||||
IoTItems[i]->loop();
|
IoTItems[i]->loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleOrder();
|
||||||
|
|
||||||
|
handleEvent();
|
||||||
|
|
||||||
// iotScen.ExecScenario();
|
// iotScen.ExecScenario();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user