ESP-8266/ESP32 NodeMCU Lua: азы программирования.

Тема в разделе "ESP8266, ESP32", создана пользователем ИгорьК, 25 июл 2017.

  1. obuhanoe

    obuhanoe Гик

    То есть зарегистрировать - это тоже самое что и описать ее как у указал выше?

    Так верно?

    Код (Text):


    do
       
       local function catchErr()

        node.setonerror(function(s)    
         print("Error NOWWWWW_0 = ", s)
         node.restart()
        end)
         

       end
         
       local read_telegramm = function()
         
         catchErr()
         
         local curl = 'https://api.telegram.org/bot'..params.telegram_bot..'/getUpdates?offset='..(params.last_mess_tg + 1)
         
         local connect = http.createConnection(curl, http.GET, {headers = {Connection = "close"}})
             
         cb_on = function(code, txt) print(code, txt) end
         connect:on("data", cb_on)    
         
         connect:request()    
         
       end

       read_telegramm()
    end

     
     
    Последнее редактирование: 23 янв 2023
  2. serg3295

    serg3295 Гуру

    Можно и так, лишь бы один раз вызывалась. Да и функция тут не нужна.
    Код (C++):

        node.setonerror(function(s)  
         print("Error NOWWWWW_0 = ", s)
         node.restart()
        end)
    do  
       local read_telegramm = function()
         
         local curl = 'https://api.telegram.org/bot'..params.telegram_bot..'/getUpdates?offset='..(params.last_mess_tg + 1)
       
         local connect = http.createConnection(curl, http.GET, {headers = {Connection = "close"}})
           
         cb_on = function(code, txt) print(code, txt) end
         connect:on("data", cb_on)  
       
         connect:request()  
       
       end

       read_telegramm()
    end
     
  3. obuhanoe

    obuhanoe Гик

    Ошибка осталась :(
    Прям мистика какая то.
     
  4. serg3295

    serg3295 Гуру

    Попробуйте для проверки убрать offset из getUpdates запроса. Просто получать одинаковые ответы в течении какого-то времени.
     
    obuhanoe нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Удалось что-то с этим сделать?
     
  6. ИгорьК

    ИгорьК Гуру

    upload_2023-1-25_15-8-57.png

    У вас там стоит нечто с обозначением data. У вас data - функция? Так редко функции называют.
     
    Последнее редактирование: 1 мар 2023
  7. obuhanoe

    obuhanoe Гик

    Не было времени, завтра планировал заняться.
    data: строка - json
     
  8. serg3295

    serg3295 Гуру

    Я в примере чуть выше использовал слово txt, но это похоже, ни на что не влияет. Также предложил вынести определение callback функции на строчку выше с целью исключить возможное влияние конструкции function(code, data) внутри connection : on(). И это тоже вроде ни на что не влияет.
    У меня остались только мысли про неверный параметр (params.last_mess_tg + 1) который случайно становится nil, и с ним происходит конкатенация offset. Собственно, это можно проверить.
    А ещё была мысль, что телеграм иногда возвращает какой-то неверный, или пустой ответ, и параметр data из callback'a возвращается установленным в nil. Его бы тут и проверить и напечатать.
     
    ИгорьК нравится это.
  9. obuhanoe

    obuhanoe Гик

    Была тоже такая мысль, проверю на строке, без offset и все данные укажу сразу в строке.
    Тоже об этом думал, но как понять что телеграм косячит так и не понял.
    print стоит и печатает, но при падении, информации о том что data/txt пустой не получаю.
     
    ИгорьК нравится это.
  10. obuhanoe

    obuhanoe Гик

    Ссылку сделал без параметров и без Offset - ошибку поймал только один раз, больше не получает воспроизвести, ошибка та же что и была.

    обложил все print. но поймать не получается.

    Увеличил с 5 секунд до 10 секунд запуск метода телеграм getUpdates - падения пока не наблюдаю но появилась вот что..
    Код (Text):
    [0;31mE (680816) esp-tls: [sock=54] select() timeout[0m
    [0;31mE (680816) esp-tls: Failed to open new connection[0m
    [0;31mE (680816) TRANSPORT_BASE: Failed to open a new connection[0m
    [0;31mE (680816) HTTP_CLIENT: Connection failed, sock < 0[0m
    [0;33mW (680826) http: Error 28674 from esp_http_client_perform[0m
     
    Последнее редактирование: 27 янв 2023
  11. serg3295

    serg3295 Гуру

    Была в исходниках такая строчка
    #define WEBSOCKET_NETWORK_TIMEOUT_MS (10*1000)
    Поставьте запуск своего метода на 9 секунд. Не факт, что поможет, но тут уже и непонятно куда копать. :(
     
    obuhanoe нравится это.
  12. obuhanoe

    obuhanoe Гик

    Удивительное рядом - поставил по Вашему совету и с утра ни одного вылета, работает как часы.
    Буду еще наблюдать, и позже еще отпишусь.
     
    serg3295 и ИгорьК нравится это.
  13. obuhanoe

    obuhanoe Гик

    Всем доброго дня.
    На днях заметил, что при разрыве WIFI ( wifi.sta.on("disconnected"...) срабатывает) модуль не восстанавливает связь. Хотя на IDF версии ниже 4.4 все было нормально.
    Сейчас у меня - NodeMCU ESP32 build unspecified powered by Lua 5.1.4 [5.1-doublefp] on IDF v4.4.2

    код следующий:
    Код (Text):
    do
        -- стартуем Wifi: при дисконекте (callback произойдет), ощищаем ip в таблице
        wifi.start()
       
        wifi.sta.on("got_ip", function(ev, info)      
            --params.ip = info.ip
            print("IP now:", info.ip)
        end)
       
        wifi.sta.on("disconnected", function(ev, info)
            --if params.ip ~= nil then
               print("WIFI DISCONNECTED!!!")
            --end
            --params.ip = nil    
        end)

        wifi.sta.connect() -- idf 4.4
    end
    Кто-нибудь сталкивался с такой проблемой?
     
  14. ИгорьК

    ИгорьК Гуру

    Я не сталкивался, но храню старые прошивки на такой случай. Мало ли что "улучшат" :)
     
  15. obuhanoe

    obuhanoe Гик

    На IDF 4.4 перешел только ради работы с telegram.
    Чуть позже тогда проверю старую прошивку и отпишусь.
     
    ИгорьК нравится это.
  16. obuhanoe

    obuhanoe Гик

    Проверил на версии: Lua 5.1.4 on ESP-IDF v3.3-beta1-1738-gb64b375234 on SDK IDF
    Как и писал выше - работает как надо.
    Печально, когда одно чинят - другое ломается.
     
    ИгорьК нравится это.
  17. ИгорьК

    ИгорьК Гуру

    Скомпилировал IDF 5.0

    upload_2023-3-2_8-41-30.png

    Кому попробовать для разминки.

    upload_2023-3-2_10-7-23.png

    С WiFi все ОК.
     

    Вложения:

    • idf5.zip
      Размер файла:
      719,6 КБ
      Просмотров:
      82
    Последнее редактирование: 2 мар 2023
    serg3295 нравится это.
  18. ИгорьК

    ИгорьК Гуру


    upload_2023-3-2_10-14-58.png


    Что-то ты не так делаешь, все работает.
     
    obuhanoe нравится это.
  19. obuhanoe

    obuhanoe Гик

    Большое спасибо Игорь, помогли.
    Теперь расскажу в чем была проблема.
    В версии IDF 3.3 для восстановления WIFI таймер не нужен был в секции "disconnected", то есть код который я приводил пару сообщений назад работает.
    В версии 4,4 - чтобы заработало восстановление, Вы добавили таймер (о чем я совсем не догадался) и восстановление WIFI происходит как надо.

    Еще раз большое спасибо.
     
    Последнее редактирование: 2 мар 2023
    ИгорьК нравится это.
  20. obuhanoe

    obuhanoe Гик

    Игорь, если Вас не затруднит - можно на Lua 5.1 и IDF 5.0 собрать?
    Спасибо.