跳转到内容

遥控接收器

remote_receiver 组件让您可以接收和解码各种常见的遥控信号,例如红外或 433 MHz 射频 (RF) 信号。

该组件分为两部分:

  • 遥控接收器”集线器”,定义了引脚和一些附加设置,以及…
  • 单独的遥控接收器二进制传感器,当收到各自的信号时会激活。

参见 设置红外设备 设置射频设备 了解详情。

# 示例配置条目
remote_receiver:
pin: GPIOXX
dump: all

多个遥控接收器可以在 remote_receiver 中以字典定义列表的形式配置。

  • pin (必需, 引脚):接收遥控信号的引脚。

  • dump (可选, 列表):解码并在日志中转储这些遥控代码(在 log.level=DEBUG 时)。设置为 all 可转储所有可用的编解码器:

    • abbwelcome:解码并转储 ABB-Welcome 代码。消息通过铜线发送。详情请参见发射器描述

    • aeha:解码并转储 AEHA 红外代码。

    • beo4:解码并转储 B&O Beo4 红外代码。

    • byronsx:解码并转储 Byron SX 门铃射频代码。

    • canalsat:解码并转储 CanalSat 红外代码。

    • canalsatld:解码并转储 CanalSatLD 红外代码。

    • coolix:解码并转储 Coolix 红外代码。

    • dish:解码并转储 Dish 红外代码。

    • dooya:解码并转储 Dooya 射频代码。

    • drayton:解码并转储 Drayton Digistat 射频代码。

    • dyson:解码并转堆 Dyson Cool AM7 塔扇代码。

    • jvc:解码并转储 JVC 红外代码。

    • gobox:解码并转储 Go-Box 红外代码。

    • keeloq:解码并转储 KeeLoq 射频代码。

    • haier:解码并转储海尔红外代码。

    • lg:解码并转储 LG 红外代码。

    • magiquest:解码并转储 MagiQuest 魔杖红外代码。

    • midea:解码并转储美的红外代码。

    • nec:解码并转储 NEC 红外代码。

    • nexa:解码并转储 Nexa (射频) 代码。

    • panasonic:解码并转储松下红外代码。

    • pioneer:解码并转储先锋红外代码。

    • pronto:以 Pronto 格式打印遥控代码。用于使用任意协议。

    • raw:以原始格式打印所有遥控代码。也用于使用任意协议。

    • rc5:解码并转储 RC5 红外代码。

    • rc6:解码并转储 RC6 红外代码。

    • rc_switch:解码并转储 RCSwitch 射频代码。

    • roomba:解码并转储 Roomba 红外代码。

    • samsung:解码并转储三星红外代码。

    • samsung36:解码并转储 Samsung36 红外代码。

    • symphony:解码并转储 Symphony 红外代码。

    • sony:解码并转储索尼红外代码。

    • toshiba_ac:解码并转堆东芝空调红外代码。

    • mirage:解码并转储 Mirage 红外代码。

    • toto:解码并转储 Toto 红外代码。

  • tolerance (可选, 整数, 时间 或映射):遥控信号长度在解码过程中可以偏离的百分比或时间。默认为 25%

    • type (必需, 枚举):设置容差类型。可以是 percentagetime
    • value (必需, 整数或 时间):百分比或时间值。允许的范围是 0100%04294967295us
  • buffer_size (可选, 整数):用于存储遥控代码的内部缓冲区大小。在 ESP32 上默认为 10kB,在 ESP8266 上默认为 1kB

  • filter (可选, 时间):过滤任何短于此时间的脉冲。用于去除噪声信号中的毛刺。允许的范围是 04294967295us。默认为 50us

  • idle (可选, 时间):信号应保持稳定/不变以被视为完成的时间量。默认为 10ms。允许的最大值是:

    • ESP32ESP32-S2 变体上为 65536us
    • 其他带有 RMT 硬件的 ESP32 变体上为 32767us
    • 所有其他平台(包括使用软件实现的 ESP32-C2 和 ESP32-C61)上为 4294967295us

    注意:上面列出的 ESP32 RMT 值假设使用默认的 clock_resolution。如果使用不同的 clock_resolution,这些值将按 1000000 / clock_resolution 进行缩放。

  • id (可选, ID):手动指定用于代码生成的 ID。当单个设备上配置了多个接收器时很有用。

NOTE

以下选项仅适用于带有 RMT 硬件的 ESP32 变体。它们不适用于 ESP32-C2 和 ESP32-C61,这两个型号使用软件实现。

  • rmt_symbols (可选, 整数):当启用 use_dma 时,这设置了驱动程序内部 DMA 缓冲区的大小。当禁用 DMA 时,它指定了分配给组件的 RMT 内存量。RMT 内存在所有组件之间共享,应以块大小的倍数进行分配。在 ESP32ESP32-S2 变体上,RMT 内存在 RX 和 TX 组件之间共享。在其他变体上,RX 和 TX 有专用的 RMT 内存。
ESP32 变体可用内存块大小
ESP32512 符号64 符号
ESP32-C396 符号48 符号
ESP32-C596 符号48 符号
ESP32-C696 符号48 符号
ESP32-H296 符号48 符号
ESP32-P4192 符号48 符号
ESP32-S2256 符号64 符号
ESP32-S3192 符号48 符号
  • receive_symbols (可选, 整数):最大接收长度(以符号为单位)。在某些变体上,最大接收长度受限于 rmt_symbols

  • filter_symbols (可选, 整数):过滤任何长度小于 filter_symbols 符号的接收数据。用于过滤掉短促的噪声脉冲。

  • clock_resolution (可选, 整数):RMT 外设使用的时钟分辨率,单位为 Hz。默认为 1000000

  • use_dma (可选, 布尔值):在支持 DMA 的变体上启用 DMA。如果启用,rmt_symbols 控制 DMA 缓冲区大小,可以设置为较大的值。

在微控制器将接收调制信号的罕见硬件配置中,RMT 外设支持信号解调。如果您不确定,您可能不需要这个。例如,红外遥控信号通常在到达微控制器之前由红外接收器模块 (IRM) 进行解调。

要启用信号解调,请配置信号载波频率和占空比:

  • carrier_duty_percent (可选, 整数):RMT 外设中信号解调的载波占空比,单位为 Hz。默认为 100

  • carrier_frequency (可选, 整数):RMT 外设中信号解调的载波频率,单位为 Hz。默认为 0Hz(禁用载波解调)。

NOTE

转储的 raw 代码是脉冲宽度序列(以微秒为单位的持续时间),正值表示通脉冲(标记),负值表示断脉冲(空格)。通常您可以直接将其复制到配置或自动化中以供稍后使用。

# 解码信号自动化示例
remote_receiver:
...
on_samsung:
then:
- if:
condition:
or:
- lambda: 'return (x.data == 0xE0E0E01F);' # VOL+ 新型号
- lambda: 'return (x.data == 0xE0E0E01F0);' # VOL+ 旧型号
then:
- ...

remote_receiver 二进制传感器让您可以跟踪遥控器上的按钮何时被按下。

每次收到预定义的信号时,二进制传感器会短暂地变为 ON,然后立即变为 OFF。

NOTE

对于红外遥控二进制传感器:如果您使用二进制传感器来跟踪红外遥控按钮按下,并且遇到快速按钮按下无法被检测到的问题(例如,快速的 ON→OFF 转换被错过),请考虑在您的 API 配置中设置 batch_delay: 0ms。这将立即发送状态更改而不是批量发送,确保快速转换被保留。但是,这会增加网络流量,应仅在必要时使用。

对于新项目,考虑使用带有上述 on_* 触发器的自动化而不是二进制传感器,因为它们更适合处理瞬时按钮按下事件。

# 示例配置条目
binary_sensor:
- platform: remote_receiver
name: "松下遥控输入"
panasonic:
address: 0x4004
command: 0x100BCBD
# 使用 batch_delay: 0 处理快速按钮按下的示例
api:
batch_delay: 0ms # 立即发送状态更改
remote_receiver:
pin: GPIOXX
dump: all
binary_sensor:
- platform: remote_receiver
name: "电视遥控电源"
nec:
address: 0x1234
command: 0x5678
  • receiver_id (可选, ID):用于接收遥控代码的遥控接收器。如果配置了多个接收器则为必需。

  • 来自 二进制传感器 的所有其他选项。

遥控代码选择(必须包含以下其中之一):

  • abbwelcome:在解码到具有给定数据的 ABB-Welcome 代码时触发,详情请参见发射器描述

    • source_address (必需, 整数):要触发的源地址。

    • destination_address (必需, 整数):要触发的目标地址。

    • three_byte_address (可选, 布尔值):源地址和目标地址的长度。false 表示两个字节,true 表示三个字节。默认为 false

    • retransmission (可选, 布尔值):如果消息被重传则为 true。默认为 false

    • message_type (必需, 整数):要触发的消息类型。

    • message_id (可选, 整数):要触发的随机消息 ID,详情请参见转储输出。默认为任意 ID。

    • data (可选, 0-7 字节列表):要监听的代码。通常您只需要直接从转储输出中复制此内容。默认为 []

  • aeha:在解码到具有给定数据的 AEHA 遥控代码时触发。

    • address (必需, 整数):要触发的地址,详情请参见转储输出。
    • data (必需, 3-35 字节列表):要监听的代码,详情请参见发射器描述。通常您只需要直接从转储输出中复制此内容。
  • beo4:在解码到具有给定数据的 B&O Beo4 红外遥控代码时触发。

    • source (必需, 整数):要触发的 8 位源,例如 0x00=视频, 0x01=音频,…,详情请参见转储输出。
    • command (*必需, 整数):要监听的 8 位命令,例如 0x00=数字0, 0x0C=待机,…,详情请参见转储输出。
  • byronsx:在解码到具有给定数据的 Byron SX 门铃射频遥控代码时触发。

    • address (必需, 整数):要触发的 8 位 ID 代码,详情请参见转储输出。
    • command (可选, 整数):要监听的 4 位命令。如果省略,将匹配任何命令。
  • canalsat:在解码到具有给定数据的 CanalSat 遥控代码时触发。

    • device (必需, 整数):要触发的设备,详情请参见转储输出。

    • address (可选, 整数):要触发的地址(或子设备),详情请参见转储输出。 默认为 0

    • command (必需, 整数):要监听的命令。

  • canalsatld:在解码到具有给定数据的 CanalSatLD 遥控代码时触发。

    • device (必需, 整数):要触发的设备,详情请参见转储输出。

    • address (可选, 整数):要触发的地址(或子设备),详情请参见转储输出。 默认为 0

    • command (必需, 整数):要监听的命令。

  • coolix:在解码到具有给定数据的 Coolix 遥控代码时触发。可以直接指定一个 24 位代码,它将被检查是否至少匹配两个接收数据包中的一个。主要配置方案如下。

    • first (必需, uint32_t):要触发的第一个 24 位 Coolix 代码,详情请参见转储输出。
    • second (可选, uint32_t):要触发的第二个 24 位 Coolix 代码,详情请参见转储输出。 如果未设置,则仅触发由 first 参数指定的单个非严格数据包。
  • dish:在解码到具有给定数据的 Dish Network 遥控代码时触发。 请注意,Dish 遥控器使用不同的载波频率 (57.6kHz),许多接收器硬件无法解码。

    • address (可选, 整数):目标接收器的编号,介于 1 到 16 之间(含)。默认为 1
    • command (必需, 整数):要监听的 Dish 命令,介于 0 到 63 之间(含)。
  • dooya:在解码到具有给定数据的 Dooya 射频遥控代码时触发。

    • id (必需, 整数):要触发的 24 位 ID 代码。
    • channel (**必需”, 整数):要监听的 8 位通道。
    • button (**必需”, 整数):要监听的 4 位按钮。
    • check (**必需”, 整数):要监听的 4 位校验。包含按钮被按住的指示。
  • drayton:在解码到具有给定数据的 Drayton Digistat 射频遥控代码时触发。

    • address (必需, 整数):要触发的 16 位 ID 代码,详情请参见转储输出。
    • channel (**必需”, 整数):要监听的 7 位开关/通道。
    • command (**必需”, 整数):要监听的 5 位命令。
  • dyson:在解码到具有给定数据的戴森 Cool AM07 红外遥控代码时触发。

    • code (**必需”, 整数):要触发的 16 位代码,例如 0x1200=电源, 0x1215=风扇++,0x122a=摆动…,详情请参见转储输出。
    • index (**必需”, 整数):8 位滚动索引 [0..3],每次发送时递增,详情请参见转储输出。
  • gobox:在解码到具有给定数据的 Go-Box 遥控代码时触发。

    • code (**必需”, 整数):要触发的 Go-Box 代码,详情请参见转储输出。
  • jvc:在解码到具有给定数据的 JVC 遥控代码时触发。

    • data (**必需”, 整数):要触发的 JVC 代码,详情请参见转储输出。
  • keeloq:在解码到具有给定数据的 KeeLoq 射频代码时触发。

    • address (必需, 整数):要触发的 32 位 ID 代码,详情请参见转储输出。
    • command (**必需”, 整数):要监听的 8 位开关/命令。如果省略,将匹配任何命令/按钮。
  • haier:在解码到具有给定代码的海尔遥控代码时触发。

    • code (**必需”, 13 字节列表):要监听的代码,详情请参见发射器描述。通常您只需要直接从转储输出中复制此内容。
  • lg:在解码到具有给定数据的 LG 遥控代码时触发。

    • data (**必需”, 整数):要触发的 LG 代码,详情请参见转储输出。
    • nbits (可选, 整数):遥控代码的位数。默认为 28
  • magiquest:在解码到具有给定魔杖 ID 的 MagiQuest 魔杖遥控代码时触发。

    • wand_id (**必需”, 整数):要触发的 MagiQuest 魔杖 ID,详情请参见转储输出。
    • magnitude (可选, 整数):魔杖挥舞和旋转的幅度。如果省略,将匹配魔杖的任何激活。
  • midea:在解码到具有给定代码的美的遥控代码时触发。

    • code (**必需”, 5 字节列表):要监听的代码,详情请参见发射器描述。通常您只需要直接从转储输出中复制前 5 个字节。
  • nec:在解码到具有给定数据的 NEC 遥控代码时触发。

    • address (必需, 整数):要触发的地址,详情请参见转储输出。
    • command (**必需”, 整数):要监听的 NEC 命令。
  • nexa:在解码到具有给定数据的 Nexa 射频代码时触发。

    • device (必需, 整数):要触发的 Nexa 设备代码,详情请参见转储输出。
    • group (**必需”, 整数):要触发的 Nexa 组代码,详情请参见转储输出。
    • state (**必需”, 整数):要触发的 Nexa 状态代码,详情请参见转储输出。
    • channel (**必需”, 整数):要触发的 Nexa 通道代码,详情请参见转储输出。
    • level (**必需”, 整数):要触发的 Nexa 级别代码,详情请参见转储输出。
  • panasonic:在解码到具有给定数据的松下遥控代码时触发。

    • address (必需, 整数):要触发的地址,详情请参见转储输出。
    • command (**必需”, 整数):命令。
  • pioneer:在解码到具有给定数据的先锋遥控代码时触发。

    • rc_code_1 (**必需”, 整数):要触发的遥控代码,详情请参见转储输出。
  • pronto:在解码到具有给定代码的 Pronto 遥控代码时触发。

    • data (**必需”, 字符串):要监听的代码,详情请参见发射器描述。通常您只需要直接从转储输出中复制此内容。

    • delta (可选, 整数):此参数允许您手动指定指定的 Pronto 代码与遥控器发送的红外信号之间允许的差异。

  • raw:在解码到具有给定代码的原始遥控代码时触发。

    • code (**必需”, 列表):要监听的代码,详情请参见发射器描述。通常您只需要直接从转储输出中复制此内容。
  • rc5:在解码到具有给定数据的 RC5 遥控代码时触发。

    • address (必需, 整数):要触发的地址,详情请参见转储输出。
    • command (**必需”, 整数):要监听的 RC5 命令。
  • rc6:在解码到具有给定数据的 RC6 遥控代码时触发。

    • address (必需, 整数):要触发的地址,详情请参见转储输出。
    • command (**必需”, 整数):要监听的 RC6 命令。
  • rc_switch_raw:在解码到具有给定数据的 RC Switch 原始遥控代码时触发。

    • code (**必需”, 字符串):要监听的遥控代码,从转储输出中复制此内容。要忽略接收数据中的某一位,请在 code 的该位置使用 x

    • protocol (可选):要使用的 RC Switch 协议,详情请参见 RC Switch 协议

  • rc_switch_type_a:在解码到具有给定数据的 RC Switch A 型遥控代码时触发。

    • group (**必需”, 字符串):组,二进制字符串。

    • device (**必需”, 字符串):组中的设备,二进制字符串。

    • state (**必需”, 布尔值):要触发的开/关状态。

    • protocol (可选):要使用的 RC Switch 协议,详情请参见 RC Switch 协议

  • rc_switch_type_b:在解码到具有给定数据的 RC Switch B 型遥控代码时触发。

    • address (必需, 整数):地址,整数 1 到 4。
    • channel (**必需”, 整数):通道,整数 1 到 4。
    • state (**必需”, 布尔值):要触发的开/关状态。
    • protocol (可选):要使用的 RC Switch 协议,详情请参见 RC Switch 协议
  • rc_switch_type_c:在解码到具有给定数据的 RC Switch C 型遥控代码时触发。

    • family (**必需”, 字符串):系列。范围是 ap
    • group (**必需”, 整数):组。范围是 1 到 4。
    • device (**必需”, 整数):设备。范围是 1 到 4。
    • state (**必需”, 布尔值):要触发的开/关状态。
    • protocol (可选):要使用的 RC Switch 协议,详情请参见 RC Switch 协议
  • rc_switch_type_d:在解码到具有给定数据的 RC Switch D 型遥控代码时触发。

    • group (**必需”, 整数):组。范围是 1 到 4。
    • device (**必需”, 整数):设备。范围是 1 到 3。
    • state (**必需”, 布尔值):要触发的开/关状态。
    • protocol (可选):要使用的 RC Switch 协议,详情请参见 RC Switch 协议
  • roomba:在解码到具有给定数据的 Roomba 遥控代码时触发。

    • data (**必需”, 整数):要触发的 Roomba 代码,详情请参见转储输出。
  • samsung:在解码到具有给定数据的三星遥控代码时触发。

    • data (**必需”, 整数):要触发的数据,详情请参见转储输出。
    • nbits (可选, 整数):遥控代码的位数。默认为 32
  • samsung36:在解码到具有给定数据的 Samsung36 遥控代码时触发。

    • address (必需, 整数):要触发的地址,详情请参见转储输出。
    • command (**必需”, 整数):命令。
  • sony:在解码到具有给定数据的索尼遥控代码时触发。

    • data (**必需”, 整数):要触发的索尼代码,详情请参见转储输出。
    • nbits (可选, 整数):遥控代码的位数。默认为 12
  • symphony:在解码到具有给定数据的 Symphony 遥控代码时触发。

    • data (**必需”, 整数):要触发的 Symphony 代码,详情请参见转储输出。
    • nbits (**必需”, 整数):遥控代码的位数。典型值:81216
  • toshiba_ac:在解码到具有给定数据的东芝空调遥控代码时触发。

    • rc_code_1 (**必需”, 整数):要触发的遥控代码,详情请参见转储输出。
    • rc_code_2 (可选, 整数):要触发的遥控代码的第二部分,详情请参见转储输出。
  • mirage:在解码到具有给定代码的 Mirage 遥控代码时触发。

    • code (**必需”, 14 字节列表):要监听的代码,详情请参见发射器描述。通常您只需要直接从转储输出中复制此内容。
  • toto:在解码到具有给定数据的 Toto 遥控代码时触发。

    • command (**必需”, 整数):要触发的 1 字节 Toto 命令代码。范围是 0 到 0xFF。
    • rc_code_1 (可选, 整数):要触发的第一个 4 位 Toto 代码(通常是命令参数)。范围是 0 到 0xF。
    • rc_code_2 (可选, 整数):要触发的第二个 4 位 Toto 代码(通常是命令参数)。范围是 0 到 0xF。

NOTE

CanalSatCanalSatLD 协议使用较高的载波频率 (56kHz) 并且非常相似。 根据所使用的硬件,它们同时启用时可能会相互干扰。

NOTE

NEC 代码:在 2021.12 版本中,根据 NEC 标准将位传输顺序从 MSB 更正为 LSB。 因此,如果配置文件来自较早版本的 ESPHome,在升级到 2021.12 或更高版本时,需要反转地址和命令位的顺序。例如,address: 0x84EDcommand: 0x13EC 分别变为 0xB7210x37C8

NOTE

某些接收器(如 TSOP38238)可能需要使用上拉电阻。您可以按以下方式启用:

remote_receiver:
pin:
number: GPIOXX
inverted: true
mode:
input: true
pullup: true
dump: all

NOTE

对于黑色 Sonoff 射频桥,您可以使用 GitHub 用户 wildwiz 创建的此破解绕过处理射频信号的 EFM8BB1 微控制器。 然后使用此配置作为遥控接收器/发射器集线器:

remote_receiver:
pin: 4
dump: all
remote_transmitter:
pin: 5
carrier_duty_percent: 100%

还有一个软件”破解”可以让射频芯片将所有电压镜像到 ESP 进行解码,使硬件破解变得不必要。此软件直通模式可用于 OB38S003(白色)和 EFM8BB1(黑色)Sonoff 射频桥。然后使用此配置作为遥控接收器/发射器集线器:

remote_receiver:
pin:
# sonoff 和 wemos 开发板
number: GPIO3
mode:
input: true
pullup: false
tolerance: 60%
filter: 4us
idle: 4ms
remote_transmitter:
pin: 1
carrier_duty_percent: 100%