Глюки в работе telegram-бота на ESP8266

Тема в разделе "ESP8266, ESP32", создана пользователем Arduino_man, 19 авг 2019.

Метки:
  1. Arduino_man

    Arduino_man Гик

    Предисловие.
    Раньше у меня был 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();
    }
     
    Код (Text):
    WIFI успешно подключен
    Начинаю обработку сообщений
    Вызываю функцию-обработчик с количеством новых сообщений 0
    Функция-обработчик успешно вызвана
    Начинаю обработку сообщений
    Вызываю функцию-обработчик с количеством новых сообщений 0
    Функция-обработчик успешно вызвана
    // И дальше то же самое, хотя я отправляю в телегу сообщения
     
     
  2. Airbus

    Airbus Радиохулиган Модератор

    А зачем через VPN?У меня и так работает.В смысле бот.
     
  3. Скорее всего изменился API, ключ не получаете, вот и не может получать сообщения
     
  4. SergeiL

    SergeiL Оракул Модератор

    А Вы уверены, что ESP у Вас ходит через VPN?
    Вы на чем VPN поднимали?
    У вас страничка https://www.telegram.org например на телефоне открывается, при подключении по WiFi к тому же роутеру, к которому подключается ESP?
     
  5. Arduino_man

    Arduino_man Гик

    Проверял, влияет ли блокировка.
    Про API не знаю... Но ключ мне BotFather выдал, и в коде он стоит.
    Я всю систему запускал через точку доступа на телефоне. VPN я поднял на нем же (временно, чисто для проверки). Не помогло. Но сайт телеграма через VPN открывается.
     
  6. SergeiL

    SergeiL Оракул Модератор

    Открывается на том, телефоне, на котором VPN поднят?

    А Вы попробуйте другим телефоном или ноутом подключиться к телефону с VPN и точкой доступа.
    А с них открыть.

    Я попробовал на iPhone. Поднял VPN и точку доступа.
    Подключиться к ней с ноутбука по WiFi и попытался открыть страницу телеграм. И не открывается.
    А на iPhone открывается.
     
    Arduino_man нравится это.
  7. Arduino_man

    Arduino_man Гик

    Посмотрел. Без VPN-а (на телефоне передача данных + точка доступа) сайт телеги бесконечно грузится. С VPN-ом на точке доступа интернет отрубается совсем (не грузит ни один сайт).
     
  8. NikitOS

    NikitOS Король шутов Администратор

    Я когда на телефоне VPN включаю, интернет на других устройствах пропадает вообще (он в режиме модема)
    При этом на нем все ок
     
  9. Arduino_man

    Arduino_man Гик

    Вот у меня также. Получается, нужно на нормальном роутере VPN прописывать и к нему подключаться.
     
  10. NikitOS

    NikitOS Король шутов Администратор

    И сейчас окажется, что роутер не умеет работать с VPN[​IMG]
     
  11. Arduino_man

    Arduino_man Гик

    Вы не поверите, но так и оказалось. Мой TP-Link не поддерживает функцию vpn-а.
     
  12. NikitOS

    NikitOS Король шутов Администратор

    Печально[​IMG]
     
  13. SergeiL

    SergeiL Оракул Модератор

    Да наверное можно накатить какую-нибудь OpenWrt.

    А на mikrotik hex есть VPN. И много чего другого.
    И в VPN можно зарулить только то, что нужно, а остальной трафик будет выходить через Вашего провайдера.
    Только рекомендую его ставить за вашим роутером. А то там настроек дохрена, не учтете что то - будет дыра.
    А так только нужные порты пробросить можно.
     
    Последнее редактирование: 19 авг 2019
  14. SergeiL Ну да, типа такого:
    02.jpg
     
    Arduino_man, NikitOS и ИгорьК нравится это.
  15. Arduino_man

    Arduino_man Гик

    Основная проблема в том, что бот - часть конкурсного проекта. Было бы для домашнего использования - тогда да.
    Видимо, придется уходить с телеги на что-то другое...
     
  16. NikitOS

    NikitOS Король шутов Администратор

    А обязательно делать бота на ESP8266?
    Сервер какой-нибудь нельзя использовать?
     
  17. Arduino_man

    Arduino_man Гик

    Может и можно... Но выставка уже завтра :(
     
  18. NikitOS

    NikitOS Король шутов Администратор

    Попробуйте - клик
    Но там рут нужен (но это не точно)
     
  19. Memfis09

    Memfis09 Нерд

    Подскажите,пожалуйста, как проверить, что ESP8266 впринципе как-то имеет связь с телегой через Universal-Arduino-Telegram-Bot?
    В сети с ESP беспроблем открываются api.telegram, telegram org
    Нужно понять через монитор порта как-то, на каком этапе нет работоспособности с ботом?
    Спасибо заранее