前言

  • 去年年底在学校 20 块钱买了一个,接入 HASS 然后再接入 HomeKit 实现 iPhone 充电到 80% 自动断电的自动化用着还不错
  • 双十二又买了俩准备带回家用,20 块钱在那个时候应该是能接入HASS的智能插座中最低梯队的价格了
  • 寒假回家就懵逼了,这玩意压根连不上我家的小米 AX6000,明明在学校连我的华硕 AC68U 一点问题没有
  • 去检索了下才发现这玩意网上大量差评说连不上 Wi-Fi 的,必须得把路由器的无线模式为设为 11g only。我总不能为了俩破插座买个能单独设置无线模式为 11g only 的路由器吧,遂放弃,丢抽屉里了
  • 期间我还尝试了下把 AX6000 的 Wi-Fi 5 兼容模式打开,并关闭了 MU-MIMO、AIoT 智能天线自动扫描、畅快连等功能,然并卵

契机

  • 这破小米智能多模网关又双叒叕离线了,吐啦,哥们摸着也不是很烫啊,温热的,咋就离线了IMG_3681
  • 手里的智能插座全拿去做自动化了,就剩这哥仨了。想想再试试吧,结果莫名其妙连上去了…
  • 挺离谱的,就跟我这 AX6000 一样,以前一直断流,搞得我很烦,一度想贱卖了去买 XDR5480。结果过了一段时间莫名其妙就不断了,我看了下固件也没更新啊…

正篇

也不知道它咋连上去的,既然连上了那就操练起来吧

抓包

  1. 前人已经造过轮子了,这里直接搬一下
    1. 抓包向日葵 APP 可看到在开关插座时,APP 会请求 x.iots03-g2.oray.net:8000/plug 地址,参数可见:3433820009
      3115568201
    2. 使用浏览器打开此地址,发现可以正常操作插座。1204221044
    3. 重置设备后 key 值仍不变,所以请勿将此地址发给别人。
    4. 获取插座状态
      1
      2
      3
      4
      5
      6
      7
      8
      res = await axios.get(oray_url, {
      params: {
      _api: "get_plug_status",
      index: 0,
      time: xxxxxxxx,
      key: "your_key"
      }
      });
    5. 返回信息:其中 status 0 为关,1 为开;index为多口插排需要的参数,我这个是单口的,不管它。
      1
      {"response":[{"index":0,"status":1}],"led":1,"def_st":2,"result":0}
    6. 设置插座状态
      1
      2
      3
      4
      5
      6
      7
      8
      9
      res = await axios.get(oray_url, {
      params: {
      _api: "set_plug_status",
      index: 0,
      time: xxxxxxxx,
      key: "your_key",
      status: 0 or 1
      }
      });
    7. 返回信息
      1
      {"result":0}
    8. 进入路由器后台可看到插座 ip 地址,试着扫描端口,发现 5767 端口开着1170688986304826817
    9. 使用 ip:port 代替向日葵外网域名调用 API 发现可以正常使用。2793528913
    10. 至此已经可以在内网环境正常使用 API 开关插座了,下面来试试接入到 homekit。
  2. 浅抓个包获取 timekey 的值WeChatf8ff1840c268ad19f932300c8e36f391

接入 HASS

  1. 在 HASS 的配置文件 configuration.yaml 中加入下面这段即可添加实体
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    switch:
    - platform: command_line
    switches:
    [你想给插座取的名字]:
    friendly_name: c1pro switch
    command_on: >
    curl -X GET "http://[插座的ip]:6767/plug?_api=set_plug_status&index=0&time=[插座的time值]&key=[插座的key值]&status=1"
    command_off: >
    curl -X GET "http://[插座的ip]:6767/plug?_api=set_plug_status&index=0&time=[插座的time值]&key=[插座的key值]&status=0"
    command_state: >
    curl -X GET "http://[插座的ip]:6767/plug?_api=get_plug_status&index=0&time=[插座的time值]&key=[插座的key值]&status"
    value_template: >
    {{value_json.response[0].status == 1 }}
    icon_template: >
    {% if value_json.response[0].status == 1 %} mdi:toggle-switch
    {% else %} mdi:toggle-switch-off
    {% endif %}
  2. 重启 HASS 后即可看到实体WeChat61d1cefeec280e3b659fbaf2cf6f58de

设置自动化

  1. 在HASS的配置文件 configuration.yaml 中加入下面这段,即可通过 ping 判断多模 1 是否在线
    1
    2
    3
    4
    5
    6
    device_tracker:
    - platform: ping
    hosts:
    gateway1: 172.20.0.5 # 多模1的ip
    interval_seconds: 10 # 每隔10秒检测一次
    consider_home: 20 # 如果连续20秒内一直ping不通,那么这个设备就是离线状态
  2. 新建名为“多模 1 离线自动重启”的自动化WeChate5ca0df155e4312f39f70903f7a61030
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    description: ""
    trigger:
    - platform: state
    entity_id:
    - device_tracker.gateway1
    from: home
    to: not_home
    condition: []
    action:
    - service: switch.turn_off
    data: {}
    target:
    entity_id: switch.c1pro_switch
    - delay:
    hours: 0
    minutes: 1
    seconds: 0
    milliseconds: 0
    - service: switch.turn_on
    data: {}
    target:
    entity_id: switch.c1pro_switch
    mode: single