本帖最后由 inevitab 于 2024-3-27 20:37 编辑
一、注意事项
1、本方法不需要esp8266有什么附加硬件,只需要esp8266最小系统板,能通电运行就可以。
2、不需要home assistant,不需要网关、中控、服务器
3、本方法需要你有一个属于自己的一级域名,你可能要花钱购买一个域名,所以标题里特意说明“不免费”
如果你不知道哪里可以买到便宜的域名,可以考虑到这里 www.namecheap.com 购买 ".store" 后缀的域名,首年0.98美元,续费1.78美元。
二、我们使用 dns.he.net 的api来更改域名解析,用dns.he.net的原因是它的api极其简单,从而可以减少esp8266的代码量。
1、到 dns.he.net 注册一个账号。
2、 到你的域名供应商里将你的域名原来的 nameserver 全部删除,添加 ns1.he.net ns2.he.net ns3.he.net ns4.he.net ns5.he.net 这5个nameservers (注意,会导致你的原来的dns解析记录全部丢失!)。
3、登录 dns.he.net ,添加你的域名:
4、添加你要用来实现ddns的域名,可以直接是上面那个域名,也可以是一个子域名,我喜欢用子域名:
“IPv4 Address”不用管,点击选中“Enable entry for dynamic dns”后,“IPv4 Address”会自动变成 127.0.0.1。
5、生成 api key 并记录下来:
三、esphome代码:
esphome:
name: esphome-diy-01
friendly_name: ESPHome_Diy_01
esp8266:
board: esp01_1m
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
encryption:
key: "改成你自己的"
ota:
password: "改成你自己的"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esphome-Diy-01 Fallback Hotspot"
password: "改成你自己的"
on_connect:
then:
- http_request.get:
url: ${dns_api_url}
verify_ssl: false
# 让设备开启网页功能
web_server:
port: 80
captive_portal:
substitutions:
ddns_domain: "改成你在步骤二(4)里添加的ddns域名"
he_api_key: "改成你在步骤二(5)里获取到的api key"
dns_api_url: "https://${ddns_domain}:${he_api_key}@dyn.dns.he.net/nic/update?hostname=${ddns_domain}"
http_request:
timeout: 20s
interval:
- interval: 5min
then:
- http_request.get:
url: ${dns_api_url}
verify_ssl: false
代码实现esp8266开机并连上wifi后更新一次ddns域名,然后每隔5分钟(不要太频繁,免得超过api的限制)更新一次。
四、验证:esp8266重新开机,到域名dns列表里查看ip是否由原来的 127.0.0.1 变成其他IP,如果是的话,就说明成功了。
|