Raspberry PiからLINEに自動メッセージを送る方法(活用事例あり)

【PR】この記事には広告が含まれています。

Raspberry PiからLINEに自動メッセージを送る方法(活用事例あり)

プログラミング言語PythonでLINEにメッセージ通知を送ることができます。Raspberry Piで自動メッセージを使うと、外出先でもラズパイの情報を受け取ることができるため、活用の幅が一気に広がります。

LINE Notifyのトークンを取得する

メッセージの送信には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は日常の「ちょっとした悩み」を解決してくれます。既製品にはない「痒い所に手が届く」システムが作れます。僕の考えたシステムは以下の通りです。

  1. 本日の日付を取得する
  2. 本日が第何週の何曜日かを判定する
  3. 本日が何ごみの日かを判定する
  4. ごみの日であれば、品目をLINE通知する
  5. 上記のプログラムを毎朝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週の場合とか書いてあるのもプログラムに打ち込むんですか?あとこれを毎週にすることとかって可能ですか?教えていただけるとありがたいです

返信する
そぞら

♯第1週の場合
のような#から始まる文字列はプログラムとしては扱われません。
コメントアウトといって、通常プログラムの説明や後から見返したときに分かりやすくするためにコメントを記入しておきます。

毎週の条件分岐について
例えば毎週金曜日が「燃えるごみの日」の場合は、43行目に
gomi_type = “今日は「燃えるごみ」の日です。”
と記入します。このとき、文頭のスペースを4文字分空けるという点に注意してください。

返信する

つまり♯のやつは書いてても反映されないから大丈夫っていう解釈であってますかね?

そぞら

そうです。
#の文は書いても書かなくても、実行結果に影響はありません。

わだ

この記事を読んで、自分でも作ってみたくなったのですが、この記事と同じ様なLINEへの通知装置を作りたい場合、ラズパイ本体はRaspberry Pi 3 Model A+モデルが最適なのでしょうか?
他の安いモデルでも動作可能なんでしょうか?
よろしくお願いします。

返信する
そぞら

返信が遅くなり、申し訳ございません。

LINEへの通知装置の構築には、インターネットに接続できる能力が必要なため、
Wi-Fiが利用可能なRaspberry Piならどのモデルでも問題なく動作するはずです。
Raspberry Pi Zero Wなど、他のWi-Fi対応モデルでも可能です。

何か他にご質問がありましたら、お気軽にコメントください。

返信する
NS

この記事を読み「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/

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です