From a82e07880adf102ae52cc8474e2de8417b761dc1 Mon Sep 17 00:00:00 2001 From: oarcher Date: Sat, 3 Aug 2024 00:24:11 +0200 Subject: [PATCH] network interface ordering, and missing implementation --- esphome/components/modem/modem_component.h | 1 + esphome/components/network/util.cpp | 34 ++++++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/esphome/components/modem/modem_component.h b/esphome/components/modem/modem_component.h index 259431de71..801b585e05 100644 --- a/esphome/components/modem/modem_component.h +++ b/esphome/components/modem/modem_component.h @@ -62,6 +62,7 @@ class ModemComponent : public Component { void enable_cmux() { this->cmux_ = true; } void add_init_at_command(const std::string &cmd) { this->init_at_commands_.push_back(cmd); } bool is_connected() { return this->component_state_ == ModemComponentState::CONNECTED; } + bool is_disabled() { return this->component_state_ == ModemComponentState::DISABLED; } std::string send_at(const std::string &cmd); float get_signal_strength(); bool get_imei(std::string &result); diff --git a/esphome/components/network/util.cpp b/esphome/components/network/util.cpp index 7f5b1739ea..d632f3af2a 100644 --- a/esphome/components/network/util.cpp +++ b/esphome/components/network/util.cpp @@ -16,22 +16,25 @@ namespace esphome { namespace network { +// The order of the components is important: WiFi should come after any possible main interfaces (it may be used as +// an AP that use a previous interface for NAT). + bool is_connected() { #ifdef USE_ETHERNET if (ethernet::global_eth_component != nullptr && ethernet::global_eth_component->is_connected()) return true; #endif -#ifdef USE_WIFI - if (wifi::global_wifi_component != nullptr) - return wifi::global_wifi_component->is_connected(); -#endif - #ifdef USE_MODEM if (modem::global_modem_component != nullptr) return modem::global_modem_component->is_connected(); #endif +#ifdef USE_WIFI + if (wifi::global_wifi_component != nullptr) + return wifi::global_wifi_component->is_connected(); +#endif + #ifdef USE_HOST return true; // Assume its connected #endif @@ -39,6 +42,11 @@ bool is_connected() { } bool is_disabled() { +#ifdef USE_MODEM + if (modem::global_modem_component != nullptr) + return modem::global_modem_component->is_disabled(); +#endif + #ifdef USE_WIFI if (wifi::global_wifi_component != nullptr) return wifi::global_wifi_component->is_disabled(); @@ -51,6 +59,12 @@ network::IPAddresses get_ip_addresses() { if (ethernet::global_eth_component != nullptr) return ethernet::global_eth_component->get_ip_addresses(); #endif + +#ifdef USE_MODEM + if (modem::global_modem_component != nullptr) + return modem::global_modem_component->get_ip_addresses(); +#endif + #ifdef USE_WIFI if (wifi::global_wifi_component != nullptr) return wifi::global_wifi_component->get_ip_addresses(); @@ -64,14 +78,16 @@ std::string get_use_address() { if (ethernet::global_eth_component != nullptr) return ethernet::global_eth_component->get_use_address(); #endif -#ifdef USE_WIFI - if (wifi::global_wifi_component != nullptr) - return wifi::global_wifi_component->get_use_address(); -#endif + #ifdef USE_MODEM if (modem::global_modem_component != nullptr) return modem::global_modem_component->get_use_address(); #endif + +#ifdef USE_WIFI + if (wifi::global_wifi_component != nullptr) + return wifi::global_wifi_component->get_use_address(); +#endif return ""; }