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
コンテナ内インストールディレクトリ
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 AssistantをNginxプロキシーサーバ経由で配置しているため、以下のスタンドアローンモードでLet’s Encryptの認証を取得、取得したファイルをHome AssistantのDockerコンテナと共有します。
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