Python
RaspberryPi
IoT
linebot
DHT22

Raspberry Pi 3+DHT22 で気温を通知するLINEbotを作る①

やりたいこと

LINEbotに自分の部屋の気温を聞いたら返ってくるようにしたい!IoTやりたい!!!

必要なもの

・Raspberry Pi 3 modelB
・DHT22(温度センサ)
・ブレットボード
・ジャンパー線
・LINEアカウント
※センサ類は秋月などでの購入をお勧めします。

参考サイト

※参考サイト見れば全部できちゃう。
LINE Messaging APIをngrok経由でRaspberry Pi 3で使ってみる(サンプルbot編)
温度/湿度センサーDHT22をRaspberry Piで使用する方法

LINEbot作成

まず、LINEbotを作成するためにLINE Developerにログインをします。
メールアドレスとパスワードはLINEで設定したものになります。
①左にある新規プロバイダーをクリックしましょう。
0改.jpg

②プロバイダー名を決めて確認ボタンを押します。

③Messaging APIをクリックします。

④アプリ名等、諸々入力します。お金をかけたくなければフリーにチェック。

⑤登録が終わったら諸々が表示されます。

[Webhook送信]   :利用する
[自動応答メッセージ]:利用しない
に設定をしておきましょう。

Webhook URLは表示されてないと思いますが、後で設定をするので大丈夫です。

QRコードで友達を追加して、とりあえず既読無視するLINEbotが完成しました。簡単。
LINEbotに関しては後程また設定をするので置いておきます。

Raspberry Piの設定

※ここでは、既にRaspberryPiにOSがインストールされた前程で話を進めます。

ngrokのインストール

ngrokはインターネットから自宅にあるサーバーを簡易的に公開するために使用するサービスのことです。しかも、無料で使えちゃう。
LINE Messaging APIはインターネットからhttpsでアクセスできる環境が必須なのでとても便利です。

ngrokを使用するためにまず以下のURLからアカウントを作成します。
https://ngrok.com/
ログインをすると以下のようなページが表示されると思います。
6改.jpg

ここまで準備ができたらラズパイにngrokをインストールします。
ラズパイでターミナルを開き、先ほどのページでコピーしたアドレスをwgetして、unzipします。

$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
$ sudo unzip ngrok-stable-linux-arm.zip -d /usr/local/bin/

続いて、ngrokのページの③Connect your accountのコマンドをコピーして入力します。

$ cd
$ ./ngrok authtoken "コピーしたauthtoken"

以上でサーバーの準備が整いました。

flaskとline-bot-sdkのインストール

LINEの中の人が作成してくれたサンプルbotを動作させるために必要なものをインストールします。

$ pip install flask
$ pip install line-bot-sdk

サンプルbotを用意

以下のURLのサンプルbotをダウンロードし、適当な場所にapp.pyという名前で保存してください。
https://github.com/line/line-bot-sdk-python/blob/master/examples/flask-kitchensink/app.py

変数の設定

app.pyの中には「LINE_CHANNEL_SECRET」「LINE_CHANNNEL_ACCESS_TOKEN」がありますが、これを自分のものに変更する必要があります。

上図のChannel Secretが「LINE_CHANNEL_SECRET」、アクセストークンが「LINE_CHANNNEL_ACCESS_TOKEN」にあたります。
これを環境変数にするためにターミナルで以下を入力します。

$ export LINE_CHANNEL_SECRET="自分のChannel Secret"
$ export LINE_CHANNNEL_ACCESS_TOKEN="自分のアクセルトークン"

このままではラズパイを再起動した際に環境変数がリセットされてしまうので、.profileの一番下に上記のコマンドを追加します。

$ cd
$ nano .profile

サンプルアプリ(app.py)の実行

サンプルアプリを実行してLINEからのメッセージにオウム返しするかを確認します。
ラズパイで、コンソールを2つ立ち上げます。
1つ目のコンソール画面でapp.pyを実行します。

$ python app.py
* Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)

この状態で、2つ目のコンソール画面で ngrok http 8000を実行します。

$ ngrok http 8000
grok by @inconshreveable (Ctrl+C to quit)

Session Status online
Account XXXXXX (Plan: Free)
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://hogehoge.ngrok.io -> localhost:8000
Forwarding https://hogehoge.ngrok.io -> localhost:8000

Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00

実行後に表示されるForwarding後の「https://hogehoge.ngrok.io」をコピーしておきます。
※hogehogeは実際には長い文字列が表示されています。

コピーしたURLをLINE developersの「Channnel基本設定」画面の「Webhook URL」に入力します。
「hogehoge.ngrok.io/callback」
最後に/callbackを追加して下さい。
接続確認ボタンを押すと「Webhookが正常ではないHTTPステータスを返しました。」と表示されますがLINEからちゃんとオウム返しがされます。

動作確認

LINEbotからオウム返しされるか確認します!

うおー!ちゃんとオウム返しされています!
これでオウム返しLINEbotが完成しました。
次はこのLINEbotを改良して部屋の気温を通知できるようにしましょう!

長くなったので続きは次の記事に記載します。
Raspberry Pi 3+DHT22 で気温を通知するLINEbotを作る②