Home Assistant アップグレード・インストール

python仮想環境へインストールしたHome Assistantのアップグレード

Home Assistantを停止します。

$ sudo systemctl stop home-assistant@YOUR_USER

仮想環境に入りアップグレードします。

$ cd homeassistant
$ source bin/activate
$ python3 -m pip install --upgrade homeassistant

アップグレードしたhomeassistant、.homeassistantフォルダのアクセス権を再定義します(環境により任意)。

$ sudo chown -R YOUR_USER:YOUR_USER homeassistant .homeassistant
$ sudo chmod -R 755 homeassistant .homeassistant

特定のpythonモジュールがインストールされない場合は、エラーログを参照して解決します。
(この場合、/home/YOUR_USER/.cacheのアクセス権も見直す必要があるかもしれません。)

新規インストール後、従来の設定を引継ぐ場合

python3.7(推奨バージョン)へアップグレード後python3仮想環境ディレクトリhomeassistantへインストール。

python3.7へのアップグレードについては以下参照。

$ python3 -m venv homeassistant

$ cd homeassistant

$ source bin/activate

$ python3 -m pip install homeassistant

仮想環境内で起動する場合(起動ログを確認する場合など)

$ hass --open-ui

Home Assistantのサービスデーモンを作成(python仮想環境にインストールした場合)

$ sudo nano -w /etc/systemd/system/home-assistant@YOUR_USER.service

[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/xxx/homeassistant/bin/hass -c "/home/%i/.homeassistant"

[Install]
WantedBy=multi-user.target

サービスデーモンのロード・有効化

$ sudo systemctl --system daemon-reload

$ sudo systemctl enable home-assistant@YOUR_USER

$ sudo systemctl start home-assistant@YOUR_USER

設定ファイルのコピー

Home Assistant停止後、以下フォルダ内の選択部分をコピーします。選択されていないファイル・フォルダは全て削除して下さい。

DB、logファイルは削除して新規作成

UIの設定ファイルのみ選択

起動してユーザを再設定して下さい。

注)configuration.yaml内のhomeassistant:カテゴリの以下項目は.strage/core.configに移行したため削除可能**

configuration.yaml :

homeassistant:
  latitude: 32.87336
  longitude: 117.22743
  elevation: 430
  unit_system: metric
  time_zone: America/Los_Angeles
  name: Home
# 上記省略可

# その他項目は従来通り
  customize: !include customize.yaml
  customize_domain:
  customize_glob:

.strage/core.config(起動後作成されます)

{
    "data": {
        "elevation": 0,
        "latitude": 35.xxxx,
        "location_name": "Home",
        "longitude": 139.xxxx,
        "time_zone": "Asia/Tokyo",
        "unit_system": "metric"
    },
    "key": "core.config",
    "version": 1
}

Dockerによるインストール・アップデート


インストール

Docker-Hub
https://hub.docker.com/r/homeassistant/home-assistant

Docker, Docker-Composeのインストール

$ sudo apt install docker.io docker-compose

以下docker-compose.ymlファイルをプロジェクトフォルダhome-assistant内に作成

home-assistant/docker-compose.yml

version: '3.5'

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

上記docker-composeファイルによりコンテナを起動

$ sudo docker-compose up -d

アクセス
http://<host_address>:8123


アップデート

コンテナの停止・削除(プロジェクトフォルダ内で実行)

$ sudo docker-compose down

イメージを削除

$ sudo docker rmi  homeassistant/home-assistant

再度docker-composeをアップすることで、最新のイメージがダウンロードされてコンテナが起動します。

$ sudo docker-compose up -d

Dockerコンテナで起動する場合、以下表で示したように、コンテナバージョンはコアバージョンをコンテナナイズしただけなので、add-onsなどの機能拡張を使用する場合には、SupervisedバージョンかOSバージョンによるコンテナを用意する必要があります。

Compare Installation Methods

OS Container Core Supervised
Automations :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
Lovelace :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
Integrations :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
Blueprints :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
Uses container :white_check_mark: :white_check_mark: :x: :white_check_mark:
Supervisor :white_check_mark: :x: :x: :white_check_mark:
Add-ons :white_check_mark: :x: :x: :white_check_mark:
Snapshots :white_check_mark: :x: :x: :white_check_mark:
Managed OS :white_check_mark: :x: :x: :x:

コンテナ内インストールディレクトリ

bash-5.0# ls /usr/src/homeassistant
CLA.md                            azure-pipelines-release.yml       requirements_all.txt
CODEOWNERS                        azure-pipelines-translation.yml   requirements_docs.txt
CODE_OF_CONDUCT.md                azure-pipelines-wheels.yml        requirements_test.txt
CONTRIBUTING.md                   build.json                        requirements_test_all.txt
Dockerfile                        codecov.yml                       requirements_test_pre_commit.txt
Dockerfile.dev                    homeassistant                     rootfs
LICENSE.md                        homeassistant.egg-info            script
MANIFEST.in                       machine                           setup.cfg
README.rst                        pyproject.toml                    setup.py
azure-pipelines-ci.yml            requirements.txt                  tox.ini

Let’s Encryptによるhttps対応

Home AssistantNginxプロキシーサーバ経由で配置しているため、以下のスタンドアローンモードでLet’s Encryptの認証を取得、取得したファイルをHome AssistantDockerコンテナと共有します。

Nginxで指定したドメインの設定ファイル(www.example.com)を、同一LAN上に配置したHome Automationサーバマシン(Dockerコンテナ)へ導きます。

httpsをhttpへ変更後、次の手順に進んで下さい(認証取得後httpsへ戻す必要はありません)。

.....
location / {
        proxy_pass http://192.168.x.xx;
.....

Home Automationサーバのポート80を開放して以下コマンドを実行します。

$ sudo certbot certonly --standalone --preferred-challenges http -d www.example.com

以下ディレクトリに認証ファイルが作成されます。
/etc/letsencrypt/live/www.example.com

Dockerボリュームを作成、ここに上記のディレクトリをコピーします。

$ docker volume create letsencrypt
$ sudo cp -r /etc/letsencrypt/* /var/lib/docker/volumes/letsencrypt/_data

docker-composeファイルで認証ファイルが共有されるよう指定します。
注: または直接ホストのディレクトリ/etc/letsencryptを指定しても構いません。その場合、Dockerボリュームは必要ありません。)

...
...
volumes:
      - letsencrypt:/etc/letsencrypt
...
...
volumes:
    letsencrypt:
      external: true

認証は90日間の期限付きのため、定期的に認証取得が行われるようcrontabにコマンドを記述します。

$ sudo crontab -e

#certbot renew          
@monthly sudo certbot renew && sudo cp -r /etc/letsencrypt/* /var/lib/docker/volumes/letsencrypt/_data

Docker CertbotによるTLS認証

Certbotコンテナにより、Lets EncryptによるTLS証明書を事前に取得

$ docker run -it --rm --name certbot -v "$PWD/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" -p 80:80 certbot/certbot certonly --standalone -d stun.example.com

更新

$ docker run -it --rm --name certbot -v "$PWD/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" -p 80:80 certbot/certbot renew

クローンジョブスケジュールに更新コマンドとHome Assistant再起動コマンドを追加

$ sudo crontab -e
0 2 1 * * docker run -it --rm --name certbot -v "$PWD/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" -p 80:80 certbot/cert>
5 2 1 * * docker compose restart