Skip to content

Commit

Permalink
Added an option to disable mDNS (#1716)
Browse files Browse the repository at this point in the history
* Added an option to disable mDNS

* Fixed linter issues

* Moved the enable_mdns option to WiFi and Ethernet components

* extracted common method for add mdns library

* lint

Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
  • Loading branch information
dnetguru and glmnet committed May 6, 2021
1 parent f7232b1 commit 2225594
Show file tree
Hide file tree
Showing 13 changed files with 45 additions and 15 deletions.
6 changes: 6 additions & 0 deletions esphome/components/ethernet/__init__.py
@@ -1,6 +1,7 @@
from esphome import pins
import esphome.config_validation as cv
import esphome.codegen as cg
from esphome.components.network import add_mdns_library
from esphome.const import (
CONF_DOMAIN,
CONF_ID,
Expand All @@ -9,6 +10,7 @@
CONF_TYPE,
CONF_USE_ADDRESS,
ESP_PLATFORM_ESP32,
CONF_ENABLE_MDNS,
CONF_GATEWAY,
CONF_SUBNET,
CONF_DNS1,
Expand Down Expand Up @@ -80,6 +82,7 @@ def validate(config):
cv.Optional(CONF_PHY_ADDR, default=0): cv.int_range(min=0, max=31),
cv.Optional(CONF_POWER_PIN): pins.gpio_output_pin_schema,
cv.Optional(CONF_MANUAL_IP): MANUAL_IP_SCHEMA,
cv.Optional(CONF_ENABLE_MDNS, default=True): cv.boolean,
cv.Optional(CONF_DOMAIN, default=".local"): cv.domain_name,
cv.Optional(CONF_USE_ADDRESS): cv.string_strict,
cv.Optional("hostname"): cv.invalid(
Expand Down Expand Up @@ -122,3 +125,6 @@ def to_code(config):
cg.add(var.set_manual_ip(manual_ip(config[CONF_MANUAL_IP])))

cg.add_define("USE_ETHERNET")

if config[CONF_ENABLE_MDNS]:
add_mdns_library()
2 changes: 2 additions & 0 deletions esphome/components/ethernet/ethernet_component.cpp
Expand Up @@ -33,7 +33,9 @@ void EthernetComponent::setup() {

this->start_connect_();

#ifdef USE_MDNS
network_setup_mdns();
#endif
}
void EthernetComponent::loop() {
const uint32_t now = millis();
Expand Down
11 changes: 11 additions & 0 deletions esphome/components/network/__init__.py
@@ -1,2 +1,13 @@
# Dummy package to allow components to depend on network
import esphome.codegen as cg
from esphome.core import CORE

CODEOWNERS = ["@esphome/core"]


def add_mdns_library():
cg.add_define("USE_MDNS")
if CORE.is_esp32:
cg.add_library("ESPmDNS", None)
elif CORE.is_esp8266:
cg.add_library("ESP8266mDNS", None)
6 changes: 6 additions & 0 deletions esphome/components/wifi/__init__.py
Expand Up @@ -2,6 +2,7 @@
import esphome.config_validation as cv
from esphome import automation
from esphome.automation import Condition
from esphome.components.network import add_mdns_library
from esphome.const import (
CONF_AP,
CONF_BSSID,
Expand All @@ -22,6 +23,7 @@
CONF_STATIC_IP,
CONF_SUBNET,
CONF_USE_ADDRESS,
CONF_ENABLE_MDNS,
CONF_PRIORITY,
CONF_IDENTITY,
CONF_CERTIFICATE_AUTHORITY,
Expand Down Expand Up @@ -187,6 +189,7 @@ def validate(config):
cv.Optional(CONF_MANUAL_IP): STA_MANUAL_IP_SCHEMA,
cv.Optional(CONF_EAP): EAP_AUTH_SCHEMA,
cv.Optional(CONF_AP): WIFI_NETWORK_AP,
cv.Optional(CONF_ENABLE_MDNS, default=True): cv.boolean,
cv.Optional(CONF_DOMAIN, default=".local"): cv.domain_name,
cv.Optional(
CONF_REBOOT_TIMEOUT, default="15min"
Expand Down Expand Up @@ -298,6 +301,9 @@ def to_code(config):

cg.add_define("USE_WIFI")

if config[CONF_ENABLE_MDNS]:
add_mdns_library()

# Register at end for OTA safe mode
yield cg.register_component(var, config)

Expand Down
6 changes: 3 additions & 3 deletions esphome/components/wifi/wifi_component.cpp
Expand Up @@ -62,7 +62,7 @@ void WiFiComponent::setup() {
}

this->wifi_apply_hostname_();
#ifdef ARDUINO_ARCH_ESP32
#if defined(ARDUINO_ARCH_ESP32) && defined(USE_MDNS)
network_setup_mdns();
#endif
}
Expand Down Expand Up @@ -171,7 +171,7 @@ void WiFiComponent::setup_ap_config_() {

this->ap_setup_ = this->wifi_start_ap_(this->ap_);
ESP_LOGCONFIG(TAG, " IP Address: %s", this->wifi_soft_ap_ip().toString().c_str());
#ifdef ARDUINO_ARCH_ESP8266
#if defined(ARDUINO_ARCH_ESP8266) && defined(USE_MDNS)
network_setup_mdns(this->wifi_soft_ap_ip(), 1);
#endif

Expand Down Expand Up @@ -466,7 +466,7 @@ void WiFiComponent::check_connecting_finished() {
ESP_LOGD(TAG, "Disabling AP...");
this->wifi_mode_({}, false);
}
#ifdef ARDUINO_ARCH_ESP8266
#if defined(ARDUINO_ARCH_ESP8266) && defined(USE_MDNS)
network_setup_mdns(this->wifi_sta_ip_(), 0);
#endif
this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTED;
Expand Down
2 changes: 2 additions & 0 deletions esphome/const.py
Expand Up @@ -183,12 +183,14 @@
CONF_EFFECT = "effect"
CONF_EFFECTS = "effects"
CONF_ELSE = "else"
CONF_ENABLE_MDNS = "enable_mdns"
CONF_ENABLE_PIN = "enable_pin"
CONF_ENABLE_TIME = "enable_time"
CONF_ENERGY = "energy"
CONF_ENTITY_ID = "entity_id"
CONF_ESP8266_RESTORE_FROM_FLASH = "esp8266_restore_from_flash"
CONF_ESPHOME = "esphome"
CONF_ETHERNET = "ethernet"
CONF_EVENT = "event"
CONF_EXPIRE_AFTER = "expire_after"
CONF_EXTERNAL_VCC = "external_vcc"
Expand Down
5 changes: 3 additions & 2 deletions esphome/core.py
Expand Up @@ -16,6 +16,7 @@
CONF_COMMENT,
CONF_ESPHOME,
CONF_USE_ADDRESS,
CONF_ETHERNET,
CONF_WIFI,
)
from esphome.helpers import ensure_unique_string, is_hassio
Expand Down Expand Up @@ -580,8 +581,8 @@ def address(self) -> Optional[str]:
if "wifi" in self.config:
return self.config[CONF_WIFI][CONF_USE_ADDRESS]

if "ethernet" in self.config:
return self.config["ethernet"][CONF_USE_ADDRESS]
if CONF_ETHERNET in self.config:
return self.config[CONF_ETHERNET][CONF_USE_ADDRESS]

return None

Expand Down
9 changes: 7 additions & 2 deletions esphome/core/util.cpp
Expand Up @@ -16,12 +16,14 @@
#include "esphome/components/ethernet/ethernet_component.h"
#endif

#ifdef USE_MDNS
#ifdef ARDUINO_ARCH_ESP32
#include <ESPmDNS.h>
#endif
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266mDNS.h>
#endif
#endif

namespace esphome {

Expand All @@ -39,14 +41,15 @@ bool network_is_connected() {
return false;
}

#ifdef ARDUINO_ARCH_ESP8266
#if defined(ARDUINO_ARCH_ESP8266) && defined(USE_MDNS)
bool mdns_setup;
#endif

#ifndef WEBSERVER_PORT
static const uint8_t WEBSERVER_PORT = 80;
#endif

#ifdef USE_MDNS
#ifdef ARDUINO_ARCH_ESP8266
void network_setup_mdns(IPAddress address, int interface) {
// Latest arduino framework breaks mDNS for AP interface
Expand Down Expand Up @@ -80,8 +83,10 @@ void network_setup_mdns(IPAddress address, int interface) {
MDNS.addService("prometheus-http", "tcp", WEBSERVER_PORT);
#endif
}
#endif

void network_tick_mdns() {
#ifdef ARDUINO_ARCH_ESP8266
#if defined(ARDUINO_ARCH_ESP8266) && defined(USE_MDNS)
if (mdns_setup)
MDNS.update();
#endif
Expand Down
1 change: 1 addition & 0 deletions esphome/core/util.h
Expand Up @@ -17,6 +17,7 @@ void network_setup_mdns(IPAddress address, int interface);
#ifdef ARDUINO_ARCH_ESP32
void network_setup_mdns();
#endif

void network_tick_mdns();

} // namespace esphome
6 changes: 0 additions & 6 deletions esphome/core_config.py
Expand Up @@ -308,12 +308,6 @@ def to_code(config):
cg.add_build_flag("-fno-exceptions")

# Libraries
if CORE.is_esp32:
cg.add_library("ESPmDNS", None)
elif CORE.is_esp8266:
cg.add_library("ESP8266WiFi", None)
cg.add_library("ESP8266mDNS", None)

for lib in config[CONF_LIBRARIES]:
if "@" in lib:
name, vers = lib.split("@", 1)
Expand Down
1 change: 1 addition & 0 deletions tests/test1.yaml
Expand Up @@ -71,6 +71,7 @@ wifi:
password: ''
channel: 14
bssid: 'A1:63:95:47:D3:1D'
enable_mdns: true
manual_ip:
static_ip: 192.168.178.230
gateway: 192.168.178.1
Expand Down
1 change: 1 addition & 0 deletions tests/test2.yaml
Expand Up @@ -14,6 +14,7 @@ ethernet:
clk_mode: GPIO0_IN
phy_addr: 0
power_pin: GPIO25
enable_mdns: false
manual_ip:
static_ip: 192.168.178.56
gateway: 192.168.178.1
Expand Down
4 changes: 2 additions & 2 deletions tests/unit_tests/test_core.py
Expand Up @@ -503,13 +503,13 @@ def test_address__none(self, target):
def test_address__wifi(self, target):
target.config = {}
target.config[const.CONF_WIFI] = {const.CONF_USE_ADDRESS: "1.2.3.4"}
target.config["ethernet"] = {const.CONF_USE_ADDRESS: "4.3.2.1"}
target.config[const.CONF_ETHERNET] = {const.CONF_USE_ADDRESS: "4.3.2.1"}

assert target.address == "1.2.3.4"

def test_address__ethernet(self, target):
target.config = {}
target.config["ethernet"] = {const.CONF_USE_ADDRESS: "4.3.2.1"}
target.config[const.CONF_ETHERNET] = {const.CONF_USE_ADDRESS: "4.3.2.1"}

assert target.address == "4.3.2.1"

Expand Down

0 comments on commit 2225594

Please sign in to comment.