rcmdnk's blog

シャープ 加湿 空気清浄機 プラズマクラスター 25000 ハイグレード 13畳 / 空気清浄 23畳 2018年モデル グレー KI-JS50-H

シャープの加湿空気清浄機をアプリ以外から操作できるようになったので Raspberry Piから操作できるようにして、 IFTTTとかを使っていろいろな条件でも管理できるようにしてみました。

cocoro

最近買ったシャープの加湿空気清浄機を操作するためのツール。

これとBlynkというアプリとIFTTTを使ってRaspberry Piとスマホから色々できるようにします。

cocoro + Blynk

まずは cocoro をRaspberry Piにインストール。

$ sudo pip3 install cocoro

/home/pi/.config/cocoro/config.yml

/home/pi/.config/cocoro/config.yml
1
2
3
---
appSecret: <appSecret>
terminalAppIdKey: <terminalAppIdKey>

の値をmitmproxyとかで調べて書いておきます。

これで、

$ cocoro info

などしてちゃんと通信できることを確認。

これでRaspberry Piから加湿空気清浄機を操作できるようになりました。

ここまで来たらBlynkから操作できるようにします。

Blynkに関して詳しくは以下で。

BlynkのオリジナルのC++のExampleコード を参考に以下の様なコードを書きました。

別途BME280による観測なども入ってますが、今回使っているのはV1~V3の部分。

main.cpp
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
#include <string.h>

#define COCORO_CONFIG "--config_file /home/pi/.config/my_raspi_home/cocoro.yml"

BLYNK_WRITE(V1)
{
  printf("Got a value for V%d: %s\n", V1, param[0].asStr());
  string cmd = "cocoro switch ";
  if(param[0].asInt() == 1){
    cmd += "on ";
  }else if(param[0].asInt() == 0){
    cmd += "off ";
  }
  cmd += COCORO_CONFIG;
  system(cmd.c_str());
}

BLYNK_WRITE(V2)
{
  printf("Got a value for V%d: %s\n", V2, param[0].asStr());
  string cmd = "cocoro humi ";
  if(param[0].asInt() == 1){
    cmd += "on ";
  }else if(param[0].asInt() == 0){
    cmd += "off ";
  }
  cmd += COCORO_CONFIG;
  system(cmd.c_str());
}

BLYNK_WRITE(V3)
{
  printf("Got a value for V%d: %s\n", V3, param[0].asStr());
  string cmd = "cocoro mode ";
  if(param[0].asInt() == 1){
    cmd += "recommendation ";
  }else if(param[0].asInt() == 2){
    cmd += "effective ";
  }else if(param[0].asInt() == 3){
    cmd += "auto ";
  }else if(param[0].asInt() == 4){
    cmd += "pollen ";
  }else if(param[0].asInt() == 5){
    cmd += "quiet ";
  }
  cmd += COCORO_CONFIG;
  system(cmd.c_str());
}

あたりが重要なところ。

これをコンパイルしてRaspberry Piで動かしておいて、 アプリ側で以下の様なボタンを作ります。

V1、V2は以下の様な0, 1を出すButton。

20210304_v1.jpg

これにそれぞれ電源スイッチと加湿のOn/Offを割り当て。

V3はSegmented Switchという最大5種類まで設置できるスイッチボタン。

20210304_v3.jpg

これが最大5種類なのでよく使いそうなモード5つを選択して設置。

これで以下の様なBlynkのUIになります。

20210304_blynk.jpg

これを使って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のLocationWebhooks

外出時に消す操作は

  • IfのところでLocationを選択
    • You exit an areaを選択
    • 自宅付近を地図で選んでCreate trigger
  • Then ThatのところでWebhooksを選択
    • Make a web request
    • URLに上のGET方式のURLを入力。スイッチを切るので最後の部分はV1?value=0に。
    • MethodGET
    • Content TypeBodyはそのまま
    • Create action

帰宅時に点ける操作は LocationでexitではなくYou enter an areaで作り、 Webhooksの方ではURLで最後の部分をV1?value=1にして 別途作ります。

これで家にいるときだけ点けることが出来ます。

シャープのおまかせにしておくと、逆に家に居ないときに空気清浄能力を上げてきれいにする、 という操作をしてくれたりしますが、 食事時などでニオイが強くなっても割とすぐに消えるし、 家の中は割とキレイそうなので無理に居ないときに回す必要は無いかな、ということでこういう設定に。

家にいるときに普通の設定だとうるさすぎるので静音にしてますが、 空気清浄能力はそれでも十分です。

加湿に関しては少しそれだと足りないかな、という点はあって、 その辺もこの辺使えば 湿度とか見て自分の良いようにしようと思えばできるので今後やるかも。

Sponsored Links
Sponsored Links

« シャープの加湿空気清浄機をアプリ外から操作する IFTTTを使って学校/職場/家の滞在時間を記録する »