Programming2018-07-16スマートコンセントをクラウドを使わずLANから制御してみたTweet最近のIoTブームでクラウドから制御できるコンセント(スマートプラグとかスマートコンセント)が安価に入手できるようになりました。Home、IFTTTに対応しており、音声制御や自動化が可能になっています。それだけでも便利なのですが、LANに閉じて使いたいときもあるよね、ということで、クラウドに繋がらない状態でも制御できないかやってみました。(何となく第三者のシステムから家庭内の機器を制御できる状態にしておきたくないとか、クラウドサービスが停止したら使えなくなるのがいやだという理由ですが。)使ったもの今回買ったのはこのHyletonという所の二つの製品。Amazonのタイムセールで一番安かったので。プラグ4つ後者の方は、USB電源2つ同時のON/OFFも制御することが可能です。セットアップセットアップはSmartHomeというアプリを使って行い、Bluetooth経由で接続先のWi-Fi(2.4GHzのみ)の情報、およびクラウドやLANから制御するための暗号キーがコンセントに設定されます。いうクラウドサービスを利用しているようです。常時クラウドにMQTTで接続しているものの、LAN内からも制御を受け付けており、スマホアプリも同一LANにある(UDPポート6666番のブロードキャストを見ることで検出可能)場合はLAN内で直接通信をしているようです。Tuyaを利用しているデバイスは、有志が開発したNode.jsでLANから制御するためのNode.jsのライブラリがありますので、これを使ってLAN内から制御してみることにしました。この方法であれば、インターネットとの通信が遮断された環境や、MQTTがブロックされた状態であっても、制御が可能になります(ただし設定時は(少なくとも同一のSSID/パスワードで)インターネット接続可能なWi-Fiは必要ですが。)github.comセットアップする際、スマホから設定されるキーを取得してやる必要があります。いうHTTPSプロキシを使ってスマホの通信内容を解析してキーを取り出しました。Charlesのセットアップとスマートフォンに独自CA証明書を信頼させる手順は以下が詳しく参考になります。このiPhone・Androidの手順を踏めばOKです。便利HTTPS通信の内容が取得できるようになったことを確認の上で、スマホアプリから設定操作をやり直すと、キーが取得できます。OFFとコマンドを実行することでコンセントのON/OFFができます。飛ばして高速化も可能です(以下参照)。すべての電源をOFFなどとコマンドを叩くことでLANから制御が可能です。使えば、Siriから制御することも可能です。対応しているとのこと。(2)月別アーカイブはてなブログをはじめよう!NeoCatさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。