本帖最后由 bugensui 于 2025-5-8 23:53 编辑
之前一直在研究2个esp设备可以在脱离homeassist(或者说ha系统出问题的时候)互控或者说直控,使用场景:我目前想到的最实用的可能就2个吧!
1,卧室的双控开关,一般进卧室有个开关(我们暂定他是主开关),卧室床头柜这里有另外1个开关(我们暂定是辅开关),假设主开关是esphome的,辅开关也可以用无线开关代替(很多协议:比如zigbee,蓝牙等),缺点:无线开关一般都是电池,要换电池,并且需要接入ha。这样双控,可能会有延迟。如果辅开关是装esphome的,副开关只需要接零火线即可,可以不用接入ha,双控开关灯效果跟有线一样,没有延迟,不用更换电池,并且辅开关可以加装其他传感器:比如温湿度,做蓝牙网关等,我用的是sonoff实体开关改装模块。主开关是包含灯控线,辅开关不包括灯控线只有零火线。
2,人来开灯人走关灯脱离ha,前提是人体存在传感器和灯(或者开关模块)都是esphome的,这里灯(或者开关模块)是主设备,人在传感器是辅设备。
使用场景可能不适合所有人,但是大家可以用这个方法也可以控制其他的一些场景,当然可能大家会说ha很稳定,很少宕机,没有必要,但是这种方法是给有这方面需要的,只是一种思路,并不特指这2种场景。
实现方法用的是esphome的udp组件(可能是esphome 2024年7月版后的才支持这个组件),详细情况可以去官方文档了解。2个esp设备通过udp通信。此组件的目的是允许 ESPHome 节点通过 IP 网络直接相互通信。它允许传感器和二进制传感器的状态通过 UDP 数据包广播到同一 LAN 上的其他节点,或广播到特定的 IP 地址(这些 IP 地址可能位于远程但可访问的网络中)。 节点可以是广播传感器数据的提供者,也可以是接收来自一个或多个提供者的传感器数据的消费者。一个节点可以同时是提供者和消费者。
以下是2个设备的主要udp代码(esphome),通过辅开关来控制主开关上的灯(类似无线开关的效果)
主设备
udp:
output:
# the 3 lines below control the main relay
- platform: gpio
pin: GPIO4
id: main_light_relay
light:
- platform: binary
name: "shufangdeng"
output: main_light_relay
id: light_id
binary_sensor:
- platform: gpio
name: relay_toggle
pin:
number: GPIO12
mode:
input: true
pullup: true
id: gpio_light_id
on_press:
then:
- light.toggle:
id: light_id
on_release:
then:
- light.toggle:
id: light_id
- platform: udp
provider: esp32kf2
id: relay2_sensor
on_press:
light.toggle: light_id
on_release:
light.toggle: light_id
复制代码
辅设备(理解成1个按钮传感器的作用,把状态通过udp传递到主开关上,好做条件触发)
esphome:
name: esp32kf2
friendly_name: esp32kf2
udp:
binary_sensors:
- relay2_sensor
binary_sensor:
- platform: gpio
name: relay_toggle
pin:
number: GPIO25
mode:
input: true
pullup: true
id: relay2_sensor
复制代码