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:
@@ -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
|
||||||
|
@@ -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");
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
Reference in New Issue
Block a user