AtomLiteとIFTTTとスマートプラグで電源の一時停止(スマートアクアリウム)

# はじめに
今回は Atom Lite と IFTTT とスマートプラグを使い電源の一時停止を行いたいと思います。

今回の動作確認の[動画](https://youtu.be/EVWP_wYhzjg)になります。
[<img width="576" alt="AtomLite.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/8a801b89-cb81-a030-e099-08afc2f186f7.jpeg">](https://youtu.be/EVWP_wYhzjg)

# 給餌時に海水水槽の水流ポンプ停止
2019年11月から60cm × 30cm × 36cmのオーバーフロー水槽で海水水槽を始めました。 
海水水槽では海水魚やサンゴを育てています。癒されますよね(●´ω｀●)

海水水槽なので水流ポンプをつけていますが、給餌の時には水流ポンプとメインポンプを止めています。
そうすると食事投入後に暫くたってから水流ポンプとメインポンプを再始動しないといけないのですが、たまに忘れてしまいます。

# スマートプラグとアレクサで電源制御
そこで以前はスマートプラグとアレクサを使い、給餌時に水流ポンプとメインポンプの再始動を行うようにしていました。

[<img width="576" alt="アレクサ.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/967507e8-0669-2606-ab57-c8161fbbdd3c.jpeg">
](https://www.youtube.com/watch?v=Ua_pKa2WEUM)

詳しくはこの記事に書いています。
[【海水水槽】スマートアクアリウム(スマートプラグで一定時間電源制御)](https://chan-toyo.hatenablog.com/entry/2020/05/10/215612)

## アレクサが反応しないときがある
私の活舌が悪いせいか、何回か言い直さないとアレクサが正しく反応しない時がたまにあります。
なのでそれを改善するために、今回は水流ポンプとメインポンプの2台を、物理スイッチを押せば一時停止するようにしてみたいと思います。

# AtomLiteとIFTTTとスマートプラグで電源の一時停止の設定方法
## 今回使用する Atom Lite とスマートプラグについて
* [ATOM Lite - スイッチサイエンス](https://www.switch-science.com/catalog/6262/)
* [TP-Link WiFiスマートプラグ 2個セット 遠隔操作 Echo シリーズ / Googleホーム / LINE Clova 対応 音声コントロール ハブ不要 3年保証 HS105P2](https://amzn.to/3acn9cp)

## スマートプラグ設定
TP-Linkのスマートプラグを使うのでKasaアプリで2台同時にONとOFFが出来るシーンを追加します。

### シーン画面で+ボタンを押下
<img width="375" alt="IMG_0994.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/719329de-f918-a1ff-17ca-9d246b464aca.png">

### カスタムを押下
<img width="375" alt="IMG_0995.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/79280109-1818-5e40-6638-4a405cd5e5eb.png">

### メインポンプと水流ポンプをONにし、次へを押下
<img width="375" alt="IMG_0997.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/9a8e31dd-a823-9aec-e04c-c5a269b36c44.png">

### 好きなアイコンを選択し、次へを押下
<img width="375" alt="IMG_0999.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/637a639a-e8a4-8a94-c429-d404a793a957.png">

### シーンの名前を入力し、保存を押下
<img width="375" alt="IMG_1001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/20e2a9d1-6fc4-edbd-a75b-7adf3ead5b64.png">

### シーン登録完了！
<img width="375" alt="IMG_1002.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/250b6f63-b679-694f-a785-6343df5954e9.png">



## IFTTTの設定
Atom Liteから直接TP-Link KasaアプリのAPIを呼ぶことも可能そうでしたが、少し面倒そうなのでIFTTTを使いAPIを呼ぶように設定しました。

### IFTTT アプリを起動し、GET MORE を押下
<img width="375" alt="IMG_1006.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/619125e5-e51f-158f-afa7-c0fa69678132.png">

### Create を押下
<img width="375" alt="IMG_1007.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/53bf1077-0f8c-a9e2-ef83-8ca4993ed209.png">

### This を押下
<img width="375" alt="IMG_1008.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/a78dc5b2-b736-0f24-e20a-795dc2ce9742.png">

### Webhooks を押下
<img width="375" alt="IMG_1009.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/0efb3fb2-7978-91cf-285d-edc2ddfad925.png">

### Receive a web request を押下
<img width="375" alt="IMG_1010.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/a118e042-30bf-287f-6039-bd32606cdb5f.png">

### Event Name を入力し、 Create trigger を押下
<img width="375" alt="IMG_1011.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/27961575-142c-c950-79c0-7076ccf9c885.png">

### Thatを押下
<img width="375" alt="IMG_1012.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/4529de78-8767-0ff9-bccf-3fae7295401a.png">

### TP-Link Kasa を押下
<img width="375" alt="IMG_1013.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/dcecf840-f319-3cc0-7ddb-8242178f5e06.png">

### 下へスクロール
<img width="375" alt="IMG_1014.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/f6b5d0cb-1a01-9d1c-8bf9-1a56a06700c8.png">

### Activate scene を押下
<img width="375" alt="IMG_1015.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/deb5a4ca-4373-f06f-c8e1-4b0cde8701b2.png">

### 作成したシーンを選択し、 Create action を押下
<img width="375" alt="IMG_1018.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/c780fd21-65b4-9028-6259-af76632b852f.png">

### Receve ～ をONにし、Finish を押下
<img width="375" alt="IMG_1020.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/1974543a-a23d-0bfe-4d43-f7406daa7aca.png">

### 登録完了！
<img width="375" alt="IMG_1021.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/7b02faa8-43d2-44d9-8c41-94780572a2e2.png">



## Atom Liteの設定
Atom Liteの初期設定が済んでいない場合は先に初期設定を行います。

[ATOM Liteでできること 〜ATOM Liteの使い方](https://msr-r.net/atom-lite-setting/)
私はここを参考にして設定しました。

## Atom Lite用の電源一時停止プログラムを作成
IFTTTで設定したエンドポイント「水流とポンプON」「水流とポンプOFF」にリクエストを投げるプログラムを作ります。

```
#include <M5Atom.h>
#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "ssidxxxxxx";
const char* password = "passxxxxxx";
const char* wavepumpOn = "https://maker.ifttt.com/trigger/wavepump_on/with/key/keyxxxxxxxxxxxxxxx";
const char* wavepumpOff = "https://maker.ifttt.com/trigger/wavepump_off/with/key/keyxxxxxxxxxxxxxxx";

void httpRequest(const char* url) {
  HTTPClient http;
  http.begin(url);
  http.GET();
  Serial.println(http.getString());
  http.end();
}

void setup() {
  M5.begin(true, false, true);
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    if (M5.Btn.wasPressed()) {
        httpRequest(wavepumpOff);
        delay(5 * 60000); // Wait 5 minutes
        httpRequest(wavepumpOn);
    }
    delay(50);
    M5.update();
  } else {
    M5.dis.drawpix(0, 0x001000);
    WiFi.begin(ssid, password);
    int wifiReconnectCount = 0;
    while (WiFi.status() != WL_CONNECTED) {
      if (wifiReconnectCount >= 300) { ESP.restart(); }
      wifiReconnectCount++;
      delay(100);
    }
    Serial.println(WiFi.localIP());
    M5.dis.drawpix(0, 0x100000);
  }
}
```

※ wifiルータのssidとpasswordとエンドポイントは各自の環境に合わせて変更してください。
※ 上記プログラムでは、停止時間を仮に5分にしています。

## 一時停止プログラムをArduino IDEで書き込み
→ボタンを押下し、「ボードへの書き込みが完了しました。」と出れば終了
<img width="967" alt="2020-08-11 (3).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/2c3fad76-5de3-6314-16fc-3fe6bfba45a7.png">

# 動作確認
動作確認は、WiFi環境のいい場所で試してみてください。
WiFiがつながるとAtom Liteのランプが緑色に点灯します。

ボタンを押下すると水流とメインポンプが停止し、IFTTTの通知が来ます。
一定時間停止後、水流とメインポンプが再開し、IFTTTの通知が来ます。  

※ うまく動作しない場合は横についているボタンを押下し、リセットしてみてください。  

[【海水水槽】海水水槽IOT化（スマートプラグとAtom Liteで水流管理）
<img width="576" alt="AtomLite.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/8a801b89-cb81-a030-e099-08afc2f186f7.jpeg">](https://youtu.be/EVWP_wYhzjg)


# 参考記事
* [ATOM Liteでできること 〜ATOM Liteの使い方](https://msr-r.net/atom-lite-setting/)
* [ATOM Liteでhttp postしてwebhookを叩いて通知を飛ばすやつ](https://gist.github.com/ebith/11ef21603e4dabb989705989239a14e5)

# まとめ
以前の記事と合わせるためスマートプラグはTP-Linkで記事を書きましたが、Kasaアプリ単体では一時停止の設定が出来ませんでした。  

Smart Lifeアプリを使うスマートプラグの場合は自動化という設定ができ、アプリ内で「停止」→「5分待つ」→「再開」という設定もできたため、こちらを使用すれば、プログラムでのWaitや再開リクエストが必要無いのでリスクは減ると思います。
[【Amazon Alexa認定】HYSIRY WiFi スマートプラグ Alexa/Google Home/IFTTT 対応 JP1](https://amzn.to/2F9cWln)

しばらくは記事の環境で、使い勝手を試してみたいと思います(●´ω｀●)