How it works

The differences show up on the bad days

Every controller reads the same probes. What separates them is where the decisions are made, what happens when the link between the parts fails, and how something gets permission to touch your tank in the first place.

Lighthouse Mode

Runs without the network

When the network is part of how a tank stays alive, the router is a single point of failure. Tank Nodes are built the other way: hard limits live on the node itself, stay enforced when WiFi drops, and stay enforced even when you pause everything else. A beacon on every screen tells you which state you are in without hunting through menus.

Lighthouse Mode A dropped router is one failure. A power cut is a different one. Both, in full.
The Lighthouse Mode introduction screen with the Pharos Pods tower
Lighthouse Mode, first boot

Tank Nodes

Sensing where the water is

Probes report to small nodes near the water instead of running long analog cable back to a single box. Each node carries a fixed hardware ID alongside a name you choose, so calibration history and alerts stay attached to the right physical unit through renames and resets. A replacement board is a new unit with a new ID, and the controller offers to carry the old one's record across.

A threshold editor with danger low, target and danger high bands across a colored range
Limits held on the node

Hand testing stays hand testing

Some things already work

Reefers have been counting drops and watching for the color turn for decades, and it still works. A syringe and a vial do not drift, do not clog and have never needed a firmware update. So the first release is built around the test kit you already own: a hand result goes into the same record as the probe data and carries the same history, instead of living in a notebook.

Sump level, measured

A number, not a float switch

Almost everything sold as a level sensor is a switch. Optical or float, it knows one thing: is there water at this exact spot, yes or no. That is the right part for running a top-off and the wrong part for understanding a system, because it is blind between the points. You find out about a leak at the moment the water falls past a line somebody chose, and you never see it on the way down.

A node reads the distance to the surface instead, continuously, and keeps it. Level becomes a parameter with a history behind it, the same as temperature or pH, and the shape of that history is the information. A steady fall across the day is evaporation. A fall that keeps going after the top-off has run is a leak or a pump. A fall that runs past the top-off's own trigger without stopping is a top-off that has quietly stopped working. None of those are visible to a switch, and all three are the same reading looked at over time.

It reads from above the water, so there is nothing submerged to foul or calcify. What is still being tested is the hard part: whether it reads reliably under a closed lid with condensation forming on it. That gets tested on the test tank, and this page gets the answer either way.

Nothing joins your system without someone touching it

Radio range is not ownership. In a shop, a strip mall or an apartment block, a neighbor's node is in range and announces itself exactly like yours. So adoption is never automatic, and it can never be done from a screen.

1
An unknown node appears, and does nothing It shows in the roster, dimmed, marked as not joined. It feeds no dosing, no heaters, no safety logic. It is visible, not trusted.
2
It works out what you just plugged in A node the controller has never seen announces itself the moment it powers up, and the controller checks it against what is already running. If it looks like a replacement for one that recently dropped offline, it offers to carry that node’s record across. If nothing matches, it asks you to name it. Either way nothing has joined — the offer is a banner you can dismiss.
3
A three-second touch on the node itself Adoption opens a thirty-second window. The node double-pulses, and you hold a finger on its pad for three seconds. A tap will not do it, and neither will a splash or condensation.
4
Once adopted, it refuses everyone An adopted node declines all further adoption requests until it is factory reset, so nobody can leave a request open waiting for you to touch the pad for your own reasons. Its LED goes dark and stays dark.

Tapping a button on your controller would only prove that you authorized something, not which box you authorized. The likelier accident is not a neighbor reaching into your system. It is you adopting theirs because two unclaimed nodes were in range. Only a touch at the unit can tell those apart.

The node roster showing an unadopted node and an offer to carry a replaced node’s history across
A node asking to be adopted

Two ways to build a controller

Not a feature count. These are the design decisions that change what happens on a bad night.

Wider than the screen — drag it sideways.

EVERYTHING LIVES IN THE BOX controller LIMITS analog, meters of cable probes in the water the box goes down → the limits go with it LIMITS LIVE WHERE THE WATER IS Pod the screen WiFi node LIMITS node LIMITS probes in the water the Pod goes down → each node still holds its own
Same probes, same water. The only thing that moved is the box the limits are kept in — and therefore what has to be working for a limit to still apply.
The usual architecture Pharos Pods
Where the intelligence lives One controller is the brain. Modules report to it and wait for instructions. Every node holds its own safety limits. The controller coordinates. It is not the only thing keeping the tank alive.
If the link to the controller fails Protection depends on that one box and the run back to it. Lose either and the modules are idle. Nodes fall back to their last known limits and carry on alone. A beacon on every screen says which state you are in.
Adding a device Pair it from an app. Whatever is in range can usually be claimed from a screen. Nothing joins from a screen. A three-second touch on the node itself, inside a thirty-second window, or it does not join.
Replacing failed hardware A new unit is a new record. History, calibration and alert rules are left behind with the dead one. A node's record — its name, calibration history and alert rules — is bound to the hardware ID of the board it runs on, so renaming it changes the label and nothing else. When a new node turns up where the dead one was, the controller says so and offers to move that record onto it, so the trend does not restart at the swap.
Probe placement Long analog runs from the water back to a single enclosure. Sensing happens at the water. Short runs, and the node nearest the probe is the one enforcing its limit.
The system The parts this is built from, and what is not built yet.

Every color has a job

Each one is named by what it does rather than where it sits — the one that means approaching a limit, the one that means act now. A panel at the top shows the change on a working dashboard before you apply it, so you are judging an alert color against an actual alert rather than against a swatch. Three presets to start from, or set every one yourself, and a theme exports as a file so the next screen starts where this one ended.

The theme editor: a live preview of the dashboard above three preset palettes, then every color listed by the job it does with its hex value, and buttons to export, import or apply the theme
Judging a color against a real screen