射频桥组件
RF Bridge 组件提供了使用射频桥设备(例如 Sonoff RF Bridge)上的射频微控制器发送和接收 433MHz 信号(如射频遥控器/钥匙扣)的能力。
- 黑色 Sonoff RF Bridge(R1、R2 V1.0)配有 ESP8266(用于 WIFI/ESPHome)和嵌入式 EFM8BB1 微控制器(433 MHz)。
- 白色 Sonoff RF Bridge(R2 V2.0)配有 ESP8266 和嵌入式 OB38S003 微控制器(433 MHz)。
此组件实现了 ESP8266 与 EFM8BB1 或 OB38S003 固件之间的通信协议。
射频微控制器通过 UART 总线 连接到 ESP8266。UART 总线必须以与模块相同的速度配置,即 19200bps。
WARNING
如果您使用 Logger,请确保使用 baud_rate: 0 选项禁用 UART 日志记录。
# 示例配置条目rf_bridge: on_code_received: - homeassistant.event: event: esphome.rf_code_received data: sync: !lambda 'char buf[5]; return format_hex_to(buf, data.sync);' low: !lambda 'char buf[5]; return format_hex_to(buf, data.low);' high: !lambda 'char buf[5]; return format_hex_to(buf, data.high);' code: !lambda 'char buf[9]; return format_hex_to(buf, data.code);'- id (可选, ID):手动指定射频桥的 ID。
- uart_id (可选, ID):手动指定桥组件使用的 UART 集线器的 ID。
- on_code_received (可选, 自动化):收到代码时要执行的动作。参见
on_code_received触发器。
on_code_received 触发器
Section titled “on_code_received 触发器”使用此配置选项,您可以在桥收到代码时编写复杂的自动化。要使用代码,请使用 lambda 模板。
代码和相应的协议时序可在该 lambda 中通过名为 code、sync、high 和 low 的变量使用。
on_code_received: - homeassistant.event: event: esphome.rf_code_received data: sync: !lambda 'char buf[5]; return format_hex_to(buf, data.sync);' low: !lambda 'char buf[5]; return format_hex_to(buf, data.low);' high: !lambda 'char buf[5]; return format_hex_to(buf, data.high);' code: !lambda 'char buf[9]; return format_hex_to(buf, data.code);'rf_bridge.send_code 动作
Section titled “rf_bridge.send_code 动作”在自动化中使用此动作发送标准 (0xA5) 射频代码。
on_...: then: - rf_bridge.send_code: sync: 0x700 low: 0x800 high: 0x1000 code: 0xABC123配置选项:
- sync (必需, 整数, 可模板化):射频同步时序
- low (必需, 整数, 可模板化):射频低电平时序
- high (必需, 整数, 可模板化):射频高电平时序
- code (必需, 整数, 可模板化):射频代码
- id (可选, ID):如果您有多个桥或多个桥组件,请手动指定射频桥的 ID。
rf_bridge.beep 动作
Section titled “rf_bridge.beep 动作”激活内部蜂鸣器发出蜂鸣声。
on_...: then: - rf_bridge.beep: duration: 100配置选项:
rf_bridge.learn 动作
Section titled “rf_bridge.learn 动作”在自动化中使用此动作告诉射频桥学习新的协议时序。
带有新时序的代码将返回到 on_code_received 触发器
on_...: then: - rf_bridge.learn配置选项:
- id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。
rf_bridge.send_raw 动作
Section titled “rf_bridge.send_raw 动作”向板载射频芯片发送原始命令。OEM 射频固件只能原始发送标准信号(通常较短),对于其他信号(B0 发送),需要将射频芯片刷入 Portisch 或 Mightymos 固件。
这可用于在自动化中发送原始射频代码,主要用于不支持的协议。
如果您安装了 Portisch 或 Mightymos 固件,可以借助 rf_bridge.start_bucket_sniffing 动作 获取这些原始代码。
on_...: then: - rf_bridge.send_raw: # 在 OEM 固件中 raw: 'AAA5070008001000ABC12355' - rf_bridge.send_raw: # 在 Portisch 固件中 raw: 'AAB04C0408137702440111139B38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A1A1A1A192A1929292A192A1A1929292955'配置选项:
Portisch 固件
Section titled “Portisch 固件”射频微控制器 (MCU) 可以刷入替代固件,允许监听和发送高级协议(如原始、0xB0、0xB1、0xA8),除了标准的接收/发送 (0xA4、0xA5)。 如果您已将辅助 MCU 刷入 Portisch 固件 或 Mightymos 固件, ESPHome 能够接收可解码的额外协议,并激活支持的其他模式。以下触发器/动作仅适用于 Portisch 固件。 您可以在 Portisch Wiki 中查看可用命令和格式的列表。
on_advanced_code_received 触发器
Section titled “on_advanced_code_received 触发器”类似于 on_code_received 触发器,此触发器在高级监听启动后接收代码。
要使用代码,请使用 lambda 模板,代码和相应的协议及长度可在该 lambda 中通过名为 code、protocol 和 length 的变量使用。
on_advanced_code_received: - homeassistant.event: event: esphome.rf_advanced_code_received data: length: !lambda 'char buf[3]; return format_hex_to(buf, data.length);' protocol: !lambda 'char buf[3]; return format_hex_to(buf, data.protocol);' code: !lambda 'return data.code;'rf_bridge.send_advanced_code 动作
Section titled “rf_bridge.send_advanced_code 动作”在自动化中使用此动作发送射频代码。
on_...: then: - rf_bridge.send_advanced_code: length: 0x04 protocol: 0x01 code: "ABC123"配置选项:
- length (必需, 整数, 可模板化):代码加协议的长度
- protocol (必需, 整数, 可模板化):射频协议
- code (必需, 字符串, 可模板化):射频代码
- id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。
rf_bridge.start_advanced_sniffing 动作
Section titled “rf_bridge.start_advanced_sniffing 动作”告诉射频桥监听 Portisch 固件中定义的高级/额外协议。
带有长度和协议的解码代码将返回到 on_advanced_code_received 触发器
on_...: then: - rf_bridge.start_advanced_sniffing配置选项:
- id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。
rf_bridge.stop_advanced_sniffing 动作
Section titled “rf_bridge.stop_advanced_sniffing 动作”告诉射频桥停止监听 Portisch 固件中定义的高级/额外协议。
on_...: then: - rf_bridge.stop_advanced_sniffing配置选项:
- id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。
rf_bridge.start_bucket_sniffing 动作
Section titled “rf_bridge.start_bucket_sniffing 动作”告诉射频桥转储原始监听数据。用于获取不支持协议的代码。
原始数据将在日志中可用,之后可用于 rf_bridge.send_raw 动作。
NOTE
需要将 B1(接收)原始格式转换为 B0(发送)原始命令格式。 为此,您可以使用工具 B1 Converter
NOTE
Portisch 固件似乎存在溢出问题,短时间内存储桶监听会停止。 您应该重新调用该动作以重置并重新开始监听。此问题在 Mightymos 固件中已修复。
on_...: then: - rf_bridge.start_bucket_sniffing配置选项:
- id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。
适用于 Portisch 或 Mightymos 固件
- rf_bridge.send_raw: raw: 'AAFE55'Home Assistant 入门
Section titled “Home Assistant 入门”以下代码将帮助您完成配置,将代码作为事件发送到 Home Assistant,并设置服务以便您可以使用射频桥发送代码。
uart: tx_pin: 1 rx_pin: 3 baud_rate: 19200
logger: baud_rate: 0
api: actions: # 在 HA 中创建动作 # 使用整数值发送标准射频 - action: send_rf_code variables: sync: int low: int high: int code: int then: - rf_bridge.send_code: sync: !lambda 'return sync;' low: !lambda 'return low;' high: !lambda 'return high;' code: !lambda 'return code;'
# 发送原始射频 - action: send_rf_code_raw variables: raw: string then: - rf_bridge.send_raw: raw: !lambda 'return raw;'
- action: learn then: - rf_bridge.learn
rf_bridge: on_code_received: # 所有固件,可根据需要报告为整数、十六进制或两者。 then: - homeassistant.event: event: esphome.rf_code_received data: sync: !lambda 'char buf[5]; return format_hex_to(buf, data.sync);' low: !lambda 'char buf[5]; return format_hex_to(buf, data.low);' high: !lambda 'char buf[5]; return format_hex_to(buf, data.high);' code: !lambda 'char buf[9]; return format_hex_to(buf, data.code);'
- homeassistant.event: event: esphome.rf_code_received data: sync: !lambda 'return data.sync;' low: !lambda 'return data.low;' high: !lambda 'return data.high;' code: !lambda 'return data.code;'
on_advanced_code_received: # 仅适用于 Portisch 或 mightymos 固件 then: - homeassistant.event: event: esphome.rf_advanced_code_received data: length: !lambda 'char buf[3]; return format_hex_to(buf, data.length);' protocol: !lambda 'char buf[3]; return format_hex_to(buf, data.protocol);' code: !lambda 'return data.code;'现在您最新收到的代码将在事件中。
要从 Home Assistant 触发自动化,您可以使用以下代码调用服务/动作:
automation: # ... action: - action: esphome.rf_bridge_send_rf_code data: sync: 0x700 low: 0x800 high: 0x1000 code: 0xABC123ESPHome 中的其他示例配置
button: - platform: template name: 高级监听启动 on_press: then: - rf_bridge.start_advanced_sniffing
- platform: template name: 高级监听停止 on_press: then: - rf_bridge.stop_advanced_sniffing
- platform: template name: 存储桶监听启动 on_press: then: - rf_bridge.start_bucket_sniffing
- platform: template name: 蜂鸣 on_press: then: - rf_bridge.beep: duration: 100
- platform: template name: 重启射频 id: mcu_reset on_press: then: - rf_bridge.send_raw: raw: 'AAFE55'
switch: - platform: template name: "示例 LED 灯带" optimistic: true turn_on_action: - rf_bridge.send_code: sync: 0x2F4A low: 0x0166 high: 0x0483 code: 0x00C301 turn_off_action: - rf_bridge.send_code: sync: 0x2F1A low: 0x0184 high: 0x048C code: 0x00C303
# 使用 Bitbucket 发送的示例窗帘。# 仅适用于 Portisch/mightymos 固件。cover: - platform: time_based name: "窗帘" device_class: blind open_action: - rf_bridge.send_raw: raw: 'AAB04C0408137702440111139B38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A1A1A1A192A1929292A192A1A1929292955' open_duration: 26.26s close_action: - rf_bridge.send_raw: raw: 'AAB04C0408137E0249010E139C38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A192A1A1A1A192929292A19292929292955' close_duration: 25.99s stop_action: - rf_bridge.send_raw: raw: 'AAB04C0408137502490111139F38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A1A192A1A1A1929292A1929292929292955'
has_built_in_endstop: true assumed_state: false