利用小米官方的HomeAssistant插件将领普自发电门铃按下动作接入HomeKit的方法
最近小米官方推出了一个
HomeAssistant插件,和第三方的
Miot插件提供了类似的功能,其中我发现此前接入的领普自发电门铃(linp.doorbell.g04)在官方插件中提供了「门铃响了」的事件,这样使我们在不改动固件的前提下将其接入HomeKit提供了可能。
思路:
- HomeKit的门铃需要摄像头关联门铃按键,可选关联人体传感器。
- 如果门外有摄像头的情况下,或者有其它摄像头想在门铃响的时候查看的情况下,可以直接使用这个摄像头的rtsp流,在门铃响的时候发送rtsp流给HomeKit;同时也可以关联一个人体传感器,在有人靠近时自动发送rtsp流给HomeKit。
- 如果没有可用摄像头的情况下,可以使用一张静态图片(地图API提供的地图图片、气象API提供的天气图片也可),将其设置为HomeAssistant的一个通用摄像头。
- 小米插件提供的「门铃响了」事件的值是一个时间戳,需要把它转换成一个二元传感器的值,可以分辨它是否被按下。
操作:
1. 在设备与服务中添加一个集成,通用摄像头,设置静态图像网址或rtsp流。设置完成后从设置中找到(或修改)这个实体标识符并记录,比如我设置为 camera.fake_doorbell 。
2. 在小米插件的设备实体中,找到对应的门铃event事件的实体标识符并记录,比如我的是event.linp_cn_g04_doorbell_ring 。
3. 修改(或创建对应)HomeAssistant配置文件,记得将对应的实体标识符修改为你实际的标识符。
4. 通过开发者工具检查配置是否正确,如正确则重启HomeAssistant,通知中会出现一个设备二维码,在Home App中添加这个设备即可。
5. 效果见评论区。
代码:
# configuration.yaml
input_boolean: !include input_boolean.yaml
binary_sensor: !include binary_sensor.yaml
automation: !include automations.yaml
homekit: !include homekit.yaml
# input_boolean.yaml
doorbell_button_pressed:
name: "Doorbell Button Pressed"
initial: off
icon: mdi:doorbell
# binary_sensor.yaml
- platform: template
sensors:
doorbell_button_pressed_sensor:
friendly_name: "Doorbell Button Pressed"
device_class: door
value_template: "{{ is_state('input_boolean.doorbell_button_pressed', 'on') }}"
# automations.yaml
- alias: "Doorbell Pressed Detection"
trigger:
- trigger: state
entity_id: event.linp_cn_g04_doorbell_ring
action:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.doorbell_button_pressed
- delay: "00:00:05" # 5 秒延迟
- action: input_boolean.turn_off
target:
entity_id: input_boolean.doorbell_button_pressed
# 可选日志
- alias: "Log Doorbell Pressed State"
trigger:
- trigger: state
entity_id: input_boolean.doorbell_button_pressed
action:
- action: system_log.write
data_template:
message: "Doorbell Button Pressed state changed to {{ states('input_boolean.doorbell_button_pressed') }}"
level: info
# homekit.yaml
- name: Doorbell
mode: accessory
filter:
include_entities:
- camera.fake_doorbell
entity_config:
camera.fake_doorbell:
name: FakeDoorbell
support_audio: false
linked_doorbell_sensor: binary_sensor.doorbell_button_pressed_sensor