Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Home Assistant 之旅 #203

Open
Bpazy opened this issue Nov 7, 2021 · 7 comments
Open

Home Assistant 之旅 #203

Bpazy opened this issue Nov 7, 2021 · 7 comments

Comments

@Bpazy
Copy link
Owner

Bpazy commented Nov 7, 2021

Just do it

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 7, 2021

安装 Home Assistant

官方安装文档 点此跳转,这里仅记录我的安装流程。

采用 Docker 安装,这里我使用了 docker compose,首先创建配置文件:

cd ~
mkdir homeassistant && cd homeassistant
cat << EOF > docker-compose.yaml
version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:stable
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
EOF

然后启动: sudo docker-compose up -d

这时候就 Home Assistant 就已经启动好了,接下来打开网址预览即可: http://192.168.31.31:8123

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 7, 2021

集成小米设备

这里集成小米设备,采用的组件为 Xiaomi Miot For HomeAssistant

首先安装 Xiaomi Miot For HomeAssistant:

cd ~/homeassistant
wget -q -O - https://cdn.jsdelivr.net/gh/al-one/hass-xiaomi-miot/install.sh | bash -
sudo docker-compose up -d

上面的命令为进入 homeassistant 主目录后,下载并安装 xiaomi miot 组件,然后重启 homeassistant 容器。

接着开始配置,打开网页后依次点击:⚙️ 配置 > 🧩 集成 > ➕ 添加集成 > 🔍 搜索 Xiaomi Miot Auto。
选择“自动模式”,输入小米账号密码即可。

最后在仪表盘添加你想要的设备数据即可,如图:
image

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 7, 2021

将 Home Assistant 接入 HomeKit

首先需要给 HomeAssistant 安装 HomeKit 集成,可以参考官方文档。按照步骤一步一步进行即可。

最后在 iPhone 中添加设备,扫描 Home Assistant 中的二维码即可,最终效果如下:

然后你就可以通过 Siri 控制 HomeKit 啦。

另外,如果你家中有 HomePod 作为家庭中枢,你甚至可以在外网直接控制家里的 HomeAssistant 设备,因为 HomePod 会转发你的请求到家中的设备上。iPad 也可以作为家庭中枢,在这里打开:

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 7, 2021

将 PC 的开启和关闭接入 Home Assistant

编辑配置文件 (~/homeassistant/config/configuration.yaml ),添加以下内容:

homeassistant:
  customize: !include customize.yaml # 这里是允许调整开关的样式

switch:
  - platform: wake_on_lan
    name: gHan
    mac: "4C:CC:6A:B7:E6:D6"
    host: "192.168.31.10"
    turn_off:
      service: shell_command.turn_off_ghan

shell_command:
  turn_off_ghan: 'ssh 192.168.31.10 shutdown -h'

此时 HAAS 里已经可以查看到 gHan这台设备了,且能够正常环境。

但是为了能够关机,还需要再配置一个 ssh 白名单,逐步操作:

  1. 修改 docker-compose.yaml 文件,将当前目录的 ssh 映射到容器中,形如:
version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:stable
    volumes:
      - ./config:/config
      - ./ssh:/root/.ssh:ro
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
  1. 重新生成 docker 并进入容器生成 ssh key:
sudo docker-compose up -d
sudo docker exec -it homeassistant /bin/bash
ssh-keygen
  1. 回到宿主机,将 ~/homeassistant/ssh 中的公钥复制到台式机白名单中。
  2. 开始使用,如图:

@Bpazy
Copy link
Owner Author

Bpazy commented Aug 15, 2022

通过 Prometheus 记录 Home Assistant 数据

想要将 HAAS 的数据记录在 Prometheus 中,只需要做下面的操作:

  1. HAAS 开启 Prometheus 继承,只需要在 configuration.yaml 根项添加 prometheus: 即可,详情参考官方文档;
  2. Prometheus 指定 HAAS 地址:编辑 prometheus.yml,在 scrape_configs 中添加一项即可:
scrape_configs:
  - job_name: 'haas'
    scrape_interval: 60s
    metrics_path: /api/prometheus
    authorization:
      credentials: "HERE_YOUR_TOKEN"
    scheme: https
    static_configs:
      - targets: ['haas.example.com']

HAAS Token 的生成方法,参考这里: https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token

@Bpazy
Copy link
Owner Author

Bpazy commented Aug 15, 2022

Prometheus increase 函数在统计家庭用电量时遇到的波动问题

如果你要统计家里的用电量,使用这种函数: increase(haas_sensor_energy_kwh{entity="sensor.lumi_mcn02_efbf_power_cost_today"}[10y])

你会发现当时间范围很小时,比如最近半小时,绘制出的曲线有上下波动,仿佛是用电量为负数导致的一样:
image

其实这是 Prometheus 的特性 线性外插 特性导致 increase 函数失真,参考这篇博客:Prometheus increase 函数返回值变变小

怎么解决呢?使用 round 函数抹平这种误差:round(increase(haas_sensor_energy_kwh{entity="sensor.lumi_mcn02_efbf_power_cost_today"}[10y]),0.1)
image

@Bpazy
Copy link
Owner Author

Bpazy commented Apr 6, 2024

上 k8s 咯

配置整体上和 docker compose 是一样的,有个注意点,切换到 k8s 后仍需要保持 hostNetwork true 的设置,否则 homekit, esphome, WOL 等依赖底层网络特性的插件都都将失效。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: homeassistant-config-pv-local
spec:
  capacity:
    storage: 2Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: homeassistant-config-local-storage
  local:
    path: /home/ziyuan/homeassistant/config
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - pve-ubuntu

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: homeassistant-ssh-pv-local
spec:
  capacity:
    storage: 2Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: homeassistant-ssh-local-storage
  local:
    path: /home/ziyuan/homeassistant/ssh
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - pve-ubuntu

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: homeassistant-config-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: homeassistant-ssh-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: homeassistant-config-pvc-local
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: homeassistant-config-local-storage

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: homeassistant-ssh-pvc-local
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
  storageClassName: homeassistant-ssh-local-storage

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: homeassistant
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      name: homeassistant
  template:
    metadata:
      labels:
        name: homeassistant
    spec:
      hostNetwork: true
      containers:
      - name: homeassistant
        image: ghcr.dockerproxy.com/home-assistant/home-assistant:2024.3.3
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - NET_RAW
            - NET_BROADCAST
        ports:
        - containerPort: 8123
        volumeMounts:
        - name: config
          mountPath: /config
        - name: ssh
          mountPath: /root/.ssh
          readOnly: true
        - name: time
          mountPath: /etc/localtime
          readOnly: true
      volumes:
      - name: config
        persistentVolumeClaim:
          claimName: homeassistant-config-pvc-local
      - name: ssh
        persistentVolumeClaim:
          claimName: homeassistant-ssh-pvc-local
      - name: time
        hostPath:
          path: /etc/localtime

---
apiVersion: v1
kind: Service
metadata:
  name: homeassistant
spec:
  type: ClusterIP
  clusterIP: 10.43.235.121
  selector:
    name: homeassistant
  ports:
  - port: 8123
    targetPort: 8123

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant