ホーム » 「HomeAssistant」タグがついた投稿

タグアーカイブ: HomeAssistant

システム

最近の投稿

アーカイブ

カテゴリー

HomeAssistant で洗濯機の監視

HomeBridge の homebridge-people-pro で色々な機器を ping で監視し、その On/Off 変化に応じて通知を飛ばすスクリプトを運用している。でも、HomeAssistant のオートメーションで同様のことが可能となる。

スマートフォン への ping での監視は短時間の切断が発生するので、自作スクリプトの処理で対応しているので homebridge を全廃とはいかないけど、ボチボチと HomeAssistant に移行したい。

洗濯機の監視

自宅洗濯機は、洗濯乾燥中に ping が通って、停止すると ping が切れるだけなので、洗濯機の停止の通知なら単純。

google-home で喋らせるスクリプトは運用できている。Ping(ICMP) で洗濯機, user_a, user_b の監視は登録済み。発声の通知は user_a, user_b のどちらかが居る場合のみにしたいので、以下のような設定となった。

((( shell_command.yaml )))
sh_google_notify_washer_stop: "/usr/bin/ssh -i .ssh/id_ed25519 user@host /usr/local/bin/google-home-player.sh '洗濯機停止"

((( automations.yaml )))
- alias: "洗濯機停止の報告"
  trigger:
    - platform: state
      entity_id: "binary_sensor.washer"
      from: "on"
      to: "off"
      for:
        minutes: 1
  condition:
    - condition: or
      conditions:
        - condition: state
          entity_id: "binary_sensor.iphone_user_a"
          state: "on"
        - condition: state
          entity_id: "binary_sensor.iphone_user_b"
          state: "on"
  action:
    - service: "shell_command.sh_google_notify_washer_stop"

HomeAssistantのボタン・スイッチ

HomeAssistantの設定にようやく慣れてきた。

Raspberry-Pi の別ホスト(host)で CEC を使ってテレビの ON/OFF のスイッチや、入力切替操作ができるボタンを設置してみた。

別ホストでの処理を ssh で実行

HomeAssistant のローカルから 別ホスト に ssh で login できるように設定。

$ sudo docker exec -it homeassistant bash
host:/config# ssh-keygen -i .ssh/id_ed25519
host:/config# ssh-copy-id -i .ssh/id_ed25519.pub user@host

ボタンとスイッチを yaml で登録

スイッチ操作するための設定を configuration.yaml に登録する。

shell_command , template は、この後、色々と登録することになるので、別ファイルにまとめる。

((( configuration.yaml )))
# 設定を別ファイルにまとめる
shell_command: !include shell_command.yaml
template: !include template.yaml

((( shell_command.yaml )))
# スイッチ/on/off (cec-client.sh でCECで制御できるように設定済み)
sh_tv_on:  "/usr/bin/ssh -i .ssh/id_ed25519 user@host /usr/local/bin/cec-client.sh tv on"
sh_tv_off: "/usr/bin/ssh -i .ssh/id_ed25519 user@host /usr/local/bin/cec-client.sh tv off"
# 入力切替のコマンド
sh_tv_src: "/usr/bin/ssh -i .ssh/id_ed25519 user@host /usr/local/bin/cec-client.sh tv src"

((( template.yaml )))
# ボタン-------------------
- button:
    - name: "TV入力"
      unique_id: "btn_tv_src"
      press:
        action: "shell_command.sh_tv_src"

# スイッチ
# サービス Ping(ICMP) で tv の ping を登録済み
- switch:
    - name: "TV"
      unique_id: "sw_tv_power"
      state: "{{ is_state('binary_sensor.tv', 'on') }}"
      turn_on:
        - action: "shell_command.sh_tv_on"
      turn_off:
        - action: "shell_command.sh_tv_off"

homeassistant を watchtower で更新

先日 DHCP の設定で、Docker 環境が DHCPREQUEST を出しているかもとの勘違いで、HomeAssistant をアンインストールしていたけど、改めて HomeAssistant を運用再開。

HomeAssistant の運用再開(HTTPSに変更)

HomeAssistant のイメージダウンロードして、設定を最初から…と思ったけど、前回インストールしてあったものが残ってて、一発で環境が復活。

でも、homeassistant の更新方法を確認すると、docker image をダウンロード, stop, remove ,新しいイメージを run させるとかの手順が出てきて面倒。Gemini に聞いたら、Watchtower を勧めてくれた。

また、HomeAssistant を https で起動するように設定を見直す。

$ sudo docker stop homeassistant
$ sudo docker rm homeassistant
$ sudo docker run -d \
    --name homeassistant \
    --privileged \
    --restart=unless-stopped \
    -v /var/lib/homeassistant:/config \
    -v 証明書へのPATH:/certs:ro \
    --network=host \
    ghcr.io/home-assistant/home-assistant:stable
$ sudo /var/lib/homeassistant/configuration.yaml # 以下を追記
http:
  ssl_certificate: /certs/fullchain.pem
  ssl_key: /certs/privkey.pem
$ sudo docker restart homeassistant

Watchtower で HomeAssistant の更新

HomeAssistant を自動更新させる Watchtower をインストールする手順は、Gemini に出てきた設定方法をそのまま実行。

$ sudo docker run -d \
  --name watchtower \
  --restart=unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --interval 86400 homeassistant

$ sudo docker ps
CONTAINER ID IMAGE                                        COMMAND                  CREATED     STATUS                         PORTS    NAMES
e94a5eea7468 containrrr/watchtower                        "/watchtower --inter…" 4 seconds ago Up 1 second (health: starting) 8080/tcp watchtower
94c7a25097d4 ghcr.io/home-assistant/home-assistant:stable "/init"                6 minutes ago Up 6 minutes                            homeassistant

でも、現状のバージョンが 2025.9 だったので、最新の 2025.12 に早々に上げたいので、確認したら、以下のように、 –run-once を指定して実行すればいいらしい。

$ sudo docker run --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        containrrr/watchtower \
        --run-once \
        homeassistant

エラーが出たので、Gemini の協力もあり、バージョン指定で更新。

$ sudo docker run --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -e DOCKER_API_VERSION=1.44 \
        containrrr/watchtower \
        --run-once \
        homeassistant

無事に、2025.12.5 に更新ができた。

んん? –run-once で更新ができるのなら、watchtower を起動させっぱなしなのは、プロセス資源がもったいない。/etc/cron.monthly で “docker run … watchtower –run-once …” を実行した方がいいじゃん。docker stop/rm watchtower して cron 管理に移行させた。

Docker管理の Portainer のインストール

Docker 絡みで Gemini にお勧めを聞いたら、Docker を Web の GUI で管理ができる Portainer をすすめられた。
ということで、おすすめ設定を実行。

https 通信を使うので、オレオレ証明書のエラー画面で継続をすると、自宅サーバのアクセスで信用できない通信が表示されるようになる。そこで自宅サーバの証明書を使うように設定を追加。(Gemini に聞くと証明書の設定方法を提案してくれる。便利。)

((( 設定データ保存用のボリューム作成 )))
$ sudo docker volume create portainer_data

((( Portainer コンテナの起動 )))
$ sudo docker run -d \
        -p 8000:8000 \ # Edge Agent通信用の HTTPポートの割り当て
        -p 9443:9443 \ # HTTPSポートの割り当て
        --name portainer \
        --restart=always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v portainer_data:/data \
        -v 証明書へのPATH:/certs \
        portainer/portainer-ce:latest \
        --sslcert /certs/fullchain.pem \
        --sslkey  /certs/privkey.pem

Homebridge を https に変更

Dockerの https の設定がうまくできたし、Homebridge も https で使えないか確認。ただし、homebridge は user=homebridge で起動しているので、アクセス権を与えないと、秘密鍵が読めない。かといって 証明書のアクセス権をユルユルにするのも避けたいので、Geminiに設定を提案してもらうと ACL でアクセス権を与える方法を示してくれた。(Linux での ACL の使い方、参考になる。Geminiに感謝。)

((( ACL で 読み込み権限を与える )))
$ sudo setfacl -m u:homebridge:r 証明書へのPATH/fullchain.pem
$ sudo setfacl -m u:homebridge:r 証明書へのPATH/privkey.pem

((( /var/lib/homebridge/config.json )))
"platforms": [
    {                                                                                                       "name": "Config",
        "port": 8581,
        "lang": "ja",
        "theme": "purple",
        "menuMode": "default",
        "lightingMode": "light",                                                                            "sessionTimeout": 100000,
        "platform": "config",
        "ssl": {
            "cert": "証明書へのPATH/fullchain.pem",
            "key": "証明書へのPATH/privkey.pem"
        }
    },

((( homebridge 再起動 )))
$ sudo systemctl restart homebridge

ということで、homebridge, HomeAssistant, DockerのPortainer などの Web サービスを https 化することができ、ブラウザの「保護されていない通信」の表示を消すことができた。

Home Assistant のインストール

Google Home mini などでの音声操作は、Google Home に Switchbot を連携させて、使えるようになって十分に便利になったけど、調べて出てきた Home Assistant も試してみたくなった。

Docker をインストール

普通に、Ubuntu の Docker をインストールする手順にてインストール。

Docker に Home Assistant をインストール

参考にしている記事などでは、homebridge なども Docker でインストールしているけど、我が家は homebridge が既に動いているので Home Assistant だけを docker で動かせばいい。これにあわせ、docker-compose.yml を作成。Docker 内の設定ファイルが保存される /config は、/var/lib/homeassistant にマウントさせる。

((( /etc/homeassistant/docker-compose.yml )))
version: '2'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /var/lib/homeassistant://config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
$ cd /etc/homeassistant
$ sudo docker-compose up -d
$ sudo docker ps
CONTAINER ID   IMAGE                                          COMMAND   CREATED          STATUS          PORTS     NAMES
xxxxxxxxxxxx   ghcr.io/home-assistant/home-assistant:stable   "/init"   15 minutes ago   Up 15 minutes             homeassistant

設定がうまくいったら、http://localhost:8123 を開いて、ユーザ登録などを行う。

 

設定ができた後は色々と設定して、最終的に以下のような画面となった。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト

メタ情報