This configuration is applied to any device that needs to be remotely powered on automatically after recovering from a power failure. i.e., the Wake-on-LAN clients
Wake-on-LAN may not be enabled on your devices by default. If so, you will need to plug in a monitor and keyboard into your device to enable it.
Restart your device and pressF2 repeatedly during boot to enter BIOS Setup.
SelectAdvanced, then select the Power menu.
Expand the Secondary Power Settings sub-menu and set Wake-on-LAN from S4/S5 to: Power On - Normal Boot.
PressF10 to save and exit the BIOS Setup.
Set up Wake-on-LAN server
You will need to use a Raspberry Pi or a similar low-powered device without a standby power mode for this setup. i.e., no on/off button, turns on once connected to a power source.
This device will serve as the Wake-on-LAN server that sends "power on" signals to all your other devices in the same network after recovering from a power failure.
OPTIONAL: Connect your Raspberry Pi to your WiFi network
Install the network manager package.
sudo apt install network-manager -y
Connect to your WiFi network.
sudo nmtui
Follow the terminal UI to Activate a connection>>Choose WiFi SSID>>Enter password. Just like how you would normally connect to a WiFi network!
Once you are connected to your WiFi network, press ESC to exit the nmtui terminal UI.
Configure the Wake-on-LAN server
Create a wake-on-LAN script on your Raspberry Pi that covers all your other devices.
sudo nano /usr/local/bin/wake_devices
Paste the following content:
Add more devices as needed as new lines in the format ["Name"]="MAC Address" within the declare -A devices=(...) segment.
#!/bin/bash
# Wake all devices by sending magic packets using wakeonlan
# Logs are saved to a designated folder, including device names
# Define the folder to store logs
LOG_FOLDER="$HOME/wol_logs"
LOG_FILE="$LOG_FOLDER/wol_$(date '+%Y-%m-%d_%H-%M-%S').log"
# Create the log folder if it doesn't exist
mkdir -p "$LOG_FOLDER"
# Define a list of devices with their names and MAC addresses
declare -A devices=(
["testnode"]="aa:bb:cc:dd:ee:ff" # replace with your actual device name and MAC address
# Add more devices as needed as new lines here in the format ["Name"]="MAC"
)
# Start logging
echo "WOL Script started at $(date)" > "$LOG_FILE"
echo "Log file: $LOG_FILE" >> "$LOG_FILE"
# Send a WOL packet to each device
for name in "${!devices[@]}"; do
mac="${devices[$name]}"
echo "Sending WOL packet to $name ($mac)..." | tee -a "$LOG_FILE"
wakeonlan "$mac" >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "Successfully sent WOL packet to $name ($mac)" | tee -a "$LOG_FILE"
else
echo "Failed to send WOL packet to $name ($mac)" | tee -a "$LOG_FILE"
fi
done
# End logging
echo "WOL Script finished at $(date)" >> "$LOG_FILE"
echo "Logs saved to $LOG_FILE"
CTRL+O, ENTER, CTRL+X to save and exit.
Make this script executable.
sudo chmod +x /usr/local/bin/wake_devices
We want this script to run automatically whenever our WOL server restarts after a power failure. Create a new systemd service file to run the script at startup.
[Unit]
Description=Wake-on-LAN script to wake all devices
After=network.target
[Service]
ExecStartPre=/bin/sleep 300
ExecStart=/usr/local/bin/wake_devices
Restart=on-failure
RestartSec=5s
User=raspberrypi
#use your actual system user above
[Install]
WantedBy=multi-user.target
We want the WOL script to run only after all your other devices have completely turned off in the event of a instant recovery following a power failure, which will cause this script to fail its purpose. Hence the deliberate 300 second delay imposed in this service file via /bin/sleep 300
This is useful as a backup to the automated WOL setup above in case you need to manually "wake up" your devices remote after recovery from a power failure.
Key Features:
Does not require opening ports to each of your devices
Conveniently "wakes up" all your devices via Telegram. i.e., without needing to download new apps
Run on your Wake-on-LAN server. e.g., Raspberry Pi that runs 24/7
Requires the "Setup an automated Wake-on-LAN server" sub-section above to be completed
Create a new Telegram bot by following the steps below.
Open Telegram and Message the BotFather:
Search for "BotFather" in Telegram and start a conversation.
Create a New Bot:
Send /newbot to the BotFather.
Follow the instructions in the BotFather chat to name your bot and get its API token.
Save the API Token:
Example token: 123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ.
Add the Bot to Your Private Group:
Invite the bot to your Telegram group.
Get Your Chat ID:
Use the bot to retrieve the chat ID:
Send a message in the Telegram group with your bot
Navigate to https://api.telegram.org/bot<YourBOTToken>/getUpdates on your browser while replacing <YourBOTToken> with your actual Telegram bot API token
Install dependencies on your WoL server (Raspberry Pi).
[Unit]
Description=Telegram Bot for Wake-on-LAN
After=network.target
[Service]
ExecStart=/usr/bin/python3 /usr/local/bin/TG_WOL_BOT/WOL_bot.py
Restart=always
RestartSec=5s
User=raspberrypi
#use your actual system user above
WorkingDirectory=/usr/local/bin/TG_WOL_BOT
[Install]
WantedBy=multi-user.target