Nodemcu lua отправка данных по https

Тема в разделе "ESP8266, ESP32", создана пользователем obuhanoe, 6 июл 2022.

Метки:
  1. obuhanoe

    obuhanoe Гик

    Тема родилась в процессе создания кода для отправки данных в telegram чат telegram-ботом.
    С начала решил использовать модуль net, но оказалось, net не умеет с работать с протоколом HTTPS.
    После этого решил использовать модуль tls:
    1. srv:connect(443,"ya.ru") - работает
    2. srv:connect(443,"google.com") - нет реакции в секциях "receive" и "connection"
    3. srv:connect(443,"api.telegram.org") - нет реакции в секциях "receive" и "connection"
    Пример кода:
    Код (Text):
    bot = "XXXXXXXXXX"
    id  = 'XXXXXXXXXX'
    dat = 'Hello'
    ------------
    curl = 'GET /bot'..bot..'/sendMessage?chat_id='..id..'&text='..dat..'\r\nHost: api.telegram.org\r\n\r\n'
    srv = tls.createConnection()
    srv:on("receive", function(sck, c)
         print(c)
         print('\nSent at heap: '..node.heap()..'\n')
         c = nil
         sck:close()
         bot, id, sck, curl, srv = nil, nil, nil, nil, nil
         biz = false

         print(c)
    end)
    srv:on("connection", function(sck, c)
        print("SEND_DATA")
        sck:send(curl)
    end)

    srv:connect(443,"api.telegram.org")
    Пошел дальше, решил попытать счастья с помощью модуля http (http.get):
    1. https://api.telegram.org/bot....... - HTTP client: Connection timeout
    2. пример с просторов интернета https://api.github.com/repos/nodemcu/nodemcu-firmware/releases/latest - 200 OK
    Пример кода:
    Код (Text):

    str = "https://api.telegram.org/botXXXXX/sendMessage?chat_id=000000000&text=ТЕКСТСООБЩЕНИЯ"
    str2 = "https://api.github.com/repos/nodemcu/nodemcu-firmware/releases/latest"
    http.get(str, nil, function(code, data)
        if (code < 0) then
          print("HTTP! request failed")
          print(code, data)
        else
          print(code, data)
        end
      end)

    Возникает вопрос, с чем этим связано?

    P.S. build 2022-07-04 06:26 powered by Lua 5.1.4 on SDK 3.0.1-dev(fce080e)
    modules: file,gpio,http,mqtt,net,node,rtctime,sntp,tmr,uart,wifi,tls
     
  2. ИгорьК

    ИгорьК Гуру

    Такого не может быть. Реакция В СЕКЦИЯХ обязательно есть. Просто серверы не отвечают на ваши посылки. А это, соответственно, связано либо с ошибками запроса либо с особенностями шифрования оного.
     
  3. obuhanoe

    obuhanoe Гик

    Согласен, не верно выразился.
    Серверы не отвечают - соответственно секции и не вызываются.

    А нет ли старых у Вас прошивок, SDK 1.5.4 ,2.2.0 или промежуточные между ними ?
    Хочу проверить - может проблема в 3.0.1

    Примеры вызовов я привел, ошибок синтаксиса нет.
     
  4. ИгорьК

    ИгорьК Гуру

    С необходимыми модулями - точно нет.
    1.5. можно заказать на сайте.

    Токо..., вы уверены что идете верным путем? Ошибка начинающего - видеть свое дело через единственное устройство. Представьте, что у вас получилось, и вы сделали десяток -другой устройств. Как вы будете всем этим управлять через Телеграм?

    Кроме того, tls жрет ресурсов МК немеряно.

    ИМХО, я когда-то, как видите, игрался с этим, но отказался за бесперспективностью пути в целом. ESP - устройство IoT.
     
  5. obuhanoe

    obuhanoe Гик

    Telegram пока это временное решение и только для оповещения, управления через него не будет.
    А целевое решение mqtt - не уверен что у меня быстро с ним получится разобраться.
     
  6. ИгорьК

    ИгорьК Гуру

    1. Брокер устанавливается в любом линуксе одной командой.

    2. Подсоединяетесь к нему MQTTExplorer, указав только ip.

    3. Дальше примера кода для ESP немеряно.

    Вы потратите на Телеграм много времени но сделаете всего лишь пульт дистанционного управления.
    Ну да все через это проходят, ничего не поделаешь.

    Все лучше чем "умный дом на Ардуино с управлением из любой точки мира" :)
     
  7. obuhanoe

    obuhanoe Гик

    У меня на данный момент кроме полива дачи , ничего не намечается.
    код на Lua написан проходит стадию тестирования.

    На даче интернет видимо будет от знакомых, поставить на роутер ничего не смогу.

    Дома серый ip, но есть raspberry работает 24/7.

    Видимо придётся ставить на сервер типа vps.

    Кроме контроля полива , включение выключение, изменение графика полива (если ливни начались) ничего не планируется.

    Mqtt для таких целей оптимально?
     
  8. ИгорьК

    ИгорьК Гуру

    Нет. Для единичной задачи MQTT не нужен. Он нужен тогда, когда количество устройств переходит в новое качество.
     
  9. obuhanoe

    obuhanoe Гик

    В таком случае, если mqtt не подходит, работа с telegram тупик пока (хотя получать оповещение было здорово), остается только страница на сайте, на которую можно отправлять оповещения?

    Или что-то упустил?
     
  10. ИгорьК

    ИгорьК Гуру

    Не тупик, я уже добился от телеграма:

    upload_2022-7-7_11-40-46.png
     
  11. obuhanoe

    obuhanoe Гик

    модуль TLS?
    Если не затруднит - какие модули в прошивке и какая версия SDK?

    Спасибо за помощь.
     
  12. ИгорьК

    ИгорьК Гуру

    Код (Lua):

    do
        dat = {}
        dat.bot =  '11111111:XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        dat.id =  '123456789'
        ------------
        dat.dat = 'It_Works'
     
      ask = 'https://api.telegram.org/bot'..dat.bot..'/sendMessage?chat_id='..dat.id..'&text='..dat.dat

      connection = http.createConnection(ask, http.GET)
        connection:on("complete", function(status)
          print("Request completed with status code =", status)
        end)
        connection:request()
    end
    Чет я тут неправильно собираю в запросе, но ответ от телеграма приходит. Это ESP32 с tls и http модулями.

    Дальше пробуйте сами понять что не правильно в формировании ask.

    Внимание! В теле запроса не парсятся пробелы: "It Works" - надо "It_Works". Пробел надо отдельно подбирать его знаком если нужно.
     
    obuhanoe нравится это.
  13. ИгорьК

    ИгорьК Гуру

    С сайта ветка esp32, она одна там.
     
    obuhanoe нравится это.
  14. obuhanoe

    obuhanoe Гик

    Я тестирую Ваш пример на ESP8266 и видимо из-за этого получаю ошибку:
    Lua error: stdin:8: attempt to call field 'createConnection' (a nil value)

    Посмотрел в документации у http нет метода createConnection.
     
  15. ИгорьК

    ИгорьК Гуру

    Прошивка ESP8266 из ветки dev с SSL и TLS
    Но... С яндексом связываетсся с телеграмом - нет.
     

    Вложения:

    • target.zip
      Размер файла:
      418,9 КБ
      Просмотров:
      59
  16. ИгорьК

    ИгорьК Гуру

    Ну куда-же без документации. По ней и надо работать.

    В общем, ESP32 устанавливает связь, ESP8266 - нет.

    Ниже прошивка ESP32/
     

    Вложения:

  17. obuhanoe

    obuhanoe Гик

    Документация по Nodemcu для ESP32 отличная от 8266?
    Так как не понял почему у модуля http есть метод createConnection.

    понял, спасибо.
     
  18. ИгорьК

    ИгорьК Гуру

    Безусловно есть нюансы. Прошивки пилят разные люди.
     
  19. obuhanoe

    obuhanoe Гик

    Понял, нашел на сайте.
     
  20. ИгорьК

    ИгорьК Гуру

    Еще результат:
    upload_2022-7-7_13-25-36.png

    Прошивка для ESP32.

    Сервер отправляет 200 - ОК, но сообщение на телеграм не приходит.
    Все отлично работает!

    Код (Lua):
    do
        dat = {}
        dat.bot =  'ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ'
        dat.id =  '111111111111111111'
        ------------
        dat.dat = 'It_Works'

      ask = 'https://api.telegram.org/bot'..dat.bot..'/sendMessage?chat_id='..dat.id..'&text='..dat.dat

        connection = http.createConnection(ask, http.POST)
        connection:on("complete", function(status)
          print("Request completed with status code =", status)
        end)

        connection:on("data", function(data)
            print("data)
        end)
        connection:request()
    end

    Ниже два файла - одна и та же прошивка. target - для ПиФлашера, другой файл - для ЕСПшного загрузчика.
     

    Вложения:

    • target.zip
      Размер файла:
      615,3 КБ
      Просмотров:
      63
    • MyCompil.zip
      Размер файла:
      615,3 КБ
      Просмотров:
      57
    Последнее редактирование: 7 июл 2022