我が家のSmartHouse化計画Lv3


はじめに

要約

  • Smartボタンを押したら、色々Smart家電を操作したいpart2
    • 今回は、NatureRemo以外のSwitchBotやSesamiのスマートロックにも挑戦します

モチベーション

  • 前回の改善でベッドから色々操作ができるようになりました
  • でも、NatureRemoがほとんどだったので別のスマート家電も操作したい
  • そして、やっぱりボタンって押したくなりますよね

関連する記事

実現方法

全体の連携イメージ

  • SmartButton(Flic)を使って、スイッチ/鍵/空気清浄機を操作します
    • クリック/ダブルクリック/ホールド(長押し)が使えるので、この3種類をそれぞれ割り当てます
  • RaspberryPi上のNode-REDと(ライト以外)NatureRemoを使って、各家電を操作します
  • ボタンを押して正しく動作したかわからないので、出力先としてGoogleNestHubに通知します
    • 自分がわかって押すので、通知は不要だとわかったので、Lv3では作りませんでした。

①ボタンを押してNode-REDに通知する

②クリックで壁スイッチを切り替える

フロー

  • <サーバURL:PORT>/white_clickにGETメソッドで通知が来ると、On/Offを交互にするためのフラグを設定し、その先のExecノードに進み、SwitchBotの押す/引くを制御します。

重要な処理

  • TurnOn/TurnOffノード
// 必要なライブラリのインストール
sudo apt-get update
sudo apt-get install python-pexpect
sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev 
sudo apt-get install libudev-dev libical-dev libreadline-dev
sudo pip install bluepy

// ライブラリのclone
git clone https://github.com/OpenWonderLabs/python-host.git

// Switchbotのサーチを行う
cd python-host
sudo python switchbot.py 
  • 上記でSwitchbotの情報を探してくれるのですが、残念ながらこれでは見つけられませんでした。

    • 検索はできませんでしたが、後述するコマンドの実施に必要なのでこれは必要なライブラリです
    • BluetoothのMACアドレスが必要なのですが、アプリから確認できます。
      • アプリダッシュボード⇛機器を選択⇛設定画面の右上の三点リーダ⇛BLEMACの項目
  • TrunOnノード:python <path>/switchbot.py <MACAddress> Turn OnでOnになります

  • TrunOffノード:python <path>/switchbot.py <MACAddress> Turn OffでOffになります

設定.js
var flag = flow.get("flag")|false;
flag = !flag;
flow.set("flag",flag);
return msg;
  • 設定はフラグをON/OFFを切り替えているだけです

備考

  • 事前にMacでBluetoothの設定をOnにしておく必要があります。
  • Node-REDのBLEノードを使ってみましたが、瞬断が繰り返される?認証が必要?なためかノードがうまくconnectedになりませんでした。

③ダブルクリックで空気清浄機をつける

フロー

  • 空気清浄機と言いながら実質スマートプラグで電源を入れる/切るを制御しているだけです
  • 実はLv2でライトを付けたたのとほぼ同じです。
    • TPlinkのスマートライトもスマートプラグも同じように専用のノードにtrue/falseを渡すだけです。

重要な処理

ライトオン.js
msg.payload=true // ライトオフの場合はfalse
return msg;
  • smartplugノード
    • DeviceIP:<スマートプラグのIP>

備考

  • スマートライトはtplink-smarthome-api search で探せた(LV2を参照)のですが、うまく見つけられなかったので、WifiルータにログインをしてHS105の名前になっているやつを探して設定しました

④ホールドで玄関の鍵をかける

フロー

  • まず、事前に以下の方法で、APIキーとセサミIDを調べます
    • 公式サイトに詳しい記載があるため、こちらで設定を行います。

重要な処理

open.js/close.js
msg.headers = {'Content-Type' : 'application/json', 'Authorization' : "<APIキー>"};
msg.payload = {'command' : 'lock'}; // openの場合はunlock
return msg;

備考

  • うまくいくと、task_idが帰ってきます。連続で実施するとデバイスがbusyとなっていて、動きません
  • wifiモジュールがないと使えず、wifiモジュール無しで操作するとresponsiveがfalseとなります

まとめ

  • 今回は、SmartButton(Flic)を使って、NatureRemoではない、壁スイッチ、鍵、空気清浄機を操作できるようにしました。

 その他

  • 認証情報などをハードコーディングしているしているため、ソースの公開ができません。すみません。。。
  • その他面白いIoT家電があれば、教えて下さい。
  • SmartHomePlatform的なものを作りたいなぁ