プリンを守る技術 ～その１：LINEへの通知～

###概要：
　せっかく取っておいたプリンを家族に食べられてしまった。そんな経験はありませんか？
　私が所属するaNo研は、冷蔵庫のプリン見守りデバイス「プリン・ア・ラート2」を発表しました。
　この記事は、「プリン・ア・ラート2」に使われている技術を紹介します。

###紹介：
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">冷蔵庫のプリンを見守る<br>家族間のちょうどいいセキュリティ<br><br>プリン・ア・ラート2できました<a href="https://twitter.com/hashtag/M5Stack?src=hash&amp;ref_src=twsrc%5Etfw">#M5Stack</a> <a href="https://t.co/WRlGMMOx7l">pic.twitter.com/WRlGMMOx7l</a></p>&mdash; aNo研 (@anoken2017) <a href="https://twitter.com/anoken2017/status/985124070663512067?ref_src=twsrc%5Etfw">2018年4月14日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


###システム構成
![purin_1.png](https://qiita-image-store.s3.amazonaws.com/0/73020/8913f7f5-264f-afaf-85ff-f084f028ea60.png)
プリン・ア・ラート2は、プリンの重さを検知するセンサー、そして、小型のマイコンM5Stackで構成されています。
プリンの検知は、小皿の下の重さセンサーで行われます。プリンが取られると小皿が軽くなり、これをきっかけに、Lineへのアラートを発します。
![クリップボード01.png](https://qiita-image-store.s3.amazonaws.com/0/73020/f3ca26a0-8f24-e41a-d6a1-d8e903a1ed24.png)
プリン・ア・ラートでは、Lineへの通知に、「Line Notify」を使用しています。「Line」が提供するサービスで、使用するとLINEにメッセージを送って、通知をLINEで受け取ったりすることが出来ます。

###Line Notifyのサービス登録
Line NotifyをM5stackで使うためには、Line Nofityのホームページで、あなたのLineとのアクセストークンを発行します。

Line Nofity：https://notify-bot.line.me/

![クリップボード04.png](https://qiita-image-store.s3.amazonaws.com/0/73020/3fde0682-5184-f679-fa2b-7cc3c903e42b.png)
Line Nofityのホームページから、「アクセストークンの発行（開発者向け）」を押します。

![クリップボード06.png](https://qiita-image-store.s3.amazonaws.com/0/73020/fbac3d6c-2f3b-dc84-1cf5-acf1772a7b0f.png)
そして、必要事項を記入の上、発行されたアクセストークンをコピーします。
これで、Line NotifyをM5stackで使うための準備が完了です。

###実装例
以下に、M5StackでLine Notifyを発行するためのソースコードを示します。
your_tokenには、Line Notifyのページで取得した、アクセストークンを記載してください。
今回の事例であれば、センサーと接続されているポート(No36)で、センサーから、High→Lowと反応があったタイミングでLineへの通知が行われます。

```

#include <ssl_client.h>
#include <WiFiClientSecure.h>
#include <M5Stack.h>
const char* ssid = "wifi_ssid";
const char* password = "pass";
int switch_port=36;
void wifi_connect() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)  delay(500);
}
void setup() {
  M5.begin();
  wifi_connect();
}
void loop() {
  M5.update();
  int buttonState = digitalRead(switch_port);
  static int buttonState_old=buttonState;
  if ( (buttonState == 1) && ( (buttonState_old == 0)))  send_line_alert();
  buttonState_old=buttonState;
}
void send_line_alert() {
  const char* host = "notify-api.line.me";
  const char* token = "your_token";
  const char* message1 = "%0D%0A %0D%0Aプリンが取られました！！！%0D%0A";
  WiFiClientSecure client;
  if (!client.connect(host, 443)) {
    return;
  }
  String query = "message=" + String(message1);
  String request = "POST /api/notify HTTP/1.1\r\nHost: " + host + "\r\nAuthorization: Bearer" + token + "\r\nContent-Length: " + String(query.length()) +  "\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n" +query + "\r\n";
  client.print(request);
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r")   break;
  }
}

```






###参考文献
・[にゃんてっく☆やせないアイツとESP8266―おデブなアイツのダイエットのはじまり](https://next.rikunabi.com/journal/tag/nyantech/)

###「プリン・ア・ラート」記事
・[aNo研公式ホームページ](https://anoken.jimdo.com/)
・[プリンを勝手に取ると「返してね」と警告　冷蔵庫を見守る警報器「プリン・ア・ラート」がかわいい](http://nlab.itmedia.co.jp/nl/articles/1804/16/news073.html)
・[冷蔵庫のプリンを食べる犯人に警告を発して反省までさせるデバイス「プリン・ア・ラート2」](http://news.livedoor.com/article/detail/14591291/)