跳转到内容

射频桥组件

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 与 EFM8BB1OB38S003 固件之间的通信协议。 射频微控制器通过 UART 总线 连接到 ESP8266。UART 总线必须以与模块相同的速度配置,即 19200bps。

WARNING

如果您使用 Logger,请确保使用 baud_rate: 0 选项禁用 UART 日志记录。

Sonoff RF Bridge 433(版本 R1 或 R2 V1.0)
# 示例配置条目
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 触发器

使用此配置选项,您可以在桥收到代码时编写复杂的自动化。要使用代码,请使用 lambda 模板。 代码和相应的协议时序可在该 lambda 中通过名为 codesynchighlow 的变量使用。

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);'

在自动化中使用此动作发送标准 (0xA5) 射频代码。

on_...:
then:
- rf_bridge.send_code:
sync: 0x700
low: 0x800
high: 0x1000
code: 0xABC123

配置选项:

  • sync (必需, 整数, 可模板化):射频同步时序
  • low (必需, 整数, 可模板化):射频低电平时序
  • high (必需, 整数, 可模板化):射频高电平时序
  • code (必需, 整数, 可模板化):射频代码
  • id (可选, ID):如果您有多个桥或多个桥组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).send_code(0x700, 0x800, 0x1000, 0xABC123);

激活内部蜂鸣器发出蜂鸣声。

on_...:
then:
- rf_bridge.beep:
duration: 100

配置选项:

  • duration (必需, 整数, 可模板化):蜂鸣持续时间,以毫秒为单位。
  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).beep(100);

在自动化中使用此动作告诉射频桥学习新的协议时序。 带有新时序的代码将返回到 on_code_received 触发器

on_...:
then:
- rf_bridge.learn

配置选项:

  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).learn();

向板载射频芯片发送原始命令。OEM 射频固件只能原始发送标准信号(通常较短),对于其他信号(B0 发送),需要将射频芯片刷入 Portisch 或 Mightymos 固件。

这可用于在自动化中发送原始射频代码,主要用于不支持的协议。 如果您安装了 PortischMightymos 固件,可以借助 rf_bridge.start_bucket_sniffing 动作 获取这些原始代码。

on_...:
then:
- rf_bridge.send_raw: # 在 OEM 固件中
raw: 'AAA5070008001000ABC12355'
- rf_bridge.send_raw: # 在 Portisch 固件中
raw: 'AAB04C0408137702440111139B38192A192A1A1A19292A192A1A19292929292A1A1A1A1A192A19292A1A192A192A1A1A1A1A1A1A1A192A1A1A1A1A1A1A1A1A1A1A1A192A1929292A192A1A1929292955'

配置选项:

  • raw (必需, 字符串, 可模板化):射频原始字符串
  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).send_raw("AAA5070008001000ABC12355");

射频微控制器 (MCU) 可以刷入替代固件,允许监听和发送高级协议(如原始、0xB0、0xB1、0xA8),除了标准的接收/发送 (0xA4、0xA5)。 如果您已将辅助 MCU 刷入 Portisch 固件Mightymos 固件, ESPHome 能够接收可解码的额外协议,并激活支持的其他模式。以下触发器/动作仅适用于 Portisch 固件。 您可以在 Portisch Wiki 中查看可用命令和格式的列表。

类似于 on_code_received 触发器,此触发器在高级监听启动后接收代码。 要使用代码,请使用 lambda 模板,代码和相应的协议及长度可在该 lambda 中通过名为 codeprotocollength 的变量使用。

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;'

在自动化中使用此动作发送射频代码。

on_...:
then:
- rf_bridge.send_advanced_code:
length: 0x04
protocol: 0x01
code: "ABC123"

配置选项:

  • length (必需, 整数, 可模板化):代码加协议的长度
  • protocol (必需, 整数, 可模板化):射频协议
  • code (必需, 字符串, 可模板化):射频代码
  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).send_advanced_code({0x04, 0x01, "ABC123"});

告诉射频桥监听 Portisch 固件中定义的高级/额外协议。 带有长度和协议的解码代码将返回到 on_advanced_code_received 触发器

on_...:
then:
- rf_bridge.start_advanced_sniffing

配置选项:

  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).start_advanced_sniffing();

告诉射频桥停止监听 Portisch 固件中定义的高级/额外协议。

on_...:
then:
- rf_bridge.stop_advanced_sniffing

配置选项:

  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).stop_advanced_sniffing();

告诉射频桥转储原始监听数据。用于获取不支持协议的代码。 原始数据将在日志中可用,之后可用于 rf_bridge.send_raw 动作

NOTE

需要将 B1(接收)原始格式转换为 B0(发送)原始命令格式。 为此,您可以使用工具 B1 Converter

NOTE

Portisch 固件似乎存在溢出问题,短时间内存储桶监听会停止。 您应该重新调用该动作以重置并重新开始监听。此问题在 Mightymos 固件中已修复。

on_...:
then:
- rf_bridge.start_bucket_sniffing

配置选项:

  • id (可选, ID):如果您有多个组件,请手动指定射频桥的 ID。

NOTE

此动作也可以用 lambda 编写:

id(my_rf_bridge).start_bucket_sniffing();

适用于 PortischMightymos 固件

- rf_bridge.send_raw:
raw: 'AAFE55'

以下代码将帮助您完成配置,将代码作为事件发送到 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: 0xABC123

ESPHome 中的其他示例配置

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