Предисловие. Раньше у меня был telegram-бот на этом модуле в комплекте такого набора (на основе 7-го из 8 стандартных экспериментов; брошюра из набора вот). Он вполне функционировал. Сейчас я решил "оживить" проект, но бот не работает. Путем дебага удалось выяснить, что он не может получать сообщения. Собственно вопрос: может, кто сталкивался с такой проблемой? Я думал, либо у телеги как-то поменялось API, либо мешает блокировка телеграма. В первый вариант я не очень верю. Во второй тоже (вывел в сеть через румынский VPN - проблема осталась). Спойлер: Код Код (C++): #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> String answer; bool button_old = true; bool button_new = true; bool check_button = false; // В коде это задано, убрал специально для поста char ssid[] = ""; char password[] = ""; // То же самое #define BOTtoken "" WiFiClientSecure client; UniversalTelegramBot bot(BOTtoken, client); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println("WIFI успешно подключен"); } void loop() { Serial.println("Начинаю обработку сообщений"); int numNewMessages = bot.getUpdates( bot.last_message_received + 1); Serial.print("Вызываю функцию-обработчик с количеством новых сообщений "); Serial.println(numNewMessages); handleNewMessages(numNewMessages); Serial.println("Функция-обработчик успешно вызвана"); if (check_button) { get_button(); } } void handleNewMessages(int numNewMessages) { for (int i = 0; i < numNewMessages; i++) { String chat_id = String(bot.messages[i].chat_id); String text = bot.messages[i].text; Serial.println("Обрабатываю сообщение " + text); if (text == "/start") { bot.sendMessage(chat_id, "Здравствуйте! Для выбора функции введите /", ""); } else if (text == "/get_lightness") { Serial.println("getLight"); delay(250); InitAnswer(); bot.sendMessage(chat_id, "Уровень освещенности по шкале от 0 до 1024 равен " + answer, ""); } else if (text == "/get_temperature") { Serial.println("getTemperature"); delay(250); InitAnswer(); bot.sendMessage(chat_id, "Температура равна " + answer + " градусов по Цельсию", ""); } else { bot.sendMessage(chat_id, "Не удалось разобрать команду. Проверьте правильность команды и повторите ввод.", ""); } } } void InitAnswer() { answer = Serial.readStringUntil('\n'); answer.trim(); } Спойлер: Вывод в Serial-монитор Код (Text): WIFI успешно подключен Начинаю обработку сообщений Вызываю функцию-обработчик с количеством новых сообщений 0 Функция-обработчик успешно вызвана Начинаю обработку сообщений Вызываю функцию-обработчик с количеством новых сообщений 0 Функция-обработчик успешно вызвана // И дальше то же самое, хотя я отправляю в телегу сообщения
А Вы уверены, что ESP у Вас ходит через VPN? Вы на чем VPN поднимали? У вас страничка https://www.telegram.org например на телефоне открывается, при подключении по WiFi к тому же роутеру, к которому подключается ESP?
Проверял, влияет ли блокировка. Про API не знаю... Но ключ мне BotFather выдал, и в коде он стоит. Я всю систему запускал через точку доступа на телефоне. VPN я поднял на нем же (временно, чисто для проверки). Не помогло. Но сайт телеграма через VPN открывается.
Открывается на том, телефоне, на котором VPN поднят? А Вы попробуйте другим телефоном или ноутом подключиться к телефону с VPN и точкой доступа. А с них открыть. Я попробовал на iPhone. Поднял VPN и точку доступа. Подключиться к ней с ноутбука по WiFi и попытался открыть страницу телеграм. И не открывается. А на iPhone открывается.
Посмотрел. Без VPN-а (на телефоне передача данных + точка доступа) сайт телеги бесконечно грузится. С VPN-ом на точке доступа интернет отрубается совсем (не грузит ни один сайт).
Я когда на телефоне VPN включаю, интернет на других устройствах пропадает вообще (он в режиме модема) При этом на нем все ок
Да наверное можно накатить какую-нибудь OpenWrt. А на mikrotik hex есть VPN. И много чего другого. И в VPN можно зарулить только то, что нужно, а остальной трафик будет выходить через Вашего провайдера. Только рекомендую его ставить за вашим роутером. А то там настроек дохрена, не учтете что то - будет дыра. А так только нужные порты пробросить можно.
Основная проблема в том, что бот - часть конкурсного проекта. Было бы для домашнего использования - тогда да. Видимо, придется уходить с телеги на что-то другое...
Подскажите,пожалуйста, как проверить, что ESP8266 впринципе как-то имеет связь с телегой через Universal-Arduino-Telegram-Bot? В сети с ESP беспроблем открываются api.telegram, telegram org Нужно понять через монитор порта как-то, на каком этапе нет работоспособности с ботом? Спасибо заранее