以前の記事(IFTTT版)では、扉が開いたことを検知すると、IFTTTサーバ上のアプレットを叩き、IFTTTのアプレットがスマホへメール送信していました。
techrmc.hatenablog.com
ここでは、IFTTTを利用せず、スマホのLINEアプリへメッセージを表示する仕組みに改造します。
LINEアプリへのメッセージングには、Notify APIを用います。
Notify APIについては、ネット検索で多数の記事が見つかるので、先達の記事を参考にさせて頂きました。参考にした記事例を2つほど。
LINE Notifyを利用するには、まずLINEにログインしてトークンを取得する必要があります。トークンの取得方法は先達の記事をご覧ください。
検知回路
検知回路は以前の記事(IFTTT版)から改造せず、そのまま使用します。
プログラム
LINEのNotity APIを叩くよう、IFTTT版を改造しました。
Esp_Line_Notifyというライブラリを利用すると、もっとシンプルに記述できるようですが、ここではEsp_Line_Notifyは利用しない方式としました。改造箇所は次の通りです。
Notify APIの固定パラメータ
LINE Notify APIを叩くための固定パラメータをセットします。
// LINE const char* host = "notify-api.line.me"; const int httpPort = 443; const char* token = "xxxxxxxx"; const char* message = "PostBox: Opened";
上記ではtokenを"xxxxxxxx"と伏せてありますが、実際には取得したトークンの文字列で置き換えます。
messageは、LINEアプリに表示されるメッセージ文です。ここでは、"PostBox: Opened"が表示されます。
clientオブジェクト
IFTTT版ではWiFiClientクラスを使っていましたが、Notify APIではHTTPS接続が必要なため、WiFiClientSecureクラスを使います。
WiFiClientSecure client;
Notify APIのキック
IFTTT版のsend2IFTTT()の代わりに、次のsend2LINE()を用います。
client.setInsecure()は証明書の検証を省くためのコードです。
void send2LINE(){ client.setInsecure(); if (!client.connect(host, httpPort)) { return; } String content = String("message=") + String(message); client.print(String("POST /api/notify HTTP/1.1\r\n") + "Host: " + host + "\r\n" + "Authorization: Bearer " + token + "\r\n" + "Content-Length: " + String(content.length()) + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n\r\n" + content + "\r\n"); unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { client.stop(); return; } } // Read all the lines of the reply from server while(client.available()){ String line = client.readStringUntil('\r'); } }