ラズパイからの知らせを、家では声とベルで受けています。ただ、家にいないときは聞こえません。そこで、同じ知らせを LINE でも受けられるようにしました。スマホに届くので、外出先でも気づけます。
以前は「LINE Notify」で手軽に送れましたが、LINE Notify は 2025 年 3 月 31 日でサービスを終了しました。この記事では、今使える方法として、LINE 公式アカウントの Messaging API で、ラズパイから自分の LINE に送る仕組みを作ります。送り先は自分だけにするので、友だちやお客さんに届くことはありません。
この記事の前にできていること
- ラズパイに PC から SSH で接続できる(第 3 回まで)
- LINE のアカウント(スマホの LINE)
この記事でできるようになること
- ラズパイから、自分の LINE にだけメッセージを送る
- 声やベルの知らせと同じきっかけで、LINE にも送る
先に知っておくこと
- 無料で送れる数に上限がある:LINE 公式アカウントの無料のプラン(コミュニケーションプラン)は、送れるメッセージが月 200 通までです。自分 1 人に送るなら、1 日 6 通ほどまでなら収まります。大事な知らせだけにします。
- トークンは鍵と同じ:チャネルアクセストークンがあれば、だれでもそのアカウントからメッセージを送れます。ラズパイの設定ファイルにだけ置き、コードやブログには書きません。
- 送り先は自分のユーザー ID だけ:Messaging API には友だち全員に送る方法(ブロードキャスト)もありますが、通知では使いません。送り先を自分の ID だけにしておけば、まちがって友だちに届くことはありません。
手順 A:LINE 公式アカウントを作る
LINE 公式アカウントの作成のページから、通知用のアカウントを作ります。通知のためだけなら、新しく通知用のアカウントを作るのがおすすめです。
すでにお店などのアカウントがあれば、それを使うこともできます(送り先を自分だけにするので、お客さんには届きません)。ただし、次の 2 つに気をつけます。
- Messaging API を有効にするときに選んだプロバイダーは、あとから変えられません。Messaging API との連携を解除することもできません。
- ラズパイから送った数は、お店の配信と同じ月 200 通の枠から引かれます。


手順 B:Messaging API を使えるようにして、トークンを発行する
LINE 公式アカウントの管理画面の「設定」→「Messaging API」で、Messaging API を使えるようにします。このときにプロバイダー(開発者の名前のようなもの)を選びます。あとから変えられないので、通知用なら自分の名前などにしておきます。LINE Developers を初めて使うときは、名前とメールアドレスの登録の画面が先に出ます。そのあと LINE Developers のチャネルの「Messaging API 設定」で、チャネルアクセストークン(長期)を発行します。



手順 C:自分のユーザー ID を調べる
LINE Developers のチャネルの「チャネル基本設定」の下のほうに、「あなたのユーザー ID」(U で始まる 33 文字)が出ています。これが自分あての送り先です。
この欄は、LINE のビジネス ID を LINE アカウントと連携していないと表示されません。メールアドレスでビジネス ID を作った場合は、LINE アカウントでログインし直すと表示されます。
あわせて、スマホの LINE でこの公式アカウントを友だちに追加しておきます(友だちでないと届きません)。「Messaging API 設定」タブの QR コードを読むと追加できます。

手順 D:ラズパイにスクリプトと設定を置く
ラズパイの ~/notify に、次の 2 つのファイルを作ります。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
ラズパイから、自分の LINE にメッセージを送る(LINE 公式アカウントの Messaging API・push)
使い方:python3 line_notify.py "サイトが止まりました"
ほかの Python からは:import line_notify; line_notify.send("サイトが止まりました")
設定は同じフォルダの line.ini(トークンと、送り先のユーザー ID)。Python の標準ライブラリだけで動く。
"""
import configparser
import json
import os
import re
import sys
import urllib.error
import urllib.request
HERE = os.path.dirname(os.path.abspath(__file__))
API = "https://api.line.me/v2/bot/message/push"
def load():
cfg = configparser.ConfigParser(interpolation=None)
path = os.path.join(HERE, "line.ini")
try:
if not cfg.read(path, encoding="utf-8-sig") or not cfg.has_section("line"):
raise RuntimeError("設定ファイル line.ini([line])がありません")
token = cfg.get("line", "channel_access_token", fallback="").strip()
to = [u.strip() for u in cfg.get("line", "to", fallback="").split(",") if u.strip()]
except configparser.Error as e:
raise RuntimeError("line.ini の書き方がちがいます(%s)" % e.__class__.__name__)
if not token or not token.isascii():
raise RuntimeError("line.ini の channel_access_token が入っていません")
if not to or not all(re.fullmatch(r"U[0-9a-f]{32}", u) for u in to):
raise RuntimeError("line.ini の to が、U で始まる 33 文字のユーザー ID になっていません")
return token, to
def send(text):
"""送れたら True。送り先は line.ini の to(自分のユーザー ID だけにしておく)"""
try:
token, to = load()
except RuntimeError as e:
print("送れませんでした:%s" % e, file=sys.stderr)
return False
ok = True
for user_id in to:
body = json.dumps({"to": user_id, "messages": [{"type": "text", "text": text[:2000]}]}).encode("utf-8")
req = urllib.request.Request(API, data=body, method="POST", headers={
"Content-Type": "application/json",
"Authorization": "Bearer " + token,
})
try:
with urllib.request.urlopen(req, timeout=15) as r:
ok = ok and r.status == 200
except urllib.error.HTTPError as e:
# 401:トークンが違う・429:送れる数の上限 など。トークンは表示しない
print("送れませんでした:HTTP %d %s" % (e.code, e.read()[:200].decode("utf-8", "replace")), file=sys.stderr)
ok = False
except OSError as e:
print("送れませんでした:%s" % e, file=sys.stderr)
ok = False
return ok
if __name__ == "__main__":
if len(sys.argv) < 2:
print(__doc__)
sys.exit(1)
sys.exit(0 if send(sys.argv[1]) else 2)
[line]
channel_access_token = (手順 B のチャネルアクセストークン)
to = (手順 C のあなたのユーザー ID)
chmod 600 ~/notify/line.ini
書き方と役目
- push:決まった相手(ユーザー ID)にだけ送る API。友だち全員に送る broadcast は使わない
to:送り先。自分の ID だけにしておく(カンマで区切ると複数にもできるが、通知では自分だけがおすすめ)- トークンは表示しない:送れなかったときも、画面に出すのは HTTP の番号と LINE からの理由だけ
text[:2000]:LINE のテキストの上限は 5,000 字。通知は短いので、念のため 2,000 字で切っておく- 設定ファイルを先に確認する:トークンが空のとき・送り先が U で始まる 33 文字になっていないときは、送らずに理由を出して止まる
手順 E:送ってみる
cd ~/notify
python3 line_notify.py "ラズパイからのテストの通知です"
スマホの LINE に、公式アカウントからメッセージが届けば成功です。トークンがまちがっていると、「送れませんでした:HTTP 401」のあとに、英語の理由が出て止まります(このときは、メッセージは送られません)。
line.ini の送り先(to)が見本のままのときなど、書き方がちがうときは、送らずに次のように出ます。
送れませんでした:line.ini の to が、U で始まる 33 文字のユーザー ID になっていません
何も出ずに終わったのに届かないときは、スマホの LINE でその公式アカウントを友だちに追加しているか、ブロックしていないかを確認します。友だちでない相手には、LINE は「受け付けた」と返しますが、実際には届きません。
家で試したこと:ほかの用事で使っているアカウントで、自分にだけ送る
家では、ふだん別の用事で使っている LINE 公式アカウント(ほかにも管理者がいる)を使って、自分にだけテストの通知を送りました。送り先を自分のユーザー ID だけにしたので、届いたのは自分の LINE だけでした。

このように、すでに使っているアカウントでも、送り先を自分だけにすれば通知に使えます。ただし、手順 A の 2 つの注意(プロバイダーは変えられない・月 200 通の枠を分け合う)は先に確認しておきます。
声やベルと一緒に使う
売れたメールを声で知らせる仕組みなどで、声を順番待ちに置いている所に 1 行足せば、同じきっかけで LINE にも届きます。
import line_notify
enqueue("siteb_down.wav") # 家では声で
line_notify.send("ホームページが止まりました") # 外出先では LINE で
声のスクリプトが ~/notify とは別のフォルダにあるときは、import line_notify の前に sys.path.insert(0, os.path.expanduser("~/notify")) を足します。LINE に送るときは最長 15 秒待つので、声を先に置く今の順番のままにしておくと、声が遅れません。
家にいるときは声で、外出先では LINE で気づけます。夜に LINE の通知が鳴るのが気になるときは、スマホの LINE の側で、その公式アカウントの通知を夜だけ切ることもできます。
まとめ
LINE 公式アカウントの Messaging API で、ラズパイから自分の LINE にだけ知らせる仕組みを作りました。トークンと送り先の ID を設定ファイルに置き、1 行で送れます。月 200 通の上限があるので、すぐ知りたい大事な知らせに使うのがおすすめです。
次に読む