display 隐藏上传按钮_HomeAssistant模拟无线按钮,与小米网关、HomeKit完美联动,自动布防/撤防...

本文介绍了如何使用HomeAssistant组件模拟小米无线按钮,实现与小米网关、HomeKit的联动,包括离家自动布防、回家自动撤防的自动化设置。通过修改xiaomi_aqara组件的代码,结合蓝牙门锁和zigbee智能插座,创建虚拟报警控制面板,弥补官方组件的不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

更好滴融合hass、HomeKit和小米网关(以及米家app),提高自动化水平。

在目前的条件限制下,这差不多是最佳效果了。

简介

把homeassistant/components/xiaomi_aqara/路径下的init.py和services.yaml替换为本repo所提供的代码,为homeassistant的xiaomi_aqara组件增加一项服务:模拟无线按钮(原名无线开关),可以模拟单击和双击。

这个思路和我在自己用C#语言写的SMA-Elfin是完全一样的,只不过那个还没有具备HomeKit功能。

当然,不替换services.yaml也不影响使用,只是在开发者工具下面使用这项服务的时候没有介绍信息而已。诺,就是这个:

4dd5831179205e812a17dba0f978c35f.png
services.yaml修改的效果

sensor.py

这个文件修改了两个传感器:

  • 去掉了网关自带的小夜灯 light,原因是通过LAN API控制这个灯之后,在原生app米家里会失控,米家app里设置的相关自动化会无效。
  • 原代码不知是出于什么考虑,把网关上的照度传感器上报的数值进行了修改,减掉300,个人认为这个修改很不合理,所以把这个修改去掉了。

发挥作用

homeassistant集成的xiaomi_aqara组件无法利用小米网关的警戒功能,原因是官方提供的局域网通信协议(LAN API)没有提供相应的能力。

为了弥补这个缺陷,以及实现更好的离家/回家自动化,达到离家自动布防、回家自动撤防的目的,我进行了一系列的设置和改造:

0. 专门征用一个无线按钮(原名无线开关)和一个zigbee智能插座。这两个东西就不要用于其他用途了。zigbee插座务必要关闭“断电记忆”!这个插座是一个非常重要的桥梁,后面还会说到。

1. homeassistant增加一个虚拟的报警控制面板:

alarm_control_panel:
 - platform: manual
   pending_time: 5
   trigger_time: 3
   disarm_after_trigger: false
   disarmed:
     trigger_time: 0
   armed_away:
     pending_time: 5
     delay_time: 3

然后想尽办法让这个面板与小米网关的警戒模式保持同步,也就是接下来的设置和改造。

2. 在原生的米家app里增加两个自动智能条目(原来叫自动化),分别为:

  • 单击-离家
    • 关闭zigbee插座 (这一动作可以去掉)
    • 启动警戒模式(布防)
    • 其他动作,比如开启摄像头等
  • 双击-回家
    • 关闭警戒模式(撤防)
    • 其他动作,比如关闭摄像头等

3. 另外,我使用的是米家上的一款支持蓝牙协议的智能门锁(其实应该买aqara的zigbee协议的门锁,可惜当时不知道)。而蓝牙门锁是没有局域网协议接口的,并且所有的联动都只能通过云端的服务器执行。虽然延迟比较大,但总好过没有啊。所以也创建一条自动化加以利用:

  • 正常开锁-撤防
    • 关闭警戒模式(撤防)
    • 其他动作,如关闭摄像头等
    • 开启zigbee插座 (这个插座开启的信号是给homeassistant专门准备的)
    • 延时1分钟
    • 关闭zigbee插座

4. 在homeassistant上定制自动化:

离家自动布防:

借助于另外一个很棒的脚本,monitor,我和家人的手机全部离开蓝牙可见范围,homeassistant就会发出无线按钮单击的信号,小米网关收到后就会执行预先设置的“单击-离家”智能条目。

- id: '2892191838'
  alias: alarm.outARM
  trigger:
  - below: '50'
    entity_id: sensor.chome //这是表征我和家人手机在家与否的一个传感器,来自monitor
    platform: numeric_state
  condition: []
  action:
  - data:
      device_id: xxxx
      gw_mac: xxxx
      status: click
    service: xiaomi_aqara.simulate_button
  - data:
      entity_id: alarm_control_panel.ha_alarm
    service: alarm_control_panel.alarm_arm_away
  - data:
      message: HA进入警戒状态!
    service: notify.notify

回家自动撤防,为了适应不同状况,设置了两个自动化,分别为:

正常开锁-撤防:

其实homeassistant根本获取不到开锁的信号,只能通过zigbee插座开启这一事件进行传递。这种情况下是米家服务器先检测到开锁,自然就会执行“开锁-撤防”,剩下的只是需要通知homeassistant:

- id: '33928032'
  alias: alarm.plugOnDISARM
  trigger:
  - entity_id: switch.lvmiplug
    from: 'off'
    platform: state
    to: 'on'
  condition:
  - condition: state
    entity_id: alarm_control_panel.ha_alarm
    state: armed_away
  action:
  - data:
      entity_id: alarm_control_panel.ha_alarm
    service: alarm_control_panel.alarm_disarm
  - data:
      data:
        push:
          sound: US-EN-Morgan-Freeman-Front-Door-Unlocked.wav
      message: zb插座开启,正常开锁,已解除警戒。
    service: notify.notify

主人回家-撤防

还是那个monitor,我或者家人的手机回到家门口蓝牙可见范围内,homeassistant发出无线按钮双击模拟消息,小米网关收到后立即执行“双击-回家”:

- id: '882743628'
  alias: alarm.homeDISARM
  trigger:
  - above: '95'
    entity_id: sensor.chome
    platform: numeric_state
  condition:
  - condition: state
    entity_id: alarm_control_panel.ha_alarm
    state: armed_away
  action:
  - data:
      device_id: xxxx
      gw_mac: xxxx
      status: double_click
    service: xiaomi_aqara.simulate_button
  - data:
      entity_id: alarm_control_panel.ha_alarm
    service: alarm_control_panel.alarm_disarm
  - data:
      data:
        push:
          sound: US-EN-Alexa-Welcome-Home.wav
      message: 欢迎回家,解除警戒状态。
    service: notify.notify

5. HomeKit集成及应用

我用的是苹果手机,不用上HomeKit就太说不过去了。

首先是homeassistant的配置:

homekit:
  filter:
    exclude_domains: //不想在苹果家庭app看到这些
      - group.all_switches
      - group.all_automations
      - group.all_devices
      - group.all_remotes
      - automation
    exclude_entities:
      - remote.miir
      - device_tracker.ipadmini
      - switch.lvmiplug //刻意隐藏,避免误操作导致撤防。

然后是两个自动化:

万一外出后没有自动布防,可以在苹果家庭app里把报警面板的状态改为“外出”,小米网关就会自动执行布防自动化。

d881579fd4a53880df73cc8e9345cd4d.png
在苹果手机上启动警戒模式
- id: '1882373283'
  alias: alarm.homekitARMcmd
  trigger:
  - event_data:
      display_name: HA Alarm
      entity_id: alarm_control_panel.ha_alarm
      service: alarm_arm_away
    event_type: homekit_state_change
    platform: event
  condition: []
  action:
  - data:
      device_id: xxxxx
      gw_mac: xxxxx
      status: click
    service: xiaomi_aqara.simulate_button
  - data:
      message: HomeKit指令:进入警戒状态!
    service: notify.notify

苹果的地理围栏功能据说可以甩安卓几条街,虽然对于住楼房的我们适用性一般(像农村自己家一个院子应该很好用),但也可以加以利用:

首先当然是在手机上,苹果家庭app,设置一条“回家-关闭警戒”的自动化。

然后,在homeassistant增加一条配合的自动化:

- id: '992763512'
  alias: alarm.homekitDISARM
  trigger:
  - event_data:
      display_name: HA Alarm
      entity_id: alarm_control_panel.ha_alarm
      service: alarm_disarm
    event_type: homekit_state_change
    platform: event
  condition: []
  action:
  - data:
      device_id: xxxx
      gw_mac: xxxxx
      status: double_click
    service: xiaomi_aqara.simulate_button
  - data:
      message: HomeKit指令:解除警戒。
    service: notify.notify

完整代码请移步github

xcray/xiaomi_aqara-button-simulation-on-hass​github.com
0ddb2b26854d32d878ba59c059a967ae.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值