mirror of
https://github.com/esphome/esphome.git
synced 2026-08-22 22:26:21 +00:00
[mdns] Fix missing device info TXT records when native API is not enabled (#17520)
This commit is contained in:
@@ -47,7 +47,7 @@ void MDNSComponent::setup_buffers_and_register_(PlatformRegisterFn platform_regi
|
|||||||
auto &services = services_storage;
|
auto &services = services_storage;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_API
|
#ifdef USE_MDNS_DEVICE_INFO_TXT
|
||||||
#ifdef USE_MDNS_STORE_SERVICES
|
#ifdef USE_MDNS_STORE_SERVICES
|
||||||
get_mac_address_into_buffer(this->mac_address_);
|
get_mac_address_into_buffer(this->mac_address_);
|
||||||
char *mac_ptr = this->mac_address_;
|
char *mac_ptr = this->mac_address_;
|
||||||
@@ -70,17 +70,20 @@ void MDNSComponent::setup_buffers_and_register_(PlatformRegisterFn platform_regi
|
|||||||
platform_register(this, services);
|
platform_register(this, services);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MDNSComponent::compile_records_(StaticVector<MDNSService, MDNS_SERVICE_COUNT> &services, char *mac_address_buf,
|
void MDNSComponent::compile_records_(StaticVector<MDNSService, MDNS_SERVICE_COUNT> &services,
|
||||||
char *config_hash_buf) {
|
const char *mac_address_buf, const char *config_hash_buf) {
|
||||||
// IMPORTANT: The #ifdef blocks below must match COMPONENTS_WITH_MDNS_SERVICES
|
// IMPORTANT: The #ifdef blocks below must match COMPONENTS_WITH_MDNS_SERVICES
|
||||||
// in mdns/__init__.py. If you add a new service here, update both locations.
|
// in mdns/__init__.py. If you add a new service here, update both locations.
|
||||||
|
|
||||||
|
#ifdef USE_MDNS_DEVICE_INFO_TXT
|
||||||
|
MDNS_STATIC_CONST_CHAR(TXT_VERSION, "version");
|
||||||
|
MDNS_STATIC_CONST_CHAR(TXT_MAC, "mac");
|
||||||
|
MDNS_STATIC_CONST_CHAR(TXT_CONFIG_HASH, "config_hash");
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_API
|
#ifdef USE_API
|
||||||
MDNS_STATIC_CONST_CHAR(SERVICE_ESPHOMELIB, "_esphomelib");
|
MDNS_STATIC_CONST_CHAR(SERVICE_ESPHOMELIB, "_esphomelib");
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_FRIENDLY_NAME, "friendly_name");
|
MDNS_STATIC_CONST_CHAR(TXT_FRIENDLY_NAME, "friendly_name");
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_VERSION, "version");
|
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_CONFIG_HASH, "config_hash");
|
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_MAC, "mac");
|
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_PLATFORM, "platform");
|
MDNS_STATIC_CONST_CHAR(TXT_PLATFORM, "platform");
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_BOARD, "board");
|
MDNS_STATIC_CONST_CHAR(TXT_BOARD, "board");
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_NETWORK, "network");
|
MDNS_STATIC_CONST_CHAR(TXT_NETWORK, "network");
|
||||||
@@ -212,12 +215,18 @@ void MDNSComponent::compile_records_(StaticVector<MDNSService, MDNS_SERVICE_COUN
|
|||||||
web_service.service_type = MDNS_STR(SERVICE_HTTP);
|
web_service.service_type = MDNS_STR(SERVICE_HTTP);
|
||||||
web_service.proto = MDNS_STR(SERVICE_TCP);
|
web_service.proto = MDNS_STR(SERVICE_TCP);
|
||||||
web_service.port = []() -> uint16_t { return USE_WEBSERVER_PORT; };
|
web_service.port = []() -> uint16_t { return USE_WEBSERVER_PORT; };
|
||||||
|
#ifndef USE_API
|
||||||
|
// Without the native API there is no _esphomelib service, so publish the
|
||||||
|
// device info here for the device builder to discover.
|
||||||
|
web_service.txt_records = {{MDNS_STR(TXT_VERSION), MDNS_STR(VALUE_VERSION)},
|
||||||
|
{MDNS_STR(TXT_MAC), MDNS_STR(mac_address_buf)},
|
||||||
|
{MDNS_STR(TXT_CONFIG_HASH), MDNS_STR(config_hash_buf)}};
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(USE_API) && !defined(USE_PROMETHEUS) && !defined(USE_SENDSPIN) && !defined(USE_WEBSERVER) && \
|
#if !defined(USE_API) && !defined(USE_PROMETHEUS) && !defined(USE_SENDSPIN) && !defined(USE_WEBSERVER) && \
|
||||||
!defined(USE_MDNS_EXTRA_SERVICES)
|
!defined(USE_MDNS_EXTRA_SERVICES)
|
||||||
MDNS_STATIC_CONST_CHAR(SERVICE_HTTP, "_http");
|
MDNS_STATIC_CONST_CHAR(SERVICE_HTTP, "_http");
|
||||||
MDNS_STATIC_CONST_CHAR(TXT_VERSION, "version");
|
|
||||||
|
|
||||||
// Publish "http" service if not using native API or any other services
|
// Publish "http" service if not using native API or any other services
|
||||||
// This is just to have *some* mDNS service so that .local resolution works
|
// This is just to have *some* mDNS service so that .local resolution works
|
||||||
@@ -225,7 +234,9 @@ void MDNSComponent::compile_records_(StaticVector<MDNSService, MDNS_SERVICE_COUN
|
|||||||
fallback_service.service_type = MDNS_STR(SERVICE_HTTP);
|
fallback_service.service_type = MDNS_STR(SERVICE_HTTP);
|
||||||
fallback_service.proto = MDNS_STR(SERVICE_TCP);
|
fallback_service.proto = MDNS_STR(SERVICE_TCP);
|
||||||
fallback_service.port = []() -> uint16_t { return USE_WEBSERVER_PORT; };
|
fallback_service.port = []() -> uint16_t { return USE_WEBSERVER_PORT; };
|
||||||
fallback_service.txt_records = {{MDNS_STR(TXT_VERSION), MDNS_STR(VALUE_VERSION)}};
|
fallback_service.txt_records = {{MDNS_STR(TXT_VERSION), MDNS_STR(VALUE_VERSION)},
|
||||||
|
{MDNS_STR(TXT_MAC), MDNS_STR(mac_address_buf)},
|
||||||
|
{MDNS_STR(TXT_CONFIG_HASH), MDNS_STR(config_hash_buf)}};
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,15 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Device info TXT records (version, mac, config_hash) are published on the _esphomelib service
|
||||||
|
// when the native API is enabled, otherwise on the _http service (web_server's or the fallback one).
|
||||||
|
// When neither applies (only prometheus, sendspin or user-defined services are configured), no
|
||||||
|
// device info records are published and the buffers below are not needed.
|
||||||
|
#if defined(USE_API) || defined(USE_WEBSERVER) || \
|
||||||
|
(!defined(USE_PROMETHEUS) && !defined(USE_SENDSPIN) && !defined(USE_MDNS_EXTRA_SERVICES))
|
||||||
|
#define USE_MDNS_DEVICE_INFO_TXT
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace esphome::mdns {
|
namespace esphome::mdns {
|
||||||
|
|
||||||
// Helper struct that identifies strings that may be stored in flash storage (similar to LogString)
|
// Helper struct that identifies strings that may be stored in flash storage (similar to LogString)
|
||||||
@@ -136,7 +145,7 @@ class MDNSComponent final : public Component
|
|||||||
StaticVector<std::string, MDNS_DYNAMIC_TXT_COUNT> dynamic_txt_values_;
|
StaticVector<std::string, MDNS_DYNAMIC_TXT_COUNT> dynamic_txt_values_;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_API) && defined(USE_MDNS_STORE_SERVICES)
|
#if defined(USE_MDNS_DEVICE_INFO_TXT) && defined(USE_MDNS_STORE_SERVICES)
|
||||||
/// Fixed buffer for MAC address (only needed when services are stored)
|
/// Fixed buffer for MAC address (only needed when services are stored)
|
||||||
char mac_address_[MAC_ADDRESS_BUFFER_SIZE];
|
char mac_address_[MAC_ADDRESS_BUFFER_SIZE];
|
||||||
/// Fixed buffer for config hash hex string (only needed when services are stored)
|
/// Fixed buffer for config hash hex string (only needed when services are stored)
|
||||||
@@ -149,8 +158,8 @@ class MDNSComponent final : public Component
|
|||||||
// RP2040 defers MDNS.begin() until the first IP-up event; this tracks that.
|
// RP2040 defers MDNS.begin() until the first IP-up event; this tracks that.
|
||||||
bool initialized_{false};
|
bool initialized_{false};
|
||||||
#endif
|
#endif
|
||||||
void compile_records_(StaticVector<MDNSService, MDNS_SERVICE_COUNT> &services, char *mac_address_buf,
|
void compile_records_(StaticVector<MDNSService, MDNS_SERVICE_COUNT> &services, const char *mac_address_buf,
|
||||||
char *config_hash_buf);
|
const char *config_hash_buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace esphome::mdns
|
} // namespace esphome::mdns
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace esphome::mdns {
|
|||||||
|
|
||||||
void MDNSComponent::setup() {
|
void MDNSComponent::setup() {
|
||||||
#ifdef USE_MDNS_STORE_SERVICES
|
#ifdef USE_MDNS_STORE_SERVICES
|
||||||
#ifdef USE_API
|
#ifdef USE_MDNS_DEVICE_INFO_TXT
|
||||||
get_mac_address_into_buffer(this->mac_address_);
|
get_mac_address_into_buffer(this->mac_address_);
|
||||||
char *mac_ptr = this->mac_address_;
|
char *mac_ptr = this->mac_address_;
|
||||||
format_hex_to(this->config_hash_str_, App.get_config_hash());
|
format_hex_to(this->config_hash_str_, App.get_config_hash());
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# No api, web_server or extra services so the fallback _http service
|
||||||
|
# (with version, mac and config_hash TXT records) is compiled.
|
||||||
|
wifi:
|
||||||
|
ssid: MySSID
|
||||||
|
password: password1
|
||||||
|
|
||||||
|
mdns:
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# web_server without the native api so the version, mac and config_hash
|
||||||
|
# TXT records are attached to the web_server _http service.
|
||||||
|
wifi:
|
||||||
|
ssid: MySSID
|
||||||
|
password: password1
|
||||||
|
|
||||||
|
web_server:
|
||||||
|
|
||||||
|
mdns:
|
||||||
Reference in New Issue
Block a user