Проверка отсутствия пропускной способности даже при действительном IP-адресе

#lua #wifi #nodemcu

#lua #wifi #nodemcu

Вопрос:

Я использую плату NodeMCU ESP8266 12E, и я могу успешно подключиться к своей сети Wi-Fi и протестировать IP. Проблема в том, что наличие IP не обязательно подразумевает наличие доступной полосы пропускания. Возможно, интернет-провайдер не работает, и мой маршрутизатор по-прежнему выдает ESP8266 действительный IP-адрес.

Как мне с этим справиться?

Я поиграл с приведенным ниже кодом, чтобы посмотреть, как он реагирует, когда я отсоединяю провод от своего модема к маршрутизатору, чтобы имитировать ситуацию «отсутствия пропускной способности». Я думал, что STA_DHCP_TIMEOUT автоматически решит проблему, но она работает не так, как я думаю. Простите мое невежество, поскольку я полный новичок в Lua и API NodeMCU.

      wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T) 
     print("wIfI Connected")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) 
     print("wIfI Disconnected")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) 
     print("wIfI Got an IP")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_DHCP_TIMEOUT, function() 
     print("DHCP TIMEOUT")
     end)

    wifi.setmode(wifi.STATION)
    wifi.sta.config("mySSID","myPassword")
    print(wifi.sta.getip())
  

На рисунке ниже показан результат. может кто-нибудь посоветовать, как определить «ОТСУТСТВИЕ пропускной способности», пока у меня есть действительный IP?
введите описание изображения здесь

Ответ №1:

Я полный новичок в Lua и API NodeMCU

Под «отсутствием пропускной способности» вы, похоже, подразумеваете отсутствие подключения к Интернету, верно? Если это так, то этот вопрос кажется совершенно не связанным ни с одним из двух. ИМО, это скорее базовый сетевой вопрос.

  • «Тайм-аут DHCP» означает, что время ожидания устройства истекло для получения IP-адреса.
  • «Got IP» означает, что один из компонентов вашей сетевой инфраструктуры (DHCP-сервер) был доступен и назначил IP-адрес вашему устройству.

Как вы отметили, это не обязательно означает, что устройство действительно может подключаться к Интернету. Если маршрутизатор действует как DHCP-сервер, а модем, подключенный к маршрутизатору, обеспечивает доступ в Интернет, понятно, что устройство не будет иметь доступа в Интернет, если вы отключите их.

Чтобы определить, доступен ли Интернет с вашего устройства, вам нужно попытаться подключиться к существующему серверу. С помощью NodeMCU проще всего отправить запрос GET на известный ресурс и посмотреть, получите ли вы ответ. Для этого вам, очевидно, понадобится HTTP-модуль.

 http.get("http://httpbin.org/ip", nil, function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
      print(code, data)
    end
  end)
  

Обновление 20181130

Никогда не поздно улучшить свои собственные ответы позже…Даже проще, чем использовать HTTP-модуль, было бы попытаться разрешить DNS следующим образом:

 net.dns.resolve("www.google.com", function(sk, ip)
    if (ip == nil) then print("DNS fail! Maybe not connected to the internet.") else print(ip) end
end)
  

Комментарии:

1. Спасибо, теперь я знаю, на чем сосредоточить свои исследования. На моем сервере размещения веб-сайта я создам специальный URL-адрес для выполнения этого теста, чтобы ESP8266 мог вызвать его напрямую. Большое спасибо