Discord発RaspberryPi経由WoL線 (Discordを経由して外出先からPCの電源をONにする)
UseCase
「これを使えば外出先からPCの電源をONにできるよ!!」
動作フロー
Wake on Lanはルーター越えが難しいという問題点がありましたが、このシステムはラズパイ(または常時ONのPC)さえあれば環境に依存せず簡単にWoLでPCを起動させることができます。
導入方法
事前準備
こちらの記事の "WoLの利用手順"「起動される側のPCの設定」を行ってください。
1. [Windows] ファイアウォールの設定
PCの死活監視のためにpingコマンドを使用するのですが、Windowsのファイアウォールはデフォルト状態ではpingのレスポンスを返さない設定になっています。
検索から「セキュリティが強化されたWindows Defenderファイアウォール」を起動します。
受信の規則から「ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)」を有効化してください。
2. [Raspberry Pi] 下準備
A. 使用するソフトをインストール
sudo apt install ethtool wakeonlan
B. WoLを有効化
WoLを設定したいネットワークデバイス名を確認してください。
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
に設定します。
sudo ethtool eth0
Settings for eth0:
(略)
Supports Wake-on: pumbag
Wake-on: d
(略)
Wake-on
がd
なら無効、g
なら有効です。
有効化します。
sudo ethtool -s eth0 wol g
sudo ethtool eth0
Settings for eth0:
(略)
Supports Wake-on: pumbag
Wake-on: g
(略)
再起動すると無効化されてしまうので、再起動後に自動で有効化するように設定します。
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"
sudo chmod +x /etc/init.d/wakeonlan
sudo update-rc.d wakeonlan defaults
設定ができたか確認します。
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を作成
下記リンクにアクセスしてください。
4. [Raspberry Pi] WoL-Botをインストール
実行環境
- Ubuntu 24.04
- Python 3.12.7
Raspberry Pi OSでも動作しますが一部コマンドが異なる場合があります。
手順
⓪Pythonをインストール
pyenv経由でインストールするのがおすすめです。
①リポジトリをクローン
git clone https://github.com/AmanoSpica/WoL-Bot.git
②ライブラリをインストール
pip install -r requirements.txt
③環境変数を設定
DISCORD_BOT_TOKEN="コピーしたdiscord botのトークン"
④実行
python main.py
バックグラウンドで実行する場合↓
nohup python main.py &
または
5. Discord上での設定
① /init
を実行
②/create_button
を実行
その他の機能
- 簡易的な権限管理 (
/add_user
,/remove_user
コマンド)
こちらで登録したユーザーのみPCの操作、設定が可能です。
※/init
を実行したユーザーは自動的に権限が付与されます。 - PC死活監視
/create_button
で設置したボタンには現在のPCの状態(オンライン/オフライン)が表示されます。
おわりに
PCの電源をつけるためだけにルータの設定を触りたいとは思わなかったので作りました。
Discord経由でラズパイからデータを取得したり、ラズパイを操作したりするのは我ながらいいアイデアだと思いますので、みなさんも活用してみてはいかがでしょうか。
(こんなの絶対使う人いないだろ... と書きながら思っていたのは内緒)
参考文献
Discussion