
Mrs. Weasley’s clock
Most of the people in my family are big Harry Potter fans (I never read it, tbh). My wife asked if I could use HA to build something like Mrs. Weasley’s clock. After looking up what that was, I figured I could take a stab at it. What do y’all think?
(Disclaimer: I leaned HEAVILY on LLM for assistance in getting this built. IMO it can be a wonderful tool. If that’s a non-starter, sorry, feel free to discount this as slop and click away.)
Data comes primarily from iOS Find My on all family members’ devices (via iCloud3 integration; we all share between the family and we all know we’re sharing, and we all have the ability to turn it off whenever we want), plus HA app data from those of us who run it. There are nine faces: Mortal Peril, Travelling, Work, School, Home, Lost, Somewhere, Shopping, and Out and About.
Location data
- Five people, all iPhones, all in one Apple Family Sharing group.
- Three of us run the HA Companion app with "Always" location. Two kids have no app at all.
- The main source is iCloud3 (HACS integration, gcobb321/icloud3). It signs in with my Apple ID and polls Find My for every device in the family group, so nobody had to install anything.
- Each person entity gets both the iCloud3 tracker and the Companion app tracker if there is one. HA uses whichever reported most recently.
- I skipped the core iCloud integration because people report it needing 2FA re-auth, and the 2FA prompt was reported broken in 2026.5.
- Places are normal HA zones
How each face is decided (first match wins)
- Mortal Peril: not in their home zone, phone battery under 10%, and not charging.
- Lost:
- no report in 4 hours while away
- no report in 12 hours while at home
- Home: in that person's home zone.
- Work / School: that person's own zones, set per person in the card config.
- Somewhere: any other named zone, like a friend's house. We add zones as we think of places.
- Shopping: Stopped at a store (See below)
- Out and About: stopped somewhere that isn't a zone (iCloud3's StatZon, see gotchas)
- Travelling: meaning actually moving.
Gotchas with iCloud3
- The device import screen only listed my own devices. Apple sends the family list a few seconds after login, so the family phones had to be added afterwards through Configure → Add device.
- Family members' phones show up under whatever they named them, so expect some detective work.
- iCloud3 only reads zones when it starts. After adding a zone you have to reload the integration.
- When someone stops at a place that isn't a zone, iCloud3 creates a temporary "stationary zone". The person's state becomes StatZon1, StatZon2, and so on. That turned out to be useful (see below).
- Every reload or restart produces a few seconds of unknown/unavailable. The card ignores those and keeps the last position.
Shopping
- Find My only gives coordinates, no place names.
- I pulled every shop from OpenStreetMap once with an Overpass query: 25 km around home, plus 15 km around the town of the non-local kid.
- I filtered it to places you buy things: groceries, big box, hardware, pharmacy, clothes, malls and so on. (LLM a huge help here)
- The result is about 600 stores in a 50 KB JSON file in /config/www.
- When someone is stopped, the card checks whether they're inside a store's building outline (plus a margin for GPS error), or within 60 m of a store mapped as a single point. A match puts the hand on Shopping and shows the store name.
- Nothing is looked up while it runs, so nobody's location goes to a third party (or at least, any more than it already was). The file needs re-downloading every few months as stores change.
The card
- One custom Lovelace card: plain JavaScript web component, no build step, about 20 KB.
- The clock face is drawn in SVG:
- wood case, brass bezel, parchment face
- Cinzel and IM Fell English fonts from Google Fonts
- a brass hand per person with a nameplate and a colored gem
- Animation (CSS):
- hands swing to a new face with a bit of overshoot
- they wobble while travelling
- in Mortal Peril, the hand trembles and the label pulses red
- Side panel: each person's gem, their clock face, the place name, and when their phone last reported.
- Tapping a hand opens that person's more-info.
- It's on its own dashboard, in a panel view, with kiosk-mode hiding the header (we use an iPad as a kitchen display). There are buttons to and from our other tablet screens.
- Config is all per person: person entity, battery sensor, home/work/school zones, gem color.