找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2033

积分

0

好友

285

主题
发表于 2025-12-30 16:17:52 | 查看: 20| 回复: 0

树莓派智能家居控制中心
图1:基于树莓派的智能家居控制中心,集成了多种智能设备。

本文介绍如何使用 Home Assistant (HA) 集成小米米家智能家居设备,实现基于 Prometheus Alertmanager 的自动化米家开关控制,并结合 HomeKit Bridge,实现 iPhone 位置感知驱动的自动化。

缘起

对于许多开发者而言,编码的魅力在于在数字世界中构建可控、可预测的逻辑系统。智能家居作为物联网(IoT)的重要应用,其理想状态应是开放与互联的。然而现实是,各大厂商往往倾向于构建封闭的生态系统,将用户锁定其中。

小米作为国内 IoT 领域的代表,其米家生态拥有丰富的设备选择,但系统的封闭性也限制了与其他平台或自定义程序的联动能力。Home Assistant 作为一个开源的智能家居中枢平台,恰好能解决这一问题,它能够整合不同品牌的设备,并提供开放的 API 用于创建复杂的自动化逻辑。

动机

笔者自入住新家以来,便逐步部署了以小米设备为主的智能家居系统。尽管使用了小米中枢网关,但其可编程性和开放接口仍然有限,例如无法简单地通过 webhook 接收事件或控制设备。早期虽有非官方的 hass-xiaomi-miot 插件,但配置较为繁琐。

直到发现小米官方推出了针对 Home Assistant 的 ha_xiaomi_home 插件,安装和未来维护都更有保障,这重新点燃了笔者深入折腾 Home Assistant 的热情。当前正值空档期,将专业知识学习与“折腾”爱好结合,探索如何用开放的智能家居平台整合现有设备,并接入像 LLM 这样的新技术,不失为一种兼顾学习与实用的方式。

需求分析

现状

家庭 Home Lab 中的一台 Raspberry Pi 运行着包括 Prometheus 在内的多种自托管服务,用于监控 Pi 本身的温度,并时常触发高温告警(约80°C)。在不额外加装散热风扇的前提下,笔者希望利用现有的智能家居设备实现自动化温控。

目标

  1. 通过 Home Assistant 集成小米米家设备,获得统一的开放控制接口。
  2. 基于开放接口,实现跨数据源的智能自动化,例如:
    • Prometheus Alertmanager 告警时,自动开关连接风扇的小米智能插座。
    • 利用人员离家状态作为事件源,触发如启动安防监控推送等自动化。
    • 基于手机地理位置,实现如“到家前提前开启空气净化器”的场景。

方案设计

智能家居系统架构图
图2:基于Home Assistant的智能家居系统架构示意图,连接了小米设备、本地服务与苹果HomeKit。

核心思路是使用 Home Assistant 作为中枢:一方面通过官方插件接入小米设备;另一方面暴露 Webhook 等接口,接受来自 Prometheus 等外部系统的触发;同时,通过 HomeKit Bridge 将设备接入苹果生态,利用 iPhone 的传感器实现地理围栏功能。

实现

Prometheus 告警控制小米开关风扇

首先,需要在 Prometheus 中配置告警规则,例如当树莓派温度超过70°C持续2分钟时触发:

groups:
- name: node_exporter_alerts
  rules:
  - alert: HostPhysicalComponentTooHot
    expr: node_hwmon_temp_celsius * on(chip,instance,job) group_left(chip_name) node_hwmon_chip_names > 70
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: Host physical component too hot (instance {{ $labels.instance }})
      description: 🔥 Physical hardware {{ $labels.instance }}/{{ $labels.chip_name }}/{{ $labels.sensor }} too hot {{ $value }}°C

Alertmanager 需要配置将告警发送至 Home Assistant 的 Webhook。以下是一个简化的 Webhook 报文示例:

{
  "receiver": "webhook_receiver",
  "status": "firing",
  "alerts": [ ... ],
  "groupLabels": {},
  "commonLabels": {
    "alertname": "HostPhysicalComponentTooHot",
    "instance": "192.168.1.68:9100",
    "job": "192.168.16.130",
    "severity": "warning"
  },
  "commonAnnotations": {...}
}

接下来,在 Home Assistant 中创建自动化。通过 UI 可以直观地设置触发条件(Webhook)、判断逻辑(解析告警状态与实例)和执行动作(控制小米智能开关)。

Home Assistant自动化配置界面
图3:Home Assistant自动化编辑器界面,用于配置由Prometheus告警触发的开关动作。

对应的自动化 YAML 配置如下:

alias: Toggle Switch When Alert Firing/Resolved
description: Handle Prometheus Alertmanager webhook
triggers:
  - webhook_id: prometheus_alert
    allowed_methods:
      - POST
    local_only: true
    trigger: webhook
conditions: []
actions:
  - variables:
      alert_status: "{{ trigger.json.status }}"
      alert_name: "{{ trigger.json.commonLabels.alertname }}"
      alert_instance: "{{ trigger.json.commonLabels.instance }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ alert_name == 'HostPhysicalComponentTooHot' }}"
          - condition: template
            value_template: "{{ alert_instance == '192.168.1.68:9100' }}"
        sequence:
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ alert_status == 'firing' }}"
                sequence:
                  - target:
                      entity_id: switch.qmi_cn_9083433944_psv3_on_p_2_1
                    action: switch.turn_on
              - conditions:
                  - condition: template
                    value_template: "{{ alert_status == 'resolved' }}"
                sequence:
                  - target:
                      entity_id: switch.qmi_cn_9083433944_psv3_on_p_2_1
                    action: switch.turn_off
mode: single

这样,就实现了当指定树莓派温度过高时自动打开风扇散热,温度恢复后自动关闭的闭环 运维监控

手机地理位置驱动的自动化

通过手机上的 Home Assistant App,我们可以将手机变成一个强大的传感器,实时获取 Wi-Fi SSID、精确地理位置等数据,用以驱动自动化。

一个简单的场景是:当手机离开家庭 Wi-Fi 网络一段时间后,触发某种通知或设备状态变更。

地理围栏自动化触发条件设置
图4:在Home Assistant中设置基于手机Wi-Fi SSID变化的自动化触发条件。

对应的自动化配置示例如下:

alias: SSID
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.markiphone_ssid
    from:
      - MY_WIFI_SSID_Name
    to: null
    for:
      hours: 0
      minutes: 0
      seconds: 10
conditions: []
actions:
  - device_id: 01538aafdaf38599d12dd5c039aabb6b
    domain: mobile_app
    type: notify
    message: SSID Updated 1
    title: SSID Updated 2
mode: single

手机锁屏通知示例
图5:自动化触发后,手机锁屏界面显示的自定义通知。

基于更精确的 GPS 地理位置,则可以实现更复杂的场景,例如在通勤路上提前开启家中的空调或空气净化器。

米家接入 Apple HomeKit 让 iPhone Siri 控制家电

Home Assistant 的另一个强大功能是充当桥梁。安装并配置 “HomeKit Bridge” 集成后,可以将已接入 Home Assistant 的小米设备(或其他任何支持设备)反向暴露给苹果的 HomeKit 生态系统。

这意味着,你可以在 iPhone 的“家庭”App 中直接控制这些设备,或者使用 Siri 进行语音控制。对于习惯苹果生态或多设备用户来说,这极大地提升了便利性和统一性。

Home Assistant中的设备控制界面
图6:通过Home Assistant界面统一控制所有接入的智能设备。

结语

智能家居早已脱离“华而不实”的标签,在开放平台如 Home Assistant 的助力下,其可玩性和实用性都达到了新的高度。通过打通小米设备、本地监控系统(Prometheus)和移动端(iPhone),我们能够创造出高度定制化、真正服务于个人需求的自动化场景。

未来,AI 与智能家居的融合或许能带来更主动、更具情感交互的体验,例如基于家庭活动记忆的提醒或调解。虽然对各大平台的彻底开放不抱过高期望,但小米官方推出 Home Assistant 集成这样的举动,无疑是一个积极的信号。

技术人的乐趣,往往就在这不断的探索与整合之中,将不同系统连接,让它们协同工作,创造出独属于自己的高效数字生活。如果你也对这类 开发者 的 DIY 项目感兴趣,欢迎在云栈社区交流分享你的心得。




上一篇:大模型核心术语入门指南:LLM、RAG、Agent、vLLM与数据蒸馏详解
下一篇:Spring AI Function Calling 教程:Java 开发如何优雅实现工具调用
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 09:07 , Processed in 0.469278 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表