Home Assistant 導入・設定手順

前提事項

構成概要

設置場所自宅
ハイパーバイザーProxmox
Home Assistant VMDebian 13
HA 実行方式Docker(Container)
DBMariaDB
Prometheus / Grafana別VM(sv05)
センサSwitchBot / M5Stack
目的家庭内センサ統合・自動化・可視化

ネットワーク構成

[ sv05 ] 192.168.1.205
├ Prometheus
└ Grafana

[ sv07 ] 192.168.1.207
├ Docker
├ Home Assistant
└ MariaDB

Debian 13 初期設定(固定IP)

systemd-networkd を使用

Bash
sudo systemctl enable --now systemd-networkd

設定ファイル

Bash
sudo vi /etc/systemd/network/10-ens18.network

設定内容

INI
[Match]
Name=ens18

[Network]
Address=192.168.1.207/24
Gateway=192.168.1.1
DNS=192.168.1.1

反映:

Bash
sudo systemctl restart systemd-networkd

確認:

Bash
ip a
ip r

Docker 環境構築

必須ツール

Bash
sudo apt updat
sudo apt install -y curl gnupg ca-certificates

Docker 公式リポジトリ

Bash
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian bookworm stable" | \
sudo tee /etc/apt/sources.list.d/docker.list

Docker インストール

Bash
sudo apt update
sudo apt install -y docker-ce docker-compose-plugin
sudo systemctl enable --now docker

確認:

Bash
sudo docker run --rm hello-world

Home Assistant + MariaDB 構築(Docker Compose)

ディレクトリ作成

Bash
sudo mkdir -p /opt/homeassistant/{config,mariadb,mariadb-conf.d}

MariaDB 設定

Bash
sudo vi /opt/homeassistant/mariadb-conf.d/99-homeassistant.cnf

INI
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone=Asia/Tokyo

docker-compose.yml

Bash
sudo vi /opt/homeassistant/compose.yml

YAML
services:
  mariadb:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: xxxxx
      MARIADB_DATABASE: homeassistant
      MARIADB_USER: homeassistant
      MARIADB_PASSWORD: xxxxx
    volumes:
      - /opt/homeassistant/mariadb:/var/lib/mysql
      - /opt/homeassistant/mariadb-conf.d:/etc/mysql/conf.d:ro
    ports:
      - "127.0.0.1:3306:3306"

  homeassistant:
    image: homeassistant/home-assistant:stable
    network_mode: host
    restart: unless-stopped
    volumes:
      - /opt/homeassistant/config:/config
      - /etc/localtime:/etc/localtime:ro

起動:

Bash
cd /opt/homeassistant
sudo docker compose up -d

Home Assistant 初期セットアップ

ブラウザ:
http://192.168.1.207:8123

  • ユーザー作成
  • タイムゾーン:Asia/Tokyo

MariaDB を Recorder に使用

Bash
sudo vi /opt/homeassistant/config/configuration.yaml

YAML
recorder:
  db_url: mysql://homeassistant:xxxxx@127.0.0.1/homeassistant?charset=utf8mb4
  purge_keep_days: 14

Bash
sudo docker restart homeassistant

Prometheus(sv05)→ Home Assistant 連携

ポイント(重要)

  • prometheus: 統合は Exporter(HA → Prometheus)
  • Prometheus → HA は REST センサーを使用

SwitchBot 温度(例)

YAML
sensor:
  - platform: rest
    name: "SwitchBot Temperature"
    resource: >-
      http://192.168.1.205:9090/api/v1/query?query=switchbot_temperature_celsius{instance="localhost:9105"}
    value_template: "{{ value_json.data.result[0].value[1] | float }}"
    unit_of_measurement: "°C"

M5Stack 温度(device 別)

    YAML
      - platform: rest
        name: "M5 Temperature m5stackC301"
        resource: >-
          http://192.168.1.205:9090/api/v1/query?query=m5_env_temperature_c{device="m5stackC301"}
        value_template: "{{ value_json.data.result[0].value[1] | float }}"
        unit_of_measurement: "°C"

    湿度・気圧も同様

    • m5_env_humidity_percent
    • m5_env_pressure_hpa

    ※ device="…" の指定は環境次第。

    よくハマるポイント

    • prometheus: include_metrics
      → Exporter 用設定。Prometheus 取り込みには使えない
    • result[0] だけ参照
      → 台数増加で壊れる。必ず device / instance 指定
    • Bluetooth エラー
      → Cloud 連携のみなら無視してOK

    この構成のメリット

    • Home Assistant を 中枢にできる
    • センサ → HA → Prometheus → Grafana → HA の循環が可能
    • Docker なので バックアップ・再構築が容易
    • センサ増設時も Prometheus 側を触るだけ

    まとめ

    • Home Assistant は Docker + host network が最安定
    • Prometheus との双方向連携は REST センサーが正解
    • M5Stack / SwitchBot のような 多デバイス構成と相性が良い
    • 可視化(Grafana)と制御(HA)を分離できる

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です