121 lines
4.6 KiB
YAML
121 lines
4.6 KiB
YAML
substitutions:
|
|
##############################################
|
|
# SPECIFIC DEVICE VARIABLE SUBSTITUTIONS
|
|
# If NOT using a secrets file, just replace these with the passwords etc (in quotes)
|
|
#############################################
|
|
wifi_ssid: !secret ha_wifi_ssid
|
|
wifi_password: !secret ha_wifi_password
|
|
fallback_ap_password: !secret fallback_ap_password
|
|
|
|
# Enables faster network connections, with last connected SSID being connected to and no full scan for SSID being undertaken
|
|
wifi_fast_connect: "false"
|
|
|
|
# Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs)
|
|
dns_domain: ".local"
|
|
|
|
# Automatically add the mac address to the name
|
|
# eg so you can use a single firmware for all devices
|
|
add_mac_suffix: "false"
|
|
|
|
# Enable or disable the use of IPv6 networking on the device
|
|
ipv6_enable: "false"
|
|
|
|
# Add these if we are giving it a static ip, or remove them in the Wifi section
|
|
static_ip_subnet: !secret ha_wifi_subnet
|
|
static_ip_gateway: !secret ha_wifi_gateway
|
|
static_ip_dns1: !secret ha_wifi_dns1
|
|
static_ip_dns2: !secret ha_wifi_dns2
|
|
|
|
# Network reconnect every x hours to ensure best access point
|
|
base_interval_hours: "6" # Base interval in hours
|
|
random_offset_max_minutes: "59" # Max random offset in minutes
|
|
|
|
#############################################
|
|
# Common Wifi Settings
|
|
# https://esphome.io/components/wifi.html
|
|
#
|
|
# Power Save mode (can reduce wifi reliability)
|
|
# NONE (least power saving, Default for ESP8266)
|
|
# LIGHT (Default for ESP32)
|
|
# HIGH (most power saving)
|
|
#############################################
|
|
wifi:
|
|
ssid: ${wifi_ssid}
|
|
password: ${wifi_password}
|
|
#enable_rrm: true # (ESP32 only) enable 802.11k Radio Resource Management
|
|
#enable_btm: true # (ESP32 only) enable 802.11v BSS Transition Management
|
|
#power_save_mode: LIGHT # https://esphome.io/components/wifi.html#wifi-power-save-mode
|
|
manual_ip: # optional static IP address
|
|
static_ip: ${local_static_ip_address}
|
|
gateway: ${static_ip_gateway}
|
|
subnet: ${static_ip_subnet}
|
|
dns1: ${static_ip_dns1}
|
|
dns2: ${static_ip_dns2}
|
|
ap: # Details for fallback hotspot in case wifi connection fails https://esphome.io/components/wifi.html#access-point-mode
|
|
ssid: ${local_device_name} AP
|
|
password: ${fallback_ap_password}
|
|
ap_timeout: 10min # Time until it brings up fallback AP. default is 1min
|
|
# Allow rapid re-connection to previously connect WiFi SSID, skipping scan of all SSID
|
|
fast_connect: "${wifi_fast_connect}"
|
|
# Define dns domain / suffix to add to hostname
|
|
domain: "${dns_domain}"
|
|
|
|
#captive_portal: # extra fallback mechanism for when connecting if the configured WiFi fails
|
|
|
|
#############################################
|
|
# Enable Over the Air Update Capability
|
|
# https://esphome.io/components/ota.html?highlight=ota
|
|
#############################################
|
|
ota:
|
|
- platform: esphome
|
|
password: ${local_ota_pass}
|
|
version: 2
|
|
|
|
#############################################
|
|
# Safe Mode
|
|
# Safe mode will detect boot loops
|
|
# https://esphome.io/components/safe_mode
|
|
#############################################
|
|
safe_mode:
|
|
|
|
#############################################
|
|
# Network
|
|
# global configuration for all types of networks
|
|
# https://esphome.io/components/network.html
|
|
#############################################
|
|
network:
|
|
enable_ipv6: ${ipv6_enable}
|
|
|
|
#############################################
|
|
# Interval
|
|
# Restart Networking every x hours + rand mins
|
|
# This ensure that the device is connected to the best AP
|
|
#############################################
|
|
script:
|
|
- id: random_reconnect
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
// Compute total delay: base hours + random offset minutes
|
|
uint32_t extra;
|
|
#if defined(ESP32)
|
|
// ESP32 (both Arduino & IDF builds) uses esp_random()
|
|
extra = esp_random() % (${random_offset_max_minutes} + 1);
|
|
#elif defined(ESP8266)
|
|
// ESP8266 Arduino core
|
|
extra = os_random() % (${random_offset_max_minutes} + 1);
|
|
#else
|
|
// Fallback to esp_random() on other platforms
|
|
extra = esp_random() % (${random_offset_max_minutes} + 1);
|
|
#endif
|
|
uint32_t total_s = ${base_interval_hours} * 3600 + extra * 60;
|
|
ESP_LOGI("random_reconnect", "Next reconnect in %u seconds", total_s);
|
|
// Delay inside lambda (blocks script execution but OK for reconnect timing)
|
|
delay(total_s * 1000);
|
|
- logger.log: "network_check: performing reconnect"
|
|
- wifi.disable: {}
|
|
- delay: 1s
|
|
- wifi.enable: {}
|
|
- script.execute: random_reconnect
|
|
|