PROBEd Widget
Displays live system metrics from one or more remote machines running the PROBEd daemon (Public Resource Overseeing and Broadcasting Endpoint Daemon). The widget opens a TCP connection to the daemon, reads the plain-text metric response, and renders the key/value pairs in a sortable grid. Multiple machines can be monitored in a single widget via tabs.
How it works
The PROBEd daemon listens on TCP port 555. When a client connects it runs a shell script (getinfo.sh) that samples CPU, memory, disk, network, and process data from /proc, then writes the results as key: value lines and closes the connection. The widget reads that response and parses it into a metric table.
The widget can also probe any plain HTTP/HTTPS endpoint — useful if you front the daemon with the included Flask proxy (stats_server.py), which exposes the same data at /raw.
Requirements
- The PROBEd daemon running on each machine you want to monitor
- Port 555 (or your chosen port) reachable from the Homepage server
Installing PROBEd on a remote machine
systemd (recommended)
git clone https://github.com/oversea-suite/PROBEd
cd PROBEd
pip install -r requirements.txt
sudo cp probed.service /etc/systemd/system/
sudo systemctl enable --now probedDocker
docker compose up -dArch Linux
makepkg -si # from the cloned repo directory
sudo systemctl enable --now probedThe daemon listens on 0.0.0.0:555 by default. Adjust probed.conf if you need a different port or bind address.
Configuration
All configuration is done through the widget settings UI. The relevant stored keys are:
| Key | Type | Default | Description |
|---|---|---|---|
probeTargetsList | Array<{ target: string; nickname: string }> | — | Primary target list. Each entry has a target (address) and an optional nickname shown as the tab label. |
probeRefreshInterval | number | 15 | How often to poll, in seconds. Minimum 5. |
Targets are entered as:
hostname:portor192.168.1.10:555for a direct TCP probehttp://hostname:port/rawfor an HTTP probe (e.g. via the Flask proxy)
Single machine
Enter the address in the Probe Target field in widget settings:
192.168.1.10:555Give it a nickname (e.g. Home Server) and save.
Multiple machines
Click Add another probe target in the widget settings to add more entries. Each target gets its own nickname and appears as a tab in the widget. Targets are polled in a single batched request.
Example of what gets stored:
{
"probeTargetsList": [
{ "target": "192.168.1.10:555", "nickname": "Home Server" },
{ "target": "192.168.1.20:555", "nickname": "NAS" },
{ "target": "http://192.168.1.30:8080/raw", "nickname": "Pi (HTTP)" }
],
"probeRefreshInterval": 30
}Metrics format
The daemon's getinfo.sh outputs one metric per line. Any of the following separator styles are recognised by the widget's parser:
key: value
key=value
key valueNumeric values are displayed as numbers; everything else is a string. Empty values are skipped. Example output from the default getinfo.sh:
uptime_s: 153379.72
load_avg: 0.13
cpu_temp_c: 20.0
cpu_pct: 3.0
ram_total_kb: 3855792
ram_used_kb: 2136300
ram_avail_kb: 1719492
swap_total_kb: 3855356
swap_used_kb: 87308
disk_total_kb: 58357760
disk_used_kb: 38972560
disk_read_kb_s: 0
disk_write_kb_s: 288
net_rx_kb_s: 0
net_tx_kb_s: 0You can customise getinfo.sh to expose any metric your machine can produce — the widget will display whatever key/value pairs the server sends back.
Using the HTTP proxy
PROBEd includes a Flask app (stats_server.py) that proxies the TCP daemon over HTTP. By default it runs on port 8080 and exposes:
/— HTML table view/raw— plain-text output (what the widget uses)
Point the widget at http://your-host:8080/raw to use HTTP instead of a direct TCP connection. This is useful when the machine is only reachable over HTTPS or sits behind a reverse proxy.
Troubleshooting
Widget shows "Failed to probe targets"
- Confirm the PROBEd daemon is running:
systemctl status probed - Check port 555 is open:
nc -zv <host> 555 - Ensure the Homepage server can reach the target (same network, no firewall blocking)
"URL must start with http:// or https://"
- You entered an HTTP-style address without the scheme. Change
example.com/rawtohttp://example.com/raw.
"No metrics returned from target"
- The daemon connected but sent no data. Check
getinfo.shruns without errors on the remote machine:bash /path/to/getinfo.sh
Metrics look stale
- Lower the refresh interval in widget settings (default 15 s).
- The TCP connection is opened fresh each poll — if the daemon is slow to respond, increase the server-side timeout in
probed.conf.