ButtonOut changed (not working version)

This commit is contained in:
Dmitry Borisenko
2020-11-13 17:13:50 +03:00
parent 96f160fc88
commit 50ad50efb2
19 changed files with 216 additions and 168 deletions

View File

@@ -9,9 +9,6 @@ extern void loopCmdExecute();
extern void addKey(String& key, String& keyNumberTable, int number); extern void addKey(String& key, String& keyNumberTable, int number);
extern int getKeyNum(String& key, String& keyNumberTable); extern int getKeyNum(String& key, String& keyNumberTable);
extern void buttonOut();
extern void buttonOutSet();
extern void pwmOut(); extern void pwmOut();
extern void pwmOutSet(); extern void pwmOutSet();

View File

@@ -1,69 +0,0 @@
#pragma once
#include <Arduino.h>
#include "Cmd.h"
#include "Global.h"
class Scenario {
public:
void loop() {
String allBlocks = scenario;
allBlocks.replace("\r\n", "\n");
allBlocks.replace("\r", "\n");
allBlocks += "\n";
String incommingEvent = selectToMarker(eventBuf, ",");
while (allBlocks.length() > 1) {
String oneBlock = selectToMarker(allBlocks, "end\n");
String condition = selectToMarker(oneBlock, "\n");
String setEvent = selectFromMarkerToMarker(condition, " ", 0);
String setEventSign = selectFromMarkerToMarker(condition, " ", 1);
String setEventValue = selectFromMarkerToMarker(condition, " ", 2);
if (!isDigitStr(setEventValue)) setEventValue = jsonReadStr(configLiveJson, setEventValue);
String incommingEventValue = jsonReadStr(configLiveJson, incommingEvent);
if (incommingEvent == setEvent) {
boolean flag = false;
if (setEventSign == "=") {
flag = incommingEventValue == setEventValue;
}
else if (setEventSign == "!=") {
flag = incommingEventValue != setEventValue;
}
else if (setEventSign == "<") {
flag = incommingEventValue.toFloat() < setEventValue.toFloat();
}
else if (setEventSign == ">") {
flag = incommingEventValue.toFloat() > setEventValue.toFloat();
}
else if (setEventSign == ">=") {
flag = incommingEventValue.toFloat() >= setEventValue.toFloat();
}
else if (setEventSign == "<=") {
flag = incommingEventValue.toFloat() <= setEventValue.toFloat();
}
if (flag) {
//SerialPrint("I", "Scenario", "incomming Event Value: " + incommingEventValue);
//SerialPrint("I", "Scenario", "set Event Value: " + setEventValue);
oneBlock = deleteBeforeDelimiter(oneBlock, "\n");
oneBlock.replace("end", "");
SerialPrint("I", "Scenario", condition + " set:\n" + oneBlock);
spaceCmdExecute(oneBlock);
}
}
allBlocks = deleteBeforeDelimiter(allBlocks, "end\n");
}
eventBuf = deleteBeforeDelimiter(eventBuf, ",");
}
};
extern Scenario* myScenario;

View File

@@ -105,7 +105,11 @@ enum ConfigType_t {
CT_CONFIG, CT_CONFIG,
CT_SCENARIO CT_SCENARIO
}; };
//history
//07.11.2020 (SSDP OFF, UDP OFF) //07.11.2020 (SSDP OFF, UDP OFF)
//RAM: [===== ] 46.8% (used 38376 bytes from 81920 bytes) //RAM: [===== ] 46.8% (used 38376 bytes from 81920 bytes)
//Flash: [===== ] 54.2% (used 566004 bytes from 1044464 bytes) //Flash: [===== ] 54.2% (used 566004 bytes from 1044464 bytes)
//13.11.2020 (SSDP OFF, UDP OFF)
//RAM: [===== ] 46.6% (used 38208 bytes from 81920 bytes)
//Flash: [===== ] 54.2% (used 566388 bytes from 1044464 bytes)

View File

@@ -67,8 +67,13 @@ extern String itemsFile;
extern String itemsLine; extern String itemsLine;
//key lists and numbers //key lists and numbers
extern String impulsKeyList; //=========================================
extern int impulsEnterCounter; extern String impuls_KeyList;
extern int impuls_EnterCounter;
//=========================================
extern String buttonOut_KeyList;
extern int buttonOut_EnterCounter;
//=========================================
// Sensors // Sensors
extern String sensorReadingMap10sec; extern String sensorReadingMap10sec;

View File

@@ -2,6 +2,8 @@
#include <Arduino.h> #include <Arduino.h>
extern String mqttPrefix;
extern String mqttRootDevice;
void mqttInit(); void mqttInit();
boolean mqttConnect(); boolean mqttConnect();

32
include/items/ButtonOut.h Normal file
View File

@@ -0,0 +1,32 @@
#pragma once
#include <Arduino.h>
#include "Global.h"
class ButtonOut;
typedef std::vector<ButtonOut> MyButtonOutVector;
class ButtonOut {
public:
ButtonOut(unsigned int pin, boolean inv, String key);
~ButtonOut();
void init();
void execute(String state);
private:
unsigned int _pin;
boolean _inv;
String _key;
void addNewDelOldData(const String filename, size_t maxPoints, String payload);
};
extern MyButtonOutVector* myButtonOut;
extern void buttonOut();
extern void buttonOutExecute();

View File

@@ -1,41 +1,41 @@
#pragma once //#pragma once
#include <Arduino.h> //#include <Arduino.h>
//
#include "Class/LineParsing.h" //#include "Class/LineParsing.h"
#include "Global.h" //#include "Global.h"
//
class ButtonOutClass : public LineParsing { //class ButtonOutClass : public LineParsing {
public: //public:
ButtonOutClass() : LineParsing() {}; // ButtonOutClass() : LineParsing() {};
//
void init() { // void init() {
if (_pin != "") { // if (_pin != "") {
pinMode(_pin.toInt(), OUTPUT); // pinMode(_pin.toInt(), OUTPUT);
} // }
jsonWriteStr(configOptionJson, _key + "_pin", _pin); // jsonWriteStr(configOptionJson, _key + "_pin", _pin);
jsonWriteStr(configOptionJson, _key + "_inv", _inv); // jsonWriteStr(configOptionJson, _key + "_inv", _inv);
} // }
//
void pinStateSetDefault() { // void pinStateSetDefault() {
pinChange(_key, _state); // pinChange(_key, _state);
} // }
//
//
void pinChange(String key, String state) { // void pinChange(String key, String state) {
String pin = jsonReadStr(configOptionJson, key + "_pin"); // String pin = jsonReadStr(configOptionJson, key + "_pin");
String inv = jsonReadStr(configOptionJson, key + "_inv"); // String inv = jsonReadStr(configOptionJson, key + "_inv");
int pinInt = pin.toInt(); // int pinInt = pin.toInt();
//
if (inv == "") { // if (inv == "") {
digitalWrite(pinInt, state.toInt()); // digitalWrite(pinInt, state.toInt());
} // }
else { // else {
digitalWrite(pinInt, !state.toInt()); // digitalWrite(pinInt, !state.toInt());
} // }
eventGen2(key, state); // eventGen2(key, state);
jsonWriteInt(configLiveJson, key, state.toInt()); // jsonWriteInt(configLiveJson, key, state.toInt());
publishStatus(key, state); // publishStatus(key, state);
} // }
}; //};
//
extern ButtonOutClass myButtonOut; //extern ButtonOutClass myButtonOut;

View File

@@ -1,5 +1,8 @@
#include "BufferExecute.h" #include "BufferExecute.h"
//
#include "items/SensorDallas.h" #include "items/SensorDallas.h"
#include "items/ButtonOut.h"
//
#include "Global.h" #include "Global.h"
#include "Module/Terminal.h" #include "Module/Terminal.h"

View File

@@ -1,18 +1,13 @@
#include "Class/ScenarioClass3.h" #include "Class/ScenarioClass3.h"
#include "MqttClient.h"
Scenario* myScenario; Scenario* myScenario;
//void eventGen(String event_name, String number) {
// if (!jsonReadBool(configSetupJson, "scen")) {
// return;
// }
// SerialPrint("", "", event_name);
// eventBuf += event_name + number + ",";
//}
void eventGen2(String eventName, String eventValue) { void eventGen2(String eventName, String eventValue) {
if (!jsonReadBool(configSetupJson, "scen")) { if (!jsonReadBool(configSetupJson, "scen")) {
return; return;
} }
//Serial.println(eventName + " " + eventValue); //Serial.println(eventName + " " + eventValue);
eventBuf += eventName + " " + eventValue + ","; eventBuf += eventName + " " + eventValue + ",";
//publish(mqttPrefix, eventName + " " + eventValue + ",");
} }

View File

@@ -38,9 +38,13 @@ String itemsFile = "";
String itemsLine = ""; String itemsLine = "";
//key lists and numbers //key lists and numbers
String impulsKeyList = ""; //=========================================
int impulsEnterCounter = -1; String impuls_KeyList = "";
int impuls_EnterCounter = -1;
//=========================================
String buttonOut_KeyList = "";
int buttonOut_EnterCounter = -1;
//=========================================
// Sensors // Sensors
String sensorReadingMap10sec; String sensorReadingMap10sec;

View File

@@ -2,8 +2,9 @@
#include "BufferExecute.h" #include "BufferExecute.h"
#include "Cmd.h" #include "Cmd.h"
#include "Global.h" #include "Global.h"
#include "items/LoggingClass.h" #include "items/Logging.h"
#include "items/ImpulsOutClass.h" #include "items/ImpulsOutClass.h"
#include "items/ButtonOut.h"
#include "items/SensorDallas.h" #include "items/SensorDallas.h"
void loadConfig() { void loadConfig() {
@@ -44,9 +45,15 @@ void Device_init() {
if (myImpulsOut != nullptr) { if (myImpulsOut != nullptr) {
myImpulsOut->clear(); myImpulsOut->clear();
} }
impulsKeyList = ""; impuls_KeyList = "";
impulsEnterCounter = -1; impuls_EnterCounter = -1;
//================================ //======clear buttonOut params=======
if (myButtonOut != nullptr) {
myButtonOut->clear();
}
buttonOut_KeyList = "";
buttonOut_EnterCounter = -1;
//===================================
#ifdef LAYOUT_IN_RAM #ifdef LAYOUT_IN_RAM

View File

@@ -1,7 +1,7 @@
#include "MqttClient.h" #include "MqttClient.h"
#include <LittleFS.h> #include <LittleFS.h>
#include "items/LoggingClass.h" #include "items/Logging.h"
#include "Class/NotAsync.h" #include "Class/NotAsync.h"
#include "Global.h" #include "Global.h"
#include "Init.h" #include "Init.h"
@@ -62,10 +62,9 @@ void mqttSubscribe() {
SerialPrint("I", "MQTT", "subscribe"); SerialPrint("I", "MQTT", "subscribe");
mqtt.subscribe(mqttPrefix.c_str()); mqtt.subscribe(mqttPrefix.c_str());
mqtt.subscribe((mqttRootDevice + "/+/control").c_str()); mqtt.subscribe((mqttRootDevice + "/+/control").c_str());
mqtt.subscribe((mqttRootDevice + "/order").c_str());
mqtt.subscribe((mqttRootDevice + "/update").c_str()); mqtt.subscribe((mqttRootDevice + "/update").c_str());
mqtt.subscribe((mqttRootDevice + "/devc").c_str()); //mqtt.subscribe((mqttRootDevice + "/order").c_str());
mqtt.subscribe((mqttRootDevice + "/devs").c_str()); //mqtt.subscribe((mqttPrefix + "/event").c_str());
} }
boolean mqttConnect() { boolean mqttConnect() {
@@ -131,11 +130,16 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
} }
else if (topicStr.indexOf("order")) { else if (topicStr.indexOf("order")) {
payloadStr.replace("_", " "); //payloadStr.replace("_", " ");
orderBuf += payloadStr; //orderBuf += payloadStr;
orderBuf += ","; //orderBuf += ",";
} }
//else if (topicStr.indexOf("event")) {
// eventBuf += payloadStr;
//}
else if (topicStr.indexOf("update")) { else if (topicStr.indexOf("update")) {
if (payloadStr == "1") { if (payloadStr == "1") {
myNotAsyncActions->make(do_UPGRADE); myNotAsyncActions->make(do_UPGRADE);

View File

@@ -3,7 +3,7 @@
#include "Global.h" #include "Global.h"
#include "Init.h" #include "Init.h"
#include "ItemsList.h" #include "ItemsList.h"
#include "items/LoggingClass.h" #include "items/Logging.h"
#include "Telegram.h" #include "Telegram.h"
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) { bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {

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

@@ -0,0 +1,64 @@
#include "items/ButtonOut.h"
#include <Arduino.h>
#include "Class/LineParsing.h"
#include "Global.h"
#include "BufferExecute.h"
ButtonOut::ButtonOut(unsigned int pin, boolean inv, String key) {
_pin = pin;
_inv = inv;
_key = key;
}
ButtonOut::~ButtonOut() {}
void ButtonOut::init() {
pinMode(_pin, OUTPUT);
}
void ButtonOut::execute(String state) {
//if (_inv) {
// digitalWrite(_pin, !state.toInt());
//}
//else {
digitalWrite(_pin, state.toInt());
//}
eventGen2(_key, state);
jsonWriteInt(configLiveJson, _key, state.toInt());
publishStatus(_key, state);
}
MyButtonOutVector* myButtonOut = nullptr;
void buttonOut() {
myLineParsing.update();
String key = myLineParsing.gkey();
String pin = myLineParsing.gpin();
String inv = myLineParsing.ginv();
myLineParsing.clear();
buttonOut_EnterCounter++;
addKey(key, buttonOut_KeyList, buttonOut_EnterCounter);
static bool firstTime = true;
if (firstTime) myButtonOut = new MyButtonOutVector();
firstTime = false;
myButtonOut->push_back(ButtonOut(pin.toInt(), inv.toInt(), key));
sCmd.addCommand(key.c_str(), buttonOutExecute);
}
void buttonOutExecute() {
String key = sCmd.order();
String state = sCmd.next();
int number = getKeyNum(key, buttonOut_KeyList);
if (myButtonOut != nullptr) {
if (number != -1) {
myButtonOut->at(number).execute(state);
}
}
}

View File

@@ -1,23 +1,23 @@
#include "items/ButtonOutClass.h" //#include "items/ButtonOutClass.h"
//
#include "BufferExecute.h" //#include "BufferExecute.h"
//==========================================Модуль кнопок=================================================== ////==========================================Модуль кнопок===================================================
//button-out light toggle Кнопки Свет 1 pin[12] inv[1] st[1] ////button-out light toggle Кнопки Свет 1 pin[12] inv[1] st[1]
//========================================================================================================== ////==========================================================================================================
ButtonOutClass myButtonOut; //ButtonOutClass myButtonOut;
void buttonOut() { //void buttonOut() {
myButtonOut.update(); // myButtonOut.update();
String key = myButtonOut.gkey(); // String key = myButtonOut.gkey();
String pin = myButtonOut.gpin(); // String pin = myButtonOut.gpin();
String inv = myButtonOut.ginv(); // String inv = myButtonOut.ginv();
sCmd.addCommand(key.c_str(), buttonOutSet); // sCmd.addCommand(key.c_str(), buttonOutSet);
myButtonOut.init(); // myButtonOut.init();
myButtonOut.pinStateSetDefault(); // myButtonOut.pinStateSetDefault();
myButtonOut.clear(); // myButtonOut.clear();
} //}
//
void buttonOutSet() { //void buttonOutSet() {
String key = sCmd.order(); // String key = sCmd.order();
String state = sCmd.next(); // String state = sCmd.next();
myButtonOut.pinChange(key, state); // myButtonOut.pinChange(key, state);
} //}

View File

@@ -44,8 +44,8 @@ void impuls() {
String pin = myLineParsing.gpin(); String pin = myLineParsing.gpin();
myLineParsing.clear(); myLineParsing.clear();
impulsEnterCounter++; impuls_EnterCounter++;
addKey(key, impulsKeyList, impulsEnterCounter); addKey(key, impuls_KeyList, impuls_EnterCounter);
static bool firstTime = true; static bool firstTime = true;
if (firstTime) myImpulsOut = new MyImpulsOutVector(); if (firstTime) myImpulsOut = new MyImpulsOutVector();
@@ -60,7 +60,7 @@ void impulsExecute() {
String impulsPeriod = sCmd.next(); String impulsPeriod = sCmd.next();
String impulsCount = sCmd.next(); String impulsCount = sCmd.next();
int number = getKeyNum(key, impulsKeyList); int number = getKeyNum(key, impuls_KeyList);
if (myImpulsOut != nullptr) { if (myImpulsOut != nullptr) {
if (number != -1) { if (number != -1) {

View File

@@ -1,4 +1,4 @@
#include "items/LoggingClass.h" #include "items/Logging.h"
#include <Arduino.h> #include <Arduino.h>

View File

@@ -15,7 +15,7 @@
#include "Utils/Timings.h" #include "Utils/Timings.h"
#include "Utils/WebUtils.h" #include "Utils/WebUtils.h"
#include "items/ButtonInClass.h" #include "items/ButtonInClass.h"
#include "items/LoggingClass.h" #include "items/Logging.h"
#include "items/ImpulsOutClass.h" #include "items/ImpulsOutClass.h"
#include "items/SensorDallas.h" #include "items/SensorDallas.h"
#include "Telegram.h" #include "Telegram.h"