1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-03 18:42:23 +01:00

[ethernet] Add mac_address yaml configuration option (#10861)

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
Stephen Boyle
2025-09-30 08:59:08 -04:00
committed by GitHub
parent 0e623055df
commit a5ba6237cb
12 changed files with 21 additions and 1 deletions

View File

@@ -27,6 +27,7 @@ from esphome.const import (
CONF_GATEWAY, CONF_GATEWAY,
CONF_ID, CONF_ID,
CONF_INTERRUPT_PIN, CONF_INTERRUPT_PIN,
CONF_MAC_ADDRESS,
CONF_MANUAL_IP, CONF_MANUAL_IP,
CONF_MISO_PIN, CONF_MISO_PIN,
CONF_MODE, CONF_MODE,
@@ -197,6 +198,7 @@ BASE_SCHEMA = cv.Schema(
"This option has been removed. Please use the [disabled] option under the " "This option has been removed. Please use the [disabled] option under the "
"new mdns component instead." "new mdns component instead."
), ),
cv.Optional(CONF_MAC_ADDRESS): cv.mac_address,
} }
).extend(cv.COMPONENT_SCHEMA) ).extend(cv.COMPONENT_SCHEMA)
@@ -365,6 +367,9 @@ async def to_code(config):
if phy_define := _PHY_TYPE_TO_DEFINE.get(config[CONF_TYPE]): if phy_define := _PHY_TYPE_TO_DEFINE.get(config[CONF_TYPE]):
cg.add_define(phy_define) cg.add_define(phy_define)
if mac_address := config.get(CONF_MAC_ADDRESS):
cg.add(var.set_fixed_mac(mac_address.parts))
cg.add_define("USE_ETHERNET") cg.add_define("USE_ETHERNET")
# Disable WiFi when using Ethernet to save memory # Disable WiFi when using Ethernet to save memory

View File

@@ -253,7 +253,11 @@ void EthernetComponent::setup() {
// use ESP internal eth mac // use ESP internal eth mac
uint8_t mac_addr[6]; uint8_t mac_addr[6];
if (this->fixed_mac_.has_value()) {
memcpy(mac_addr, this->fixed_mac_->data(), 6);
} else {
esp_read_mac(mac_addr, ESP_MAC_ETH); esp_read_mac(mac_addr, ESP_MAC_ETH);
}
err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_S_MAC_ADDR, mac_addr); err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_S_MAC_ADDR, mac_addr);
ESPHL_ERROR_CHECK(err, "set mac address error"); ESPHL_ERROR_CHECK(err, "set mac address error");

View File

@@ -84,6 +84,7 @@ class EthernetComponent : public Component {
#endif #endif
void set_type(EthernetType type); void set_type(EthernetType type);
void set_manual_ip(const ManualIP &manual_ip); void set_manual_ip(const ManualIP &manual_ip);
void set_fixed_mac(const std::array<uint8_t, 6> &mac) { this->fixed_mac_ = mac; }
network::IPAddresses get_ip_addresses(); network::IPAddresses get_ip_addresses();
network::IPAddress get_dns_address(uint8_t num); network::IPAddress get_dns_address(uint8_t num);
@@ -155,6 +156,7 @@ class EthernetComponent : public Component {
esp_netif_t *eth_netif_{nullptr}; esp_netif_t *eth_netif_{nullptr};
esp_eth_handle_t eth_handle_; esp_eth_handle_t eth_handle_;
esp_eth_phy_t *phy_{nullptr}; esp_eth_phy_t *phy_{nullptr};
optional<std::array<uint8_t, 6>> fixed_mac_;
}; };
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"

View File

@@ -12,3 +12,4 @@ ethernet:
gateway: 192.168.178.1 gateway: 192.168.178.1
subnet: 255.255.255.0 subnet: 255.255.255.0
domain: .local domain: .local
mac_address: "02:AA:BB:CC:DD:01"