【海水水槽】スマートアクアリウム(Atom Lite とスマートプラグで一定時間電源制御)

はじめに

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

今回の動作確認の動画になります。

※ この動画ではテストのため10秒間だけ一時停止しています。

使用したAtom Liteとスマートプラグ(TP-Link HS105)

www.switch-science.com

給餌時に水流ポンプ停止

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

スマートプラグとアレクサで電源制御

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

詳しくは前回の記事に書いています。
【海水水槽】スマートアクアリウム(スマートプラグで一定時間電源制御)

アレクサが反応しないときがある

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

スマートプラグ設定

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

シーン画面で+ボタンを押下

f:id:chan-toyo:20200810163029p:plain

カスタムを押下

f:id:chan-toyo:20200810163034p:plain

メインポンプと水流ポンプをONにし、次へを押下

f:id:chan-toyo:20200810163044p:plain

好きなアイコンを選択し、次へを押下

f:id:chan-toyo:20200810163053p:plain

シーンの名前を入力し、保存を押下

f:id:chan-toyo:20200810163058p:plain

シーン登録完了!

f:id:chan-toyo:20200810163103p:plain

IFTTTの設定

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

IFTTT アプリを起動し、GET MORE を押下

f:id:chan-toyo:20200810215218p:plain

Create を押下

f:id:chan-toyo:20200810215224p:plain

This を押下

f:id:chan-toyo:20200810215234p:plain

Webhooks を押下

f:id:chan-toyo:20200810215241p:plain

Receive a web request を押下

f:id:chan-toyo:20200810215245p:plain

Event Name を入力し、 Create trigger を押下

f:id:chan-toyo:20200810215253p:plain

Thatを押下

f:id:chan-toyo:20200810215256p:plain

TP-Link Kasa を押下

f:id:chan-toyo:20200810215301p:plain

下へスクロール

f:id:chan-toyo:20200810215304p:plain

Activate scene を押下

f:id:chan-toyo:20200810215308p:plain

作成したシーンを選択し、 Create action を押下

f:id:chan-toyo:20200810215312p:plain

Receve ~ をONにし、Finish を押下

f:id:chan-toyo:20200810215316p:plain

登録完了!

f:id:chan-toyo:20200810215321p:plain

Atom Liteの設定

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

ATOM Liteでできること 〜ATOM Liteの使い方
私はここを参考にして設定しました。

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で書き込み

→ボタンを押下し、マイコンボードに書き込む

f:id:chan-toyo:20200811092846p:plain

「ボードへの書き込みが完了しました。」と出れば終了

f:id:chan-toyo:20200811093302p:plain

動作確認

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

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

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

【海水水槽】海水水槽IOT化(スマートプラグとAtom Liteで水流管理)

参考記事

まとめ

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

Smart Lifeアプリを使うスマートプラグの場合は自動化という設定ができ、アプリ内で「停止」→「5分待つ」→「再開」という設定もできたため、 こちらを使用すれば、プログラムでのWaitや再開リクエストが必要無いのでリスクは減ると思います。