hogehoge, world.

米国カリフォルニアのソフトウェアエンジニアがIT・自転車・音楽・天体写真・語学などについて書く予定。

スマートアウトレットAPI (VeSync) を叩く

今時こういうスマートアウトレットが$10/eaくらいで買えるのである。WiFiクラウドに接続し、アプリケーションやAPIからON/OFFしたり統計情報を取得したりできる。もともとクリスマスライトを夜だけONにしたくて、機械式タイマーと値段あまり変わらないのでこちらに手を出してみた次第。

f:id:tomoto335:20190122174259j:plain

この製品はEtekcityというメーカーのものだが、対応クラウドサービス(今時の呼び方ではスマートホームサービス)はVeSyncという。VeSyncスマフォアプリを入れて、まずアカウント作成、デバイスWiFi接続接続、デバイスクラウドへの登録を行うと、スマフォアプリからON/OFF、タイマー設定、消費電力情報の参照などできるようになる。タイマーには「日の出」や「日の入」も設定できる。クリスマスライトのタイマー運用にはこれで十分で、ここまでなら非常に簡単に使えるようになっており、ちゃんとコンシューマーレベルまで落ちてきてるなという印象。

ただ、これだとやっていることは普通のタイマーとほぼ同じで、あまりおもしろくない。もっと「スマート」な運用をしたくなってくるのだが、そちらに踏み出すとまだまだ未成熟である。

例えば、Google AssistantとVeSyncを連携させればボイスコマンドで電気のON/OFFなどできるはずなのだが、うまく行かなかった。何をやっても「そのデバイスはセットアップされていない」的なことを言われてしまう。Alexaはもっとまともに動くのかもしれないが、よくわからない。

IFTTTもVeSyncに対応しており、Google AssistantのボイスコマンドやWebhookのイベントに反応して電気を操作するAppletを作っていたのだが、これも最近動かなくなってしまった。VeSyncと連携(IFTTT上でVeSyncのユーザIDとパスワードを入力)させた直後は動くのだが、しばらく経つとエラーになり、エラーが続いた挙句Appletがturn offされてしまうのだ。再連携すると一時的に復活するが、結局同じことになる。アクセストークンのタイムアウトか何かのように見えるのだが、実装を見てあげられるわけでも、サポートチケット切れるわけでもないので、こちらからは対処のしようがない。

そこでVeSyncのAPIを直接叩く方法はないか探してみたところ、動作するPythonライブラリがあった:

GitHub - tylergets/python-vesync: VeSync API Wrapper in Python. Used by EtekCity Smart Wifi Outlets.

ロジックはものすごく簡単なので、解析してNode-REDに持って行ったら期待通り動いてくれた。まぁいつ動かなくなるかわからないけどなー。