IFTTTにLINE Channelができました

投稿者:

本日(2016/09/29)開催されたLINE Developer Dayで発表されたLINE Notifyというサービスで、IFTTTにLINE Channelが開設され、IFTTTからLINEにメッセージを送ることができるようになりました。

IFTTTは今までスイッチサイエンスマガジンでも何度か取り上げてきましたが、Maker Channelを使うとさまざまな機器から情報を発信できる、大変便利なサービスです。

今回はESP-WROOM-02搭載のESPr Door Sensorを使って、ドアの開け閉め情報をLINEに通知する仕組みを作ってみます。

line_01

まずはIFTTT側の設定をしておきます。LINE ChannelからCONNECTボタンを押してLINEのサイトで認証して戻ってきます。

line_02

次にレシピを作りましょう。Thisから始めます。

line_03

Maker Channelを選択します。
line_04

Recieve web requestを選択します。

line_05

次はThatです。

line_07

Event Nameを入力 Door-OPENにします。

line_06

LINE Channel を選択します。

line_08

Send messageを選択します。

line_09

Recipient を1:1でLINE Notifyから通知を受け取るにし、Messageを Door {{Value1}}! にします。

line_10

line_11

Create Recipeで完成です。

line_12

そしてドアセンサ側のスケッチです。ESPr Door Sensorはドアの開け閉めでリセットがかかりますから、setup()だけですべて終わらせます。(スケッチは長いので最後に)

完成しました!

今回、送信データについては深く追求しませんでした。始めは日本語メッセージを送信したんですが、化けたので英語にしました。またNotifyだから仕方ないのかもしれないですが、That側だけでThis側になれないのは少し残念です。This側にできるとBotが作れてしまうので、そこはだめですよということなのかも。

Notifyは自分だけでなく自分が入っているグループトークにも送れるので、いろいろな使い道がありそうです。簡単にいろいろなことができるようになるのは楽しいですね。

extern "C" {
#include "user_interface.h"
}
#include
#define IFTTT_MAX_SIZE_STRING 512

#define WLAN_SSID "xxxxx"
#define WLAN_PASS "xxxxx"

// This will send POST to IFTTT server
char str[IFTTT_MAX_SIZE_STRING] = {0};
char str_open[] = "Open";
char str_close[] = "Close";
char v2[16] = "";
char v3[16] = "";
char header[100] = "POST /trigger/Door-OPEN/with/key/xxxxxxxxxxxxxxx HTTP/1.1\r\n";
const char* host = "maker.ifttt.com";
char contentLen[50] = {0};
const char* contentType = "Content-Type: application/json\r\n\r\n";
char valueData [150] = {0};

void setupWiFi() {
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);

WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();

Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

void setup() {
//デバッグ用にシリアルを開く
Serial.begin(115200);
delay(10);

//ドアセンサのつながるGPIO5を入力に
pinMode(5, INPUT);

// LEDのつながるGPIO4を出力に
pinMode(4, OUTPUT);
digitalWrite(4, LOW);

// WiFiセットアップ
setupWiFi();
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
int magnet = digitalRead(5);

digitalWrite(4, HIGH);
if (magnet == LOW) {
sprintf(valueData, "{\"value1\":\"%s\",\"value2\":\"%s\",\"value3\":\"%s\"}\r\n", str_close, v2, v3);
// digitalWrite(4,LOW);
} else {
sprintf(valueData, "{\"value1\":\"%s\",\"value2\":\"%s\",\"value3\":\"%s\"}\r\n", str_open, v2, v3);
// digitalWrite(4,HIGH);
}
sprintf(contentLen, "Content-Length: %d\r\n", strlen(valueData));
sprintf(str, "%sHost: %s\r\n%s%s%s", header, host, contentLen, contentType, valueData);

client.print(str);
delay(1000);
}

void loop() {
}