スマートコンセント(HS105)を使って電気毛布を自動ON/OFF制御する #SleepTech
はじめに
こんにちは。電気毛布を自動制御しようと頑張っているエンジニアです。
先日、「最近寒いので電気毛布のリモート制御にチャレンジする #SleepTech」で、サーボモータを使って電気毛布のつまみを自動で上下させようとしたのですが、
電気毛布コントローラーの固定が甘かったせいでうまくいきませんでした。
むむっ
— Takahiro Mitsuoka (@t_mitsuoka) December 31, 2019
接着かケースの強度が…(再掲) pic.twitter.com/nXh82K75am
そこで、今回は「tp-link製のスマートコンセントHS105」を使って、電気毛布のON/OFF制御をしていこうと思います。
前提
本記事は、「快適な睡眠を目指して寝床内気象を測定する(温度編) #sleeptech」で作った仕組みの拡張です。
先にお読みいただくと、より理解しやすいかと思います。
用意したもの
- スマートコンセント
- TP-Link HS105 (https://www.tp-link.com/jp/home-networking/smart-plug/hs105/)
- Amazonで2200円くらい
全体イメージとシステムイメージ
シンプルに、1分毎に布団の温度を測り、電気毛布のON/OFFを制御します。
ON/OFFする部分にHS105を使用していきます。
HS105
初期設定をする
公式サイトのFAQ「アプリ「Kasa」でミニ スマートWi-Fiプラグの初期設定をするには」がめちゃくちゃわかりやすいので、そちらをご覧ください。
以降は、HS105がWifiにつながっている前提の手順となります。
Node.jsで操作する
HS105をNode.jsで操作できるライブラリ(tplink-smarthome-api)が公開されているので、ありがたくこちらを使用していきます。
IPアドレスを調べる
HS105を操作するために、割り当てられているローカルIPアドレスが必要です。
tplink-smarthome-apiのCLI
を使って簡単に調べられます。
まずはCLIをインストール。
$ npm install -g tplink-smarthome-api
search
コマンドを実行する。
$ tplink-smarthome-api search
結果の中にHS105に割り当てられているIPアドレスが表示されるので、コピーしておきます。
私の場合は、192.168.10.3
でした。
以降のソースでは、このIPアドレスを使用して記述しますので、実行する場合は自身のIPアドレスに書き換えて実行してください。
$ tplink-smarthome-api search
Searching...
startDiscovery({
discoveryInterval: 2000,
discoveryTimeout: 10000,
breakoutChildren: true
})
HS105(JP) plug IOT.SMARTPLUGSWITCH 192.168.10.3 9999 XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
^^^^^^^^^^^^
実際にON/OFFしてみる
https://github.com/plasticrake/tplink-smarthome-api/blob/master/examples/plug-turn-on-off.jsのコードを実行してみます。
const { Client } = require('tplink-smarthome-api');
const client = new Client();
const plug = client.getPlug({ host: '192.168.10.3' }); // 各自のIPアドレスに書き換え
plug.setPowerState(true);
plug.setPowerState(false);
実行するとこんな感じで動く。
電気毛布、サーボモータで強弱制御するのは難しそうなので、まずは スマートコンセント(HS105)でON/OFF制御していく
— Takahiro Mitsuoka (@t_mitsuoka) December 31, 2019
Node.jsでHS105のON/OFF制御はできたから、これから温度センサーと組み合わせていく pic.twitter.com/hEjaotV5zq
布団の温度からON/OFFを制御する
obniz + 温度センサーから取得した温度を元に、HS105を制御します。
obnizとHS105の使い方さえわかれば、非常にシンプルなプログラムで動かすことができます。
const Obniz = require('obniz');
const obniz = new Obniz(process.env.OBNIZ_ID);
const { Client } = require('tplink-smarthome-api');
const MAX = 100;
const callback = async () => {
obniz.connect(); // obnizに接続
await obniz.connectWait();
const tempsens = obniz.wired('LM35DZ', { gnd: 0, output: 1, vcc: 2 });
const client = new Client(); // HS105に接続
const plug = client.getPlug({ host: '192.168.10.3' }); // 各自のIPアドレスに書き換え
let temperature = 0; // obnizの温度センサーから温度を取得(バラつきがあるので100回平均している)
for (let i = 0; i < MAX; i++) {
temperature += await tempsens.getWait();
await obniz.wait(10);
}
temperature /= MAX;
if (temperature < 32) { // 温度に応じてHS105をON/OFF
plug.setPowerState(true);
} else {
plug.setPowerState(false);
}
obniz.close(); // 繰り返し実行するので1回毎に切断する
plug.closeConnection();
};
setInterval(callback, 60000); // 1分毎に実行する
実際に使ってみる
大晦日に作成してから使い続けていますが、今までと比べるとかなり快適になった気がします。
Ambientというサービスを使って、布団の温度や部屋の温湿度をグラフにしているのですが、昨日のグラフは以下のようになりました。
(左上:布団温度、右上:HS105のON/OFF、左下:寝室気温、右下;寝室湿度)
- 布団温度を見てみると、およそ30℃~37℃の範囲で推移しているようです。平均は33℃前後でしょうか。
- プログラムを少し改良して、午後10時~翌朝8時までの間で電気毛布を制御するようにしました。
- 電気毛布がOFFの時間になると20℃前後で推移するようです。
- それにしても測定誤差が大きいですね。10%程度はありそう。センサーや測定方法を検討する必要がありそうです。
- HS105のON/OFFは頻繁に切り替わっており、1時間に数回~十数回は切り替わっています。
- 切り替わるたびにカチッカチッとリレーが切り替わるような音がします。少し気になりますが、もう慣れました。
- 寝室気温は、18℃前後からほとんど変わらないようです。
- 寝室湿度は、加湿器を強めにつけているので、朝まではずっと湿度95%でした。(センサーの上限が95%なので実際は100%かもしれません)
まとめ
簡単に作成した割には、満足のいく出来となりました。
早いところ誰かに使ってもらってフィードバックをもらいたいところです。
HS105のライブラリを使うと、同一LANにいる端末からしか操作ができないようでした。
そのためノートPCから制御をかけているのですが、後々はAWS Lambdaから操作できるようにしたいので調査が必要そうです。
Author And Source
この問題について(スマートコンセント(HS105)を使って電気毛布を自動ON/OFF制御する #SleepTech), 我々は、より多くの情報をここで見つけました https://qiita.com/mitsuoka0423/items/582ff0c303abe8570ee5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .