mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
module SIM800
This commit is contained in:
@@ -432,6 +432,10 @@
|
||||
"path": "src/modules/exec/SDcard",
|
||||
"active": false
|
||||
},
|
||||
{
|
||||
"path": "src/modules/exec/SIM800",
|
||||
"active": false
|
||||
},
|
||||
{
|
||||
"path": "src/modules/exec/SmartBoiler",
|
||||
"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