Index
TP-Link HS105
2020/11/09追記
いつのことからか、このライブラリでエラーが出るようになったので現在は使用していない。
今回は新たなガジェットを購入したのでその話
乾燥肌を少しでも緩和させようと加湿器を購入した。
そんなに高くないもので、電源を入れたら加湿が始まる
非常に単純なもの。
ふと思いつく。部屋にいるときにラズパイが湿度を
定期的にチェックして、30%を下回ったら
乾燥してますね。加湿器を入れましょう。 カチッ シャワワーー
|
みたいなの便利だなと。
なので早速やってみる。
以前よりヨドバシカメラで見て気になっていた
スマートプラグTP-Link HS105を購入。
3,000円ちょっとだったと思う。
これはWiFi通信による電源のリモート操作ができるIoT製品。
専用のスマホアプリからリモコンできるのだが
APIが公開されているため自分でスマートホームの一部として
カスタマイズが可能。
本当素晴らしい製品だ。
TPLink.js
さて早速、npmで公開されているか調べたら
やっぱり有志の方が用意してくださっていた。
なんと素晴らしいことか。
tplink-smarthome-apiというモジュールを
インストールして早速クラスを作ってみる。
const { Client } = require('tplink-smarthome-api');
class TPLink {
constructor(options){ this.options = options; this.client = new Client(); this.device = {}; }
start(){ return new Promise((resolve, reject) => { this.client.startDiscovery(this.options).on('device-new', (device) => { this.device=device; resolve(this.device); }); }); }
getSystemInfo(){ return new Promise((resolve, reject) => { this.device.getSysInfo().then((sysobj, err) => { if(err)reject(false); console.log(sysobj); resolve(sysobj); }); }); }
getState(){ return new Promise((resolve, reject) => { this.device.getPowerState().then((state, err) => { if(err)state=false; this.options.state=state; resolve(this.options); }); }); }
setPower(cmd){ return new Promise((resolve, reject) => { this.device.setPowerState(cmd).then((ret, err) => { if(err)reject(false); resolve(ret); }); }); }
setPowerOn(){ return this.setPower(true); }
setPowerOff(){ return this.setPower(false); }
stop(){ return new Promise((resolve, reject) => { this.client.stopDiscovery(this.options); resolve(true); }); }
} module.exports=TPLink;
|
こんな感じ。これをTPLink.jsってファイルにする。
使い方は、
const TPLink=require('./TPLink');
var setBulbOn=async ()=>{ let options={ 'macaddress': [ 'TP-Linkのマックアドレス' ], 'devices': ['セットアップしたときのホスト名'], }; const tplclient=new TPLink(options); tplclient.start().then(()=>{ tplclient.setPowerOn().then(()=>{ tplclient.stop(); }); }); }; setBulbOn();
|
こんな感じかな?
これだと返り値がわからないが
電源入/切がtrue/falseで返ってくるようになっているため
最近気になっているDirect Actionに対応させるためには
JSONでのやり取りを想定してさらにWrapperクラスを用意
する予定。
これでREST APIでsync、query、execといった
やり取りをActions on Google側とできるので
今度やってみようかなと。
今回は簡易的にDialogflowを使って
レシピを書いて、あとはapplication server側に
上記のAPIを実装してみた。
あと、これは我が家のルールとして
LAN内のデバイスはすべてスーパーロボットの
名前からとっている。
アクロバンチやバルディオス、ヴォルトロン
ビスマルクというホスト名にしている。
んで今回このデバイス名はガルビオンに決定。

Result
試してみる。
私:ドクターパイアールにつないで スピーカー:はい、ドクターパイ アールのテストバージョンです。 スピーカー:こんにちは。 私:湿度は スピーカー:湿度は23%です。 私:加湿器をつけて スピーカー:電源を入れます。 カチッ シャワワー スピーカー:Galvionは稼働中です。 私:キャンセル
|
ここまではできるようになった。
ホスト名をgalvionとしてみたけど
一応ガルビオンとは発音してくれている。
ただスマホから同じことをしたら
スマホ:Galvion(ギャルボン)は稼働中です。
|
と答えた。ギャルボンて、、、。
確かに読めなくはないよな。
なら正確にはどうやって書けばいいのか。
Guarvionかな?ガーヴィオンだと変か。
Ghalvionかな?Hが要るような気がする。
ま、いいか。
Next
次回はThresholdを設けて
それを下回ったらなんかさせるってのを
やってみようかな。
コメント: