さて、ようやくWemoSwitchがコントロール出来る様になったし、IFTTTにも接続できた。

ようやく、「実家のおふくろを見守る」為の準備が出来ます。
どの様にしましょうか?目指すは象印のみまもりほっとラインですね。

実家で何かの家電を接続して、「利用状況を私(息子)に知らせる」事が出来れば良いはず。

先にも書いたように、WemoSwitchとWemoアプリが出来ることは限られている。

(1) 遠隔操作で電源ON/Off
(2) 消費電力モニター
(3) 利用状態変化の通知
(4) 利用状況CSVのメール送信
(5) スケジュール機能
(6) IFTTTとの連携

もちろん、スマホでWemoアプリを開けばWemoSwitchの状態が確認出来るが、自分(息子)が確認したときだけの確認では、安否を「みまもって」いる事にはならない。なんらかの自動化が必要だ。
ここで活躍するのが「IFTTT」

早速、Wemoをトリガーにしてメールを送信する仕組みを作って見た。

<トリガー> : WemoSwitchに有効電流(>2W)が流れたら

<動 作> : 自分宛に任意のメッセージでメールする

無題


こうしておく事により、実家でWemoSwitchに接続された家電が利用されたら私宛に「使いました!」メールが届くようになる。

これで、ほぼ要件を満たしたが、実際に利用すると、同じメールが毎日来るので、慣れてしまい「メールが来なかった」事を認識できない可能性が高い。

出来れば「使用していない場合のみメールが欲しい」

つまり、電気を利用していないという「注意メール」が欲しいと言うことですが、Wemoアプリだけでは出来ないし、IFTTTを用いても「メールが無い」というトリガーは作れないので難しい、さてどうしたか?

そこで登場するのがGoole Apps Script「G.A.S.」です。
実は本件を調べるまで私も知らなかったのですが、GoogleはGoogleApplication全般に対してスクリプトを用意していたのですね。

Googleカレンダーや、スプレッド、もちろんメールなどが自由に利用と連携可能な様にオブジェクトが公開されています。基本はJavaで作られているようです。

ということで、私はこんな仕組みを作成しました。

(1) WemoSwitchで電気が利用されるとIFTTTが「電気を使用したメール」(A)を私のgmail宛に送信

(2) G.A.S.でIFTTTからのメール(A)を丸1日受信しない場合、「注意メール」(B)を送信する。

(3) そして私は(B)のメールのみを受信するようにすれば完成。

(4) スクリプトは好きな時間に自動実行出来るので昼と夜にセット。

これで、

実家のお袋が「WemoSwitch」に接続された家電を24時間、一度も利用しないと、「注意!実家の家電が利用されていません!」というメールが私宛に届きます。

これでかなり運用に堪えますね、後は泊まりの外出はどうするか?位でしょうか。

※ちなみに、象印の様に電気ポットを接続すると、再沸騰の度にSwitchが反応するのでよろしくありません。朝晩には必ず付ける電灯がよろしいかと思います。

年末帰ったら該当する様な家電を探して取り付けてきます。



ちなみに、上記(2)の「1日受信しない時」という判断はいろいろ有るかと思いますが、とりあえず私のスクリプトはこんな感じ(※所々端折ってあります)


function myFunction() {
/* [Wemo起動確認]メールが来ていない場合は安否確認メールを送信*/
strQuery = '"実家の電気が利用されました"'; //文字列
strQuery = strQuery + ' AND label:IFTTT'; //ラベル
// 上記条件でメールを検索
var myThreads = GmailApp.search(strQuery, 0, 30);
// 該当メールを取得
var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドか取得する
var valMsgs = [];
/* 各メールから日時、送信元、件名、内容を取り出す*/
for(var i = 0;i < myMsgs.length;i++){
// 配列に入れる
valMsgs[i] = [];
valMsgs[i][0] = myMsgs[i][0].getDate();
strDATE = Utilities.formatDate(valMsgs[i][0], 'JST', 'yyyy/M/d');
//本日のメールがあったので電気の利用有り
if (strNOW === strDATE) {
// ラベルを貸与(IFTTT のアーカイブとして)
var objLabel = GmailApp.getUserLabelByName("IFTTT/Archive");
myThreads[i].addLabel(objLabel);
strExists = true;
}
}
/* メール送信 */
if (strExists) {
/* 条件によってメール本文を準備 */
var strSubject = strNOW + "はOK";
var strBody = strNOW + "は電気が使われました。" + "\n"
+ "問題有りません。";
} else {
/* 条件によってメール本文を準備 */
var strSubject = "注意! " + strNOW + "に電気が利用されていません";
var strBody = strNOW + "に電気が使用された形跡がありません。"
+ "\n" + "確認してください。";
}
/* メールを送信 */
GmailApp.sendEmail(
strTo,
strSubject,
strBody,
{
from: strFrom,
name: strSender
}
); //MailAppではfromが設定できないとのこと
}