RF 桥接器组件
RF Bridge 组件提供使用 RF 桥接设备(例如 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): 手动指定 RF 桥接器的 ID。
- uart_id (可选, ID): 手动指定桥接器组件使用的 UART hub 的 ID。
- on_code_received (可选, Automation): 收到码时执行的操作。参见
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)RF 码。
on_...: then: - rf_bridge.send_code: sync: 0x700 low: 0x800 high: 0x1000 code: 0xABC123配置选项:
- sync (必选, int, 可模板化): RF 同步时序
- low (必选, int, 可模板化): RF 低电平时序
- high (必选, int, 可模板化): RF 高电平时序
- code (必选, int, 可模板化): RF 码
- id (可选, ID): 如果你有多个桥接器或多个桥接器组件,请手动指定 RF 桥接器的 ID。
rf_bridge.beep 操作
Section titled “rf_bridge.beep 操作”激活内部蜂鸣器发出哔声。
on_...: then: - rf_bridge.beep: duration: 100配置选项:
rf_bridge.learn 操作
Section titled “rf_bridge.learn 操作”使用此操作在自动化中指示 RF 桥接器学习新的协议时序。
带有时序的新码将返回给 on_code_received 触发器。
on_...: then: - rf_bridge.learn配置选项:
- id (可选, ID): 如果你有多个组件,请手动指定 RF 桥接器的 ID。
rf_bridge.send_raw 操作
Section titled “rf_bridge.send_raw 操作”向板载无线电芯片发送一条原始命令。OEM RF 固件只能原始发送标准信号(通常较短);对于其他信号(B0 传输),需要用 Portisch 或 Mightymos 固件刷写 RF 芯片。
这可用于在自动化中发送原始 RF 码,主要用于不受支持的协议。
如果你安装了 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)可以刷入替代固件,除了标准接收/传输(0xA4,0xA5)之外,它还可以嗅探和传输 高级协议(例如 raw、0xB0、0xB1、0xA8)。 如果你已经用 Portisch 固件 或 Mightymos 固件 刷写了次要 MCU, 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 操作”使用此操作在自动化中发送一个 RF 码。
on_...: then: - rf_bridge.send_advanced_code: length: 0x04 protocol: 0x01 code: "ABC123"配置选项:
- length (必选, int, 可模板化): 码加上协议的长度
- protocol (必选, int, 可模板化): RF 协议
- code (必选, string, 可模板化): RF 码
- id (可选, ID): 如果你有多个组件,请手动指定 RF 桥接器的 ID。
rf_bridge.start_advanced_sniffing 操作
Section titled “rf_bridge.start_advanced_sniffing 操作”指示 RF 桥接器监听 portisch 固件中定义的高级/额外协议。
带长度和协议的解码码将返回给 on_advanced_code_received 触发器。
on_...: then: - rf_bridge.start_advanced_sniffing配置选项:
- id (可选, ID): 如果你有多个组件,请手动指定 RF 桥接器的 ID。
rf_bridge.stop_advanced_sniffing 操作
Section titled “rf_bridge.stop_advanced_sniffing 操作”指示 RF 桥接器停止监听 portisch 固件中定义的高级/额外协议。
on_...: then: - rf_bridge.stop_advanced_sniffing配置选项:
- id (可选, ID): 如果你有多个组件,请手动指定 RF 桥接器的 ID。
rf_bridge.start_bucket_sniffing 操作
Section titled “rf_bridge.start_bucket_sniffing 操作”指示 RF 桥接器转储原始嗅探数据。对于获取不受支持协议的码很有用。
原始数据将在日志中可用,之后可以与 rf_bridge.send_raw 操作 一起使用。
NOTE
应将 B1(接收)原始格式转换为 B0(发送)原始命令格式。 为此,你可以使用 B1 转换器 工具。
NOTE
Portisch 固件似乎存在溢出问题,过一段时间后,桶嗅探就会停止。 你应该重新调用该操作以重置并重新开始嗅探。此问题在 Mightymos 固件中已修复。
on_...: then: - rf_bridge.start_bucket_sniffing配置选项:
- id (可选, ID): 如果你有多个组件,请手动指定 RF 桥接器的 ID。
适用于 Portisch 或 Mightymos 固件
- rf_bridge.send_raw: raw: 'AAFE55'Home Assistant 入门
Section titled “Home Assistant 入门”以下代码将让你快速上手,把向 Home Assistant 发送的码作为事件,并设置一个服务,以便你可以使用 RF 桥接器发送码。
uart: tx_pin: 1 rx_pin: 3 baud_rate: 19200
logger: baud_rate: 0
api: actions: # 在 HA 中创建操作 # 使用整数值发送标准 RF - 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;'
# 发送原始 RF - 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: Advanced sniffing start on_press: then: - rf_bridge.start_advanced_sniffing
- platform: template name: Advanced sniffing stop on_press: then: - rf_bridge.stop_advanced_sniffing
- platform: template name: Bucket sniffing start on_press: then: - rf_bridge.start_bucket_sniffing
- platform: template name: Beep on_press: then: - rf_bridge.beep: duration: 100
- platform: template name: Restart Radio id: mcu_reset on_press: then: - rf_bridge.send_raw: raw: 'AAFE55'
switch: - platform: template name: "example LED strip" 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
# 使用 bit-bucket 发送的窗户遮光帘示例。# 仅在 Portisch/mightymos 固件上有效。cover: - platform: time_based name: "Window blinds" device_class: blind open_action: - rf_bridge.send_raw: raw: 'AAB04C0408137702440111139B38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A1A1A1A192A1929292A192A1A1929292955' open_duration: 26.26s close_action: - rf_bridge.send_raw: raw: 'AAB04C0408137E0249010E139C38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A192A1A1A1A192929292A19292929292955' close_duration: 25.99s stop_action: - rf_bridge.send_raw: raw: 'AAB04C0408137502490111139F38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A1A192A1A1A1929292A1929292929292955'
has_built_in_endstop: true assumed_state: false