cocoro
最近買ったシャープの加湿空気清浄機を操作するためのツール。
これとBlynkというアプリとIFTTTを使ってRaspberry Piとスマホから色々できるようにします。
cocoro + Blynk
まずは cocoro をRaspberry Piにインストール。
$ sudo pip3 install cocoro
/home/pi/.config/cocoro/config.ymlに
1 2 3 |
|
の値をmitmproxyとかで調べて書いておきます。
これで、
$ cocoro info
などしてちゃんと通信できることを確認。
これでRaspberry Piから加湿空気清浄機を操作できるようになりました。
ここまで来たらBlynkから操作できるようにします。
Blynkに関して詳しくは以下で。
BlynkのオリジナルのC++のExampleコード を参考に以下の様なコードを書きました。
別途BME280による観測なども入ってますが、今回使っているのはV1~V3の部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
あたりが重要なところ。
これをコンパイルしてRaspberry Piで動かしておいて、 アプリ側で以下の様なボタンを作ります。
V1、V2は以下の様な0, 1を出すButton。
これにそれぞれ電源スイッチと加湿のOn/Offを割り当て。
V3はSegmented Switchという最大5種類まで設置できるスイッチボタン。
これが最大5種類なのでよく使いそうなモード5つを選択して設置。
これで以下の様なBlynkのUIになります。
これを使ってCOCORO Airを通さずにBlynkから加湿空気清浄機を操作できるようになりました。
これだけだとCOCORO Airのアプリを直接使えば良いとなるわけですが、 このBlynkを使って別経由で操作できるようにします。
BlynkはAPIを通して操作できるようになっているのでそれを使います。
使う際には、まずBlynkのProject Settingsにある
AUTH TOKEN
という値をメモしておきます。
このTOKENを使って
http://blynk-cloud.com/<AUTH TOKEN>/update/V1?value=1
とかにGETすればV1の値を1に変更することが出来ます。 このあたりのAPIの仕様は上のAPIページを参考に。
試しに、適当なターミナルから
$ curl http://blynk-cloud.com/<AUTH TOKEN>/update/V1?value=1
とかしてちゃんと変更できるか確認。
うまくいけばこれを使ってあらゆるところからBlynkを操作でき、 すなわち加湿空気清浄機を操作できる様になります。
BlynkのGEO DNS問題
上の様な感じでBlynkのAPIを使って色々やりたいところなんですが、 このままIFTTTとかで使うとうまくいきません。
Action failure message: Your server returned a 400. Unable to make web request to http://blynk-cloud.com/<AUTH TOKEN>/update/V1
みたいなエラーが返ってきます。
これは BlynkがGEO DNSという、接続元IPアドレスの地域によって違うレコードを返すDNSを使っているためです。
日本で動かしているRaspberry Piに日本から接続するとうまくいきますが、 IFTTTとかだとWebhookを送るサーバーが日本にあるわけではないので 別のblynkサーバーに接続しに行ってしまってエラーになってしまいます。
これを解決するためには使っているサーバーのIPアドレスを調べてそれを直接使うこと。
$ nslookup blynk-cloud.com
Server: XXX.XX.XX.X
Address: XXX.XX.XX.X#XX
Non-authoritative answer:
Name: blynk-cloud.com
Address: 188.166.206.43
という感じで188.166.206.43
だとわかるのでこれを使います。
上のURLだと
$ curl http://188.166.206.43/<AUTH TOKEN>/update/V1?value=1
とすれば同様の結果が得られますし、これであればIFTTTとかで使っても有効です。
IFTTTと連携して外出時に止める、帰宅時に点ける
使うのはIFTTTのLocationとWebhooks。
外出時に消す操作は
- IfのところでLocationを選択
- You exit an areaを選択
- 自宅付近を地図で選んでCreate trigger
- Then ThatのところでWebhooksを選択
- Make a web request
- URLに上の
GET
方式のURLを入力。スイッチを切るので最後の部分はV1?value=0
に。 - Methodは
GET
- Content TypeとBodyはそのまま
- でCreate action
帰宅時に点ける操作は
LocationでexitではなくYou enter an areaで作り、
Webhooksの方ではURLで最後の部分をV1?value=1
にして
別途作ります。
これで家にいるときだけ点けることが出来ます。
シャープのおまかせにしておくと、逆に家に居ないときに空気清浄能力を上げてきれいにする、 という操作をしてくれたりしますが、 食事時などでニオイが強くなっても割とすぐに消えるし、 家の中は割とキレイそうなので無理に居ないときに回す必要は無いかな、ということでこういう設定に。
家にいるときに普通の設定だとうるさすぎるので静音にしてますが、 空気清浄能力はそれでも十分です。
加湿に関しては少しそれだと足りないかな、という点はあって、 その辺もこの辺使えば 湿度とか見て自分の良いようにしようと思えばできるので今後やるかも。