HomeAssistantの連携例

# 概要
Home assistantを使ってやってるおうちハックのメモ
試行錯誤してきた結果なのでベストじゃないかもしれない
※未完成。反応あれば追記します。

# Home Assistantとは
インストールなどは[公式のinstallation](https://www.home-assistant.io/installation/)を参照
Raspberry Pi推奨
他の環境だとインストールできないアドインとかあったり、周辺H/Wがラズパイ専用だったりする

# H/Wプラットフォーム
* Raspberry Pi4 Model B 4GB
    * Amazon.co.jpで購入
    * 通常時でCPU:2%、RAM:10%程度しか食ってないので、Pi3とかでもいいと思う
    * BT内蔵モデルならBLEトラッキングで在宅確認できたりするので便利
* SDカード SanDiskの16GB
    * Amazon.co.jpで購入
    * 電源をブチるとデータも破損しやすいので品質の良いメーカーがいい
    * スクリーンショットとか保存しなければ8GBあれば十分
* 電源とケーブル
    * 2A(20W)以上の電源推奨
    * AnkerのACアダプタから、TypeCで給電してる
    * 太いケーブル推奨
* ケース
    * 熱を持つので金属ケースか、ファン必須
    * ファンは煩くて嫌いなので金属ケース使用
    * 金属ケースだとWiFiとかBlutoothの電波減衰するかも
* 有線LAN
    * 有線派なので
* [RaspBee II](https://phoscon.de/en/raspbee2) 
    * Amazon.comで購入(たぶん)
    * RaspPiのGPIO(UART)に挿して、Zigbeeの機器と通信するやつ

# Home Assistantのしくみ
Raspberry piのSDカードにインストールすると下記の構成になる。
supervisorでアドインの管理が出来るし、アドインは環境への依存度が低くなるのでコンテナ最高
基本機能やinjection、HACSはHomeAssistantCore(以下HSCore)にインストールされる
![stac.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/d8153b1c-5f0d-52e9-b896-b7a52c7d1b69.jpeg)

# 設定方法
* 設定ファイル`/config/configuration.yaml`
    * 編集方法
        * U/Iから編集：設定から変更
        * File Editorアドオン使って編集
        * Visual Studio Codeアドオン使って編集
        * Samba shareアドオン使ってパソコンから直接編集
          (VSCodeを使う場合、[Home Assistant用の機能拡張](https://marketplace.visualstudio.com/items?itemName=keesschollaart.vscode-home-assistant)もあります。)
    * ファイルの直接変更は反映に再起動が必要
    * 設定画面からの変更は即反映される

# 使ってるアドオン
|アドオン名|出来る事|
|---|---|
|[AppDaemon4](https://github.com/hassio-addons/addon-appdaemon)|ドメインのIPへ更新とweb画面のスクショ保存(別記事作成予定)|
|[deCONZ](https://www.home-assistant.io/integrations/deconz/)|追加HWのRaspBee II経由で、zigbee通信をして、ikeaのTRÅDFRIを制御するためのアドオン<br>[サポートデバイス](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Supported-Devices)|
|[ESPHome](https://esphome.io/guides/getting_started_hassio.html)|ESP32などのマイコンと周辺モジュールのソースを生成してHomeAssistantへ追加するアドオン<br>下記の[連携してる機器](#使ってるアドオン)を参照のこと|
|[File editor](https://www.home-assistant.io/docs/configuration/#editing-configurationyaml)|設定ファイルなどHSCore内部のファイルを編集するアドオン|
|[Home Assistant Google Drive Backup](https://github.com/sabeechen/hassio-google-drive-backup)|バックアップデータをGoogle driveへアップロードするアドオン|
|[Let's Encrypt](https://www.home-assistant.io/blog/2015/12/13/setup-encryption-using-lets-encrypt/)|いわずと知れたHTTPSの証明書を発行するアドオン<br>HTTP challengeを行う場合はTCP80のインターネットへの開放が必要<br>有料だけど[Home Assistant Cloud](https://www.home-assistant.io/cloud/)ならポート開放不要|
|[MPD](https://www.home-assistant.io/integrations/mpd/)|ラズパイで音声ファイルを再生するアドオン<br>TTSの音声ファイルの再生に使用|
|[Samba share](https://www.home-assistant.io/common-tasks/os/#installing-and-using-the-samba-add-on)|NW経由でラズパイのファイルシステムにアクセス出来るアドオン|
|[Spotify connect](https://www.home-assistant.io/integrations/spotify/)|ラズパイがSpoyfyの再生機器に出来るアドオン<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/0924e6da-3d54-ee30-85e4-47130d6cfe3f.png">|
|[SSH & Web Terminal](https://github.com/hassio-addons/addon-ssh)|web画面やパソコンからSSH出来るようにするアドオン|
|[NUT](https://github.com/hassio-addons/addon-nut)|UPSを接続するためのアドイン|

# 連携してる機器
|機器|出来る事|通信方法|連携アプリ|HSから見た種類|
|---|---|---|---|---|
|ロボット掃除機<br>iRobot Roomba980|掃除の開始やエラー取得<br>掃除のログ画像は取得不可|Wifi|[公式インジェクション](https://www.home-assistant.io/integrations/roomba)|vacuum|
|スマート照明・スイッチ<br>ikea TRÅDFRI|LED照明やスイッチを操作出来る|Zigbee|[RaspBee II](https://phoscon.de/en/raspbee2) + アドイン([deCONZ](https://www.home-assistant.io/integrations/deconz/))|light/switch|照明グループはHSCore側の機能を使うと安定する|
|スマートプラグ<br>TP-Link Kasa Smart|プラグのOn/off<br>ローカルAPIがなくなったので新規購入は控えた方がいい|Wifi|[公式インジェクション](https://www.home-assistant.io/integrations/tplink)|switch|
|UPS<br>CyberPower CP750SWLTJP|UPSの負荷やバッテリ残量の取得。アドインが安定せずデータ取得出来ないことが多々ある|USBケーブル|[アドイン](https://github.com/hassio-addons/addon-nut) + [公式インジェクション](https://www.home-assistant.io/integrations/nut/)|sensor|
|NWCamera<br>Tapo C100, C310|監視カメラと不在通知の訪問者写真取得|WiFi|低遅延を目的に[HACSのインジェクション](https://github.com/AlexxIT/WebRTC)でカメラとブラウザを直結。スナップショットの取得(camera.snapshot)はffmpegを使用する<img width=100% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/f89975e9-0d45-1940-7fe8-812d4796c684.png">|camera|
|SONY Bravia TV|パソコンと連動してTVをOn/Off、チャンネル変更、音楽の再生など|WiFi/有線|[公式インジェクション](https://www.home-assistant.io/integrations/braviatv)|media_player/remote|
|Wake on LAN(WOL)|パソコンの起動と起動状態確認(pingなのでラグあり)<br>パソコンのOffはひと工夫必要|有線(UDP)|[公式インジェクション](https://www.home-assistant.io/integrations/wake_on_lan/)<br><img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/889eb2b6-fe96-19c5-ac2d-bbff97afc208.png">|switch|
|[インターフォン(別記事)](https://qiita.com/hgn32@github/items/981798d639f473f68e80)|オートロックの自動開錠や不在通知|Wifi|ESPHome|switch/binary_sensor|
|★赤外線制御方式のシーリングファン|ファンのOn/Off/速度調整|Wifi+IR|ESPHome + [TemplateFan](https://www.home-assistant.io/integrations/fan.template/)|fan|
|★ダイキン<br>エアコン|冷暖房、温度や風量調整|Wifi+IR|ESPHome|climate|
|[便器の自動洗浄(別記事)](https://qiita.com/hgn/items/2fa257216c412c0946e1)|自動洗浄|Wifi|ESPHome|なし|
|★温度/湿度/気圧ロガー|情報の記録|Wifi|ESPHome|sensor|
|★CO2ロガー|情報の記録|Wifi|ESPHome|sensor|
|★スマホアプリ|ダッシュボードの閲覧、通知の受信、端末情報の送信(位置情報・次のアラームなど)など|WiFi/携帯回線|[公式アプリ](https://companion.home-assistant.io/docs/getting_started/)<br>[Docs](https://companion.home-assistant.io/docs/notifications/notifications-basic/)|sensor|
|★CANDY HOUSE sesame3|鍵の施錠状態取得。鍵の開錠施錠[WiFiアダプタ](https://jp.candyhouse.co/products/new-wifi)が必要|WiFi+BLE|[TemplateLock](https://www.home-assistant.io/integrations/lock.template/) + [RESTful Sensor](https://www.home-assistant.io/integrations/sensor.rest/) + [Shell Command](https://www.home-assistant.io/integrations/shell_command/)|lock|
|★ダイキン<br>空気清浄機 ACK70V|風量調整、加湿調整、LEDのOn/Off|WiFi|自作のカスタムコンポーネント<br>[参考にしたリポジトリ](https://github.com/nasshu2916/DAIKIN-API)|fan|

★： 別記事作成予定

# 連携してる外部サービス
|サービス名|出来る事|連携方法|備考|
|---|---|---|---|
|Google Calendar|予定情報を取得し、休日だったら、在宅だったらなどのif処理も可能|[公式インジェクション](https://www.home-assistant.io/integrations/google/)|
|Google現在地共有|Androidのロケーション履歴情報をGoogleのサーバから取得(定期的にCookieの更新が必要なので使ってない)|[公式インジェクション](https://www.home-assistant.io/integrations/google_maps/)|
|OpenWeatherMap|現在の天気と天気予報の取得|[公式インジェクション](https://www.home-assistant.io/integrations/openweathermap)|
|Google Translate TTS|テキストを音声にして再生する|[公式インジェクション](https://www.home-assistant.io/integrations/google_translate/)|
|Spotify|spotifyの再生をコントロール、再生状況の取得|[公式インジェクション](https://www.home-assistant.io/integrations/spotify)|
|電車の運行情報|運行状況のサイトからデータ取得して通知|[Scrap](https://www.home-assistant.io/integrations/scrape/)|
|FlightRadar24|FlightRadar24へ送っている、受信したADS-Bの機体情報数を取得|[Scrap](https://www.home-assistant.io/integrations/scrape/)|[Build your own ADS-B receiver](https://www.flightradar24.com/build-your-own)
|Google Assistant SDK|GoogleAssistantへテキストを送って処理させる(現在は不使用)<br>「XXを付けて」などは出来ない|[アドイン](https://github.com/home-assistant/addons/tree/master/google_assistant)
|Google Assistant|一部entityをGoogleHomeへ登録し、Google⇒HS⇒機器の流れで音声操作|[公式インジェクション](https://www.home-assistant.io/integrations/google_assistant/)|有料だけど[Home Assistant Cloud](https://www.home-assistant.io/cloud/)なら簡単に実現可能|

# オーバービューのサンプル
|用途|スクショ|
|---|---|
|パソコン/モバイル用<br>操作やそれに必要な情報|<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/30bcd237-9842-f88c-48e6-cda713b2b164.png">|
|アラート用<br>バッテリ残量の確認や長期的な統計|<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/a2cc494c-6bbd-b01e-066a-6d9fb7d74710.png">|
|古いスマホで常時表示用<br>玄関に設置して外出前に確認|<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/969e0285-c189-d969-ef9c-59a88c249682.png">|
|M5Paper用<br>AppDaemon4でスクショ取ってM5Paperで表示させる|<img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/e5fc9f62-b22d-3de2-a5e4-82d485d518f1.png">|


# フロントエンド用に追加してるインジェクション
HACSでインストール
|インジェクション名|目的|
|---|---|
|[Multiple Entity Row](https://github.com/benct/lovelace-multiple-entity-row)|1行にいろんなボタンや情報を表示する<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/86cdb1e5-955d-579b-93a8-65ed66734af6.png">|
|[bignumber-card](https://github.com/custom-cards/bignumber-card)|ただ大きく表示するだけ<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/7ae4103d-afbf-1f16-86d7-e04742541d04.png">|
|[card-mod](https://github.com/thomasloven/lovelace-card-mod)|ほかのカードのデザインを上書き出来る<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/77dfa803-34b2-e782-91e8-bb85abc207d1.png">|
|[apexcharts-card](https://github.com/RomRider/apexcharts-card)|高性能なグラフ描画<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/18eaedb6-9b9b-767c-952e-9e2bb1cdf92f.png">|
|[Kiosk Mode](https://github.com/maykar/kiosk-mode)|サイドバーや上部のタブを非表示にする<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/aeaf2132-4bbf-ffda-4601-8d23b10ec1b7.png">|
|[Battery State Card / Entity Row](https://github.com/maxwroc/battery-state-card)|色で分かりやすく<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/b17cfdbc-5547-09e7-d884-0f8dbd675d74.png">|
|[Atomic Calendar Revive](https://github.com/totaldebug/atomic-calendar-revive)|標準より高機能なカレンダ<br><img width=70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21931/c1154215-2add-9243-135f-1ca7b131ddcc.png">|

# オートメーションのブループリント
* まとめたら追記する

# そのほか
* 消えないentityの消し方
    * 使わなくなったentityが残り続ける場合は、下記の管理ファイルから削除する
        * `/config/.storage/core.entity_registry` 
        * .storageは隠しフォルダ
        * json形式なのでフォーマットに注意しつつ削除
        * 反映にはHSCoreの再起動が必要