mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
module SIM800
This commit is contained in:
@@ -432,6 +432,10 @@
|
|||||||
"path": "src/modules/exec/SDcard",
|
"path": "src/modules/exec/SDcard",
|
||||||
"active": false
|
"active": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/modules/exec/SIM800",
|
||||||
|
"active": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/modules/exec/SmartBoiler",
|
"path": "src/modules/exec/SmartBoiler",
|
||||||
"active": false
|
"active": false
|
||||||
|
|||||||
186
src/modules/exec/SIM800/SIM800.cpp
Normal file
186
src/modules/exec/SIM800/SIM800.cpp
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
|
||||||
|
#include "Global.h"
|
||||||
|
#include "classes/IoTUart.h"
|
||||||
|
|
||||||
|
class Sim800 : public IoTUart
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
bool _debug;
|
||||||
|
String _number;
|
||||||
|
char _inc;
|
||||||
|
String _inStr = ""; // буфер приема строк
|
||||||
|
|
||||||
|
public:
|
||||||
|
Sim800(String parameters) : IoTUart(parameters)
|
||||||
|
{
|
||||||
|
_number = jsonReadStr(parameters, "number");
|
||||||
|
jsonRead(parameters, "debug", _debug);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _printUart(bool ln, String str)
|
||||||
|
{
|
||||||
|
if (!_myUART)
|
||||||
|
return;
|
||||||
|
if (!ln)
|
||||||
|
{
|
||||||
|
_myUART->print(str);
|
||||||
|
if (_debug)
|
||||||
|
SerialPrint("I", F("SIM800"), "<- print(" + str + ")");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_myUART->println(str);
|
||||||
|
if (_debug)
|
||||||
|
SerialPrint("I", F("SIM800"), "<- println(" + str + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sendSms(String sms, String num)
|
||||||
|
{
|
||||||
|
_printUart(1, "AT+CMGF=1"); // переводим в текстовый режим
|
||||||
|
_printUart(1, "AT+CMGS=\"" + num + "\"");
|
||||||
|
_printUart(1, sms + "\r\n" + String((char)26));
|
||||||
|
// _myUART->print((char)26); // код ctrl+c что является командой передачи сообщения
|
||||||
|
}
|
||||||
|
|
||||||
|
void doByInterval()
|
||||||
|
{
|
||||||
|
if (_myUART)
|
||||||
|
{
|
||||||
|
// _myUART->println("AT"); // должен ответить OK
|
||||||
|
// _myUART->println("AT+CSQ"); // уровень сигнала в dB
|
||||||
|
// _myUART->println("AT+CCID"); // если есть сим карта, то вернет её номер
|
||||||
|
//_printUart(1, "AT+COPS?"); //+COPS: 0,0,"MTS-RUS" - оператор
|
||||||
|
_printUart(1, "AT+CPAS"); //+CPAS: 0 - готов к работе
|
||||||
|
//_printUart(1, "AT+CREG?"); // проверка регистрации в сети, второй паратетр: 1-регистрация в сети, 5-роуминг
|
||||||
|
// _myUART->println("ATI"); // имя модуля и его номер
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void uartHandle()
|
||||||
|
{
|
||||||
|
if (!_myUART)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_myUART->available())
|
||||||
|
{
|
||||||
|
_inc = _myUART->read();
|
||||||
|
|
||||||
|
if (_inc == '\r')
|
||||||
|
{
|
||||||
|
_inStr += _inc;
|
||||||
|
if (_debug)
|
||||||
|
SerialPrint("I", F("SIM800"), "-> " + _inStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_inc == '\n')
|
||||||
|
{
|
||||||
|
// SerialPrint("I", F("SIM800"), "-> " + _inStr);
|
||||||
|
if (_inStr.indexOf("CPAS") != -1)
|
||||||
|
{
|
||||||
|
if (_inStr.indexOf("+CPAS: 0") != -1)
|
||||||
|
setValue("OK");
|
||||||
|
else
|
||||||
|
setValue("NO");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_inStr += _inc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IoTValue execute(String command, std::vector<IoTValue> ¶m)
|
||||||
|
{
|
||||||
|
if (!_myUART)
|
||||||
|
return {};
|
||||||
|
if (command == "sms")
|
||||||
|
{
|
||||||
|
if (param.size() == 1)
|
||||||
|
{
|
||||||
|
sendSms(param[0].valS, _number);
|
||||||
|
}
|
||||||
|
else if (param.size() == 2)
|
||||||
|
{
|
||||||
|
sendSms(param[0].valS, param[1].valS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// отправка кирилических символов на Nextion (русские буквы)
|
||||||
|
else if (command == "print")
|
||||||
|
{
|
||||||
|
if (param.size() == 2)
|
||||||
|
{
|
||||||
|
String strToUart = "";
|
||||||
|
strToUart = param[0].valS;
|
||||||
|
|
||||||
|
if (param[1].valD)
|
||||||
|
_printUart(0, "\"" + strToUart + "\"");
|
||||||
|
else
|
||||||
|
_printUart(0, strToUart);
|
||||||
|
}
|
||||||
|
if (param.size() == 3)
|
||||||
|
{
|
||||||
|
String strToUart = "";
|
||||||
|
strToUart = param[0].valS;
|
||||||
|
|
||||||
|
if (param[2].valD)
|
||||||
|
_printUart(0, strToUart + "\"" + param[1].valS + "\"");
|
||||||
|
else
|
||||||
|
_printUart(0, strToUart + param[1].valS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (command == "println")
|
||||||
|
{
|
||||||
|
if (param.size() == 2)
|
||||||
|
{
|
||||||
|
String strToUart = "";
|
||||||
|
strToUart = param[0].valS;
|
||||||
|
|
||||||
|
if (param[1].valD)
|
||||||
|
_printUart(1, "\"" + strToUart + "\"");
|
||||||
|
else
|
||||||
|
_printUart(1, strToUart);
|
||||||
|
}
|
||||||
|
if (param.size() == 3)
|
||||||
|
{
|
||||||
|
String strToUart = "";
|
||||||
|
strToUart = param[0].valS;
|
||||||
|
|
||||||
|
if (param[2].valD)
|
||||||
|
_printUart(1, strToUart + "\"" + param[1].valS + "\"");
|
||||||
|
else
|
||||||
|
_printUart(1, strToUart + param[1].valS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (command == "printHex")
|
||||||
|
{
|
||||||
|
unsigned char Hi, Lo;
|
||||||
|
uint8_t byteTx;
|
||||||
|
const char *strPtr = param[0].valS.c_str();
|
||||||
|
while ((Hi = *strPtr++) && (Lo = *strPtr++))
|
||||||
|
{
|
||||||
|
byteTx = (ChartoHex(Hi) << 4) | ChartoHex(Lo);
|
||||||
|
_myUART->write(byteTx);
|
||||||
|
}
|
||||||
|
if (_debug)
|
||||||
|
SerialPrint("I", F("SIM800"), "<- printHex(" + String(byteTx, HEX) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
~Sim800(){};
|
||||||
|
};
|
||||||
|
|
||||||
|
void *getAPI_SIM800(String subtype, String param)
|
||||||
|
{
|
||||||
|
if (subtype == F("sim800"))
|
||||||
|
{
|
||||||
|
return new Sim800(param);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
86
src/modules/exec/SIM800/modinfo.json
Normal file
86
src/modules/exec/SIM800/modinfo.json
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
"menuSection": "executive_devices",
|
||||||
|
"configItem": [
|
||||||
|
{
|
||||||
|
"global": 0,
|
||||||
|
"name": "SIM800",
|
||||||
|
"type": "Reading",
|
||||||
|
"subtype": "sim800",
|
||||||
|
"id": "sim",
|
||||||
|
"widget": "anydataDef",
|
||||||
|
"page": "Состояние",
|
||||||
|
"descr": "Sim в сети",
|
||||||
|
"int": 5,
|
||||||
|
"tx": 17,
|
||||||
|
"rx": 16,
|
||||||
|
"line": 2,
|
||||||
|
"speed": 115200,
|
||||||
|
"number": "+71234567890",
|
||||||
|
"debug": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"about": {
|
||||||
|
"authorName": "Bubnov Mikhail",
|
||||||
|
"authorContact": "https://t.me/Mit4bmw",
|
||||||
|
"authorGit": "https://github.com/Mit4el",
|
||||||
|
"specialThanks": "",
|
||||||
|
"moduleName": "SIM800",
|
||||||
|
"moduleVersion": "1.0",
|
||||||
|
"usedRam": {
|
||||||
|
"esp32_4mb": 15,
|
||||||
|
"esp8266_4mb": 15
|
||||||
|
},
|
||||||
|
"title": "SIM800",
|
||||||
|
"moduleDesc": "Оправка AT-команд в модуль SIM800L. Отправка sms сообщений через модуль",
|
||||||
|
"propInfo": {
|
||||||
|
"int": "Период опроса состояния модуля SIM800",
|
||||||
|
"tx": "TX пин",
|
||||||
|
"rx": "RX пин",
|
||||||
|
"speed": "Скорость UART",
|
||||||
|
"line": "Актуально только для ESP32: номер линии hardUART. =2 rx=16 tx=17, для SoftwarwSerial в ESP32 line = -1",
|
||||||
|
"number": "Номер телефона для отправки sms сообщения"
|
||||||
|
},
|
||||||
|
"funcInfo": [
|
||||||
|
{
|
||||||
|
"name": "sms",
|
||||||
|
"descr": "Отправить sms сообщение. Например sim.sms(\"сообщение\") или sim.sms(\"сообщение\", \"+7999999\")",
|
||||||
|
"params": [
|
||||||
|
"Строка текста",
|
||||||
|
"Номер телефона, если не указывать будет отправлено на номер number из конфигурации"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "print",
|
||||||
|
"descr": "Отправить в UART строку текста (AT-команду). Например sim.print(\"AT\",0)",
|
||||||
|
"params": [
|
||||||
|
"Строка текста",
|
||||||
|
"ID Виджета или любое значение, не обязательно",
|
||||||
|
"1 - обернуть строку в кавычки, 0 - отправить без кавычек (При наличии второго параметра оборачивает только его)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "println",
|
||||||
|
"descr": "Отправить в UART строку текста (AT-команду) и признак завершения строки (перевод строки). Например sim.println(\"AT+CMGS=\", \"+799999\", 1);",
|
||||||
|
"params": [
|
||||||
|
"Строка текста",
|
||||||
|
"ID Виджета или любое значение, не обязательно",
|
||||||
|
"1 - обернуть строку в кавычки, 0 - отправить без кавычек (Пр наличии второго параметра оборачивает только его)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "printHex",
|
||||||
|
"descr": "Отправить в UART HEX-строку.",
|
||||||
|
"params": [
|
||||||
|
"HEX-строка."
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"defActive": false,
|
||||||
|
"usedLibs": {
|
||||||
|
"esp32_4mb": [],
|
||||||
|
"esp32_4mb3f": [],
|
||||||
|
"esp32*": [],
|
||||||
|
"esp82*": []
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user