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