добавил шаблон любого сенсора

This commit is contained in:
Dmitry Borisenko
2021-12-14 23:05:42 +01:00
parent bc8f683c79
commit d2a375dc9e
8 changed files with 131 additions and 5 deletions

View File

@@ -84,6 +84,7 @@
#define EnableSensorPzem
#define EnableSensorUltrasonic
#define EnableSensorUptime
#define EnableSensorAny
#define EnableTelegram
#define EnableUart
#endif

View File

@@ -8,6 +8,8 @@ int jsonReadInt(String& json, String name);
boolean jsonReadBool(String& json, String name);
float jsonReadFloat(String& json, String name);
String jsonWriteStr(String& json, String name, String value);
String jsonWriteInt(String& json, String name, int value);

View File

@@ -0,0 +1,34 @@
#ifdef EnableSensorAny
#pragma once
#include <Arduino.h>
#include "Global.h"
class SensorAny;
typedef std::vector<SensorAny> MySensorAnyVector;
class SensorAny {
public:
SensorAny(const String& paramsAny);
~SensorAny();
void loop();
void read();
private:
String _paramsAny;
int _interval;
float _c;
String _key;
String _addr;
String _type;
unsigned long prevMillis;
unsigned long difference;
};
extern MySensorAnyVector* mySensorAny;
extern void AnySensor();
#endif

View File

@@ -0,0 +1,4 @@
#pragma once
#include <Arduino.h>
float yourSensorReading(String type);

View File

@@ -11,14 +11,15 @@
#include "items/vOutput.h"
#include "items/vPwmOut.h"
#include "items/vSensorAnalog.h"
#include "items/vSensorAny.h"
#include "items/vSensorBme280.h"
#include "items/vSensorSht20.h"
#include "items/vSensorBmp280.h"
#include "items/vSensorCcs811.h"
#include "items/vSensorDallas.h"
#include "items/vSensorDht.h"
#include "items/vSensorNode.h"
#include "items/vSensorPzem.h"
#include "items/vSensorSht20.h"
#include "items/vSensorUltrasonic.h"
#include "items/vSensorUptime.h"
@@ -44,7 +45,7 @@ void loopCmdExecute() {
String tmp = selectToMarker(orderBuf, ","); //выделяем первую команду rel 5 1,
sCmd.readStr(tmp); //выполняем
if (tmp != "") {
sCmd.readStr(tmp);
sCmd.readStr(tmp);
SerialPrint("I", F("Order done L"), tmp);
}
orderBuf = deleteBeforeDelimiter(orderBuf, ","); //осекаем
@@ -70,7 +71,7 @@ void csvCmdExecute(String& cmdStr) {
count++;
if (count > 1) {
//SerialPrint("I", "Items", buf);
// SerialPrint("I", "Items", buf);
String order = selectToMarker(buf, " "); //отсечка самой команды
if (order == F("button-out")) {
#ifdef EnableButtonOut
@@ -115,6 +116,10 @@ void csvCmdExecute(String& cmdStr) {
} else if (order == F("sht20")) {
#ifdef EnableSensorSht20
sCmd.addCommand(order.c_str(), sht20Sensor);
#endif
} else if (order == F("sensor")) {
#ifdef EnableSensorAny
sCmd.addCommand(order.c_str(), AnySensor);
#endif
} else if (order == F("bmp280")) {
#ifdef EnableSensorBmp280
@@ -146,7 +151,7 @@ void csvCmdExecute(String& cmdStr) {
#endif
} else if (order == F("impuls-in")) {
#ifdef EnableImpulsIn
//sCmd.addCommand(order.c_str(), impulsInSensor);
// sCmd.addCommand(order.c_str(), impulsInSensor);
#endif
} else if (order == F("sensor-node")) {
#ifdef EnableSensorNode

View File

@@ -1,6 +1,7 @@
#include "Utils/JsonUtils.h"
#include "Utils/FileUtils.h"
#include "Global.h"
#include "Utils/FileUtils.h"
String jsonReadStr(String& json, String name) {
DynamicJsonBuffer jsonBuffer;
@@ -20,6 +21,12 @@ int jsonReadInt(String& json, String name) {
return root[name];
}
float jsonReadFloat(String& json, String name) {
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(json);
return root[name];
}
String jsonWriteStr(String& json, String name, String value) {
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(json);

64
src/items/vSensorAny.cpp Normal file
View File

@@ -0,0 +1,64 @@
#include "Consts.h"
#ifdef EnableSensorAny
#include <Arduino.h>
#include "BufferExecute.h"
#include "Class/LineParsing.h"
#include "Global.h"
#include "items/vSensorAny.h"
#include "sensors/SensorYour.h"
SensorAny::SensorAny(const String& paramsAny) {
_paramsAny = paramsAny;
_interval = jsonReadInt(_paramsAny, "int");
_c = jsonReadFloat(_paramsAny, "c");
_key = jsonReadStr(_paramsAny, "key");
_addr = jsonReadStr(_paramsAny, "addr");
_type = jsonReadStr(_paramsAny, "type");
}
SensorAny::~SensorAny() {}
void SensorAny::loop() {
difference = millis() - prevMillis;
if (difference >= _interval) {
prevMillis = millis();
read();
}
}
void SensorAny::read() {
float value = yourSensorReading(_type);
value = value * _c;
eventGen2(_key, String(value));
jsonWriteStr(configLiveJson, _key, String(value));
publishStatus(_key, String(value));
String path = mqttRootDevice + "/" + _key + "/status";
String json = "{}";
jsonWriteStr(json, "status", String(value));
String MyJson = json;
jsonWriteStr(MyJson, "topic", path);
ws.textAll(MyJson);
SerialPrint("I", "Sensor", "'" + _key + "' data: " + String(value));
}
MySensorAnyVector* mySensorAny = nullptr;
void AnySensor() {
String params = "{}";
myLineParsing.update();
jsonWriteStr(params, "key", myLineParsing.gkey());
jsonWriteStr(params, "addr", myLineParsing.gaddr());
jsonWriteStr(params, "int", myLineParsing.gint());
jsonWriteStr(params, "c", myLineParsing.gc());
myLineParsing.clear();
static bool firstTime = true;
if (firstTime) mySensorAny = new MySensorAnyVector();
firstTime = false;
mySensorAny->push_back(SensorAny(params));
}
#endif

View File

@@ -0,0 +1,9 @@
#include "sensors/YourSensor.h"
float yourSensorReading(String type) {
float value;
if (type == "name1") {
value++;
}
return value;
}