RaspberryPi起動時にDiscordにIPアドレスを通知する
概要
以前、同じことをLINEでやっていたのですが、LINE Notifyがサービス終了となってしまい使えなくなってしまいました。
そのためDiscordのウェブフック機能に移行しようというのが趣旨です。以前の記事はQiitaに書いていたので、LINEと被る部分も改めて解説します。
実行環境
MCU:Raspberry Pi 4 Model B Rev 1.5
OS:Raspberry Pi OS 12 (bookworm)
手順
ウェブフックURLの取得
通知したいテキストチャンネルの「チャンネルの編集」をクリックします。

「連携サービス」の「ウェブフック」をクリックします。

「新しいウェブフック」をクリックすると新しい項目が追加されるのでクリックします。

「お名前」にわかりやすい名前を入力し、「ウェブフックURLをコピー」をクリックするとURLがコピーされます。
このURLは後ほど使うのでメモ帳等に貼り付けて保存しておいてください。

メッセージ送信プログラムを作成
Discordにメッセージを送るためのプログラムをPythonで作成します。
以下のコマンドでソースファイルを新規作成します。
$ nano startup.py
以下のソースをコピペしてください。webhook_urlには先ほど取得したウェブフックURLを貼り付けます。
※標準ライブラリばかりなので事前準備なしでも動くはずです。
完了したらCtrl+sで保存、Ctrl+xで終了します。
# -*- coding: utf-8 -*-
import requests
import json
import time
import socket
# DiscordのWebhook URL
webhook_url = "**************************************"
def sendMessage(message: str):
# 送信前の準備
headers = {"Content-Type": "application/json"}
payload = {"content": message}
# 送信
response = requests.post(webhook_url, data=json.dumps(payload), headers=headers)
# 送信の完了確認
if response.status_code == 204:
print(f"postが正常に送信されました")
else:
print(f"送信エラーが発生しました。エラーコード:{response.status_code}")
if __name__ == "__main__":
# サーバー起動直後に送信すると上手くいかないときがあるため少し待機
time.sleep(10)
# ローカルIPアドレスを取得して表示
connect_interface = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
connect_interface.connect(("8.8.8.8", 80))
local_ip = connect_interface.getsockname()[0]
connect_interface.close()
print(f"ローカルIPアドレス: {local_ip}")
# グローバルIPアドレスを取得して表示
response = requests.get("https://api.ipify.org?format=json")
global_ip = response.json()["ip"]
print(f"グローバルIPアドレス: {global_ip}")
# サーバー起動メッセージを送信
sendMessage(f"サーバーが起動しました。\nローカルIPアドレス: {local_ip}\nグローバルIPアドレス: {global_ip}")
プログラムの動作確認
ターミナルで以下のコマンドを打ち込んでプログラムを起動します。
$ python startup.py ローカルIPアドレス: 192.168.***.*** グローバルIPアドレス: ***.***.***.*** postが正常に送信されました
上記のように出力されてDiscordに通知が飛んだら成功です。
「送信エラーが発生しました。」と出力された場合は、エラーコードでググって原因を探ってください。
Raspberry Pi起動時にプログラムを実行する
作成したプログラムをsystemdにサービスとして登録して、起動時に実行されるように設定します。
以下のコマンドでサービスファイルを新規作成します。
$ sudo nano /etc/systemd/system/startup.service
以下のソースを貼り付けて保存します。
※ユーザー名を「pi」以外に設定している場合、7行目のリンクの「pi」の部分をユーザー名に変更してください。
[Unit] Description=Discord Message at StartUp After=multi-user.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /home/pi/startup.py TimeoutStopSec=5 [Install] WantedBy = multi-user.target
作成したサービスファイルを読み込んで、自動起動の設定をします。
2行目のコマンドで通知が飛ばない場合はサービスファイルに不備があるので修正してください。sudo systemctl status startup.serviceでエラー情報が確認出来ます。(確認画面からは「q」で抜けられます)
$ sudo systemctl daemon-reload $ sudo systemctl start startup.service (ここで通知が届く) $ sudo systemctl enable startup.service
通知の動作確認
Raspberry Piを再起動してみます。
起動時にDiscordに通知が飛んだら成功です。







ディスカッション
コメント一覧
まだ、コメントがありません