Reaching a router that the internet can't reach

Each branch gets its internet from a 4G router that nothing on the internet can reach. I wanted to add a device or restart one from my phone. It took two days: a TV box that wouldn't give up Android, a VPN the network blocks, a board that turned out to be the wrong chip, and finally a 250 EGP ESP32 that dials out through a disguised tunnel to a free cloud server.

Top view of the TV box's circuit board Schematic of the DreamMax B9S2X board. The Amlogic S905D sits in the centre with two DDR3 chips to its right and an 8 GB eMMC below it. The SW1 recovery button is bottom left. Three rows of empty solder holes: CN4 (4 holes) top left, CN5 (4 holes) by the HDMI port, J2 (3 holes, pin 1 marked) by the Ethernet port. DC 12V HDMI ETHERNET USB USB SD AMLOGIC S905D MIRADDR3 MIRADDR3 SAMSUNGeMMC 8GB SW1 CN4 A CN5 J2
J2by the Ethernet port
  • A repeating signal: the front display
  • A blip at power-on
  • Silence
CN5by the HDMI port

Three probes. Silent every time.

CN4the serial console

159 KB of clean boot log at power-on, confirming the S905D. Every interrupt key ignored.

Detail A: CN4, hole by hole
Hole 137.7 kΩ3.35 Vpower, never wired
Hole 2~7 MΩ3.3 Vinput, ignored
Hole 3~7 MΩoutput: the boot log
Hole 4GNDfound with a multimeter
Holes 2 and 3 read about 7 MΩ and falling.
SW1the recovery button

Puts the chip in its factory USB flashing mode. Held for about 30 s, the console stayed silent until release. The laptop never saw the box in that mode.

S905Dand its memory

Amlogic S905D, two MIRA DDR3 chips (1 GB) and a Samsung 8 GB eMMC. Someone had booted ophub's Armbian on this exact model.

SubjectDreamMax B9S2X, an Android satellite/TV box, opened. My first choice for a Linux box
ViewTop, schematic. Positions and hole counts approximate
Probed11 to 12 Oct 2026, with a NodeMCU and a multimeter

The problem

Each branch gets its internet from a 4G router. Nothing on the internet can reach those routers: the carrier puts them behind carrier-grade NAT, and the routers offer no remote admin.

I needed to do two things from home or from my phone. Add a new trusted device to the Wi-Fi, because the routers only admit devices they know. And restart the router. Later I'd also want to reach other devices on a branch network, like cameras and a fingerprint reader, for settings that only work locally.

My first message, on 11 October at 19:48, said I'd tried remote access through the branch iPad and it hadn't worked. I asked whether "an ESP32 device that I can talk to remotely but also can communicate with the router", or something else low-cost, could do it. Two days later, that is what I had.

  1. Mea phone, anywhere
  2. I connect in
  3. Something I controla server on the internet
  4. it dials out
  5. A device in the branchon the branch Wi-Fi
  6. local
  7. The 4G routerbehind carrier NAT

Every working answer has the same shape. A device inside the branch keeps a connection open out to something I control, and I come back in through it. The whole story is the search for that device.

What I tried, and what happened

What I triedResultWhy
Remote access through the branch iPadDead endiPadOS lets apps view its screen but not control it, and it can't route traffic for other devices.
Raspberry Pi Zero 2 W with TailscaleToo expensive2,240–3,100 EGP in Egyptian shops, two to three times its list price.
An old Android phone with RustDeskParkedThe branch phone is kept off the Wi-Fi on purpose.
Small Linux boardsRuled outToo weak, too old, or not stocked in any of 21 shops.
An Android TV box turned into LinuxFailedA locked launcher, a serial console that ignores input, and a USB flashing mode the laptop never saw.
Plain WireGuard to a free cloud VMBlockedThe network drops WireGuard's handshake on every port I tried. Random packets pass.
NodeMCU (ESP8266) tunnelling over MQTTToo slowAbout 4.7 KB/s, 30–60 s for a first page, and it hangs when a browser asks for several files at once.
ESP32 with AmneziaWG on UDP 443In productionDisguised WireGuard gets through, with ~210 KB of RAM free while it works. 250–280 EGP.

The rest of this page is the long version, in the order it happened.

  1. Choosing a device11 Oct, evening
  2. The TV box that wouldn't let go of Android11 Oct 20:30 to 12 Oct ~03:00
  3. Back to the ESP3212 Oct 15:00 to 21:51
  4. Making it something you can leave in a branch12 Oct 21:52 to 13 Oct 04:20
  5. How it works nowphone to router, hop by hop
  6. Equipment, numbers, and where it endedas of 13 Oct

Choosing a device

11 Oct, evening

The iPad was a dead end. iPadOS lets apps view its screen but not control it, and it can't route traffic for other devices.

The first recommendation was a Raspberry Pi Zero 2 W running Tailscale as a "subnet router", about $20 abroad, plus an ESP32 and a relay for reboots. In Egyptian shops the Pi Zero 2 W cost 2,240–3,100 EGP, two to three times its list price, so I dropped it. The Pi Pico 2 W is a microcontroller: no Linux, so no Tailscale.

An old Android phone left at the branch with RustDesk would have worked, except that the branch phone is kept off the Wi-Fi on purpose, so it can't be used for free internet. Parked.

Then small Linux boards. The Orange Pi i96 is abandoned 2017 hardware with 256 MB. The Luckfox Pico RV1103 has 64 MB of RAM and no network socket. The Luckfox Pico Max (RV1106, 256 MB, Ethernet) was possible. The Orange Pi Zero 3 was the best fit, but only on AliExpress. A search of 21 Egyptian electronics shops found no cheap Linux board that fit.

What the parts cost in Egyptian shopsEGP, to scale
Raspberry Pi Zero 2 Wthe first recommendation2,240–3,500
NanoPi NEO2,555
Luckfox Picotoo weak1,000–1,750
Android TV boxlocal prices, with Ethernet~800–1,700
ESP32 DevKita local shop; ring is Amazon250–280Amazon 375
USB-serial adapter (CP2102)I didn't have one110–150
Relayparked, see the end~50
01,0002,0003,000

The Pi, NanoPi and Luckfox ranges come from the 21-shop search, which found the Pi Zero 2 W at up to 3,500 EGP. The Orange Pi Zero 3 wasn't stocked anywhere.

So: an Android TV box with Linux on it. Cheap boxes are small ARM computers, and a community project, ophub's Armbian builds for Amlogic chips, replaces Android with Linux. Locally they cost about 800–1,700 EGP, with Ethernet and no battery. One rule went into the notes: never leave a no-name box on its original Android. Factory-installed malware, such as the BADBOX botnet, has shipped on them.

I had five boxes at home.

BoxChipVerdict
Two satellite receivers (one marked "DVB")Closed receiver chipsNo: not Android, no Linux
T21 Pro MaxGoke/HiSilicon, not AmlogicNo community Linux. Skip
Nokia Streaming Box 8000Amlogic S905X3, 2 GBLocked bootloader (Google-certified). Kept on Android as a backup
DreamMax B9S2XAmlogic S905D, 1 GB RAM, 8 GB eMMC, EthernetChosen. Someone had booted ophub's Armbian on this exact model

The TV box that wouldn't let go of Android

to

This took most of a night. I've kept every attempt, because each one ruled something out.

  1. Armbian onto a USB stick. The image was about 875 MB, its checksum matched the publisher's, and it unpacked to 3.7 GB. It went onto an 8 GB Kingston stick with balenaEtcher, after I backed up the stick's own 188 files to an encrypted zip. Windows' own zip tool crashed at 961 MB of 1,004 MB, so I redid it with 7-Zip and verified every file.
  2. The reset-button boot. Hold the recovery pin, plug in power. With the stick in the left USB port, the box froze on its logo for as long as I held the pin, then booted Android. The right port was ignored. No Linux.
  3. The update menu. The plan was a tiny aml_autoscript.zip that tells the box to look for Linux on SD or USB first. The box's "System update" only worked online. Its custom launcher hid Android's real settings. There was no file manager, no browser and no app store, and a network scan found remote debugging (ADB) closed.
  4. The SD card. My only card held 42 3D-print files. I added one 709-byte file, aml_autoscript, next to them and touched nothing else. Two attempts: straight to Android both times.
  5. The forum find. On a satellite-receiver forum, owners of this model explained what the pin really does. It puts the Amlogic chip into its factory USB flashing mode, which waits for a computer on a USB-A-to-USB-A cable running Amlogic's USB Burning Tool. It never meant "boot from SD or USB".

Opening the box

Inside: two MIRA DDR3 chips (1 GB), a Samsung 8 GB eMMC, the SW1 recovery button, and three rows of empty solder holes: CN5 by the HDMI port, J2 by Ethernet, CN4 top left. That's the board at the top of this page. One of those rows should be the serial console, a text line straight into the boot software. With it I could stop the boot and type commands by hand, before Android loads.

A NodeMCU as the USB-serial adapter

I had no CP2102 adapter at home (110–150 EGP in shops), so my LoLin NodeMCU board stood in. With its EN pin tied to GND its processor stays off, and only its USB-serial chip talks to the TX and RX pins. The first cable was charge-only and the laptop saw nothing; a data cable worked. Three wires only: GND, TX, RX. Never power.

The NodeMCU wired to CN4schematic, USB end of the NodeMCU
NodeMCU RX to hole 2, TX to hole 3, GND to hole 4, EN tied to GND, hole 1 left unconnected ESP8266 kept off USB-serial chip GND3V3RSTVin D7D83V3 ENGND RXTXGND LoLin NodeMCU EN tied to GND data cable to the laptop 1234 CN4 TV box board hole 1: power, never wired
  • RX to hole 2, the box's input. It ignored everything I sent.
  • TX to hole 3, the box's output. The 159 KB of boot log came out here.
  • GND to hole 4, a shared ground, found with the multimeter.
  • EN to GND on the NodeMCU itself keeps its processor off, so only the USB-serial chip talks.
  • Hole 1 is power. Never connected.

Finding the console, hole by hole

J2 gave a repeating signal (the front display), a blip at power-on, then silence. CN5 was silent. I found ground with a multimeter, and then CN4 gave 159 KB of clean boot log, confirming the S905D.

Trying to get in

I flooded it with every known interrupt key:

  • Space
  • Ctrl+C
  • Enter
  • Esc
  • q
  • tpl
  • stop
  • BREAK
  • All ignored

Along the way: the receive wire not connected, TX and RX looped, wires swapped, no shared ground. A loopback test proved the adapter could send. Resistance readings proved the wiring right: hole 1 at 37.7 kΩ, holes 2 and 3 at about 7 MΩ and falling. The box simply ignores input. The manufacturer switched console input off.

The timed test that settled it

I recorded the console with timestamps while holding the pin for about 30 seconds. Nothing at all came out until I let go, then the very first boot stage. So the pin acts inside the chip before any software runs, and no file on any card or stick could ever have worked.

The button test: holding SW1 while recording the consoletime to scale
SW1 pinrecovery buttonConsoleCN4, hole 3
held, about 30 s
0 bytes
let go: first boot stage

The scale ends six seconds after release. The yellow block marks when output began, not how much came out.

The last route

Last serial checks: hole 1 a steady 3.35 V (power), hole 2 at 3.3 V (the ignored input), and nothing on hole 2 when I listened to it. Serial was exhausted.

That left the chip's USB flashing mode. The plan was a home-made USB-A-to-A cable with only the data wires, the red 5 V wire left unconnected so the box's own 12 V supply and the laptop never meet, and Amlogic's USB Burning Tool (v2.2.0, from Khadas' official server). The box never showed up on the laptop in USB burn mode. That ended the TV box.

"a DreamMax TV box could not be put into Linux (locked launcher, input-less serial console, USB burn mode never enumerated)"

The summary line in my project notes

Back to the ESP32

to

  1. An old Xiaomi phone turned up, locked to a previous owner's Mi account. No.

  2. An old iPhone or iPad can't route. An old laptop would work but is bulky. Then the ESP32-as-tunnel idea came back, my own first instinct: the board dials out to a small server and forwards the router's page.

  3. "Let's go with the ESP route." The hub went on my idle Oracle Cloud "Always Free" micro VM, with 1 GB of RAM and ⅛ of a CPU. WireGuard hub up, ESP32 firmware written (58% of flash, 14% of RAM), the phone's profile as a QR code.

  4. The flashing tool refused. The "LoLin" board was an ESP8266. It was the board that had been the serial adapter the night before, the same model that runs my NetWatch monitor (a different unit). LoLin sells both chips, and the chip check caught the mix-up before anything was written. WireGuard-ESP32 needs a real ESP32.

WireGuard is blocked

  1. The phone sent a handshake every 5 seconds. None reached the hub, while plain test packets from the laptop did. So I tested it: a packet shaped like a WireGuard handshake against a random one, on three UDP ports.

WireGuard-shaped packets against random packets on three UDP ports
PacketUDP 51820UDP 443UDP 53
WireGuard handshake dropped dropped dropped
Random bytes passed passed passed

The port made no difference. The filter looks at what's inside the packet.

  1. Two ways round it: AmneziaWG, which is WireGuard in disguise, or an HTTPS tunnel through Cloudflare. I said "test A". AmneziaWG was built from the official source on the VM, listening on UDP 443.

  2. It gets through. The phone connected over AmneziaWG on home Wi-Fi, laptop to phone through the hub at about 230 ms, then on 4G as well.

  3. Patching the ESP32's WireGuard library to speak AmneziaWG.

The NodeMCU detour: IP inside MQTT

  1. Could a board I already had do it? The NodeMCU and a Sonoff Mini (an ESP8285, and fried) can't run WireGuard: about 40 KB of free RAM, against the ESP32's ~280 KB. An ESP32-based Sonoff MINIR4 (16 A relay) went on the list for later. Three ESP8266 routes: ESP_WIREGUARD cuts responses at about 1,300 bytes, so skip. A PPTP proxy is insecure, and GRE rarely survives 4G NAT, so no. MQTT_VPN carries IP packets inside MQTT messages. I built that one.

  2. The NodeMCU and MQTT version works, slowly. A Mosquitto broker on the hub (TCP 8883) and a small Python bridge. It got through the filtering, on 4G too, at 137 ms ping, and the router page loads. But at about 4.7 KB/s: the library sends one MQTT message at a time, and doubling the clock speed changed nothing. A first page took 30–60 seconds, and it hung when a browser made several requests at once, with about 25 KB of RAM free. Done by 17:29.

Free RAM, the number that decided itKB, to scale
NodeMCU (ESP8266)~40 KB
NodeMCU running MQTT_VPNwhere it hung~25 KB
ESP32~280 KB
ESP32 running tunnel and panelthe bar marks the lowest seen~210 KBlowest 190
0100200300
  1. An old ISP router, a Huawei HG630 V2, as the box? OpenWrt doesn't support it. No.

  2. ESP32 boards from a local shop: 250–280 EGP. Amazon wanted 375.

  3. "ESP32 on the way." I ported the day's proxy fixes to the ESP32 firmware while waiting.

The second board on the bench

  1. ESP32 plugged in: an ESP32-D0WD-V3, dual-core, 240 MHz. The patched AmneziaWG handshake worked first time.

The ESP32 DevKit, and how it splits the workschematic; status as of 13 Oct
ESP32 DevKit: 30 pins, an ESP32-D0WD-V3 chip, a CP2102 USB chip and a USB port ESP32-D0WD-V3 dual core 240 MHz CP2102 ESP32 DevKit 30-pin 250–280 EGP from a local shop

Two cores 240 MHz

Forwardingalone on one core
Settings panela low-priority task on the other, so it can't slow forwarding

Two firmware slots

Running build~0.9 of 1.25 MB
The other slot: the next build, on trialkept after 30 s up

16 connections 15 in use

6 pages × 22 waiting1 scan1 free

Two fixes, then the router

  1. Working, after two fixes. Full-size 1,420-byte packets were silently dropped somewhere on the path, so the tunnel MTU is now 1,280 on the ESP32 and 1,380 on the hub, which had inherited a 9,000-byte MTU from the cloud network. And closing a connection before reading the request made the network stack throw the reply away.

The MTU fix: how big a tunnel packet may bebytes, to scale
Full-size packetsilently dropped on the path1,420
Hub tunnel MTU, now1,380
ESP32 tunnel MTU, now1,280
05001,0001,500

The hub had inherited 9,000 bytes from the cloud network. At this scale that bar would be six times as wide as the chart.

  1. Logged in to the router from a phone on 4G, through the hub and the ESP32. The first page was slow, 30–40 seconds for 17 files, but complete. I removed the NodeMCU's server side.

Making it something you can leave in a branch

to

It worked on my desk at 21:51. The rest of the night went on making it safe to leave in a branch, where a mistake I make remotely has to undo itself, or it means a trip with a USB cable.

Getting past the router's allowlist

The routers only admit devices they know. The unit tries its own MAC first. If the router refuses it, it retries with a fallback MAC that's already allowed, gets in, and then its own MAC is added to the allowlist remotely. After a remote restart, the tunnel is back in 4 seconds.

A settings panel that can't slow forwarding

Forwarding runs alone on one core; the panel is a low-priority task on the other. It holds up to 5 Wi-Fi networks in priority order, each with a router address ("auto" means the network's gateway, or a fixed IP) and an optional fallback MAC. The status page shows RAM (~210 KB free, lowest 190 KB), firmware (~0.9 MB of a 1.25 MB slot), uptime, restart reason, Wi-Fi signal, tunnel state and traffic. An event log survives restarts.

Every change is on trial

A settings change is kept only if the tunnel comes back. I tested it with a deliberately broken Wi-Fi setting: the unit restored the old settings by itself in about 35 seconds.

Firmware updates go through the tunnel, with rollback. There are two firmware slots, and a new build stays only after its tunnel has been up for 30 seconds. An upload takes about 2.5 minutes from my home line and 19 seconds from the hub.

How long things take, timedseconds, to scale
Tunnel back after a remote restart4 s
Firmware upload from the hub19 s
Device scan254 addresses, 7 ports each28 s
New build must keep its tunnel up30 s
Broken settings undo themselves~35 s
First router page through the tunnel17 files30–40 s
Firmware upload from my home line~2.5 min
0306090120150

Blue bars are the tunnel and updates through it. Copper bars are the trial windows: how long a remote change has to prove itself before it is kept or undone.

The router refused its own files

The TP-Link answers 403 to its own CSS and JavaScript unless the Referer or Origin header names its own address. So the proxy rewrites Host, Referer and Origin.

The front door, three tries in one evening

  1. A phone VPN app. AmneziaWG on the phone, to reach the tunnel addresses. It worked, but it was one more app to switch on.
  2. A public HTTPS address, at 22:42: a free dynamic-DNS name, a Let's Encrypt certificate, a password and fail2ban. Faster, 17 files in 25 seconds against about 40, because the hub keeps its connection to the unit open. But it was a public login page with a password as the only lock, and fail2ban locked out my own IP while I tested it. Removed.
  3. A Cloudflare Tunnel with Google sign-in. The tunnel dials out, so the VM opens no web ports. Cloudflare Access came first, and it asked for a Cloudflare login where I wanted Google. So I moved to the sign-in service I already run for my own site, and one login covers all my private pages. Only my account gets through, at about 30–100 ms per request. A menu page lists each branch with live status and Router, Devices and Settings, plus Sign out.

Clean-up

The VM now runs only the tunnel server, nginx and cloudflared. Only SSH and UDP 443 are open. I deleted eight stale firewall rules, retired the phone's VPN profile and kept the laptop's as the backup way in.

A save that would have stranded a unit

Renaming a Wi-Fi network without retyping its password saved it with no password, because stored passwords were matched by name. At home the unit fell back to another network and I didn't notice. At a branch it would have meant a trip with a USB cable. The panel now blocks that save, and warns before saving a network without a password.

Devices

A Scan sweeps the unit's 254 addresses with ARP in batches of 6, then tries 7 well-known ports on each device: web on 80, 8080, 443 and 8443, video on 554, camera on 8000 and fingerprint reader on 4370. Page titles are kept as hints. At home it took 28 seconds and found 12 devices. Anything with a web page gets an Open button; "Open by address" covers the rest.

That's 15 of the ESP32's 16 connections in use: 6 page connections × 2, 2 waiting, 1 scan. Live video won't work, and camera web pages of 2–5 MB take 1–3 minutes the first time.

How it works now

as of

Every leg that crosses the internet is encrypted. Both tunnels are dialed out: the hub's to Cloudflare, so the VM opens no web ports, and the ESP32's to the hub.

  1. My phoneA browser, at home or on 4G, opening a private address on my own domain.
    Me.
  2. HTTPS
  3. The front doorCloudflare Tunnel, with Google sign-in through the sign-in service I run for my own site. Only my account gets through, in about 30–100 ms per request.
    Cloudflare can read router pages: HTTPS ends there. The sign-in server only sees the sign-in cookie.
  4. Cloudflare Tunnel, dialed out by the hub
  5. The hubAn Oracle Cloud Always Free micro VM: 1 GB of RAM, ⅛ of a CPU, ~230 MB used. It runs cloudflared, nginx and the AmneziaWG server, with only SSH and UDP 443 open.
    Can read router pages.
  6. AmneziaWG over UDP 443, dialed out by the ESP32
  7. The ESP32, in the branchOn the branch Wi-Fi. It forwards each page and rewrites Host, Referer and Origin so the router accepts them.
    The branch end of the encrypted tunnel.
  8. plain HTTP, on the branch's password-protected Wi-Fi
  9. The 4G router, and other devicesCameras and a fingerprint reader come next. They haven't been tested on real gear yet.
    Plain HTTP on the branch Wi-Fi, because that's all the router offers.

Equipment

ItemOutcomeRole
ESP32 DevKit (ESP32-D0WD-V3, 30-pin, CP2102 USB), 250–280 EGPProductionThe branch unit
Oracle Cloud Always Free micro VM (E2.1.Micro, 1 GB, ⅛ CPU)WorksThe hub: AmneziaWG, nginx, cloudflared, ~230 MB used
AmneziaWG: amneziawg-go on the hub; on the board, Daniel Hope's WireGuard-ESP32 library, vendored and patched to speak AmneziaWG 1.0WorksThe tunnel past the WireGuard block, on UDP 443
Cloudflare Tunnel and Google sign-inWorksA front door with no open web ports
TP-Link 4G router (test)Reached from 4GThe target
DreamMax B9S2X Android satellite/TV box (S905D)FailedFirst choice for a Linux box: locked launcher, input-less console, USB burn mode never seen
Kingston 8 GB USB stick, 16 GB microSDNot bootedArmbian and the boot script
LoLin NodeMCU (ESP8266), same model as my NetWatch boardRetiredThe USB-serial adapter for the box, then the MQTT unit. The adapter worked
MultimeterEssentialFinding ground, TX/RX and power
Nokia Streaming Box 8000, T21 Pro Max, two satellite receivers, Xiaomi phone, iPad, Sonoff Mini, Huawei HG630 V2Ruled outCandidates
Raspberry Pi Zero 2 W, Orange Pi Zero 3, Luckfox Pico, Orange Pi i96Ruled outToo expensive locally, not stocked, or too weak
Arduino CLI (ESP32 and ESP8266 cores), balenaEtcher, 7-Zip, USB Burning Tool, Mosquitto, nginx, a small Python CLI for the unitSoftwareThe tools

Numbers

WhatValue
Pi Zero 2 W in Egyptian shops2,240–3,100 EGP (2–3× list)
Shops searched21
ESP32 board250–280 EGP (Amazon: 375)
TV box boot log over serial159 KB
Interrupt keys tried7 kinds + BREAK, all ignored
Pin held, console silent~30 s
Serial header probesJ2 ×3, CN5 ×3, CN4
WireGuard test portsUDP 51820, 443, 53: handshake dropped on all, random packets passed
AmneziaWG, phone to laptop via the hub~230 ms
MQTT route~4.7 KB/s, 137 ms ping
Free RAMESP32 ~210 KB (lowest 190 KB); ESP8266 ~25–40 KB
Tunnel MTU1,280 ESP32, 1,380 hub (1,420 silently dropped)
Router page17 files; 30–40 s via the tunnel; 25 s via the hub; a 66 KB page ~1.8 s from the hub at home
Firmware update through the tunnel19 s from the hub (~2.5 min from home)
Settings rollback~35 s
Remote restart4 s
Device scan28 s, 12 devices, 254 addresses, 7 ports
Connections15 of 16
Sign-in check~30–100 ms
Hub1 GB RAM, ⅛ CPU, ~230 MB used, SSH and UDP 443 only
Elapsedfirst message 11 Oct 19:48; router over 4G 12 Oct 21:51; device scan 13 Oct ~04:20

Where it ended

The ESP32 is the production unit. It's tested at home against a TP-Link router and from 4G, and it's set up from home for its first branch, with that branch's Wi-Fi first and my home Wi-Fi second. Each branch needs one unit, one row on the menu page and about ten minutes of setup.

Cameras and the fingerprint reader haven't been tested on real gear yet. The first real test is at a branch.

Parked on purpose

  • Power relayA ~50 EGP relay on the router's 12 V line, to power-cycle a frozen router: a button on the panel, maybe automatic after some minutes offline.
  • Tunnel alertA Telegram alert when a unit's tunnel goes quiet for more than 10 minutes. It would run on the hub, so it costs the ESP32 nothing.
  • Router APITalking to the router's own API.
  • Sonoff MINIR4Possibly a Sonoff MINIR4 per branch: an ESP32 with a relay built in.
The parked relayschematic, not built
Planned: a relay in the router's 12 V line, switched by the ESP32 12 V adapter 4G router ~50 EGP relay ESP32
  • The relay breaks the router's 12 V line for a moment, so a frozen router starts again.
  • Dashed because none of it is built yet.
  • From the panel, a button. Maybe automatic after some minutes offline.

The TV box went back to being a TV box.