I Hacked My Own Car · part 2 of 7

the midnight garage

2026-08-07 · en · 5 min read· productivity · focus · side-project

December 2025. I'm sitting in my Ioniq 6 at 11:40 PM. It's cold enough that I'm wearing two layers and thick socks. The car's heater is off because I need to capture the CAN bus in a known idle state. I've locked and unlocked the doors about forty times tonight, each time watching a terminal scroll hex on my laptop. The car is fine with it. I'm the one whose fingers are getting stiff.

The garage is the ground floor of a residential complex, five apartment blocks joined by an elongated structure, four entrances per block. The garage spans the full length at level zero, open-air in the summer but sealed with roller shutters in winter. Apartments start from the first floor. It's not underground. It's just the bottom of a very long building, and right now every shutter is down because it's December.

This has been my routine for weeks. Come home from work, eat, go down to the garage, sit in the car with a laptop until midnight. Sometimes later. The project doesn't have a deadline or a customer. Nobody asked for it. I'm doing it because the car has a CAN bus with 397 IDs on it and I've decoded 34 of them, and I want to know what the other 363 do.

The problem is where the hours come from.

the feed

I did the math at some point in November. Screen time report: Instagram, 45 minutes a day. Twitter, 30 minutes. That's 75 minutes of scrolling every day, or just over 8 hours a week. I wasn't posting, creating, or networking. I was consuming. Reels, threads, takes, drama. None of it was making me better at anything.

75 minutes a day is exactly one garage session. Every evening I spent on the couch scrolling was an evening I didn't spend in the car with a CAN sniffer.

I didn't delete the apps. I installed One Sec, an app that intercepts the launch and makes you wait before it lets you in. Every time you try to open Instagram, it holds you for a breath. Try again too soon and the wait gets longer. Twitter at thirty minutes a day wasn't the problem; Instagram at two hours was. The friction was enough. Within a week I'd stopped opening Instagram almost entirely. Not because it blocked me, but because the pause made me realize I didn't actually want to be there. I just had a habit of tapping the icon.

what the time bought

The numbers are boring but they're real. In the ten weeks after throttling the feed, I:

  • Decoded the full BMS PID set (44 PIDs, 35+ fields)
  • Captured and catalogued 37 in-car CAN tests in a single night session
  • Cracked the door lock checksum table (three separate CAN channels, weeks of captures)
  • Wrote a PID scanner that mapped the BMS address space
  • Built a working real-time battery monitor
  • Started designing the custom board

All of that happened in evening sessions between 9 PM and midnight. If I'd kept scrolling, maybe I'd have gotten to half of it by February.

The cold helped, weirdly. The garage was uncomfortable enough that there was no temptation to do anything except work. No couch, no TV, no distractions. Just me, the car, and the laptop. The discomfort was a forcing function.

the air

The thing about an EV is that it doesn't produce exhaust. You can sit in it for hours with the windows up and the air is fine. I'd internalized this so completely that I forgot where I was parked.

The garage has a hundred-odd parking spots. Most of the cars in it are petrol or diesel. People come home in the evening, pull in, idle for a minute, shut off. In the summer the shutters are open and none of it matters. In December they're all closed. CO doesn't smell, doesn't sting, doesn't announce itself. It just accumulates.

I noticed it as headaches first. Dull, persistent, worse at the end of a session. I blamed the cold, the posture, staring at hex for three hours. Then one night I got back upstairs and the headache didn't go away. I felt nauseous. My chest was tight. I sat on the bathroom floor for twenty minutes before it passed.

I went to the doctor. Bloodwork came back with elevated carboxyhemoglobin. Carbon monoxide poisoning, not acute enough to land me in a hospital, but enough to show up on a test. The source was obvious once I thought about it: three hours a night in a sealed garage where ICE cars had been running earlier that evening, the CO hanging in the still air with nowhere to go.

After that I started opening the nearest shutter before every session, even when it was freezing. The headaches stopped. I kept going to the garage.

the car survived

I locked and unlocked the car thousands of times over these months. Folded and unfolded the mirrors hundreds of times. Raised and lowered every window. Turned the signals on and off, cycled the ambient lights, toggled the climate. Pressed the brake pedal while monitoring CAN frames. Started and stopped charging sessions to capture state transitions.

The car handled all of it without complaint. No warning lights, no weird behavior, no dealer visit. Hyundai builds these things to take abuse from a factory test line. My garage sessions were gentle by comparison.

Reddit

Around the same time, I started spending more time on Reddit. Different dynamic entirely. Reddit has r/ReverseEngineering, r/embedded, r/esp32, communities where people actually discuss CAN bus protocols and ELM327 quirks and ESP32 memory architectures. The content is technical. The comments are useful. When someone posts a teardown or a reverse engineering writeup, the responses are "what tool did you use" and "have you tried this approach," not heart emojis.

I didn't post much. Mostly lurked and read. But the information density per minute spent was incomparably higher than anything I'd gotten from the feed. I learned about OVMS, about the Hyundai EGMP community's existing PID research, about ISO-TP framing edge cases that would have taken me weeks to discover on my own.

Trading consumption for a technical community wasn't a lateral move. It was an upgrade.

the actual lesson

Throttling social media didn't give me superpowers. It gave me 75 minutes a day. That's it. But 75 minutes a day, applied consistently to a single problem for ten weeks, compounds into something that looks from the outside like obsession or talent. It's neither. It's just time, redirected.

The project is nine months old now. Every feature, the CAN decoder, the custom board, the Go backend, the iOS app, the signed OTA pipeline, was built in reclaimed evenings. Not weekends, not vacations, not sabbaticals. Evenings. The ones that used to belong to the feed.

In the next post: I solder a custom PCB, kill it with a capacitor, and learn that 8 KB of stack is not enough for TLS on an ESP32.

01 2026-07-25 · en
02 2026-08-07 · en
03
I Desoldered a Capacitor to Boot My First Board
planned
04
I Cracked the CRC, the BCM Didn't Care
planned
05
Mining Signals from 2.1GB of CAN Logs
planned
06
Secure Boot, Signed OTA, and Surviving a Boot Loop
planned
previous in series ← the XOR method
next in series I Desoldered a Capacitor to Boot My First Board →
Discuss on GitHub Reply via email