From c02abefb43891d3d824547bf59b86c7bf158706c Mon Sep 17 00:00:00 2001
From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com>
Date: Tue, 3 Nov 2020 19:07:22 +0300
Subject: [PATCH] 264 stable. Dallas bug fixed!
---
data/items/dallas-temp.txt | 2 +-
data/presets/dal.c.txt | 5 +++
data/presets/dal.s.txt | 6 +++
data/presets/{humstat.c.txt => dht.c.txt} | 0
data/presets/{humstat.s.txt => dht.s.txt} | 0
data/presets/termostat.s.txt | 0
data/presets/termostat.с.txt | 0
data/set.device.json | 6 +--
include/Class/LineParsing.h | 12 ++++-
include/Class/ScenarioClass.h | 54 ++++++++++++++---------
include/Consts.h | 2 +-
include/Global.h | 2 +-
include/items/SensorDallas.h | 15 ++++---
include/items/SensorDallasClass.h | 47 --------------------
src/Global.cpp | 1 -
src/Init.cpp | 6 ++-
src/ItemsCmd.cpp | 4 +-
src/ItemsList.cpp | 6 ++-
src/items/SensorDallas.cpp | 48 ++++++++++----------
src/items/SensorDallasClass.cpp | 20 ---------
src/main.cpp | 14 +++---
21 files changed, 114 insertions(+), 136 deletions(-)
create mode 100644 data/presets/dal.c.txt
create mode 100644 data/presets/dal.s.txt
rename data/presets/{humstat.c.txt => dht.c.txt} (100%)
rename data/presets/{humstat.s.txt => dht.s.txt} (100%)
delete mode 100644 data/presets/termostat.s.txt
delete mode 100644 data/presets/termostat.с.txt
delete mode 100644 include/items/SensorDallasClass.h
delete mode 100644 src/items/SensorDallasClass.cpp
diff --git a/data/items/dallas-temp.txt b/data/items/dallas-temp.txt
index a6b87c28..0da8bdca 100644
--- a/data/items/dallas-temp.txt
+++ b/data/items/dallas-temp.txt
@@ -1 +1 @@
-0;dallas-temp;id;anydataTemp;Сенсоры;Температура;order;sal;c[1]
\ No newline at end of file
+0;dallas-temp;id;anydataTemp;Сенсоры;Температура;order;sal;index[0];int[10]
\ No newline at end of file
diff --git a/data/presets/dal.c.txt b/data/presets/dal.c.txt
new file mode 100644
index 00000000..7cd73ce5
--- /dev/null
+++ b/data/presets/dal.c.txt
@@ -0,0 +1,5 @@
+0;dallas-temp;temp;anydataTemp;Термостат;Температура;1;pin[2];index[0];int[10]
+0;logging;log;chart;Термостат;История;2;val[temp];int[60];cnt[100]
+0;input-digit;inputU;inputDigit;Термостат;Верхний#порог;3;st[30]
+0;input-digit;inputL;inputDigit;Термостат;Нижний#порог;4;st[20]
+0;button-out;button;toggle;Термостат;Нагрев;5;pin[12];st[0]
\ No newline at end of file
diff --git a/data/presets/dal.s.txt b/data/presets/dal.s.txt
new file mode 100644
index 00000000..43f05cc5
--- /dev/null
+++ b/data/presets/dal.s.txt
@@ -0,0 +1,6 @@
+temp > inputU
+button 0
+end
+temp < inputL
+button 1
+end
\ No newline at end of file
diff --git a/data/presets/humstat.c.txt b/data/presets/dht.c.txt
similarity index 100%
rename from data/presets/humstat.c.txt
rename to data/presets/dht.c.txt
diff --git a/data/presets/humstat.s.txt b/data/presets/dht.s.txt
similarity index 100%
rename from data/presets/humstat.s.txt
rename to data/presets/dht.s.txt
diff --git a/data/presets/termostat.s.txt b/data/presets/termostat.s.txt
deleted file mode 100644
index e69de29b..00000000
diff --git a/data/presets/termostat.с.txt b/data/presets/termostat.с.txt
deleted file mode 100644
index e69de29b..00000000
diff --git a/data/set.device.json b/data/set.device.json
index 838ef0e3..9dd95abc 100644
--- a/data/set.device.json
+++ b/data/set.device.json
@@ -43,7 +43,7 @@
},
{
"type": "h4",
- "title": "LittleFS version: 263"
+ "title": "LittleFS version: 264"
},
{
"type": "hr"
@@ -87,8 +87,8 @@
"style": "display:inline",
"title": {
"#": "Выберите пресет из списка",
- "/set?addPreset=termostat.c": "1.Термостат на основе ds18b20 (устройство держит заданный уровень температуры)",
- "/set?addPreset=humstat.c": "2.Контроль влажности на основе DHT (устройство держит заданный уровень влажности)"
+ "/set?addPreset=dal.c": "1.Термостат на основе ds18b20 (устройство держит заданный уровень температуры)",
+ "/set?addPreset=dht.c": "2.Контроль влажности на основе DHT (устройство держит заданный уровень влажности)"
}
},
{
diff --git a/include/Class/LineParsing.h b/include/Class/LineParsing.h
index 52135995..99a807f1 100644
--- a/include/Class/LineParsing.h
+++ b/include/Class/LineParsing.h
@@ -24,6 +24,7 @@ class LineParsing {
String _int;
String _cnt;
String _val;
+ String _index;
public:
LineParsing() :
@@ -44,7 +45,8 @@ class LineParsing {
_type{""},
_int{""},
_cnt{""},
- _val{""}
+ _val{""},
+ _index{""}
{};
@@ -98,6 +100,9 @@ class LineParsing {
if (arg.indexOf("val[") != -1) {
_val = extractInner(arg);
}
+ if (arg.indexOf("index[") != -1) {
+ _index = extractInner(arg);
+ }
}
}
@@ -161,6 +166,10 @@ class LineParsing {
String gval() {
return _val;
}
+ String gindex() {
+ return _index;
+ }
+
void clear() {
_key = "";
@@ -180,6 +189,7 @@ class LineParsing {
_int = "";
_cnt = "";
_val = "";
+ _index = "";
}
String extractInnerDigit(String str) {
diff --git a/include/Class/ScenarioClass.h b/include/Class/ScenarioClass.h
index 051b4939..b3a1f064 100644
--- a/include/Class/ScenarioClass.h
+++ b/include/Class/ScenarioClass.h
@@ -4,7 +4,7 @@
#include "Global.h"
class Scenario {
- protected:
+protected:
String _scenarioTmp;
String _condition;
String _conditionParam;
@@ -15,16 +15,16 @@ class Scenario {
String _eventParam;
String _eventValue;
- public:
- Scenario() : _scenarioTmp{""},
- _condition{""},
- _conditionParam{""},
- _conditionSign{""},
- _conditionValue{""},
- _scenBlok{""},
- _event{""},
- _eventParam{""},
- _eventValue{""} {};
+public:
+ Scenario() : _scenarioTmp{ "" },
+ _condition{ "" },
+ _conditionParam{ "" },
+ _conditionSign{ "" },
+ _conditionValue{ "" },
+ _scenBlok{ "" },
+ _event{ "" },
+ _eventParam{ "" },
+ _eventValue{ "" } {};
void load() {
_scenarioTmp = scenario;
@@ -69,22 +69,28 @@ class Scenario {
if (_conditionSign == "=") {
flag = _eventValue == _conditionValue;
- } else if (_conditionSign == "!=") {
+ }
+ else if (_conditionSign == "!=") {
flag = _eventValue != _conditionValue;
- } else if (_conditionSign == "<") {
+ }
+ else if (_conditionSign == "<") {
flag = _eventValue.toFloat() < _conditionValue.toFloat();
- } else if (_conditionSign == ">") {
+ }
+ else if (_conditionSign == ">") {
flag = _eventValue.toFloat() > _conditionValue.toFloat();
- } else if (_conditionSign == ">=") {
+ }
+ else if (_conditionSign == ">=") {
flag = _eventValue.toFloat() >= _conditionValue.toFloat();
- } else if (_conditionSign == "<=") {
+ }
+ else if (_conditionSign == "<=") {
flag = _eventValue.toFloat() <= _conditionValue.toFloat();
}
- Serial.println("event Value: " + _eventValue);
- Serial.println("cond Value: " + _conditionValue);
-
- if (flag) Serial.println("I Scenario event: " + _condition);
+ if (flag) {
+ //SerialPrint("I", "Scenario", "event value: " + _eventValue);
+ //SerialPrint("I", "Scenario", "condition value: " + _conditionValue);
+ SerialPrint("I", "Scenario", "event: " + _condition);
+ }
return flag;
}
@@ -100,7 +106,12 @@ class Scenario {
this->calculate2();
if (this->isConditionSatisfied()) { //если вошедшее событие выполняет условие сценария
_scenBlok = deleteBeforeDelimiter(_scenBlok, "\n");
- Serial.println(" [>] Making: " + _scenBlok);
+ String forPrint = _scenBlok;
+ forPrint.replace("end", "");
+ forPrint.replace("\r\n", "");
+ forPrint.replace("\r", "");
+ forPrint.replace("\n", "");
+ SerialPrint("I", "Scenario", "making: " + forPrint);
spaceCmdExecute(_scenBlok);
}
}
@@ -113,4 +124,5 @@ class Scenario {
return jsonReadBool(configSetupJson, "scen") && eventBuf != "";
}
};
+
extern Scenario* myScenario;
\ No newline at end of file
diff --git a/include/Consts.h b/include/Consts.h
index 8b842ee9..0f7b483f 100644
--- a/include/Consts.h
+++ b/include/Consts.h
@@ -3,7 +3,7 @@
//===========Firmware=============================================================================================================================================
#ifdef ESP8266
#define FIRMWARE_NAME "esp8266-iotm"
-#define FIRMWARE_VERSION 263
+#define FIRMWARE_VERSION 264
#endif
#ifdef ESP32
#define FIRMWARE_NAME "esp32-iotm"
diff --git a/include/Global.h b/include/Global.h
index f9ca0e6a..b4bcb7c5 100644
--- a/include/Global.h
+++ b/include/Global.h
@@ -71,7 +71,7 @@ extern int impulsEnterCounter;
// Sensors
extern String sensorReadingMap10sec;
extern String sensorReadingMap30sec;
-extern int8_t dallasEnterCounter;
+
extern String loggingKeyList;
extern int enter_to_logging_counter;
diff --git a/include/items/SensorDallas.h b/include/items/SensorDallas.h
index fc3bd449..3feeb572 100644
--- a/include/items/SensorDallas.h
+++ b/include/items/SensorDallas.h
@@ -10,26 +10,27 @@ class SensorDallas;
typedef std::vector MySensorDallasVector;
class SensorDallas {
- public:
+public:
- SensorDallas(unsigned long period,unsigned int pin, uint8_t deviceAddress, String key);
+ SensorDallas(unsigned long interval, unsigned int pin, unsigned int index, String key);
~SensorDallas();
void loop();
+ void readDallas();
- private:
+private:
unsigned long currentMillis;
unsigned long prevMillis;
- unsigned long _period;
+ unsigned long _interval;
String _key;
unsigned int _pin;
- uint8_t _deviceAddress;
-
- void readDallas();
+ unsigned int _index;
};
extern MySensorDallasVector* mySensorDallas2;
+extern void dallas();
+
diff --git a/include/items/SensorDallasClass.h b/include/items/SensorDallasClass.h
deleted file mode 100644
index 00090fa2..00000000
--- a/include/items/SensorDallasClass.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#pragma once
-#include
-#include "Class/LineParsing.h"
-#include "Global.h"
-#include "items/SensorConvertingClass.h"
-
-extern DallasTemperature sensors;
-extern OneWire* oneWire;
-class SensorDallasClass : public SensorConvertingClass {
-public:
- SensorDallasClass() : SensorConvertingClass() {};
-
- void SensorDallasInit() {
- oneWire = new OneWire((uint8_t)_pin.toInt());
- sensors.setOneWire(oneWire);
- sensors.begin();
- sensors.setResolution(48);
-
- sensorReadingMap10sec += _key + ",";
- dallasEnterCounter++;
-
- jsonWriteInt(configOptionJson, _key + "_num", dallasEnterCounter);
- jsonWriteStr(configOptionJson, _key + "_map", _map);
- jsonWriteStr(configOptionJson, _key + "_с", _c);
- }
-
- void SensorDallasRead(String key) {
- float value;
- byte num = sensors.getDS18Count();
- sensors.requestTemperatures();
-
- int cnt = jsonReadInt(configOptionJson, key + "_num");
-
- for (byte i = 0; i < num; i++) {
- if (i == cnt) {
- value = sensors.getTempCByIndex(i);
- //value = this->mapping(key, value);
- float valueFl = this->correction(key, value);
- eventGen(key, "");
- jsonWriteStr(configLiveJson, key, String(valueFl));
- publishStatus(key, String(valueFl));
- SerialPrint("I", "Sensor", "'" + key + "' data: " + String(valueFl));
- }
- }
- }
-};
-extern SensorDallasClass mySensorDallas;
\ No newline at end of file
diff --git a/src/Global.cpp b/src/Global.cpp
index 3a572d9d..a6d8ae9e 100644
--- a/src/Global.cpp
+++ b/src/Global.cpp
@@ -42,7 +42,6 @@ int impulsEnterCounter = -1;
// Sensors
-int8_t dallasEnterCounter = -1;
String sensorReadingMap10sec;
String sensorReadingMap30sec;
diff --git a/src/Init.cpp b/src/Init.cpp
index 2d7ca95f..4b75d60f 100644
--- a/src/Init.cpp
+++ b/src/Init.cpp
@@ -4,6 +4,7 @@
#include "Global.h"
#include "items/LoggingClass.h"
#include "items/ImpulsOutClass.h"
+#include "items/SensorDallas.h"
void loadConfig() {
configSetupJson = readFile("config.json", 4096);
@@ -30,7 +31,10 @@ void Device_init() {
sensorReadingMap10sec = "";
- dallasEnterCounter = -1;
+ //======clear dallas params======
+ if (mySensorDallas2 != nullptr) {
+ mySensorDallas2->clear();
+ }
//======clear logging params======
if (myLogging != nullptr) {
diff --git a/src/ItemsCmd.cpp b/src/ItemsCmd.cpp
index 4fc35acd..4876b5e3 100644
--- a/src/ItemsCmd.cpp
+++ b/src/ItemsCmd.cpp
@@ -7,6 +7,8 @@
#include "Module/Terminal.h"
#include "Servo/Servos.h"
+#include "items/SensorDallas.h"
+
Terminal *term = nullptr;
boolean but[NUM_BUTTONS];
@@ -31,7 +33,7 @@ void cmd_init() {
sCmd.addCommand("analog-adc", analogAdc);
sCmd.addCommand("ultrasonic-cm", ultrasonicCm);
- sCmd.addCommand("dallas-temp", dallasTemp);
+ sCmd.addCommand("dallas-temp", dallas);
sCmd.addCommand("dht-temp", dhtTemp);
sCmd.addCommand("dht-hum", dhtHum);
diff --git a/src/ItemsList.cpp b/src/ItemsList.cpp
index 6fec78a4..ff9f6cb5 100644
--- a/src/ItemsList.cpp
+++ b/src/ItemsList.cpp
@@ -55,12 +55,14 @@ void addItem(String name) {
}
void addPreset(String name) {
- String preset = readFile("presets/" + name + ".txt", 2024);
+ Serial.println(name);
+ String preset = readFile("presets/" + name + ".txt", 4048);
+ Serial.println(preset);
addFile(DEVICE_CONFIG_FILE, "\n" + preset);
name.replace(".c",".s");
- String scenario = readFile("presets/" + name + ".txt", 2024);
+ String scenario = readFile("presets/" + name + ".txt", 4048);
removeFile(DEVICE_SCENARIO_FILE);
addFile(DEVICE_SCENARIO_FILE, scenario);
}
diff --git a/src/items/SensorDallas.cpp b/src/items/SensorDallas.cpp
index 9cae8a0f..f861dc20 100644
--- a/src/items/SensorDallas.cpp
+++ b/src/items/SensorDallas.cpp
@@ -4,11 +4,11 @@
#include "ItemsCmd.h"
#include
-SensorDallas::SensorDallas(unsigned long period, unsigned int pin, uint8_t deviceAddress, String key) {
- _period = period * 1000;
+SensorDallas::SensorDallas(unsigned long interval, unsigned int pin, unsigned int index, String key) {
+ _interval = interval * 1000;
_key = key;
_pin = pin;
- _deviceAddress = deviceAddress;
+ _index = index;
oneWire = new OneWire((uint8_t)_pin);
sensors.setOneWire(oneWire);
@@ -21,32 +21,34 @@ SensorDallas::~SensorDallas() {}
void SensorDallas::loop() {
currentMillis = millis();
unsigned long difference = currentMillis - prevMillis;
- if (difference >= _period) {
+ if (difference >= _interval) {
prevMillis = millis();
-
+ readDallas();
}
}
-void readDallas() {
-
+void SensorDallas::readDallas() {
+ sensors.requestTemperaturesByIndex(_index);
+ float value = sensors.getTempCByIndex(_index);
+ eventGen(_key, "");
+ jsonWriteStr(configLiveJson, _key, String(value));
+ publishStatus(_key, String(value));
+ SerialPrint("I", "Sensor", "'" + _key + "' data: " + String(value));
}
-
MySensorDallasVector* mySensorDallas2 = nullptr;
-//void logging() {
-// myLineParsing.update();
-// String loggingValueKey = myLineParsing.gval();
-// String key = myLineParsing.gkey();
-// String interv = myLineParsing.gint();
-// String maxcnt = myLineParsing.gcnt();
-// myLineParsing.clear();
-//
-// loggingKeyList += key + ",";
-//
-// static bool firstTime = true;
-// if (firstTime) myLogging = new MySensorDallasVector();
-// firstTime = false;
-// myLogging->push_back(SensorDallas(interv.toInt(), maxcnt.toInt(), loggingValueKey, key));
-//}
+void dallas() {
+ myLineParsing.update();
+ String interval = myLineParsing.gint();
+ String pin = myLineParsing.gpin();
+ String index = myLineParsing.gindex();
+ String key = myLineParsing.gkey();
+ myLineParsing.clear();
+
+ static bool firstTime = true;
+ if (firstTime) mySensorDallas2 = new MySensorDallasVector();
+ firstTime = false;
+ mySensorDallas2->push_back(SensorDallas(interval.toInt(), pin.toInt(), index.toInt(), key));
+}
diff --git a/src/items/SensorDallasClass.cpp b/src/items/SensorDallasClass.cpp
deleted file mode 100644
index f0fe6dba..00000000
--- a/src/items/SensorDallasClass.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "ItemsCmd.h"
-#include "items/SensorDallasClass.h"
-//#ifdef SensorDallasEnabled
-//=========================================Модуль ультрозвукового дальномера==================================================================
-//dallas-temp;id;anydata;Сенсоры;Температура;order;pin;c[1]
-//=========================================================================================================================================
-SensorDallasClass mySensorDallas;
-void dallasTemp() {
- mySensorDallas.update();
- String key = mySensorDallas.gkey();
- sCmd.addCommand(key.c_str(), dallasReading);
- mySensorDallas.SensorDallasInit();
- mySensorDallas.clear();
-}
-
-void dallasReading() {
- String key = sCmd.order();
- mySensorDallas.SensorDallasRead(key);
-}
-//#endif
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index 15fc5ef4..fc1f3dc7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -16,8 +16,8 @@
#include "Utils/WebUtils.h"
#include "items/ButtonInClass.h"
#include "items/LoggingClass.h"
-
#include "items/ImpulsOutClass.h"
+#include "items/SensorDallas.h"
void not_async_actions();
@@ -101,11 +101,7 @@ void setup() {
just_load = false;
initialized = true; //this second POST makes the data to be processed (you don't need to connect as "keep-alive" for that to work)
- //static bool firstTime = true;
- //if (firstTime) myImpulsOut = new MyImpulsOutVector();
- //firstTime = false;
- //myImpulsOut->push_back(ImpulsOutClass(500, 10, 13));
- //myImpulsOut->at(0).execute();
+
}
void loop() {
@@ -139,4 +135,10 @@ void loop() {
myImpulsOut->at(i).loop();
}
}
+
+ if (mySensorDallas2 != nullptr) {
+ for (unsigned int i = 0; i < mySensorDallas2->size(); i++) {
+ mySensorDallas2->at(i).loop();
+ }
+ }
}
\ No newline at end of file