Urgent.News

What's breaking now, across thousands of outlets.

Tech

How I Built a Zero-Config Hardware Monitor for a Remote Server Behind CGNAT

I built PeekESP: A physical system-metrics dashboard for remote Linux/Windows machines behind CGNAT (No VPN, No Port Forwarding) My home server is in my hometown, but I live in Dhaka—a five-hour drive away. For months, answering the simple question "Is it still running?" meant SSHing in when I remembered, seeing everything was fine, and closing the terminal. The obvious fixes didn't work. The…

I created PeekESP, a system-metrics dashboard for remote Linux and Windows machines behind CGNAT. My home server is in my hometown, while I reside in Dhaka, which is a five-hour drive away. Checking if the server is still running usually required SSHing in, verifying everything was fine, and closing the terminal. The typical solutions did not work for this scenario.

The home internet connection was behind CGNAT, meaning there was no port to forward and no inbound connections could be opened to the machine. A VPN was initially considered, but it was not suitable: an ESP32 cannot join a Tailscale network due to its WireGuard plus control plane combination, and there is no embedded client. Thus, I developed PeekESP.

It consists of a tiny ESP32 (LilyGO TTGO T-Display) with a 1.14-inch display mounted on my desk, which displays real-time information about the remote machine, such as CPU usage, RAM, storage, temperature, network throughput, and battery stats.

PeekESP's architecture features both ends dialing out to a Cloudflare Worker on the free tier using a Durable Object. The server pushes data, and the display polls for updates, eliminating the need for inbound ports on either side. Zero-configuration pairing is another key aspect of PeekESP. Setting it up only takes one code—a 10-character string displayed upon the device's initial boot.

By entering this string into the desktop app, the stream ID and authentication tokens are independently derived on each side, without exposing sensitive information to the relay. No accounts, ports, or VPNs are required. The system also supports multiple machines using a single display. My server and laptop now share the same device, and I can switch between them using a simple button swipe.

Two significant challenges I encountered during development were the deep sleep trap for GPIO 0 and hidden Python errors. First, GPIO 0 cannot be used for waking an ESP32 from deep sleep, as it serves as a strapping pin. If held low during a wake reset, the chip will boot into the serial bootloader instead of running the intended firmware, rendering the board seemingly dead.

Second, a missing import in the Python code caused a subtle issue where my temperature readings were broken for several weeks. I initially blamed Windows, but the problem stemmed from a bare except statement that hid the error, making it difficult to diagnose the issue. The tech stack for PeekESP includes an ESP32 (LilyGO TTGO T-Display) for the microcontroller, the Arduino IDE/PlatformIO for firmware development with LVGL 8.3 as the UI library.

The relay is implemented using a Cloudflare Worker on the free tier, while dependency-free Python scripts run on both Linux (DietPi) and Windows agents. The project is licensed under the MIT license, and the source code, flashing scripts, and setup guides are available at https://github.com/shouravx/PeekESP.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

React Compiler 1.0: What useMemo You Can Delete

Open any React codebase built before late 2025 and you'll find the same defensive scaffolding in nearly every component: a memo() wrapper here, a useCallback there, a useMemo around a sort you were…

There May Not Be an iPhone 18 This Year

Apple is expected to announce several products at its September event next week—including a folding phone—but the iPhone 18 might not be among them. It would be a first for the company.

More from Saturday 5 September →