I'm Ray — based in Joplin, MO. Repairman. Builder. Nerd.
I do apartment maintenance for a living, which mostly means the same things breaking in the same ways. Problem-solving is what I'm actually good at, and building is what I love. I have component-level electronics experience from back when people still got things repaired. Nobody does that anymore, but it turns out that background is a pretty good foundation for what's happening right now: ESP32s, Arduinos, Raspberry Pis, a flood of cheap sensors, and AI tools that mean I can build things I never could have written code for on my own. It's an embarrassment of riches and I'm spending every spare hour taking advantage of it.
I get why people are scared of AI. We don’t have a good track record lately of using technological improvements for the good of the many. But like it or not, the technology is here. The real question is what are we going to do with it? We as a society have a chance to shape things in a positive, as well as profitable direction for all.
My own experience has been astonishing: these tools let me build things I never could have built alone, and I work harder for it, not less. Nobody lost a job so I could do this — something new just got made that didn't exist before. Make the right choices as a society, and everyone gets to share in that kind of improvement without absorbing the downsides.
In long apartment hallways, one chirp sounds exactly like another no matter where you're standing. Without a system, finding the dead battery means walking 200 feet of corridor and pressing your ear to every unit door — sometimes multiple passes, sometimes needing the tenant home. A 30-minute service call for a $3 battery.
A coordinator ESP32 broadcasts a radio timing pulse via ESP-NOW every second. Two sensor nodes — mounted at opposite ends of the hallway — each run an INMP441 digital microphone through a tight bandpass filter centered on 3,300 Hz (the NFPA smoke detector chirp frequency). When a chirp arrives, each node records the exact microsecond offset from the nearest coordinator pulse. The coordinator compares those two timestamps: the time difference, combined with the known node spacing, resolves which unit the chirp came from — logged live with unit position, timestamp, and confidence to a dashboard the technician can check from anywhere. No walking required.
The two nodes measure their own separation acoustically instead of requiring a tape measure at install time: the coordinator fires a buzzer pulse from one node, times how long its partner takes to hear it, then reverses the shot. The round-trip pair resolves both distance and clock offset. A boot-time and periodic (6-hour) auto-recalibration keeps the system accurate even if a node gets bumped or repositioned, with an outlier-rejecting median-of-several-shots average smoothing out single-measurement noise.
HVAC noise, footsteps, voices, and slamming doors all compete with a 50 ms chirp. A biquad bandpass filter with Q=4 tuned to 3,150–3,500 Hz passes the chirp and rejects nearly everything else, making reliable detection possible in a working building.
When one node picks up a candidate chirp, it immediately broadcasts a prime signal to its partner via ESP-NOW. That node drops into high-sensitivity mode — tightened filter, lower detection threshold — ready for the next event. Low-battery chirps repeat on a fixed interval (typically every 30–60 seconds) and never stop, so the system learns exactly when to expect the next one, and confidence compounds with every confirmed pass.
Deployed at real hallway distance (10–14 m node spacing, self-measured via the ranging system above) with 81 confirmed alarms fired live during testing and development. An initial bench test (37 chirp events, controlled conditions) measured ±2.5 ft positioning accuracy; ongoing field work is refining that further — including ruling out a firmware sensitivity regression found via git archaeology, and a from-scratch waveform cross-correlation mode (in development) that resolves timing directly from the recorded chirp shape instead of a simple threshold crossing, to cut out amplitude-dependent jitter in the final few milliseconds of precision.
.env/.git credential hunts, router-botnet RCE checks, none of it targeted, all of it automated. This server was already classifying each request's source IP as residential vs. datacenter for its own logs; this panel just makes that visible instead of letting it rot in a log file that rotates out after a few days.// known constraints
Samsung controls the token lifecycle, and it's gotten stricter: personal access tokens issued after December 2024 now expire in 24 hours, so anything meant to run unattended needs a full OAuth2.0 flow instead of a PAT. Starting October 2026, Samsung is also ending free API access — non-commercial developers get a grace period through Q3, then a $4.99/month "Personal Plan" becomes the price of admission, a change big enough that even Home Assistant is scrambling to figure out how it affects their SmartThings integration. On top of that, there's still no true polling model: sensor data lives behind Samsung's cloud, so you're dependent on their infrastructure and now their billing. A SmartThings outage — or an unpaid invoice — is silently also your monitoring outage. You're always a guest in their ecosystem, and soon a paying one.
Got a project, a question, or something broken that needs a second opinion? Send a packet my way.