RasPi
Home > RasPi > 記事 > 2016年10月 > LINE Notifyを実装してみる

LINE Notifyを実装してみる

カテゴリ: 手順メモ, ネコ監視カメラ

LINE Notifyを実装してみる

経緯

こちらの記事で知ったのですが、先日LINEに「LINE Notify」という新しい通知サービスが実装されたとのことです。

概要

「Line Notify」は、このサービスを使って外部のWebサービスやアプリケーションと連携させることで、LINEのメッセージとして通知を受け取ることができる、というものです。

現時点で連携できるサービスは

  • IFTTT
  • GitHub
  • Mackerel

がある模様。Githubと連携すればプリリクの通知など、Mackerelならばサーバの死活監視、ということでしょうかね…ますます鯖缶のプライベートに通知が割り込んでくるという恐ろしい世界です。シャドーITも促進されそうな予感です(しろめ

使い方

使い方は簡単、

  1. LINE(https://notify-bot.line.me/my/)のログイン画面から自分のIDでログイン
  2. 「アクセストークンの発行(開発者向け)」から「トークンを発行する」のボタンをクリックしてトークンを取得(トークン名は適宜・日本語可。通知先は自分だけのテストであれば「1:1でLINE Notifyから通知を受け取る」を選択)
  3. 発行されたトークンをコピペし、使用する

最後の部分ですが、使用サンプルとしてアクセストークンを含んでcurlコマンドを実行すると自分のLINEに通知が来ます。


curl https://notify-api.line.me/api/notify -X POST -H 'Authorization: Bearer [MY_ACCESS_TOKEN]' -F 'message=hello'

[MY_ACCESS_TOKEN]の部分に先ほど発行したアクセストークンをコピペしてください。トークン名を「catpticon」にしてテストした結果が以下。

LINE Notifyのテスト

構文としては下記のようになっていますね。

[catpticon(トークン名)] hello(curlでmessageに指定した文字列)

活用

これを何かに使えないか…と思ったところ、すぐに思い付いたのはネコ監視用RasPiの死活監視でした。そこで、こんなロジックを考えました。

  1. Twitterにカメラで撮影した写真を投稿(今までの動き。Phtyhonスクリプト)。このとき、Twitter APIからのレスポンスを受け取り、何かしらのエラーが返ってきた場合はテキストファイルに成否とその回数を記録する(例:「T,1(1回成功)」「F,2(2回失敗)」)←この部分を追加
  2. 上記テキストファイルを一定時間毎に読み取る。もし2回(任意)以上失敗していたら、強制再起動して状態復帰を試みる(シェルスクリプト)
  3. 上記シェルスクリプト中にLINE Notifyで再起動を実行する旨の通知を行う。

こんなイメージです。このイメージに沿ってPythonとシェルを記述。シェルスクリプトは下記のようになりました。


#!/bin/sh

#F,(2以上の回数)で始まる行があるかgrepで検索
grep -e "F,[2-9]" /home/pi/reg.txt

# grepの戻り値$?の評価。 grep戻り値 0:一致した 1:一致しなかった
if [ $? -eq 0 ]; then
  curl https://notify-api.line.me/api/notify -X POST -H 'Authorization: Bearer [MY_ACCESS_TOKEN]' -F 'message=ranberryが起動します'
  sudo reboot
fi

はい、いたってシンプルですね。これでテキストファイルの中身を「T,3」や「F,6」など色々変えてみてcronから実行させると、きちんと「F,2」以上のときに再起動がかかりました。

LINE NotifyをRasberryPiのシェルに組み込んだ結果

まとめ

さて、これでますますRaspberryPiが強くなった…と思いきや。肝心のTwitter APIからの応答を上手く受け取れていないのか、はたまた応答の中から上手くエラーが判定できていないのか。正否を書き込む部分で躓いてしまいました。…この後の部分が正しく動作していても、肝心の条件分岐の判定基準が正しくなければ意味がありません。ということで、実用はもう少し先になりそうです…。

あるいは、いっそ条件を見るのではなく3時間や6時間など定期的に再起動させてしまう(時間による強制再起動&LINE通知)か…。これでも「何かあったときにリセットを掛ける」という本来の役目は果たすので安易にこの方法を実装してしまうのも一つの手ですね。

タグ: カメラ, Python, twitter, LINE

 



関連する記事一覧