mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
прошивка в Telegram
This commit is contained in:
@@ -56,6 +56,7 @@ private:
|
||||
bool _receiveMsg;
|
||||
String _prevMsg = "";
|
||||
bool _useLed = false;
|
||||
uint8_t _textMode = 0;
|
||||
|
||||
public:
|
||||
Telegram_v2(String parameters) : IoTItem(parameters)
|
||||
@@ -66,9 +67,10 @@ public:
|
||||
_resolveOTA = 0;
|
||||
jsonRead(parameters, "receiveMsg", _receiveMsg);
|
||||
jsonRead(parameters, "chatID", _chatID);
|
||||
_textMode = jsonReadInt(parameters, "textMode");
|
||||
fl_rollback = false;
|
||||
instanceBot();
|
||||
// _myBot->setTextMode(FB_MARKDOWN);
|
||||
_myBot->setTextMode(_textMode);
|
||||
_myBot->attach(telegramMsgParse);
|
||||
|
||||
#ifdef ESP32
|
||||
@@ -358,7 +360,7 @@ public:
|
||||
}
|
||||
// -------------- Обработка сообщения об откате --------------
|
||||
// -------------------------------------------------------------------------
|
||||
if (msg.text.indexOf("rollback") != -1 && msg.chatID == _chatID)
|
||||
if (msg.text.indexOf("/rollback") != -1 && msg.chatID == _chatID)
|
||||
{
|
||||
_myBot->inlineMenu("Вы уверены, что хотите откатить прошивку? " + jsonReadStr(settingsFlashJson, F("name")) + " \n OTA_roll", F("Rollback \t Cancel"));
|
||||
}
|
||||
@@ -430,7 +432,37 @@ public:
|
||||
OTAfilepath = "";
|
||||
typeOTA = 0;
|
||||
}
|
||||
|
||||
// -------------- обработка файлов загруженных пользователем --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.isFile)
|
||||
{
|
||||
if (msg.fileName.endsWith(F(".tft")) && msg.chatID == _chatID)
|
||||
{
|
||||
OTAfilepath = msg.fileUrl;
|
||||
_myBot->inlineMenu("Хотите прошить экран Nextion? На esp " + jsonReadStr(settingsFlashJson, F("name")) + "\n Next_firmware", F("Firmware \t Cancel"));
|
||||
}
|
||||
else if (msg.text.indexOf("download") != -1 && msg.chatID == _chatID)
|
||||
{
|
||||
downloadFile(msg);
|
||||
}
|
||||
else if (msg.text.indexOf("Next_firmware") != -1)
|
||||
{
|
||||
// удаляем последнее сообщение от бота
|
||||
_myBot->deleteMessage(_myBot->lastBotMsg());
|
||||
if (msg.data.indexOf("Firmware") != -1)
|
||||
{
|
||||
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it)
|
||||
{
|
||||
if ((*it)->getSubtype() == "NextionUpload" || (*it)->getSubtype() == "Nextion")
|
||||
{
|
||||
_myBot->sendMessage("Nextion firmware ...", _chatID);
|
||||
(*it)->uploadNextionTlgrm(OTAfilepath);
|
||||
}
|
||||
}
|
||||
OTAfilepath = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
// -------------- Обработка кнопок меню созданного в сценарии --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (auto search = mapBtnMenu.find(msg.text); search != mapBtnMenu.end())
|
||||
@@ -553,7 +585,7 @@ public:
|
||||
}
|
||||
// -------------- вывод инлайн меню всех юнитов --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.text.indexOf("all") != -1)
|
||||
else if (msg.text.indexOf("/all") != -1)
|
||||
{
|
||||
// String list = returnListOfParams();
|
||||
String out;
|
||||
@@ -582,7 +614,7 @@ public:
|
||||
}
|
||||
// -------------- обработка команды /set_ID_VALUE --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.text.indexOf("set") != -1)
|
||||
else if (msg.text.indexOf("/set") != -1)
|
||||
{
|
||||
msg.text = deleteBeforeDelimiter(msg.text, "_");
|
||||
generateOrder(selectToMarker(msg.text, "_"), selectToMarkerLast(msg.text, "_"));
|
||||
@@ -591,7 +623,7 @@ public:
|
||||
}
|
||||
// -------------- обработка команды /get_ID --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.text.indexOf("get") != -1)
|
||||
else if (msg.text.indexOf("/get") != -1)
|
||||
{
|
||||
msg.text = deleteBeforeDelimiter(msg.text, "_");
|
||||
IoTItem *item = findIoTItem(msg.text);
|
||||
@@ -603,52 +635,43 @@ public:
|
||||
}
|
||||
// -------------- обработка запроса пользователя на скачивание файла --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.text.indexOf("file") != -1 && msg.chatID == _chatID)
|
||||
else if (msg.text.indexOf("/file") != -1 && msg.chatID == _chatID)
|
||||
{
|
||||
msg.text = deleteBeforeDelimiter(msg.text, "_");
|
||||
SerialPrint("i", F("Telegram"), "chat ID: " + _chatID + ", get file: " + String(msg.text));
|
||||
auto file = FileFS.open(selectToMarker(msg.text, "_"), FILE_READ); // /test.png
|
||||
if (!file)
|
||||
if (msg.text.indexOf("file_type") != -1)
|
||||
{
|
||||
SerialPrint("E", F("Telegram"), "Fail send file: " + selectToMarker(msg.text, "_"));
|
||||
return;
|
||||
_myBot->sendMessage("Support file type download: \n 0-foto \n 1-audio \n 2-doc \n 3-video \n 4-gif \n 5-voice", _chatID);
|
||||
}
|
||||
int type = atoi(selectToMarkerLast(msg.text, "_").c_str());
|
||||
_myBot->sendFile(file, (FB_FileType)type, selectToMarker(msg.text, "_"), _chatID);
|
||||
file.close();
|
||||
}
|
||||
// -------------- обработка файлов загруженных пользователем --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.isFile)
|
||||
{
|
||||
if (msg.text.indexOf("download") != -1 && msg.chatID == _chatID)
|
||||
else
|
||||
{
|
||||
downloadFile(msg);
|
||||
}
|
||||
else if (msg.text.indexOf("nextion") != -1 && msg.chatID == _chatID)
|
||||
{
|
||||
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it)
|
||||
msg.text = deleteBeforeDelimiter(msg.text, "_");
|
||||
SerialPrint("i", F("Telegram"), "chat ID: " + _chatID + ", get file: " + String(msg.text));
|
||||
auto file = FileFS.open(selectToMarker(msg.text, "_"), FILE_READ); // /test.png
|
||||
if (!file)
|
||||
{
|
||||
if ((*it)->getSubtype() == "NextionUpload" || (*it)->getSubtype() == "Nextion")
|
||||
{
|
||||
(*it)->uploadNextionTlgrm(msg.fileUrl);
|
||||
}
|
||||
SerialPrint("E", F("Telegram"), "Fail send file: " + selectToMarker(msg.text, "_"));
|
||||
return;
|
||||
}
|
||||
int type = atoi(selectToMarkerLast(msg.text, "_").c_str());
|
||||
_myBot->sendFile(file, (FB_FileType)type, selectToMarker(msg.text, "_"), _chatID);
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
// -------------- обработка остальных команд --------------
|
||||
// -------------------------------------------------------------------------
|
||||
else if (msg.text.indexOf("help") != -1)
|
||||
else if (msg.text.indexOf("/help") != -1)
|
||||
{
|
||||
_myBot->sendMessage("ID: " + chipId, _chatID);
|
||||
_myBot->sendMessage("chatID: " + _chatID, _chatID);
|
||||
_myBot->sendMessage("Command: /help - this text \n /all - inline menu get all values \n /allMenu - bottom menu get all values \n /menu - bottom USER menu from scenario \n /get_id - get value by ID \n /set_id_value - set value in ID \n /file_name_type - take file from esp \n /file_type - support file type \n send file and write download - \"download\" file to esp \n send tft file and write \"nextion\" - flash file.tft to Nextion", _chatID);
|
||||
if (msg.text.indexOf("/helpDebug") != -1)
|
||||
{
|
||||
_myBot->sendMessage("В папке toolchchain с которым собирались (Для esp32 например %%USERPROFILE%/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin) из командной строки Windows (cmd) запустить файл xtensa-esp32-elf-addr2line.exe \nС параметрами -pfiaC -e Путь_к_файлу/firmware.elf Стэк_адресов", _chatID);
|
||||
}
|
||||
else
|
||||
{
|
||||
_myBot->sendMessage("ID: " + chipId, _chatID);
|
||||
_myBot->sendMessage("chatID: " + _chatID, _chatID);
|
||||
_myBot->sendMessage("Command: /help - this text \n /all - inline menu get all values \n /allMenu - bottom menu get all values \n /menu - bottom USER menu from scenario \n /get_id - get value by ID \n /set_id_value - set value in ID \n /file_name_type - take file from esp \n /file_type - support file type \n send file and write download - \"download\" file to esp \n send tft file and write \"nextion\" - flash file.tft to Nextion", _chatID);
|
||||
}
|
||||
}
|
||||
else if (msg.text.indexOf("file_type") != -1)
|
||||
{
|
||||
_myBot->sendMessage("Support file type download: \n 0-foto \n 1-audio \n 2-doc \n 3-video \n 4-gif \n 5-voice", _chatID);
|
||||
}
|
||||
else
|
||||
else if (msg.text.indexOf("/") != -1)
|
||||
{
|
||||
_myBot->sendMessage("Wrong order, use /help", _chatID);
|
||||
}
|
||||
|
||||
@@ -12,9 +12,10 @@
|
||||
"descr": "",
|
||||
"int": 10,
|
||||
"token": "",
|
||||
"chatID": "",
|
||||
"autos": 1,
|
||||
"receiveMsg": 1,
|
||||
"chatID": "",
|
||||
"textMode":"0",
|
||||
"OTA": 0
|
||||
}],
|
||||
|
||||
@@ -36,7 +37,8 @@
|
||||
"autos": "Автоматически(1) или нет(0) запоминать ChatID по входящим сообщениям. Т.е. бот будет информировать тех, кто последний прислал сообщение.",
|
||||
"receiveMsg": "Обрабатывать(1) или нет(0) входящие сообщения.",
|
||||
"chatID": "ИД диалога с контактом. Необходим для отправки сообщений именно вам.",
|
||||
"OTA": "Разрешена(1) или запрещена(0) прошивка через чат бота. Если разрешена, то файл принимается только от пользователя прописанного в chatID или от всех если autos=1"
|
||||
"OTA": "Разрешена(1) или запрещена(0) прошивка через чат бота. Если разрешена, то файл принимается только от пользователя прописанного в chatID или от всех если autos=1",
|
||||
"textMode": "Разметка оформления сообщения в сообщениях. 0-без оформления, 1-разметка Markdown v2, 2-разметка HTML"
|
||||
},
|
||||
"funcInfo": [
|
||||
{
|
||||
@@ -76,12 +78,12 @@
|
||||
},
|
||||
{
|
||||
"name": "btnMenu",
|
||||
"descr": "Описание кнопки меню выводит запросит значение ID и выведит сообщение => Произвольное сообщение(message): значение. Пример: btnMenu(Темп.Дома, Текущая температура, IDbme280)",
|
||||
"descr": "Описание кнопки меню. По нажатию запросит значение ID и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btnMenu(Темп.Дома, Текущая температура, IDbme280)",
|
||||
"params": ["Name - название кнопки отображается ботом", "message - Произвольное сообщения присылается в ответ на кнопку", "Id - Вернет значение элемента"]
|
||||
},
|
||||
{
|
||||
"name": "btnMenu",
|
||||
"descr": "Описание кнопки меню выводит запросит значение getID,установит значение value в setID и выведит сообщение => Произвольное сообщение(message): значение, IDrele=1. ВСЁ УКАЗЫВАТЬ В КАВЫЧКАХ, значение не обязательно! Пример: btnMenu(\"Обогрев\", \"Текущая температура\", \"IDbme280\", \"IDrele\", 1), btnMenu(Свет, Вклбчил свет, \"\", IDrele, 1)",
|
||||
"descr": "Описание кнопки меню. Установит значение value в setID. При необходимости запросит значение getID и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btnMenu(\"Обогрев\", \"Текущая температура\", \"IDbme280\", \"IDrele\", 1), btnMenu(Свет, Вклбчил свет, \"\", IDrele, 1)",
|
||||
"params": ["Name - название кнопки отображается ботом", "message - Произвольное сообщения присылается в ответ на кнопку", "getId - Вернет значение элемента", "setId - Установит значение элементу", "value - Устанавливаемое значение"]
|
||||
},
|
||||
{
|
||||
@@ -96,12 +98,12 @@
|
||||
},
|
||||
{
|
||||
"name": "btnInline",
|
||||
"descr": "Описание кнопки встроенного (inline) меню выводит запросит значение ID и выведит сообщение => Произвольное сообщение(message): значение. Пример: btnMenu(Темп.Дома, Текущая температура, IDbme280)",
|
||||
"descr": "Описание кнопки встроенного (inline) меню. Запросит значение ID и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btnInline(Темп.Дома, Текущая температура, IDbme280)",
|
||||
"params": ["Name - название кнопки отображается ботом", "message - Произвольное сообщения присылается в ответ на кнопку", "Id - Вернет значение элемента"]
|
||||
},
|
||||
{
|
||||
"name": "btnInline",
|
||||
"descr": "Описание кнопки встроенного (inline) меню выводит запросит значение getID,установит значение value в setID и выведит сообщение => Произвольное сообщение(message): значение, IDrele=1. ВСЁ УКАЗЫВАТЬ В КАВЫЧКАХ, значение не обязательно! Пример: btnMenu(\"Обогрев\", \"Текущая температура\", \"IDbme280\", \"IDrele\", 1), btnMenu(Свет, Вклбчил свет, \"\", IDrele, 1)",
|
||||
"descr": "Описание кнопки встроенного (inline) меню выводит. Установит значение value в setID. Запросит значение getID (если указан) и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btnInline(\"Обогрев\", \"Текущая температура\", \"IDbme280\", \"IDrele\", 1), btnMenu(Свет, Вклбчил свет, \"\", IDrele, 1)",
|
||||
"params": ["Name - название кнопки отображается ботом", "message - Произвольное сообщения присылается в ответ на кнопку", "getId - Вернет значение элемента", "setId - Установит значение элементу", "value - Устанавливаемое значение"]
|
||||
},
|
||||
{
|
||||
@@ -111,12 +113,12 @@
|
||||
},
|
||||
{
|
||||
"name": "clearInline",
|
||||
"descr": "Очистить встроенное (inline) меню, вызвать перед для язменения, перед созданием новых кнопок",
|
||||
"descr": "Очистить встроенное (inline) меню, вызвать для изменения, перед созданием новых кнопок",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"name": "clearMenu",
|
||||
"descr": "Очистить меню, вызвать перед для язменения, перед созданием новых кнопок",
|
||||
"descr": "Очистить меню, вызвать для изменения, перед созданием новых кнопок",
|
||||
"params": []
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user