コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home Assistantでホームオートメーション】HAサーバ再構築(Raspberry Pi 4)

【Home Assistant(Hass.io)】
Raspberry PiにHome Assistant導入

Home Assistantはどんどんバージョンが上がってゆきます。使っているシステムが活発に開発されているのは大変喜ばしい限りです。なんと0.99まで行き、さらに進んでついにVersion 1.0に!とはならず、0.99の次は0.100という反則的なバージョンニングで着々とバージョンを上げております。

ちょうど一年経ちましたし、UIとかインテグレーションの導入なども結構変わったので、サーバーから一新してみましょう。「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。

ちなみに前回の導入は下記の通りです。

maky-ba.hatenablog.com

この記事の前提条件
Home Assistant 0.114.0
HassOS 4.12
Server Raspberry Pi 4(2GB)

(最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています。最近はアップデートによる不具合はかなり減っている印象です。)

1. 準備

さてまずは本命のホームオートメーションサーバの準備を進めてゆきましょうか。 サーバーにするのはちょっともったいないけど、Raspberry Pi 4も誕生日で値段が安くなったので、今回はこれでHome Assistantを構築しましょう。

f:id:maky_Ba:20200813171353j:plain:w150:left サーバ(ハード)Raspberry Pi 4 Model B (2GB)
最近の推奨ハードウェアはRaspberry Pi 4になっています。今回はRaspberry Pi Shop by KSYで買いました。送料無料にするのに色々買わないとだめなのがちょっと玉に瑕なサイトですが。

f:id:maky_Ba:20200814232820j:plain:w150:left SunFounder Raspberry Pi 4B ケース
サーバ用途なのでファン付きで、今回はさらに全体がアルミヒートシンクのものを買ってみました。ちょっとカッコイイ、と思う。でも、端子とかにホコリがたまりやすそう。

f:id:maky_Ba:20200813222920j:plain:w150:left Smraza Raspberry Pi 4 用USB-C 電源アダプター 5V 3A
RaspberryPi4は3同様が2.5Aは必要なのでそこいらにあるUSB電源アダプタ流用は難しいですね。 なおRaspberry Piは電源スイッチが無くUSBケーブルの抜き差しが電源スイッチ代わりなので、途中のスイッチ付きは便利です。

f:id:maky_Ba:20200813172002j:plain:w150:left SDカード (microSD 64GB)
前回は高耐性のMLCタイプのSDカードを使って問題なく動いてます。が、今回はコストコで安売りしてたSDカードを使ってみます。なんたって64GB1枚あたり800円弱ですからねぇ。

f:id:maky_Ba:20200813172639j:plain:w150:left サーバ(ソフト)
Home Assistant

https://www.home-assistant.io/getting-started/

それ以外に必要なもの:

2. さあHome Assistant(Hass.io)を導入するぞ

2度目なのでさっくりいきましょう。 基本的には、Install Home Assistantに従ってインストールを進めれば良い。下記のその手順。

(1) ソフトウェア(Hass.io)のダウンロード

Installing Hass.ioのページから該当するハードウェアのzipファイルをダウンロードする。今回はRasPi4なので『Raspberry Pi 4 Model B (1 GB, 2 GB and 4 GB model) 32-bit (recommended)』をダウンロードする。

(2) SDカードに書き込む

Windows/Mac/Linux用のSD書き込みソフトbalenaEtcherをインストールする。SDカードのフォーマットは気にしません、Etcherくんが適当にFAT32にしてくれそうだし、余ったところはきっと自動で拡張しているのでは(未確認ですが)。SDカードをパソコンに挿入して、balenaEtcherを起動し、下記のステップ(画面左から順に)で書き込む。

  1. Select image: (1)でダウンロードしたzipファイルを指定
  2. Select drive: SDカードのドライブ(決してシステムドライブとかと間違えないこと)
  3. Flash!: これで書き込み開始

f:id:maky_Ba:20200814233735j:plain:w400

(3) Raspberry Piの固定IP化

いつもどおりルーターDHCPでのIPの割り当て時に固定IPを割り当てるようにします。

1) IP確認の準備
今回準備したルーター(インターネット接続までは準備を完了していること)に接続したスマホタブレットに、Fing(iPhone/Android)をインストール。このアプリで同一ネットワーク内のマシンのIPやMACアドレスがわかるようになる。
2) Raspberry Piの起動
MicroSDカードを挿入し、LANケーブル(準備したルーターに繋いだもの)を接続し、最後に電源(USBケーブル)を接続する。しばらく激しくLEDが点滅するので傍観する。
3) IPアドレスMACアドレスの確認
LEDの点滅が落ち着いたら(本当はHass.ioのネットワーク初期設定が完了したら、だが外からはよくわからない)、Fingを起動し準備したルーターを選択。Bonjour名:homeassistant、MAC販売元:Raspberry Piというデバイスがあるはず(なければもう少し待つ)なので、そのIPアドレスMACアドレスをメモる。(例:IPアドレス=192.168.1.3、MACアドレス=B8:27:EB:xx:xx:xx)
4) ルーターDHCP設定
ルータ毎にDHCPでの振り出しIPの固定化手順は違うと思うが、私が使っているBuffaloのルーターでは、「Internet/LAN」→「DHCP リース」で、3)で調べたMACアドレスを「手動割当」に変更できる。(例えば、192.168.1.30に設定(固定)する)
5) Home Assistantの画面にアクセス
先ほどFingを実行したスマホ/タブレットのブラウザからhttp://(Raspberry PiIPアドレス):8123にアクセスする。Name/Username/Passwordを設定しろと言われるので、設定する。
f:id:maky_Ba:20200814235315j:plain:w350
UsernameとPasswordは、このHass.io(Raspberry Pi)にアクセスするときに使うので忘れないように。 左側のメニューから設定(歯車のマーク)を選び、「サーバーコントール」(下の方にあります)→「サーバー管理」「再起動」とすすむ。
6) IP固定化の確認
Raspberry PiのLEDのチカチカ(Hass.ioの起動中)が落ち着いたら、再びFingでhassioデバイスIPアドレスを確認する。

(4) Home Assistantの起動確認

さきほど既に、Home Assitant画面にアクセスしてますが、固定IP化したアドレスhttp://<Raspberry PiのIPアドレス>:8123 でHome Assistantの画面を開く。何も設定していないので、さみしい画面が表示されるはずです。

f:id:maky_Ba:20200815000243j:plain:w400
Hass.io初期画面

 ここまででRaspberry PiにHome Assistantを導入出来ました。さあデバイスなどをガンガン使えるようにしたいところですが、センサーなどを繋ぐ前に、すこし便利ツールなどの初期設定を続けます。

2. Add-Onの導入

いろいろな便利な機能をAdd-On(アドオン)として組み込み可能。 左側のメニューで「Supervisor」 を選び、「Add-on store」タブに進みます。下記のようなアドオン一覧がでるので、クリックして出てきた画面でインストールします。以前インストールしたバージョン(0.95)に比べると、各アドオンにアイコンが追加されグラフィカルで目的のアドオンを探しやすくなりました。

f:id:maky_Ba:20200815101836j:plain インストールしたいアドオンをクリックすると、アドオン画面に遷移するので、そこの「Info」タブの中の「Install」をクリックするだけでインストールは完了します。

(1) Check Home Assistant configuration

 新しいバージョンになった時に設定ファイルに互換性があるかどうかのチェック用。アドオンの設定もバージョン0.95時代とは進歩していて、各アドオン毎に上に「Info」「Documentation」「Configuration」「Log」とタブが分けられています。Configurationタブにversion: latestと設定されていれば大丈夫です。
 新しいバージョンの通知が来たら、Infoタブの中の「Start」をクリックしてしばし待ちます。Logタブを確認してINFO: Configuration check finished - no error found! :)となっていれば新バージョンに移行しても大丈夫(らしい)。 f:id:maky_Ba:20200815103327j:plain

(2) File editor

 旧Configurator。もともとは設定ファイル(configuration.yaml等)をHomeAssistant上/ブラウザ上で編集できる機能でした。ちなみにConfigurator登場以前は、sambaでフォルダ共有してwindowsで編集して戻すとか sshでリモート接続(Windows Subsystem for Linuxを活用)してリモートでファイル編集する、とか結構面倒でした。
 configuration.yaml以外も編集可能なので、アドオン名も正しくFile editorになりました。 インストールして、スタートすれば使えるようになります。[Show in sidebar]トグルをオンにすると、左側のメニュー(サイドバー)に、File editorという項目が追加されます。

f:id:maky_Ba:20200815105116j:plain

 左側のメニューからFile editorを起動し、ブルーのバーの左端にあるフォルダをクリックすると編集するファイルが選べます。またブルーの帯の右端のギアマークをクリックすると画面に出ているような様々な操作(再起動(Restart HASS)等)が呼び出せます。 f:id:maky_Ba:20200815105243j:plain

(3) DuckDNS

 Dynamic DNSの一つであるDuckDNSを使うためのアドオン。外からアクセスするために利用します。 プロバイダ(光プロバイダ等)からグローバルIPをもらっていない場合(大半がそうだと思います)に、プロバイダから割り当てられたIPが変わっても上手いこと接続できるように名前で接続できるようにする仕組みがDynamic DNSです。  外からHome Assistantにアクセスするためには、1) IPではなく名前でアクセスできる事(Dynamic DNS)、2) httpsでセキュアに接続できる事、が欠かせません。DuckDNSアドオンではこの両方(正確には 2)はLet's Encryptの機能ですが、このアドオンの裏側で使えるようになるので知らなくて良いハズ)が実現できます。

DuckDNSの「Documentation」タブの内容通りにやればよいのですが、設定の仕方、コツをメモしておきます。 f:id:maky_Ba:20200816151612j:plain

1) ルーターの外側(INTERNET側/WAN側)のIPの確認
 通常のプロバイダ契約では一時的(といってもかなり長い間同じIPが割り当たりますが)に割り当てられたインターネット上のあなたのIPを知っておく必要があります。
下記のサイトにアクセスするとあなたの外向きのIPを知ることができます。

www.cman.jp

2) DuckDNSの登録
 下記サイトを開いてTwitter/GitHub/reddit/Googleのいずれかのアカウントを用いてログインし、下記を設定/取得する。

www.duckdns.org

  • domain (ex. maky-home)
  • token (ex. 8f68773c-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  • ip (あなたのルーターの外側(INTERNET側/WAN側)のIP。これは後でDuckDNSにて自動的に更新される)

 これで外部から<あなたのドメイン>.duckdns.orgで、あなたのルーターまでアクセスすることができるようになりました。

3) DuckDNSアドオンの設定
 左側メニュー「Supervisor」 - 「Dashboard」タブ - 「Duck DNS」と進み、アドオン画面を開き、Configタブの欄に先ほどのtoken、domainを設定する。

lets_encrypt:
  accept_terms: true
  certfile: fullchain.pem
  keyfile: privkey.pem
token: <あなたのtoken>
domains: 
  - <あなたのdomain>.duckdns.org
seconds: 300

 先ほどのFile editorアドオンを早速使って、configuration.yamlファイルのhttp:の項に下記を記述。

http:
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

4) ルーターの設定
 外からhttps:// で呼ばれたら(細かく言うとport 443で呼ばれたら)、ルーターの内側にいるHome Assistantサーバのport 8123へと繋いであげる必要があります。 これはルーター毎に異なるので、詳しくは自分のルーターの取扱説明書を見ていただきたいのですが、私のBuffaloのAirStationでは、[ゲーム&アプリ]タブの中の[ポート変換]で設定できます。 「ポート変換の新規追加」画面で設定すればうまく動きました。

  1. グループ: 既存のグループでよいでしょう。無ければ新規追加。
  2. Internet側IPアドレス:「エアステーションのInternet側アドレス」
  3. プロトコル: TCP/UDP、「HTTPS(TCPポート443)」
  4. LAN側IPアドレス:<あなたのHome AssistantサーバのIP>
  5. LAN側ポート: 8123

5) DuckDNSアドオンのスタート
 左側メニュー「Supervisor」 - 「Dashboard」タブ - 「Duck DNS」と進み、「Info」タブでアドオンをスタートさせる。この時、結構時間がかかるが、LOGタブを見ておき、Errorとか出ていないか眺めておく。 ここでじっと待つのが肝、のような気がする。ここで焦ってカチャカチャ操作するとうまくLet's Encryptとかが登録されない。 順調に行けば、Let's Encrypt とかの設定も、DuckDNSへのルータIPの設定等も行われるはず。

(4) SSH & Web Terminal

 sshでセキュアに別のPCからHass.ioに接続したり、セキュアなFTPでファイルをやり取りしたりできるsshサーバ機能とweb版のTerminal画面のアドオン。やはり基本としてリモートでHass.ioに接続できるようしておくと、後々色々と安心・便利です。

 ただし、かなりいろいろと触れる機能なのでデフォルトではAdd-on storeに出てきません。左側メニューの一番下のProfile(ログインユーザ名が書いてあるところ)を選んで、Profile設定画面で「高度モード」(Advanced Modeの事です)のトグルをオンにすると、Add-on storeに出てくるアドオンが増えます。 f:id:maky_Ba:20200815160937j:plain

 製作者はOfficialな感じなのですが、アドオンはOfficialアドオンではありません。「Add-on store」タブの下の方の「Home Assistant Community Add-ons」の中にあるので、それをインストールします。とりあえず使いたければConfigタブのデフォルトにpasswordだけ記述すれば動きます。Logのタブを見ると「passwordはお勧めしません。public-keys authenticationすべし」とコメント出ますけど。(それから、適当なパスワードtestとかを設定するとin the Have I Been Pwned databaseと言われてスタートできませんよ)

sshのpublic-key authenticationのキーを生成するのには色々な手があります(日本語ならここらあたりが参考になるかと)。

私はWSL(Windows Subsystem for Linux、過去の私の記事ならここらへんかな)で生成しました。

$ mkdir -m 700 ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/ユーザホーム/.ssh/id_rsa): <デフォルトでいいのでそのままリターン>
Enter passphrase (empty for no passphrase):<パスフレーズ(忘れないように)>
Enter same passphrase again:<もう一度同じパスフレーズを>
$ cp ~/.ssh/id_* /mnt/c/Temp (WindowsのCドライブにTempというディレクトリを作っておく)

 これでTempディレクトリにid_rsa秘密鍵)とid_rsa.pub(公開鍵)の二つのファイルができました。公開鍵id_rsa.pubをsshサーバに設定したいので、id_rsa.pubファイルをテキストエディタで開いて鍵の文字列をコピーして、「Configuration」タブの中に下記の様に記載します。

ssh:
  username: hassio
  password: ''
  authorized_keys: [(先ほどのid_rsa.pubの中身のssh-rsaより後ろの部分の文字列(長いよ))]
  sftp: false
  compatibility_mode: false
  allow_agent_forwarding: false
  allow_remote_port_forwarding: false
  allow_tcp_forwarding: false
zsh: true
share_sessions: true
packages: []
init_commands: []

アドオンを再起動すれば使えるはず。sshでリモートから接続するときは、秘密鍵を設定してから接続すればうまくいくはず(もっぱらWeb版のTerminal画面しか使っていないのでよくわかりません)。

3. おわりに

 前回は「Configuration.yamlの記述」「UIの設定」と進めましたが、現在のHA(Home Assistant)の潮流は極力GUIで設定できるようにIntegration機能を拡充する方向にあります。あまりConfiguration.yamlやほかの.yamlファイルをゴリゴリ書く時代は過ぎつつある様子です。
 Cofiguration.yamlはそのうち出てきますし、UIはLovelace UIというのがまともに動くようになって、UIでUIを設定できるようになりました(ラブレス、は詩人でしょうか、どんな意味が…)ので、それも今後触れてゆきたいと思います。ということで、一旦、Home Assistantサーバ再構築は終了としたいと思います。

 P.S.
 前回『Home Assistantはバージョンが変わると結構設定の仕方が変わるのに、説明があんまり体系的でない。英語圏の人でも「これどうやるの?」ってコミュニティで聞きまくっているので、そこん所どうにかならんかなあ。』と書きましたが、これは変わらずです。逆にガンガン新機能を出してくるのでついていくのが大変。

maky-ba.hatenablog.com