自宅のスマートホーム化の進捗確認で資料を作ってみた

# はじめに
これが、私が目指しているスマートホームなのか...

【注意!】 技術記事というよりはポエ〜ム的な要素が多いです。

# 1. スマートホームにおける自動化とは
人がやってる事を自動化して、さらに三者に見えるようにしたものなのかな？と考えました。

![スクリーンショット 2022-02-03 17.54.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/8ad8f85c-47d2-c0db-c17f-59c1fbbcb7ec.png)

※イラストは「[ソコスト](https://soco-st.com/)」の素材を使わせて頂いております。

# 2. Node-REDによる自動化の実現

- Node-REDはデバイスを操作する方法が豊富にあります
- Node-REDはセンサー情報を収集する方法が豊富にあります
- Node-REDは他のアプリと容易に連携できます

つまり、Node-REDはスマートホーム化するのに、めちゃくちゃ向いてると思ってます。

![スクリーンショット 2022-02-03 17.56.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/e65a7bca-23fa-5671-d000-b94e0733eeb1.png)

# 3. センサーからの情報収集の例 (BLEビーコン)
「情報を集める」部分の例です。

![スクリーンショット 2022-02-03 18.02.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/5adede75-9e80-453a-f447-494679d0a4b8.png)

BLEビーコンの場合、「node-red-contrib-blebeacon-scanner」を利用しました。

https://flows.nodered.org/node/node-red-contrib-blebeacon-scanner

センサー用の専用ノードが提供されている場合もありますが、種類の違う複数のセンサーを1つのBluetoothデバイスで受信したい場合は、汎用的な「node-red-contrib-blebeacon-scanner」ノードを1つ配置して使うしかないと思います。
受信したビーコンは各センサーのIDで区別し、functionやchangeノードでビット演算して目当ての値を取り出す形となります。

取り出したデータは、時系列DBに蓄積するのがベストです。私の場合は自宅にやや高可用性のElasticsearchを構築しているので、そこに蓄積しています。

# 4. デバイス/サービスと自動制御の例 (照明&カーテンの操作＋音声フィードバック)
集めた情報から「家電を操作する」「報告」部分の例です。センサーは設置場所により判断する数値が変わってくると思います。

![スクリーンショット 2022-02-03 18.13.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/4b22b17b-303b-5a4f-e720-5f61230355f1.png)

利用しているデバイスやサービス、用途などは以下のようになります。

| デバイス/サービス | 用途 | 通信 | 備考 |
|:-----------:|:------------:|:------------:|:---:|
| Braveridge Sizuku Lux | 室外の照度センサー | BLEビーコン | 「Project Linking」の格安デバイス。→[Elastic Stackで室内環境センサーのデータを管理](https://qiita.com/Y-Shikase/items/b762616acf3e67230499) |
| EnOcean STM 550B | 室内の温度・湿度・照度センサー | BLEビーコン | 電池不要の太陽電池搭載マルチセンサー。→[自宅の環境センサーを「EnOcean STM 550B」に入れ替えた話](https://qiita.com/Y-Shikase/items/8ae5e5c492b022348b53) |
| SwitchBotカーテン | カーテンの開閉自動化 | BLE | [Raspberry Pi Zero WHでSwitchBotカーテン(BLE)を動かした](https://qiita.com/Y-Shikase/items/65c05d18fb169992a9b1) |
| LinkJapan eRemote mini | 家電操作用の学習リモコン | UDP | 安価な学習リモコンで有名だったBroadlink RM mini3の日本正規版 |
| CoeFont | 音声フィードバック用のTTS | クラウドAPI | [Node-REDでCoeFont CLOUD APIを使い高品質のTTSを試す](https://qiita.com/Y-Shikase/items/2d773dc4d970228437d5) |

学習リモコンの部分は専用ノード「node-red-contrib-broadlink-control」がありますので、記事を書いてません。

https://flows.nodered.org/node/node-red-contrib-broadlink-control

# 5. データの可視化
「報告」部分のデータ可視化の例です。頑張ってダッシュボードを作っても良いとは思いますが、私は苦労したくないので、Elastic Stackの「Kibana」を使用しています。そのためにElasticsearchにデータ保存しているといっても過言ではありません。
Elasticsearchの時系列データを、検索式など書かずにマウス操作で簡単にグラフやダッシュボードを作る事ができます。
グラフにする事で変化を知る事ができ、家電操作するタイミングを検討する事ができます。

![スクリーンショット 2022-02-03 18.42.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/7076a93e-a55e-14c9-6c00-66e0518791a6.png)

そんなElastic Stackが、なんと！無料でも利用できます。

https://www.elastic.co/jp/elastic-stack/

「自前で構築したくないよぉ〜」という方も有料で安心のクラウドサービスが利用できます。
クラウドサービスを試してみたいと言う方は、Elastic社のハンズオンなどに参加すると、しばらく使える環境が提供されるかもしれません。

# 6. デジタルサイネージアプリ (家電操作も可能)
単なるグラフや数値でのデータ可視化は「対人用に特化した可視化」とは言い切れないと考えています。
そこでNode-REDからWebhookで操作できるデジタルサイネージアプリを開発中です。(単にグラフ見るのが飽きた...)

- 開発環境： Unity , VRoid Studio
- 対象プラットフォーム： android

参考にしているのは、NTTドコモ様の「おしゃべり案内板」です。

https://www.nttdocomo.co.jp/biz/service/oshaberi_annaiban/

![スクリーンショット 2022-02-03 18.45.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/0d696005-2065-ac47-47f3-4953c4e5d1e3.png)

そこらのおっさんにアプリが作れるのか？ですが、このアプリで自分がコーディングしている部分はほとんどが変数への代入かif,for,switchのような初歩的なものばかりです。

アプリに実装中(予定)の内容は以下です。

- 音声ファイルのURLを送ると3Dモデルがリップシンクで喋り、下部のウィンドウにセリフが表示される。(ほぼ完成)
- 音声認識して返事をしてくれる。できれば家電操作もしたい。(少し実装できている)
- 天気予報情報を送るとアイコンで表示する。(未着手)
- CO2センサー値が高いとお知らせする。(未着手)
- 温度・湿度・照度を送ると表示する。(ほぼ完成)
- 家電のアイコンをタップするとトグルで家電を操作できる。(半分完成)
- もっと、もっと萌え要素が欲しい!!!

※アプリの背景は『[blocco(ブロッコ)／沼田椅子製作所](https://note.com/blocco/n/n858d229b849b)』様の素材を利用させていただいてます。

# おわりに
ご参考までに、自分でも過去に何をしてきたのか把握できなくなるので構成図を描いてみました。そう、全部Raspberry Piなのです。今のところデジタルサイネージアプリは、Raspberry Pi4に「LineageOS」をインストールし、アプリを動かしています。

![スクリーンショット 2022-02-03 19.02.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/c3e7562f-a5d2-4036-7ce5-379b2511f93e.png)

ですが、ディスプレイがタッチパネル対応ではなかったため、アイコンのタップで家電操作ができません。また、持ち運べた方が良いと考えているので、格安のAndroidタブレットを準備する予定です。
Raspberry Piの台数が多いので、PoE+とUSBタイプのSSDからのUSBブートを施し、19inchのオープンフレームラックを購入して詰め込んでます。

![IMG_2285.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/de00c49a-9982-699e-f868-60db95f4c47c.png)