【PR】この記事には広告が含まれています。
プログラミング言語PythonでLINEにメッセージ通知を送ることができます。Raspberry Piで自動メッセージを使うと、外出先でもラズパイの情報を受け取ることができるため、活用の幅が一気に広がります。
LINE Notifyのトークンを取得する
メッセージの送信にはLINE Notifyという無料のサービスを利用します。サービスを利用するには、トークンの発行が必要です。
トークンとは
LINE Notifyにアクセスするために必要な認証情報を表す文字列のことで、パスワードのようなものです。
「LINE Notify」のトークンは以下のページから取得できます。
画面右上の「ログイン」を押します。
メールアドレスとパスワードを入力してログインします。
ユーザー名を押して、マイページを押します。
「トークンを発行する」ボタンを押します。
トークン名を入力します。
例えば、トークン名を「ラズベリーパイからの通知」と設定した場合、以下のようなメッセージになります。
「発行する」ボタンを押します。
トークンが発行されます。「コピー」ボタンからトークンをコピーします。このトークンを使う事で「LINE Notify」が利用できるようになります。
ページを閉じるとトークンは二度と表示されないので、確実にコピーしてトークンを保存しておきましょう。
LINEのトークに、「LINE Notify」からトークン発行を知らせるメッセージが来ます。
LINE通知を送るプログラム
import requests
url = "https://notify-api.line.me/api/notify"
token = "トークンをここに入力"
headers = {"Authorization" : "Bearer "+ token}
message = "そぞら@プログラミングに夢中すぎる会社員より"
payload = {"message" : message}
r = requests.post(url, headers = headers, params=payload)
4行目には発行したトークンを入力してください。
上記のプログラムを実行すると、以下のようにメッセージが送られます。
6行目のmessage = ” ” の中身は変更可能です。好きなメッセージに変えてみてください。
Raspberry Piで「ごみ出し通知システム」を作ろう
LINE通知機能を使った活用事例を紹介します。
ごみの日ってなかなか覚えられないですよね。資源ごみなどは回収頻度が少ないため、下記のようなパンフレットを確認する必要があり、かなり面倒です。
また月1回の危険不燃物の日に出しそびれると、保管場所が片付かず精神的ショックが大きいです。
Raspberry Piは日常の「ちょっとした悩み」を解決してくれます。既製品にはない「痒い所に手が届く」システムが作れます。僕の考えたシステムは以下の通りです。
- 本日の日付を取得する
- 本日が第何週の何曜日かを判定する
- 本日が何ごみの日かを判定する
- ごみの日であれば、品目をLINE通知する
- 上記のプログラムを毎朝6時に実行する
完成したプログラム
import datetime
import requests
#LINEメッセージ送信の関数
def send_message(gomi_type):
url = "https://notify-api.line.me/api/notify"
token = "トークンをここに入力"
headers = {"Authorization" : "Bearer "+ token}
message = (gomi_type)
payload = {"message" : message}
r = requests.post(url, headers = headers, params=payload)
#今日は第何週の何曜日かを調べる関数
def get_WeekNum_and_DayOfWeek(date_):
# リストを用意(weekday()で取得した数値を曜日に変換)
lists=["月曜日","火曜日","水曜日","木曜日","金曜日","土曜日","日曜日"]
divmod_=divmod(date_.day,7) # 日付を7で割って商と余りを取得
# 商が0=日付が6日以下の場合は第一週
if divmod_[0]==0:
week_num=1
# 余りが0=7の倍数の日数は商=第X週
elif divmod_==0:
week_num=divmod_[0]
# それ以外=商が1以上かつあまりもある⇒商+1=第X週
else:
week_num=divmod_[0]+1
# 戻り値は第X週と曜日の二つ
return (week_num,lists[date_.weekday()])
date_=datetime.date.today()
week_num,DayOfWeek=get_WeekNum_and_DayOfWeek(date_)
print(f"{date_}は第{week_num}週{DayOfWeek}")
#ゴミの種類を入れるための変数を作る。初期値は空白
gomi_type = ""
#ごみの日かどうかを判定する
if DayOfWeek == "水曜日" or DayOfWeek == "土曜日":
gomi_type = "今日は「燃えるごみ」の日です。"
if DayOfWeek == "金曜日":
#第一週、第三週の場合
if week_num == 1 or week_num == 3:
gomi_type = "今日は「燃えないごみ、びん・かん」の日です。"
#第二週の場合
if week_num == 2:
gomi_type = "今日は「資源古紙、ペットボトル、危険不燃物」の日です。"
#第四週の場合
if week_num == 4:
gomi_type = "今日は「資源古紙、ペットボトル」の日です。"
if gomi_type == "":
print("今日はごみ収集の日ではありません。")
else:
print(gomi_type)
#LINEメッセージ送信
send_message(gomi_type)
プログラムの保存
プログラムを実行すると、今日がどの種類のゴミ収集の日かを判断し、その情報をLINEで通知することができます。ただし、7行目のトークンを設定する部分は「トークンをここに入力」となっているため、実際に動作させるには適切なトークンに置き換えてください。
プログラムの解説
第何週の何曜日かを調べる部分は難易度高めです。しかし、ネット上には先人たちの知恵が豊富に存在します。ありがたく使わせてもらいましょう。
参考にさせていただいたサイト
【Python】日付から第何週何曜日を取得する
まず31行目で本日の日付を取得します。
32行目の関数「get_WeekNum_and_DayOfWeek」を使うと、第何週の何曜日かを求めることができます。
最後に、gomi_type
にゴミの種類の情報があれば、それを表示し、send_message
関数でLINEメッセージを送信します。gomi_type
が空白のままであれば、今日はゴミ収集の日ではないと表示します。
毎朝6時にプログラムを定期実行する
ラズベリーパイでプログラムを決まった時間に自動で実行するときは、Cronを使います。Cronでは以下の項目が設定できます。
- 実行時間(特定の時刻、日、月、曜日)
- 実行頻度(分単位、時間単位、日単位、月単位、曜日単位)
- 実行するコマンドまたはスクリプト
crontab -e
エディター(ファイルを編集するためのソフト)を選択します。よくわからない人は1のnanoを選びましょう。1を入力してEnterキーを押します。
crontabというファイルが開きます。このファイルに定期実行の内容を記述します。
毎日6時に「gomi_LINE.py」を実行する場合は、以下のように書きます。
00 6 * * * python gomi_LINE.py
pyファイルが「/home/pi」に保存されている場合は、特にファイルパスを指定する必要がありません。
上記のコマンドをファイル中の一番下に追加します。
ctrl+Oで書き込み。ctrl+Xでエディターを閉じます。
完成!
あとは6時になるまで待つのみです。当然ですが、電源を切るとプログラムは実行されません。Raspberry Piは常時起動しておく必要があります。
Raspberry Pi 3 Model A+の時間当たり消費電力は1.75W。1kWhあたりの料金単価を35円で計算すると、1か月の電気代は約44円と非常に経済的です。
6時ぴったりにLINEを送ってくれました。
こうして、ゴミの出し忘れの心配から解放されたわけです。Raspberry Piは電子パーツを買わなくても、「ちょっと便利なモノ」が作れます。
コメント一覧
おかしいな
LINEトークンが出てこない と悩んでいましたが
やっとわかりました
LINEはスマホだけではないもですね
デスクトップにLINEをインストールしたらトークン発行画面が出てきました
知識の無い高校生でもできますか?これやってみたいんですけど
ラズパイを購入して、セットアップしてプログラムを実行するところまでできれば、サンプルプログラムを動かすことはできると思います。プログラミング経験がない方であれば、少し難しく感じることもあるかもしれませんが、ぜひチャレンジしてみていただきたいです。
プログラムの途中に♯第1週の場合とか書いてあるのもプログラムに打ち込むんですか?あとこれを毎週にすることとかって可能ですか?教えていただけるとありがたいです
この記事を読んで、自分でも作ってみたくなったのですが、この記事と同じ様なLINEへの通知装置を作りたい場合、ラズパイ本体はRaspberry Pi 3 Model A+モデルが最適なのでしょうか?
他の安いモデルでも動作可能なんでしょうか?
よろしくお願いします。
返信が遅くなり、申し訳ございません。
LINEへの通知装置の構築には、インターネットに接続できる能力が必要なため、
Wi-Fiが利用可能なRaspberry Piならどのモデルでも問題なく動作するはずです。
Raspberry Pi Zero Wなど、他のWi-Fi対応モデルでも可能です。
何か他にご質問がありましたら、お気軽にコメントください。
この記事を読み「LINE通知を送るプログラム」を実行したところ、最初の数回は通知が送れたのですが、急に「ImportError: no module named ‘requests’」が出力され通知が送れなくなりました。
調べたところ「requests」ライブラリがインストールされていないらしいとのことですが、最初は通知を送れた上に、解決方法として出てきた「requestsのインストール」も上手くできないため、原因がわかりません。
使用しているRaspberry PiはPICO W。Windows10のThonnyから編集を行っています。
また、このプログラムではWi-FiのSSIDとパスワードを入力する欄がありませんが、LINE通知にはWi-FiのSSIDとパスワードは不要なのでしょうか。
連絡が遅くなり申し訳ありません。
該当する記事のプログラムはRaspberry Pi用のものであり、Pico Wには対応しておりません。
Pico WでLINE通知を送る場合は以下の記事の
「BOOTSELボタンを押してLINEにメッセージを送る」
という部分をご確認いただければと思います。
https://sozorablog.com/raspberry-pi-pico-w-review/
わかりやすく教えていただきありがとうございました
ブログを読んでいただき、ありがとうございます。
皆様のお役に立てるよう改善を重ねてまいります。