入门概述
- hass ( Home Assistant )连接博联,说白了就是 hass 发送一组指令给博联,博联负责转为红外 /射频信号发出去。
- 但是初接触 hass,怎么接收学习和发送命令这地方都不太好找,而且说法多样。所以记录一下。算是备忘也算是交流。
调用方式 1 switch
学码
- HomeAssistant 的网页 UI (以下简称 UI 或 web ),开发者工具 /服务 /broadlink.learn

- 然后调用,对着博联按红外,页面上会弹出提示,复制 Base64 码。
- 另一种学码方式是用这个工具 Broadlink Manager download | SourceForge.net
- 这两种方式都只能学到红外码。
- 测试学到的码,在服务的下一项 broadlink.send,可以测试刚学到的码(不过一般不会错,没啥必要)。
在 switch 下添加代码
- platform: broadlink
host: 10.0.0.30
mac: 78:0f:77:5a:48:99
timeout: 15
switches:
# amplifier ==============================
amplifier_power:
friendly_name: Power
command_on: JgBAAEq 很长我删了点 SBUADQU=
command_off: ''
- 这里有几个坑点,第一是必须要设置 power 的 on/off,但很多红外遥控是一个按钮 toggle 的,比如我这里的 power 电源。为了在 switch 里代码短一点,我 off 就设为空了。之后调用也要注意不论开关都只调用
trun_on。 - 另外在 hass 的 UI 上,这类按钮因为没有返回状态,所以也会显示为开关两个闪电图标,分别对应 on 和 off 的命令。
- 在 homekit 上,homekit 会自动识别为 toggle 模式,也就是一个按钮,按了就发送命令同时改变状态。比如第一下按,发送
turn_on按钮变白,第二次按发送turn_off按钮变暗。于是有些用在 homekit 里的按钮,还是要设 off 状态,不然发送的命令就是空的。
使用代码
- 一种最直接的方式是在 UI 上,右上角三个点点出 [配置 UI ] ,然后右下角加号,选实体,然后选一个实体,就是你刚才添加的
switch.amplifier_power。这样你的 UI 上就有能点的控制按钮了。
- 这是最简单快速的一个流程了。以我所知,到这里应该能最快地添加一个能用的按钮。
在 script 使用代码
- 接下去说点进阶的。功放调音量一次是 0.5,我希望它一次调 5,不然根本没效果。
- 在 script 里,添加
amplifier_volume_up_10_times:
alias: Vol ++
sequence:
- service: switch.turn_on
data:
entity_id: switch.amplifier_volume_up
# 把 service 这段复制粘贴 10 遍
- 这里第一个要讲的是调用方式,网上很多是让你在这里输入 packet。这里能用的 service 在 web 端可以查,有好几种,broadlink.send 或者
remote.send_command(需要先定义一个 remote 实体)。但同一段代码多处编辑显然不大优,所以这里有一个 switch 服务可以用,分开 /关 /toggle。 - 但是这里重复 10 次需要复制粘贴 10 遍这个太蠢了也。有一个
num_repeats参数,但只能在remote.send_command里用,这个我们后面讲。
调用方式 2 remote learn/send
- 这个是官方推荐的方式,但也有点问题。
- 参考 Broadlink - Home Assistant
添加 remote
remote:
- platform: broadlink
host: 10.0.0.30
mac: 78:0f:77:5a:48:99
学码&用码
- 在 script 里添加
learn_amplifier_mute:
sequence:
- service: remote.learn_command
data:
entity_id: remote.broadlink
device: amplifier
command: mute
alternative: True
learn_amplifier_mute:
sequence:
- service: remote.send_command
data:
entity_id: remote.broadlink
device: amplifier
command: mute
# num_repeats: 20
- 优点
- 这个学码方式最大的区别是,它会识别 alternative,也就是你是不是用一个键控制开和关,不会强迫你用两个键了。
- 而在调用的时候也可以设置重复次数了。
- 缺点
- 学码需要撸代码,或者在 web 页输入代码学习。
- 学到的码不知道保存在哪里。我估计在 home_assistant_v2.db ,但具体没定位到,都在 state 里,不知道它怎么记得。这就导致有时候没学到,我也不能直观地看到,只能用试的,很不方便。这点有知道的朋友请指点一下。
- 在 ui 或者 homekit 调用的时候,因为不是 switch,所以很多方便的属性没有了。
- ui 上不会有闪电或 toggle 的按钮,而是一个 [执行] 的文字按钮,比较丑。
- PS:script 里随便加一个 delay,按钮就会变 toggle 模式了。不知道为啥。
- 即便变成了 toggle,homekit 里也一样,因为不是 switch,所以执行完总是会返回一个 off 状态。这样在 homekit 里就没办法直接当按钮用。
- 也许可以用 switch template 或者其它方法魔改一下,这个我还在摸索,有知道的请指点一下。比如我有两组 script,比如影院模式开 /关,怎么把这两组 script 变成一个 switch 形式。
- 反正目前大概摸了这点,后续慢慢再看,杂七杂八东西挺多的,入门费了不少时间。后续有空可能会再写完整点。
提问
remote.learn_command学到的码保存在哪里。- 怎么把 script 变成可以 toggle 的 switch。
- 空调这类复合红外指令的怎么搞?(空调发送的命令是温度模式风力风向定时开关等,一堆指令的集合,拆分很麻烦,不知道有没有现成的。我现在是 learn 了一个现成的开关,反正一直就开那个温度。)
- 支持 hass 的 wifi 开关模块(装在灯具附近串联的那种)有推荐的吗?之前 10 年用的都是射频版的,刚好换了。
感想
反馈很重要
家里用了 10 年的遥控灯,遥控开关,这次让我感觉最深的就是,智能家居反馈当前状态很重要。比如老的遥控灯,315 射频,开关都是同一个按钮。那么如果一次指令发送失败,它的状态你就不可测了。人在家的时候还好,但远程或隔着楼层,就要跑去看了,这个明显不行。有些开关键分开的插座稍微好点,至少远程我不知道它开还是关,多发几次开或者关,它总能奏效。但最好是它能反馈给你,我开 /关了。
安全性存疑
裸奔的智能插座:博联 Broadlink SP2/SP mini 的分析、破解 - 萝卜头实验室
现在功能上是这样的,通过博联的手机 App,可以在不接入家庭 wifi 的情况下远程控制 RM Pro。后期打算禁掉它的联网功能,全部从 hass 走,毕竟博联之前的 App 烂得离谱,对它家的安全不太有信心。而且它的设备都直接保存你的局域网密码,所以局域网内对这些智能设备最好也隔离防护一下。
厂商的私心
博联近一年的版本,射频码已经没有第三方学习接口了,只能用它的 App。然后你再通过安卓端或者抓包之类的方式去破解,非常兜圈子。但是同时呢,博联又希望你把你家的遥控器学习好之后,共享到它的公共库,以完善它的产品体验。它的是它的,我的还是它的,这个有点恶心。在产品还没有完善的情况下,来玩第三方的基本都是偏 geek 的这些人,先铺量嘛,会搞的总有办法绕,不会的也压根不会用第三方,这限制搞得毫无意义,徒增烦恼。
如果有某个第三方 App,功能特别好,整合了各个硬件厂商,你到时候花钱买它就好了。其它厂商都在造墙,都在闭门造车,App 都烂得要死,何不开放接口,群策群力,加快进度。你闭门造车你 App 做系统做得过小米阿里 251 ?不是慢性作死嘛。