If you’ve ever needed a reliable and inexpensive way to control AC gear remotely (power supplies, network equipment, etc) here is a simple solution for you. It will give you simple on/off control of a 15A outlet (with status) that integrates cleanly with an existing Node-RED setup.
Recently I needed exactly that for a remote station I was building where I wanted to utilize an old Raspberry Pi 3B I had sitting in a drawer unused. I also wanted:
• A real AC outlet
• Enough current capacity for a piece of radio gear
• Local control (with minimal cloud dependency once set up)
• Something that works on armv7 / 32-bit Pi OS
• No Home Assistant or Matter complexity
Here’s the solution that worked and why it’s a good fit for other hams.
The Hardware: TP-Link Tapo P125M
The TP-Link Tapo P125M is a compact smart plug with a built-in AC outlet that is under $10 per unit. It supports high-current loads, is inexpensive and can be controlled locally over your LAN.
Key points:
• Built-in AC outlet (no external relay wiring)
• Handles typical shack loads (PSUs, many radio power supplies, routers)
• Stable Wi-Fi connectivity
• Already widely used and well supported
Yes, it supports Matter, but here’s the catch…
Why I Didn’t Use Matter or Home Assistant
Matter looks great on paper, but in practice:
• Home Assistant’s Matter Server does not support armv7
• Raspberry Pi 3 users are effectively locked out
• Docker, firewall rules, and container networking add complexity
• All I needed was ON / OFF / STATUS
For a Pi that already runs Node-RED, Matter is simply overkill right now.
So instead, I went with direct local control.
The Approach: Node-RED + Local CLI Script
The architecture is simple:
Node-RED → exec node → local Node.js script → Tapo plug (LAN)
Almost no cloud calls (only needed occasionally for login token updates) .
No polling services.
No Docker containers.
Node-RED triggers a small Node.js CLI script, which logs into the Tapo plug by LAN IP address, performs the action and returns JSON that Node-RED can parse.
How It Works (At a High Level)
1. Tapo mobile app is used once to set up the plug and join your local wifi
2. A Node.js script:
o Logs into the plug using your Tapo credentials
o Talks directly to the device over the LAN
3. Node-RED:
o Calls the script using an exec node
o Parses the returned JSON
o Uses the result in flows, dashboards, or automations
What You Can Do With It
• Power-cycle devices remotely
• Add automatic shutdowns on fault conditions
• Tie power control into solar / battery logic
• Integrate with radio, AllStar or contest station flows
• Use Node-RED dashboards for manual control
Example JSON returned to Node-RED:
{
"ok": true,
"cmd": "status",
"ip": "192.168.1.100",
"device_on": true,
"model": "P125M"
}
Why This Is a Good Fit for Ham Stations
This setup checks a lot of boxes for amateur radio use:
• No GPIO wiring
• No relay boards
• No USB drivers
• Works over Wi-Fi
• Survives reboots cleanly
• Integrates with existing Node-RED telemetry flows
• Easy to troubleshoot from the command line
For remote stations, simplicity is important.
Security Considerations
• Credentials are stored in a protected .env file
• Permissions are locked down (chmod 600)
• No secrets are hard-coded in Node-RED flows
• All communication stays on your LAN
If you’re already comfortable running Node-RED, this won’t introduce new risks.
Why Not Just Use a Smart Plug App?
Because:
• Apps don’t automate
• Apps don’t integrate
• Apps don’t talk to your station logic
Final Thoughts
This isn’t meant to replace purpose-built power controllers like DLI those still have their place and offer a lot more features and flexibility but at a cost.
But if you already run Node-RED on a Raspberry Pi, and you just need local AC power control, this approach works extremely well especially on older Raspberry Pi hardware.
If you’re interested, I’ve posted to
Github• The full Node-RED flow
• The Node.js control script
Remember to experiment carefully when switching high-power gear and make sure to stay under the plug’s 15A rating.
73
Comments
Post a Comment