mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 20:09:14 +03:00
Merge pull request #149 from biveraxe/ver4dev
Новые функции в сценарии и исправление LCD
This commit is contained in:
@@ -11,6 +11,7 @@ class IoTGpio {
|
|||||||
virtual int digitalRead(uint8_t pin);
|
virtual int digitalRead(uint8_t pin);
|
||||||
virtual int analogRead(uint8_t pin);
|
virtual int analogRead(uint8_t pin);
|
||||||
virtual void analogWrite(uint8_t pin, int val);
|
virtual void analogWrite(uint8_t pin, int val);
|
||||||
|
virtual void digitalInvert(uint8_t pin);
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
void regDriver(IoTGpio* newDriver);
|
void regDriver(IoTGpio* newDriver);
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ void IoTGpio::analogWrite(uint8_t pin, int val) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IoTGpio::digitalInvert(uint8_t pin) {
|
||||||
|
int pinH = pin/100;
|
||||||
|
if (_drivers[pinH]) _drivers[pinH]->digitalInvert(pin - pinH*100);
|
||||||
|
else ::digitalWrite(pin, 1 - ::digitalRead(pin));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void IoTGpio::regDriver(IoTGpio* newDriver) {
|
void IoTGpio::regDriver(IoTGpio* newDriver) {
|
||||||
_drivers[newDriver->index] = newDriver;
|
_drivers[newDriver->index] = newDriver;
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ IoTItem::IoTItem(String parameters) {
|
|||||||
_interval = _interval * 1000;
|
_interval = _interval * 1000;
|
||||||
jsonRead(parameters, F("subtype"), _subtype);
|
jsonRead(parameters, F("subtype"), _subtype);
|
||||||
jsonRead(parameters, F("id"), _id);
|
jsonRead(parameters, F("id"), _id);
|
||||||
jsonRead(parameters, F("multiply"), _multiply, false);
|
if (!jsonRead(parameters, F("multiply"), _multiply, false)) _multiply = 1;
|
||||||
jsonRead(parameters, F("plus"), _plus, false);
|
if (!jsonRead(parameters, F("plus"), _plus, false)) _plus = 0;
|
||||||
jsonRead(parameters, F("round"), _round, false);
|
if (!jsonRead(parameters, F("round"), _round, false)) _round = -1;
|
||||||
|
|
||||||
String valAsStr;
|
String valAsStr;
|
||||||
if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации
|
if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации
|
||||||
@@ -44,7 +44,11 @@ String IoTItem::getID() {
|
|||||||
|
|
||||||
String IoTItem::getValue() {
|
String IoTItem::getValue() {
|
||||||
if (value.isDecimal)
|
if (value.isDecimal)
|
||||||
return (String)value.valD;
|
if (_round >= 0) {
|
||||||
|
char buf[8];
|
||||||
|
sprintf(buf, ("%1." + (String)_round + "f").c_str(), value.valD);
|
||||||
|
return (String)buf;
|
||||||
|
} else return (String)value.valD;
|
||||||
else
|
else
|
||||||
return value.valS;
|
return value.valS;
|
||||||
}
|
}
|
||||||
@@ -78,7 +82,7 @@ void IoTItem::regEvent(String value, String consoleInfo = "") {
|
|||||||
void IoTItem::regEvent(float regvalue, String consoleInfo = "") {
|
void IoTItem::regEvent(float regvalue, String consoleInfo = "") {
|
||||||
if (_multiply) regvalue = regvalue * _multiply;
|
if (_multiply) regvalue = regvalue * _multiply;
|
||||||
if (_plus) regvalue = regvalue + _multiply;
|
if (_plus) regvalue = regvalue + _multiply;
|
||||||
if (_round >= 0 && _round < 6) {
|
if (_round >= 0 && _round <= 6) {
|
||||||
int sot = _round ? pow(10, (int)_round) : 1;
|
int sot = _round ? pow(10, (int)_round) : 1;
|
||||||
regvalue = round(regvalue * sot) / sot;
|
regvalue = round(regvalue * sot) / sot;
|
||||||
}
|
}
|
||||||
@@ -86,12 +90,7 @@ void IoTItem::regEvent(float regvalue, String consoleInfo = "") {
|
|||||||
|
|
||||||
value.valD = regvalue;
|
value.valD = regvalue;
|
||||||
|
|
||||||
// убираем лишние нули
|
regEvent(getValue(), consoleInfo);
|
||||||
// char buf[20];
|
|
||||||
// sprintf(buf, "%g", regvalue);
|
|
||||||
// regEvent((String)buf, consoleInfo);
|
|
||||||
|
|
||||||
regEvent((String)regvalue, consoleInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IoTItem::doByInterval() {}
|
void IoTItem::doByInterval() {}
|
||||||
|
|||||||
@@ -260,8 +260,12 @@ class IfExprAST : public ExprAST {
|
|||||||
String _IDNames;
|
String _IDNames;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IfExprAST(ExprAST *cond, ExprAST *then, ExprAST *_else, String IDNames)
|
IfExprAST(ExprAST *cond, ExprAST *then, ExprAST *_else, String *IDNames)
|
||||||
: Cond(cond), Then(then), Else(_else), _IDNames(IDNames) {}
|
: Cond(cond), Then(then), Else(_else) {
|
||||||
|
if (IDNames) {
|
||||||
|
_IDNames = *IDNames;
|
||||||
|
} else _IDNames = "";
|
||||||
|
}
|
||||||
|
|
||||||
bool hasEventIdName(String eventIdName) {
|
bool hasEventIdName(String eventIdName) {
|
||||||
Serial.printf("Call from BinaryExprAST _IDNames:%s\n", _IDNames.c_str());
|
Serial.printf("Call from BinaryExprAST _IDNames:%s\n", _IDNames.c_str());
|
||||||
@@ -547,10 +551,13 @@ public:
|
|||||||
bracketsList.push_back(Expr);
|
bracketsList.push_back(Expr);
|
||||||
|
|
||||||
if (CurTok != ';')
|
if (CurTok != ';')
|
||||||
return Error("Expected '}' or ';' in operation list");
|
return Error("Expected ';' in operation list");
|
||||||
getNextToken();
|
int ttok = getNextToken();
|
||||||
|
if (!ttok) { Error("Expected '}'"); break; }
|
||||||
|
|
||||||
if (CurTok == '}') break;
|
if (CurTok == '}') break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -579,7 +586,7 @@ public:
|
|||||||
getNextToken(); // Получаем then
|
getNextToken(); // Получаем then
|
||||||
|
|
||||||
ExprAST *Then = ParseExpression(nullptr);
|
ExprAST *Then = ParseExpression(nullptr);
|
||||||
if (Then == 0) return 0;
|
if (!Then) return 0;
|
||||||
|
|
||||||
//if (CurTok != tok_else)
|
//if (CurTok != tok_else)
|
||||||
// return Error("expected else");
|
// return Error("expected else");
|
||||||
@@ -589,7 +596,7 @@ public:
|
|||||||
Else = ParseExpression(nullptr);
|
Else = ParseExpression(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new IfExprAST(Cond, Then, Else, *IDNames);
|
return new IfExprAST(Cond, Then, Else, IDNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// primary
|
/// primary
|
||||||
@@ -682,7 +689,8 @@ public:
|
|||||||
//case ';': getNextToken(); break; // игнорируем верхнеуровневые точки с запятой.
|
//case ';': getNextToken(); break; // игнорируем верхнеуровневые точки с запятой.
|
||||||
case tok_if: {
|
case tok_if: {
|
||||||
String IDNames = ""; // накопитель встречающихся идентификаторов в условии
|
String IDNames = ""; // накопитель встречающихся идентификаторов в условии
|
||||||
ScenarioElements.push_back(ParseExpression(&IDNames));
|
ScenarioElements.push_back(ParseIfExpr(&IDNames));
|
||||||
|
//Serial.printf("vvvvvvvvvvvvvvvv %s", IDNames.c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: getNextToken(); break;
|
default: getNextToken(); break;
|
||||||
|
|||||||
@@ -43,10 +43,9 @@ class Lcd2004 : public IoTItem {
|
|||||||
if (LCDI2C != nullptr) {
|
if (LCDI2C != nullptr) {
|
||||||
printBlankStr(_prevStrSize);
|
printBlankStr(_prevStrSize);
|
||||||
|
|
||||||
String tmpStr;
|
String tmpStr = "";
|
||||||
// to do
|
if (_descr != "none") tmpStr = _descr + " " + getItemValue(_id2show);
|
||||||
// jsonRead(paramsHeapJson, _id2show, tmpStr);
|
else tmpStr = getItemValue(_id2show);
|
||||||
if (_descr != "none") tmpStr = _descr + " " + tmpStr;
|
|
||||||
LCDI2C->setCursor(_x, _y);
|
LCDI2C->setCursor(_x, _y);
|
||||||
LCDI2C->print(tmpStr);
|
LCDI2C->print(tmpStr);
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ class Mcp23017 : public IoTItem, IoTGpio {
|
|||||||
return mcp.digitalRead(pin);
|
return mcp.digitalRead(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void digitalInvert(uint8_t pin) {
|
||||||
|
mcp.digitalWrite(pin, 1 - mcp.digitalRead(pin));
|
||||||
|
}
|
||||||
|
|
||||||
~Mcp23017() {};
|
~Mcp23017() {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -31,8 +31,25 @@ class SysExt : public IoTItem {
|
|||||||
|
|
||||||
if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot();
|
if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot();
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
|
} else if (command == "digitalRead") {
|
||||||
|
if (param.size()) {
|
||||||
|
IoTgpio.pinMode(param[0].valD, INPUT);
|
||||||
|
value.valD = IoTgpio.digitalRead(param[0].valD);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
} else if (command == "digitalWrite") {
|
||||||
|
if (param.size() == 2) {
|
||||||
|
IoTgpio.pinMode(param[0].valD, OUTPUT);
|
||||||
|
IoTgpio.digitalWrite(param[0].valD, param[1].valD);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
} else if (command == "digitalInvert") {
|
||||||
|
if (param.size()) {
|
||||||
|
IoTgpio.pinMode(param[0].valD, OUTPUT);
|
||||||
|
IoTgpio.digitalInvert(param[0].valD);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
|
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user