V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JCZ2MkKb5S8ZX9pq
V2EX  ›  分享发现

Home Assistant 连接博联 RM Pro+ 的一些实践和若干问题

  •  
  •   JCZ2MkKb5S8ZX9pq · 2019-12-25 18:55:19 +08:00 · 6325 次点击
    这是一个创建于 1788 天前的主题,其中的信息可能已经有所发展或是发生改变。

    入门概述

    • 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

    添加 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 ?不是慢性作死嘛。

    3 条回复    2020-04-22 09:53:31 +08:00
    titanium98118
        1
    titanium98118  
       2019-12-27 10:45:21 +08:00
    歪个楼,在内国网络环境下,google nest mini 要怎样才能完成首次配置?
    我确定$$工作正常。
    我已经在软路由上设置全局$$亻戈理,每次要不在配置 wifi 连接时超时,要不在下载更新时超时。
    chenyx9
        2
    chenyx9  
       2020-03-07 04:00:03 +08:00
    @titanium98118 在路由端把发往 8.8.8.8 跟 8.8.4.4 (不记得是两个还是只有 8.8.8.8 )的 DNS 请求全部劫持到路由自身。Chromecast 系列也是这样的。
    jigong1234
        3
    jigong1234  
       2020-04-22 09:53:31 +08:00
    hass 能链接小米的摄像头吗 在局域网
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:38 · PVG 08:38 · LAX 16:38 · JFK 19:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.