背景
最近、AWS障害が起きたため、スマートホームを提供するサービスを含め、様々なサービスに影響がありました。
昨晩深夜からのNature Remoのシステム障害ですが、AWS(アマゾンウェブサービス)の障害に起因しており、現時点で一部改善はしておりますが、完全復旧までにはもう少し時間がかかる状況です。
— Nature株式会社 (@NatureRemo_JP) November 25, 2020
ご不便をおかけて大変申し訳ございません。今しばらく復旧をお待ちいただけますと幸いです。
【AWSの異常のお知らせ】アマゾン ウェブ サービス(AWS)の異常によるデバイスの操作失敗で、一部のユーザー様が正常にサービスを使用できないことにご迷惑をおかけしまして誠に申し訳ございません。現在、AWSサポートチームと緊急修復中でございます。
— SwitchBot Japan(スイッチボット) (@SwitchBotJapan) November 25, 2020
外出先でも操作可能なようにクラウドに頼るのはいいですが、
サーバ障害が原因で在宅でも操作できない状態には少し疑問がありますね。
万一サービス終了でサーバが止まり、スマートデバイスが文鎮化するのも嫌です。
そこで、特定のクラウドサーバに頼らないスマートホームを作ってみました。
Tasmota
脱クラウドスマートリモコンを作るには、Tasmota という Arduino ESP8266 デバイス向けのIoTファームウエアを使います。Tasmotaを入れると、Wifi経由でデバイスの操作が可能になります。
ハードウエアを用意
Tasmota はカスタムファームウエアであるため、デバイスの購入がし辛いです。
そこで、既存のデバイスのファームウエアを上書きするか、パーツを購入して自分で組み立てるかの2択しかないです。
既存デバイスのファームウエアを書き換える
一部中国メーカのスマートデバイスは、Tasmota ファームウエアに書き換えることができます。
ポイントは、「Smart Life」または 「TUYA」というアプリで操作するデバイスが対象です。
Amazon または AliExpress で「スマートリモコン tuya」を検索すればすぐ出るので、探してみてください。
2000円弱で買えるし、見た目はDIYより全然綺麗なので、こちらの方がオススメです。
ただ、TUYAの新しいパッチが適用されていると、デバイスの書き換えができなくなるため注意が必要です。
ちなみに、こちらのスマートリモコンをAliExpressで買いました。
https://www.aliexpress.com/item/32986913713.html
Tasmota に書き換えるために tuya-convert を使います。
書き換えるデバイスリストはこちらをご参照ください。
DIY
ESP8266 Node MCU と 赤外線受発信モジュールで実現できます。
パーツの詳細、作り方に関しては Tasmota のドキュメンテーションを参照してください。
Tasmota を設定
Wifi 設定
初めに、デバイスをAPにしてWifiの設定が必要です。
Wifiメニューで「tasmota-XXXX」のネットワークに接続してください。
ブラウザは自動で開きますが、そうになっていない場合は http://192.168.4.1 を開けば以下のようなフォームが出てきます。
自分のWifiのSSIDとパスワードを入れます。
少なくても AP1 SSId
と AP1 Password
を入力してください。
※ 2.4GHz Wifi にしか接続できないのでご注意。
保存して、デバイスを再起動させます。
Wifiに接続できたらWifiメニューから「tasmota-XXXX」の項目が消えます。
テンプレートを設定
テンプレートはハードウエアの構成を定義する物です。
設定するには、まずIPアドレスでデバイスにアクセスします。
IPアドレスは、ルーターから調べるか、Advanced IP Scanner や Fingなどで特定すればいいです。
「Configuration」>「Configure Other」で設定をします。
スマートリモコンは、おそらく以下のテンプレートで行けると思います。
{"NAME":"IR Smart Remote","GPIO":[255,255,255,255,56,51,0,0,0,17,8,0,0],"FLAG":0,"BASE":62}
保存して、デバイスを再起動させます。
赤外線を受信
メインメニューが表示されたら、「Console」を開いて、試しに赤外線を放ちます。
リモコンをスマートリモコンに向けてボタンを押したら、こういうメッセージが出ます。
00:00:56 MQT: tele/IR_Bridge/RESULT = {"IrReceived":{"Protocol":"NEC","Bits":32,"Data":"0x41B6659A","DataLSB":"0x826DA659","Repeat":0}}
これで赤外線の受信ができています。
赤外線を発信
コンソール下部の入力欄にコマンドを打ちます。
赤外線を発信するために IRSend
というコマンドを使います。
先程受信した赤外線を発信するためには、以下のコマンドを入力します。
IRSend {"Protocol":"NEC","Bits":32,"Data":"0x41B6659A"}
家電が近くにあれば反応します。
これでTasmotaの設定完了です。
綺麗なUIを導入
毎回手動で赤外線のコードを入力するのはとても不便なので、
その間に入る Home Assistant というスマートホーム管理アプリを入れます。
Home Assistantを入れる
入れる手順はいくつかあるので、自分に合う方法で入れてください。
自宅サーバはすでにdockerをつかっているため、docker版(Home Assistant Container)を入れました。
Raspberry Piを持っている方は、Home Assistant OS が一番簡単だと思います。
MQTTサーバを入れる
Home Assistant と Tasmota デバイス間で通信するためのメッセージキューシステムです。
Home Assistant OS を使っている場合は拡張機能で簡単に入れられます。
Docker イメージも用意されています。
Docker Compose を使っている方は、以下のYAMLで Home Assistant と、 Mosquitto という MQTTブローカーを立ち上げます。
version: “2”
services:
mosquitto:
image: eclipse-mosquitto:1.6
container_name: mosquitto
volumes:
- ~/appdata/mosquitto:/mosquitto
ports:
- 1883:1883
restart: unless-stopped
homeassistant:
image: homeassistant/home-assistant:stable
container_name: homeassistant
network_mode: host
env_file: common.env
volumes:
- ~/appdata/homeassistant:/config
ports:
- 8123:8123
restart: unless-stopped
Tasmota の MQTT コンフィグを設定
スマートリモコンのメインメニューから「Configuration」> 「Configure MQTT」に遷移し、MQTTブローカーのIPアドレスを Host として設定します。
ブローカーにユーザーとパスワードを定義したらこちらにも入力が必要です。
Home Assistant コンフィグを設定
Home Assistant のYAMLファイルに、例として照明を追加します。
light:
- platform: mqtt
# 自分に分かりやすい名前をつける
name: Room Light
# トピックは必ずTasmotaに設定したトピックと一致する
command_topic: cmnd/IR_Bridge/IRSEND
# 照明を付ける赤外線コード
payload_on: '{"Protocol":"NEC","Bits":32,"Data":"0x41B645BA"}'
# 照明を消す赤外線コード
payload_off: '{"Protocol":"NEC","Bits":32,"Data":"0x41B67D82"}'
# デバイスから返事を待たずにUIに反映するかどうか。
# 赤外線は返事が来ないので基本的 true
optimistic: true
必要に応じ項目を定義して、Home Assistant のダッシュボードをカスタマイズするとこういう感じのUIが実現できます。
出来上がり
Home Assistant は、1700以上のインテグレーションが対応しており、Philips Hue など既存のスマート家電を導入することができます。
全てHome Assistantにまとめると、一つのアプリで全てのスマートデバイスを操作できるようになります。
おまけ
HomeKit と連携
HomeKit インテグレーションにより Home Assistant で定義したデバイスを HomeKit に追加できます。
毎晩ベッドで横になってから「Hey Siri、電気全部消して」という発言をして、幸せを感じています。
最近 HomePod mini も買ったので、外出しても操作可能になり、位置ベースのオートメーションも動かせるようになりました。
既にTasmotaが入っているデバイスが買えるかも?
最近 Tasmota が既に入っているデバイスが売っている通販サイトができました。
現時点スマートリコンはまだないですが、スマートライト、スマートコンセントは持っているようです。