Weird Little Server · field kit

EdGPT · MeshCore 500 Field Kit

A pure-stdlib Linux TUI for a MeshCore companion, a live network-map analyzer, and a Heltec V4 running MeshCore 500 from Kentucky. It cannot reach Philadelphia — and below, we show exactly why.

⤓ Download the complete project .zip · 41 KB

12 files · Python 3 standard library only · nothing to install

Beelzebubba the Third — an engraved woodcut devil in a plumed top hat and tuxedo, hand on the tuning dial of a 1930s cathedral radio, inside a circular scrollwork emblem

Beelzebubba the Third · Master of Ceremonies

Broadcasting? I invented broadcasting. There is a small outstanding matter with a lightning rod and a patent clerk in 1888 that I intend to litigate until the sun burns out, but — here, look — the boy in Kentucky has built himself a proper little radio-table and a machine that reads it, and it is my genuine pleasure to introduce it.

What sits before you is a command-line control panel for a MeshCore radio, written in harmless plain Python, no phone app, no downloads. It shows you the node, the contacts it can hear, the messages, the telemetry, and the actual route a packet took, hop by hop. There is also a map view that pulls the official public node list and tells you, coldly, where the nearest live repeaters are and whether a chain exists between you and any place you name.

And that is where the fun stops being fun. The radio is running on our MeshCore 500 profile, in Lexington, and Philadelphia is roughly 820 kilometres away, which as the map view will cheerfully inform you is a gap of some seven hundred and ninety lonely kilometres with not one repeater standing in it. The little machine is on the correct channel. It is simply shouting into a field. I respect the optimism; I have shouted into fields myself, professionally, for centuries.

— Beelzebubba the Third

Today's Outstanding Grievance A network with an eight-hundred-kilometre hole in it is not a network, it is a rumour with a callsign, and I will be filing with the relevant office.

What it actually does

One terminal program, talking to a MeshCore companion radio over TCP. Written for people who would rather read a status line than pair a phone.

📡

Talk to the node

Node info, contacts, channels, DMs with ACK timing, telemetry, battery, and a live event log — over the companion protocol on TCP :5000.

📏

Trace the hops

Send a trace and see the path a packet took, with SNR at every hop. The closest thing MeshCore has to a traceroute.

🗺️

See the network

Press v (or M) for a topology view from the official node list: nearest active repeaters, your local profile, and a route-gap check to any target.

🔔

Push to ntfy

The host watches the mesh and posts to an ntfy topic on the events you pick — a tracked key heard, a DM, a channel message, a trace.

Inside the zip

mctui.py  — curses TUI, console mode, snapshot, headless
mcnet.py  — TCP transport (reader thread, request/response, reconnect)
mcproto.py — companion-protocol codec (framing, opcodes, parsers)
mcmap.py  — network-map analyzer (official node list + cache)
mcnotify.py — host-side ntfy push (stdlib HTTPS)
mcstate.py — runtime state + persistence
config.json / config.example.json · play.sh
README.md · FLASHING.md · HANDOFF.md

Run it with ./play.sh --host <ip>, or ./play.sh --demo for the full interface with synthetic data and no radio at all.

Where it is — and why it won't connect to Philly

The node is in Lexington, KY (~38.04, −84.50). The PhillyMesh reference node is near Philadelphia (~39.80, −75.16): about 820 km apart.

Why the gap can't be routed around:

The only realistic "reach Philly" paths are internet backhaul (an MQTT/HTTP bridge with cooperation at the Philly end) or a temporary aerial relay — not RF from here. So read this as a live control-panel demo plus a map tool, running on the PhillyMesh profile on purpose.

The device & the profile

BoardHeltec WiFi LoRa 32 V4.3 (ESP32-S3, SX1262, 16 MB)
FirmwareMeshCore v1.18.0 — heltec_v4_companion_radio_wifi, custom-compiled with the Wi‑Fi SSID/password baked in (the prebuilt v1.18.0 assets ship only BLE and USB companions; the Wi‑Fi build is source-only)
Radio919.5 MHz / BW 500 / SF10 / CR5, TX 22 dBm, path-hash mode 1 (2-byte) — the MeshCore 500 profile
Networkjoined Wi‑Fi, companion TCP on :5000
Address at handoff192.168.4.30:5000 (DHCP)
NameEdGPT (key prefix bb8828d8)