Enebular でTwitterをトリガーにNefry（古いほう）をLチカ

はじめまして。yukinolinです。
IoT初心者。2年ほど前にNefryをいじり始めたけど、訳あって1年ほど休眠。先日Enebularの勉強会に参加して、久々にやる気が出たので今回とりあえずやってみました。

作ったものは以下の通り。
「指定のハッシュタグがつけられたツイートがあれば、フォロワーの人数に合わせて、NefryのLEDの色が変わる」
大変だったのは、TwitterのDeveloper申請。申請目的を英語300字超で書く必要があります。適当に書きましたが、ここで心が折れる人も多いだろうな。


使ったもの
-
開発環境：Enebular
デバイス：Nefry（ESP8266）
クラウド：Nefryクラウド

EnebularのFlow
-
![190127_enebular01.JPG](https://qiita-image-store.s3.amazonaws.com/0/172882/59bf6d75-9e87-88ae-a90e-62073d81936c.jpeg)
こんな感じでつなぎました。
ノードを配置して、つなぐだけなら30秒もかからないですね。すごく簡単。

手順１ twitterノードを設定する
-
Twitterノードをダブルクリックすると、以下のウィンドウが出てくるので、ここに設定を入力。
![190127_enebular02.JPG](https://qiita-image-store.s3.amazonaws.com/0/172882/44e62f8d-b402-612e-964f-266d8f2fd1b3.jpeg)
　Twitter ID：Twitter Developerを申請したID
　検索対象：全ての公開ツイート、フォローしているユーザ、特定のユーザ、ダイレクトメッセージから選択
　検索条件：＠（ユーザ）,#（ハッシュタグ）が設定可能　とりあえず、#JAPANとしました。
　名前：ノードの名前（好きにつけて良さそう）

ここで、Twitter IDを設定するには横の鉛筆マークをクリックして以下のウィンドウに入力する必要があります。

![190127_enebular03.JPG](https://qiita-image-store.s3.amazonaws.com/0/172882/35ff2b37-bf39-16ae-1bbe-264d311784a0.jpeg)

Twitter developerの申請ができていない方は、「1.次のURLから・・・」のリンクから申請をする必要があります。

冒頭でも言いましたが、ここが最難関でした。英語300字以上でこれから作るAppの説明を求められます。そんなもんねーよ！と言いたいところですが、ここは我慢して、大人の対応で乗り切りました。

関連記事もググればいくつか見つかったので、今からやる人は頑張ってみてください。


とりあえず、ここまでの設定で、Twitterノードに検索したTweetの情報が入ってきます。それを`msg`オブジェクト？に入れて次のFunctionノードに渡しているようです。
（あまり理解していないので、間違っていたら誰か教えてください）

手順２ ほしい情報をJSON形式に整える
-
次にFunctionノードを設定します。
![190127_enebular04.JPG](https://qiita-image-store.s3.amazonaws.com/0/172882/f953ceb6-542f-a38a-a792-a1f897029cbf.jpeg)
あらかじめ、Nefryクラウドの登録しておきます。
そこでつけた`user`（ユーザー名）と、送られてくる`key`をそれぞれ入力します。

この辺りは、ちゃんとくさんの[こちらの記事](https://qiita.com/tokutoku393/items/f7e1288ede0355a62561?fbclid=IwAR09BW6UQ4nIKpHeJe-SC10LMiYKX3PsTqrRWgrvbXqDZzjCVUtH-JgEyQ4)を勉強させていただきました。
（ありがとうございます）

最後の一行`data: msg.tweet.user.friends_count`は、ツイートから取り出したい情報です。

[こちら](https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/tweet-object)にTweet Objectの詳細があります。ここを見ると、いろんなデータを取り出せることがわかります。またの機会にいろいろ試してみようと思います。

手順３ NefryクラウドへPOSTする
-
最後にHTTP requestノードを以下のように設定します。
![190127_enebular05.JPG](https://qiita-image-store.s3.amazonaws.com/0/172882/57b28173-bb16-9f4a-6913-dcdab81b8595.jpeg)
　メソッド：POST
　URL：http://cloud.nefry.studio:1880/nefrysetting/setdata
　出力形式：JSON
　名前：ノードの名前（好きにつけて良さそう）

これでデプロイすると、デバッグ画面にこんな感じでデータが上がってきます。
![190127_enebular06.JPG](https://qiita-image-store.s3.amazonaws.com/0/172882/3162983d-3e74-899b-72e7-582a9f020e50.jpeg)

手順４ Nefry側のコードを作成してアップロード
-
コードは以下のように書きました。
ツイート主のフォロワーが100人以下なら赤、1000人以下なら緑、それ以上は青色が光るようになっています。

```
#include <Nefry.h>
#include <NefryCloud.h>

NefryCloud nefryCloud;

char* USER = "Nefryクラウドのユーザ";
char* KEY = "Nefryクラウドのkey";

void onpush(int count);

void setup() {
  nefryCloud.begin(USER, KEY);
  nefryCloud.on(onpush);

}

void loop() {
  nefryCloud.loop();
}

void onpush(String str) {
  Nefry.println(str);

  long num = str.toInt();


  if (num < 100) {
      Nefry.setLed(255, 0, 0);
  } else if (num < 1000) {
      Nefry.setLed(0, 255, 0);
  } else {
      Nefry.setLed(0, 0, 255);
  }

}
```

コンパイル時に、NefryクラウドはESP32向けなので、ESP8266ではうまくいかないかも、と警告されますが、結果的にはうまくいきました。
Nefry開発者の皆さん、ありがとうございます。

結果
-
こんな感じでできました。
![ezgif-4-90b663ed2c4f.gif](https://qiita-image-store.s3.amazonaws.com/0/172882/8727040a-fa44-077f-2293-77d7ab0106fc.gif)
ツイートがあったときに、デバッグエリアのデータが更新され、ほぼ同時にNefryのLEDも色が変わっています。

ところでこれ、Enebularの編集画面を落としても、Nefryが電源ON・Wifi接続中なら動き続けますね。どういう仕組みなんだ・・・？

全然理解してなくても、とりあえずこれくらいはできる、ってことですね。
今後、いろいろ試してみようと思います。