🚄

Discord発RaspberryPi経由WoL線 (Discordを経由して外出先からPCの電源をONにする)

2025/01/22に公開

https://github.com/AmanoSpica/WoL-Bot.git

UseCase


「これを使えば外出先からPCの電源をONにできるよ!!」

動作フロー

Wake on Lanはルーター越えが難しいという問題点がありましたが、このシステムはラズパイ(または常時ONのPC)さえあれば環境に依存せず簡単にWoLでPCを起動させることができます。

導入方法

事前準備

こちらの記事の "WoLの利用手順"「起動される側のPCの設定」を行ってください。
https://zenn.dev/headwaters/articles/317fa82c78e077

1. [Windows] ファイアウォールの設定

PCの死活監視のためにpingコマンドを使用するのですが、Windowsのファイアウォールはデフォルト状態ではpingのレスポンスを返さない設定になっています。

検索から「セキュリティが強化されたWindows Defenderファイアウォール」を起動します。
受信の規則から「ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)」を有効化してください。

2. [Raspberry Pi] 下準備

A. 使用するソフトをインストール

bash
sudo apt install ethtool wakeonlan

B. WoLを有効化

WoLを設定したいネットワークデバイス名を確認してください。

bash
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    (略)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    (略)

今回はeth0に設定します。

bash
sudo ethtool eth0
Settings for eth0:
        (略)
        Supports Wake-on: pumbag
        Wake-on: d
        (略)

Wake-ondなら無効、gなら有効です。

有効化します。

bash
sudo ethtool -s eth0 wol g
sudo ethtool eth0
Settings for eth0:
        (略)
        Supports Wake-on: pumbag
        Wake-on: g
        (略)

再起動すると無効化されてしまうので、再起動後に自動で有効化するように設定します。

bash
sudo sh -c "echo '#! /bin/sh
### BEGIN INIT INFO
# Provides:	wakeonlan
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start:	2 3 4 5
# Default-Stop:
# Short-Description:	wakeonlan
### END INIT INFO
sudo ethtool -s eth0 wol g
exit' > /etc/init.d/wakeonlan"
bash
sudo chmod +x /etc/init.d/wakeonlan
sudo update-rc.d wakeonlan defaults

設定ができたか確認します。

bash
ls -l /etc/rc*.d/*wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc2.d/S01wakeonlan -> ../init.d/wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc3.d/S01wakeonlan -> ../init.d/wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc4.d/S01wakeonlan -> ../init.d/wakeonlan
lrwxrwxrwx 1 root root 19 11月 15 21:42 /etc/rc5.d/S01wakeonlan -> ../init.d/wakeonlan

再起動してWake-on: gになっていることを確認してください。

3. Discord Botを作成

下記リンクにアクセスしてください。
https://discord.com/developers/applications




4. [Raspberry Pi] WoL-Botをインストール

実行環境

  • Ubuntu 24.04
  • Python 3.12.7

Raspberry Pi OSでも動作しますが一部コマンドが異なる場合があります。

手順

⓪Pythonをインストール
pyenv経由でインストールするのがおすすめです。
https://zenn.dev/hr0t15/articles/8ae3564bde2cce

①リポジトリをクローン

bash
git clone https://github.com/AmanoSpica/WoL-Bot.git

②ライブラリをインストール

bash
pip install -r requirements.txt

③環境変数を設定

.env
DISCORD_BOT_TOKEN="コピーしたdiscord botのトークン"

④実行

bash
python main.py

バックグラウンドで実行する場合↓

bash
nohup python main.py &

または
https://zenn.dev/amano_spica/articles/ubuntu-systemctl-service

5. Discord上での設定

/initを実行
/create_buttonを実行

その他の機能

  • 簡易的な権限管理 (/add_user, /remove_userコマンド)
    こちらで登録したユーザーのみPCの操作、設定が可能です。
    /initを実行したユーザーは自動的に権限が付与されます。
  • PC死活監視
    /create_buttonで設置したボタンには現在のPCの状態(オンライン/オフライン)が表示されます。

おわりに

PCの電源をつけるためだけにルータの設定を触りたいとは思わなかったので作りました。
Discord経由でラズパイからデータを取得したり、ラズパイを操作したりするのは我ながらいいアイデアだと思いますので、みなさんも活用してみてはいかがでしょうか。

(こんなの絶対使う人いないだろ... と書きながら思っていたのは内緒)

参考文献

https://zenn.dev/headwaters/articles/317fa82c78e077
https://vild.hatenablog.com/entry/2019/09/14/154813
https://qiita.com/Sakathon/items/a01adbf17d846beb4605

GitHubで編集を提案

Discussion