From b6c714bec8726e640c68522676917a6788fe0144 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <67171972+IoTManagerProject@users.noreply.github.com> Date: Sat, 15 Jan 2022 02:01:22 +0100 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D1=81=D0=B5?= =?UTF-8?q?=D0=BD=D1=81=D0=BE=D1=80=20=D0=B2=20=D0=BF=D1=80=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B2=D0=BA=D0=B5=204=20=D1=82=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/config.json | 11 +++++++++++ include/Configuration.h | 2 +- include/Main.h | 1 + include/modules/IoTSensorA.h | 16 ++++++++++++++++ src/Configuration.cpp | 16 ++++++++++++---- src/Main.cpp | 6 ++++++ src/modules/IoTSensorA.cpp | 17 +++++++++++++++++ src/modules/IoTSensorAnalog.cpp | 2 +- 8 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 include/modules/IoTSensorA.h create mode 100644 src/modules/IoTSensorA.cpp diff --git a/data_svelte/config.json b/data_svelte/config.json index c54c3e8b..2bc2c26d 100644 --- a/data_svelte/config.json +++ b/data_svelte/config.json @@ -52,8 +52,19 @@ "widget": "anydata", "page": "Сенсоры", "descr": "Температура", + "pin": 0, "int": 10 }, + { + "type": "Reading", + "subtype": "analog-adc", + "id": "t", + "widget": "anydata", + "page": "Сенсоры", + "descr": "Температура", + "pin": 0, + "int": 15 + }, { "type": "Reading", "subtype": "bme280", diff --git a/include/Configuration.h b/include/Configuration.h index c83b1872..90aec619 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -4,4 +4,4 @@ extern std::vector iotSensors; // вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров -extern void configure(String& path); \ No newline at end of file +extern void configure(String path); \ No newline at end of file diff --git a/include/Main.h b/include/Main.h index 1bab4924..f54def50 100644 --- a/include/Main.h +++ b/include/Main.h @@ -7,3 +7,4 @@ #include "StandWebServer.h" #include "classes/SendJson.h" #include "classes/NotAsync.h" +#include "Configuration.h" diff --git a/include/modules/IoTSensorA.h b/include/modules/IoTSensorA.h new file mode 100644 index 00000000..2410d698 --- /dev/null +++ b/include/modules/IoTSensorA.h @@ -0,0 +1,16 @@ +#pragma once +#include "Global.h" +#include "Classes/IoTSensor.h" + +class IoTSensorA : public IoTSensor { + public: + IoTSensorA(String parameters); + ~IoTSensorA(); + + void doByInterval(); + + private: + unsigned int _pin; +}; + +extern IoTSensorA* mySensorAnalog; \ No newline at end of file diff --git a/src/Configuration.cpp b/src/Configuration.cpp index f1c1b650..7f275f98 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -1,9 +1,16 @@ #include "Configuration.h" +#include "modules/IoTSensorA.h" -void configure(String& path) { +std::vector iotSensors; + +void configure(String path) { File file = seekFile(path); + file.find("["); while (file.available()) { String jsonArrayElement = file.readStringUntil('}') + "}"; + if (jsonArrayElement.startsWith(",")) { + jsonArrayElement = jsonArrayElement.substring(1, jsonArrayElement.length()); //это нужно оптимизировать в последствии + } String subtype; if (jsonRead(jsonArrayElement, F("subtype"), subtype)) { if (subtype == F("button-out")) { @@ -11,12 +18,13 @@ void configure(String& path) { } else if (subtype == F("pwm-out")) { //============================= } else if (subtype == F("analog-adc")) { - // iotSensors.push_back(new IoTSensorAnalog(jsonArrayElement)); + mySensorAnalog = new IoTSensorA(jsonArrayElement); + iotSensors.push_back(mySensorAnalog); } else { - SerialPrint(F("E"), F("Config"), F("config.json error, type not exist")); + SerialPrint(F("E"), F("Config"), "type not exist " + subtype); } } else { - SerialPrint(F("E"), F("Config"), F("config.json error, type wrong or missing")); + SerialPrint(F("E"), F("Config"), F("json error")); } } file.close(); diff --git a/src/Main.cpp b/src/Main.cpp index 233cff1b..851ac1e7 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -37,6 +37,8 @@ void setup() { //создаем объект класса выгружающего json массив из файла mySendJson = new SendJson; + configure("/config.json"); + //выводим остаток оперативной памяти после старта // 22.12.21 пустой код без wifi остаток = 50.28 kB // 22.12.21 запустил wifi остаток = 48.59 kB @@ -67,4 +69,8 @@ void loop() { //обработка web сокетов standWebSocket.loop(); #endif + + for (unsigned int i = 0; i < iotSensors.size(); i++) { + iotSensors[i]->loop(); + } } diff --git a/src/modules/IoTSensorA.cpp b/src/modules/IoTSensorA.cpp new file mode 100644 index 00000000..a67085b6 --- /dev/null +++ b/src/modules/IoTSensorA.cpp @@ -0,0 +1,17 @@ +#include "modules/IoTSensorA.h" + +IoTSensorA::IoTSensorA(String parameters) { + init(jsonReadStr(parameters, "key"), jsonReadStr(parameters, "id"), jsonReadInt(parameters, "int")); + + _pin = jsonReadInt(parameters, "pin"); +} + +IoTSensorA::~IoTSensorA() {} + +void IoTSensorA::doByInterval() { + float value = analogRead(_pin); + + regEvent((String)value, "analog"); //обязательный вызов для отправки результата работы +} + +IoTSensorA* mySensorAnalog; diff --git a/src/modules/IoTSensorAnalog.cpp b/src/modules/IoTSensorAnalog.cpp index b77362e8..05067ddd 100644 --- a/src/modules/IoTSensorAnalog.cpp +++ b/src/modules/IoTSensorAnalog.cpp @@ -2,7 +2,7 @@ #include "Utils/SerialPrint.h" #include "Utils/StringUtils.h" #include "Classes/IoTSensor.h" - +#include class IoTSensorAnalog : public IoTSensor { private: //описание переменных экземпляра датчика - аналог глобальных переменных