The house has opinions about whether I’m home. For months, some of those opinions were wrong.

Not dramatically wrong — just wrong often enough that I stopped trusting anything built on top of them. Arrival automations firing while I was still at the course. Away routines that never armed because the house thought somebody was in the kitchen. Once an automation is unreliable, you stop relying on it, and an automation nobody relies on is just a config file taking up space.

The underlying problem is that presence detection almost always rests on exactly one signal: your phone’s GPS, reported by an app, over a mobile network, mediated by an operating system that is aggressively trying to save your battery. That’s a long chain, and every link is allowed to be late.

So I added a second signal. Not a better one — a different one.

The network already knows

My favorite thing about this fix: it required no new hardware, no sensor, no beacon in a hallway. The WiFi controller already knows every device attached to it. That’s not a feature anybody built for presence detection; it’s a byproduct of the job it was already doing.

Turning on client tracking in the network integration exposes a device tracker per client, and suddenly the automation platform can ask a question it couldn’t before: is that phone associated with an access point in this building right now?

That’s a fundamentally different kind of evidence from GPS. GPS is a phone’s claim about where it is, computed from satellites and cell towers and inference, reported when the phone feels like reporting. WiFi association is a fact about the physical world: the radio in your pocket is close enough to a radio in my house to hold a link. No inference. Nothing to optimize away.

One thing worth knowing before you go looking: the trackers exist but arrive disabled. The integration creates one for every client on the network — which for most houses is dozens of things, most of them printers and TVs that have never left the building — so you enable the handful you actually care about rather than drowning in entities that will always read “home.”

The aggregation rule, and its sharp edge

The mechanism that makes multiple signals useful is the person entity, and it works in exactly one way you need to internalize before you build anything on it:

A person is home if any of their trackers says home.

It’s a logical OR. That’s the right default, and it’s why redundancy helps at all. A phone that’s dropped off the mobile network, an app that got backgrounded into silence, a tracker that stopped updating for its own reasons — none of those can make the house think you’ve left, because some other tracker is still reporting.

But an OR is only generous in one direction, and it’s worth staring at the consequence.

Redundancy makes “home” robust and makes “away” fragile. Every tracker must agree you’re gone before the house believes it. Which means a single tracker that gets stuck reporting “home” — one that stops updating in the wrong state, or points at a device that never leaves the house — quietly makes you permanently present. The house simply never arms anything again, and from the outside it just looks like you’ve become a homebody.

So the tracker set is a thing you should curate deliberately rather than accumulate. Each one you add makes presence more reliable and absence harder to establish. I’m tracking a phone and a laptop, and I’m going to be conservative about a third, because the laptop is already a device that occasionally decides to spend a week on a desk.

The two signals do different jobs

The thing I didn’t appreciate until it was running: WiFi presence and GPS geofencing aren’t competing implementations of the same feature. They’re good at opposite moments.

WiFi association can only tell you something once you’re already in range of an access point. It cannot fire before you arrive, because the evidence doesn’t exist until you’re basically there. So anything you want to happen as you pull into the driveway — the stuff where the point is that it’s ready when you walk in — has to come from geofencing, which knows you’re two blocks out because the phone said so.

WiFi’s job is the opposite: it’s the ground truth that confirms what geofencing guessed, and the thing that keeps working when the phone’s location reporting doesn’t.

Departure has its own lag, and it’s deliberate. Default detection time is about 180 seconds — a device has to be gone for that long before it’s marked away. That sounds slow until you think about what a shorter window does: phones drop and re-associate constantly, wandering between access points and dozing on the edge of a cell, and a tight threshold turns normal radio behavior into a stream of fake departures. Three minutes of hysteresis is the price of not having your house think you’ve left every time you walk out to the mailbox.

Slow and correct beats fast and flapping, especially for anything that changes the state of a house.

The thing I’m watching

There’s a structural weakness in this approach that I want to write down while I’m still early enough to be honest about it.

WiFi presence identifies a device by its hardware address. Modern phones deliberately don’t have a stable one — they generate a private address per network as a privacy feature, precisely so that networks can’t do the kind of tracking I am, at this moment, doing on purpose to myself.

As long as the address stays fixed per network, this works fine. But that’s a promise made by the phone’s operating system, not by my network, and it’s the kind of promise that gets revisited in point releases. If a phone starts rotating its address on this network the way it does across unfamiliar ones, my controller won’t see a returning device — it’ll see a new one. The tracker I carefully enabled would keep existing, keep pointing at an address nothing uses anymore, and keep reporting the last thing it knew.

Which, per the OR rule above, would fail in the most flattering possible direction: the house would keep believing I’m home.

I don’t know yet whether that’ll happen, and I’m not going to pretend I do. But it’s the specific thing I’d check first if presence ever starts behaving strangely — and it’s a good argument for treating any presence setup as something you audit occasionally rather than something you configure once and trust forever.

The general lesson is cheaper than the specific one, though. If you’re building on a signal, know what its silence means. A tracker that stops updating isn’t the same as a tracker that reports “away,” and a system that treats those two states identically is a system that will eventually be confidently wrong about an empty house.