Version History


Build 61 — ICCU softening, Advanced Tools opened up to all, true cold-launch Reset Onboarding, Curated Scan Start fix

NOTES TO TESTERS: Unfortunately, I am not calling this RC4 – I know there are some things in this build I need to fix in the Advanced Tools Section. I needed to get this build out to unlock some additional testing.

Curated Scan — green Start button regression fixed

Build 60 introduced a regression: tapping the green Start button on the Curate DIDs screen did nothing. The cause was the new nav-stack rework which still needs work.

Advanced Tools menu — unhidden for everyone

The settings section formerly known as Advanced Diagnostics is renamed to Advanced Tools and is now visible to everyone — no 5-tap-on-Build unlock required. It contains DID Range Scan, ECU Finder, Create Curated DID List, ABC test with Curated DID List.

The 5-tap mechanic is still there but now gates only the Experimental Features section (currently the per-vehicle Parking sensors toggle on 2022-2024 IONIQ 5). Existing testers keep their Experimental unlock state.

Reset Onboarding — true in-process cold launch

Previously, tapping Reset Onboarding cleared the onboarding flag and forgot the adapter, but the in-memory Bluetooth manager still remembered the previously-adopted peripheral via iOS’s known-peripherals list — so the Welcome screen would immediately re-detect it. Now Reset Onboarding releases the old central manager and instantiates a fresh one (iOS binds known-peripheral history to the manager instance, so a new manager has no history), clears all transient discovery/observer state, and rebuilds the SwiftUI subtree so view-local state (sheets, nav stacks, timers) also resets. No app relaunch needed.

ICCU “fields not reported” notice — softened from warning to info

Tester feedback flagged the prior orange warning banner (“X of Y fields unavailable”) as alarming for what is in fact normal behavior — many ICCUs, factory and replaced, only respond to a subset of identification DIDs. The banner is now a soft blue informational hint with a lightbulb icon, copy reads “X of Y fields not reported”, and tapping it expands the list of unresponsive DIDs inline with an animated chevron rotation rather than presenting a full-screen sheet which had no obvious way to exit.

IONIQ 6 RWD Standard Range — MY2023 coverage

The IONIQ 6 Standard Range registry now correctly covers model year 2023. Previously a 2023 SR VIN fell through to the default registry. The Long Range variants already supported MY2023 since Build 56; this brings SR in line.

Internal — diagnostic instrumentation for Curated Scan polling-resume bug - KNOWN ISSUE

A separate, intermittent bug — about 1 in 5 Curated Scans, polling silently fails to resume after pressing Done — has new [POLL] and [CURATED] log lines around startPolling/stopPolling and around CuratedScanRunner.finish(). No behavior change for users; if you reproduce the bug please share the log so we can pinpoint which of three candidate paths is silently bailing out.


Build 60 — CarPlay polish, Curated Scan flow fixes, adoption-modal first-tap bug fixed

NOTES TO TESTERS:

Headlights are verified working on 2026 IONIQ 5 – thanks Jeff! This is RC3 for version 1.1, fixed a couple of bugs I found and some polish.

Adapter Reminder modal — first-tap dismiss bug fixed (for real this time)

The first attempt at fixing the “Reminder modal flashes and dismisses on first tap” bug only addressed half the problem. The deeper cause was sheet-host stability inside a Form’s conditional Section. Sheet attachment has been lifted up to a stable parent above the Form. First presentation is now reliable.

Curated Scan — flow & navigation fixes

Three navigation issues fixed:

  • Done button on Results now works — previously a dead no-op because its dismiss() was captured 2 nav levels deep. Results is now a stage swap rather than a nav-push, so Done has a single level to pop.
  • No more system back arrow on Results — Results used to push on top of the still-running active screen, so back returned to a live session. Now Active and Results swap in place; nothing to back out to.
  • Curate DIDs back arrow returns to Pick a curated list instead of dismissing the entire flow back to Settings.

Curated Scan — Abort replaces View Results / Share / Done on active screen

Mid-session those buttons don’t make sense — the run isn’t finished. Replaced with a single full-width red Abort button that opens a confirmation dialog (“Abort capture session? This will end the current A-B-C session.”) before exiting. Auto-advance to Results on Capture C commit is unchanged.

Curated Scan — preflight buttons restyled

Start button on Curate DIDs now renders green-on-white to signal “ready to commit forward” — previously read as low-contrast accent text in dark mode. Select all / Deselect all buttons in the header are now bordered capsules. Confirm on the Label Capture popup gets the same treatment with a disabled state until the label has content. Cancel button on Pick a curated list removed — back chevron is sufficient.

Curated Scan — Latest Values column alignment

Rows whose byte responses fit on one line appeared further indented than rows whose responses wrapped to two lines. Fixed-width DID column + value flowing leading from a consistent x. First byte of every row now sits in the same column for easy scanning.

CarPlay — tire pressure tile shape

Tile shapes changed from very-slightly-rectangular (0.40w × 0.42h) to perfect squares — the 2% aspect mismatch read as accidental. Each tile’s outer corner (the one facing the chip frame) now rounds at a radius concentric with the chip’s own outer corner so the curves run visually parallel.

CarPlay — battery row chips visually unified

Several chips got proportional tuning so they read as a coherent set:

  • 12V chip recomposed — circular SoC arc replaced with a horizontal pill bar (same low-alpha track + filled deficit visual, stretched into a line). V on top, SoC bar in middle, I on bottom, with hairline dividers between rows. Voltage and current font sizes bumped to match the Pack chip.
  • Battery Heater Temp / Battery Temp — fixed value text intruding into the bottom of the sparkline plot. Battery Temp font bumped to match Heater Temp.
  • Pack Power chip — added subtle grey hairlines between V/A/kW rows matching the Climate chip’s divider style; chip now fills its tile more densely.

Build 59 — Curated Scan stability fix + checklist redesign, swipe-to-confirm for already-connected adapters, polish

NOTES TO TESTERS:

  1. This is RC2 for the Version 1.1 App Store release. Please report anything abnormal.
  2. 2026 IONIQ 5 owners — please test your low-beam and high-beam indicators. The 2026 mapping is a calculated bet based on our success with 2025. Please test both low beams and high beams, do the app and CarPlay follow the state of the headlights? Please, please let me know!
  3. Anyone with a VLink-branded adapter — confirm it now appears in the scan list without removing the name filter

ABC test with Curated DID List — stability fix and checklist redesign

The biggest fix in this build. The Curated Scan no longer runs a continuous live-preview polling task in the background. Each Capture A/B/C now runs a single bounded polling cycle (~1-3s on a healthy bus). This eliminates the orphan-task class of bug that killed Tom’s Build 57 twice with 0x8BADF00D watchdog hangs after he turned off the OBD adapter and car.

The active view has been redesigned as a checklist. Each row (Capture A / Capture B / Capture C) shows a Begin button when it’s next, a spinner with a small cancel xmark while it’s in flight, or a green check seal when committed. The bottom “Begin Capture” button is gone — you advance by tapping each row’s Begin in sequence. When Capture C commits, the view auto-pushes you to the renamed Curated Scan Results view.

A new instructions banner up top counters a recurring misconception: each capture represents one steady state of the car (e.g. “lights off”), not a transition between states. Below the captures, a “Latest Values” section shows the most recent snapshot’s values dimmed between captures and lit up to full opacity as a capture fills in.

Curated Scan Results — Share + Done as bottom action row

The Results view (was “Diff”) now has a clean bottom action row with Share and Done as equal-width prominent capsule buttons. Above them, a footnote with a folder icon points you at the on-device archive: “Results are saved to the IONIQ 5 Companion folder in the Files app.” Done dismisses the entire flow back to Settings.

The Complete ECU Scan completion screen now uses the same bottom action row as the Curated Scan Results view: Share and Done as equal-width prominent capsule buttons, with the same Files-app footnote. The Share button now ships both the curated .iqlist artifact and the raw scan log — previously, a zero-positives scan had no way to share the raw log for triage.

Already-connected adapter — swipe-to-confirm reminder

If your iPhone has an OBD-II adapter connected via another app, the Welcome screen’s one-tap shortcut now opens a confirmation sheet before adopting. The sheet reminds you that OBD-II adapters can only talk to one app at a time, and asks you to slide a control from left to right to continue. A “Go Back” button below the slider returns you to the shortcut panel.

Behind the scenes, adoption is also more resilient: if the iPhone has already torn down the prior app’s connection by the time you swipe, the app now silently rescans for the adapter and reconnects, all under a single continuous “Connecting…” indicator. No more long blank “Connecting…” stalls.

Added “vlink” to the OBD adapter-name filter so VLink-family ELM327 adapters (without the trailing “er”) show up in the scan list. Replaces the narrower “vlinker” entry; the hyphenated “v-link” entry is retained for adapters that brand with the dash.


Build 58 — Welcome-screen shortcut for already-connected adapters, 2025 headlight detection (thanks Tom!), dashboard polish (thanks Bjorn!), fixed some Advanced Diagnostic tools/polish

NOTES TO TESTERS:

  1. Please report anything abnormal — I’m calling this RC1 (release candidate 1) for Version 1.1 App Store release.
  2. All 2025 IONIQ 5 owners — please, please test out your headlights and let me know if they are working: manually on, auto on, high beams and low beams (no DRL yet — we’ll go for that at some point).
  3. Let me know if you see anything strange if you have Dynamic Type cranked up.

Welcome-screen shortcut for already-connected adapters

If your iPhone already has an OBD-II adapter connected via another app (or a system-level Bluetooth pairing), the Welcome screen now offers a one-tap shortcut instead of the generic 1-2-3 tutorial. Each detected adapter shows up as a full-width prominent button — tap the adapter name to use it. Below the panel, a smaller grey “Set up a different adapter” button takes you back to the regular flow.

A soft tip on the shortcut panel notes that running multiple OBD-II apps at the same time can degrade the experience for both apps. If you tap “Set up a different adapter” by mistake, a “Show already connected adapters” button appears at the top of the regular tutorial so you can restore the discovery list — dismissing is now a navigation action, not a permanent setup commitment.

Discovery only runs when no adapter is saved; if you already use IONIQ 5 Companion regularly, nothing about your launch experience changes.

2025 IONIQ 5 — headlight detection (all variants)

Low-beam and high-beam indicators now light up on the 2025 IONIQ 5 (RWD LR, AWD LR, RWD SR, IONIQ 5 N). The 2025 firmware moved the headlight signals to a different DID than the 2024 mapping uses, leaving them silent until now. Mapping verified against five physical states from Tom’s tests (auto-off, auto-on, manual low ×2, manual high). 2024 IONIQ 5 cars are unchanged in this build.

Dashboard — Auxiliary Battery SoC chip refinement

The 12V auxiliary-battery SoC mini-gauge in the Low Voltage section was rendering badly at larger Dynamic Type sizes (the percentage was overflowing the small circular plot). The percentage now stays size-stable inside the plot regardless of your text-size preference. The “State of Charge” descriptor moved out of the small inner plot — where it was crowding the percentage — to a chip-style caption below the circle.

Dashboard — Motor RPM gauges

The “rpm” unit moved out of the inside of each circular plot to the bottom label, which now reads “Front Motor (rpm)”, “Rear Motor (rpm)”, or “Motor (rpm)” depending on drivetrain. The arc stroke was thickened so the gauges read with more visual weight and the value sits as the single focal point inside each circle.

Advanced Diagnostics

Renamed all Advanced Diagnostics tools, added brief descriptions of what each one is used for including Reset Onboarding. Adding a confirmation dialog if Reset Onboarding is pressed to guard against an accidental press.

ABC test with Curated DID List — Share button fix

Share buttons now appear in two places once all three snapshots (A/B/C) are captured: a new footer button on the active view, and the existing toolbar button on the Diff view. Both hand the JSON archive to the iOS share sheet so testers can email the artifact back consistently. Fixes a prior bug where the Diff-view Share button never appeared because it was bound to a file URL that was nil until Done dismissed the whole sheet.


Build 57 — Curated Scan workflow, CarPlay Scan Status fixes, Experimental Parking Sensors (2022-2024 IONIQ 5)

NOTE TO TESTERS: Please report anything abnormal — I’m hoping to release version 1.1 to the App Store tomorrow or Tuesday. Please make sure the expanded 12V/Aux features are working well for you.

Curated Scan workflow

Complete ECU Scan and Curated Scan now share a lighter user-facing artifact: the curated list (.iqlist). When a Complete ECU Scan finishes, the app auto-generates an .iqlist next to the heavier scan log, and the completion screen’s Share button now shares that curated list rather than the full log.

The Curated Scan picker is updated to match. The picker lists .iqlist files exclusively, and copy is updated throughout: navigation title becomes “Pick a curated list”, and the empty state explains how to create one (run a Complete ECU Scan, or copy an .iqlist into the IONIQ 5 Companion folder via the Files app).

The underlying scan log is still written to Documents and accessible via Files for forensic / triage use; only the user-facing flow changes.

CarPlay Scan Status fixes

Fixed: tapping an ECU row in Scan Status no longer shows an infinite spinner. The rows are informational and now indicate that with no disclosure chevron and an immediate tap response.

Fixed: the Scan Status summary now reads “x/y DIDs” instead of “x/y ECUs”. The number was always a count of polled DIDs (typically ~20 across 8 ECUs).

J1979 common-DTC notice opens larger

The post-scan notice that appears when a known-benign permanent code is detected now opens at full sheet height instead of a half-sheet. Several testers reported the body text was off the screen and could be missed.

Experimental Parking Sensors (only available on 2022-2024 IONIQ 5)

A new toggle in Settings → Experimental Features → Parking sensors re-enables the Dashboard parking panel and CarPlay parking tab on 2022-2024 IONIQ 5 registries. The Experimental Features section is itself gated under the 5-tap “Advanced Diagnostics” unlock, and the toggle only appears when the active vehicle’s registry has parking-sensor coverage. Footer warns that readings may be inaccurate; with the toggle off, the Dashboard panel is hidden and the CarPlay tab is omitted.

Complete ECU Scan reliability on clone adapters

Relaxed an internal first-frame timeout from 32 ms to 128 ms for the fast-scan path. A tester’s 2026 IONIQ 5 BCM scan on a clone “ELM327 v2.2” was aborting partway through because the adapter’s RX path needed slightly more settle time after large multi-frame batches. The relaxed ceiling adds margin without affecting normal scan speed — successful responses return as fast as ever. Cost on clone adapters is roughly 14 minutes of additional time across a full 65,536-DID scan, paid only on legitimately empty regions.


Build 56 — 12V telemetry, CarPlay Driving tab redesign, IONIQ 6 MY2023 coverage, IONIQ 5 N coverage

Auxiliary battery telemetry

A new collapsible 12V panel on the Dashboard surfaces the auxiliary battery’s full state, sourced from a slow-poll ICCU detail set: state of charge, voltage, current (with a charging / discharging label), and temperature — plus the DC-DC converter’s temperature, output voltage, output current, and HV pack input voltage.

The same data feeds a redesigned CarPlay 12V chip on the Driving tab. A small SoC arc sits at the top with the percentage in the center; voltage and current are stacked underneath. The current value follows the same negative-for-charging sign convention as the HV pack chip across the row, so the row reads consistently.

The legacy single-voltage 12V chip on the Dashboard Overview section is removed in favor of this richer panel.

CarPlay Driving tab reorganization

The Driving tab is reorganized for at-a-glance scanning. Row 1 groups battery-health telemetry — Pack SoC, Pack Power, Odometer, 12V, Cell Δ, motor RPM, headlights. Row 2 groups motor and environmental chips — Tires, Climate, Pre-Condition, Battery Heater, Battery Temp, motor RPM, brake light.

A new Tires chip replaces the standalone Energy chip (now redundant since the SoC chip shows kWh remaining underneath the percentage). Four corner tiles show pressure and temperature for FL/FR/RL/RR, color-graded by status against your registry’s pressure thresholds.

RWD cars get a new One Motor chip — an earthy ocean-to-land gradient backdrop with a centered peace-sign glyph — where the front-motor RPM lives on AWD. Celebrates the simpler single-motor drivetrain.

The Pack chip turns green when energy is flowing into the pack (charging or regenerative braking); white otherwise.

The Pre-Condition chip on Driving now shows a stacked composition when active: Active label, Time to 21°C / 70°F caption (locale-aware), and the calculated ETA — same formatting as the Charging tab.

Two row 1 chips were renamed: SoCPack SoC (disambiguates from the new aux SoC reading in the 12V chip), and PackPack Power.

Ioniq 6 MY2023 coverage

The Ioniq 6 RWD LR and AWD LR registries now correctly cover model year 2023. Previously, MY2023 VINs (year code P) fell through to a default registry and could be decoded as the wrong drivetrain — first surfaced by a tester whose 2023 RWD car was being read as AWD.

Ioniq 5N coverage

Added new decoding logic and registry entries for the IONIQ 5 N

Localization

CarPlay Driving tab chip titles Front RPM, Rear RPM, and One Motor are now localized in German, Spanish, French, Dutch, and Swedish. Previously rendered in English regardless of the user’s app-language setting because the strings were passed as raw literals.

Other refinements

  • CarPlay climate chip now draws a thin divider between the outdoor (AAT) and indoor (IAT) rows for clearer separation.
  • Dashboard motor-RPM gauge no longer renders the value with a thousands separator (e.g. “3200” instead of “3,200”).
  • CarPlay SoC chip auto-shrinks the kWh-remaining text if it would impinge on the colored ring — protects layout against future larger battery packs.

Build 55 — Adapter Quiet Check, common-DTC reassurance

Adapter Quiet Check

A new tool under Settings → Diagnostics → Adapter Quiet Check answers a question that’s surprisingly common: “is another app talking to my OBD adapter at the same time as IONIQ 5 Companion?”

iOS lets multiple apps share one BLE connection to the same peripheral, and OBD adapters weren’t designed for that. When two apps both send AT commands to the same adapter, they corrupt each other’s session — symptoms include missed multi-frame responses, garbled DIDs, and scans that take far longer than they should. Until now there was no way to confirm whether your symptoms came from foreign-app interference or something else.

Tap Run Quiet Check and accept the consent prompt (the adapter is briefly put in a special listening mode and re-initialized when the test ends). The app pauses its own polling and listens silently for 60 seconds for any byte the adapter shouldn’t be sending.

  • PASS — no foreign traffic detected; the adapter is connected only to this app.
  • FAIL — another app is sharing the adapter. The first frames captured are shown as decoded hex with timestamps, useful for support cases. Force-quit other diagnostic apps (Carista, OBDeleven, OBD Fusion, Torque, Bimmercode, etc.), unplug-replug the adapter, and re-run.

The last 5 runs are kept in the history list on screen. Designed primarily as a forensic artifact — when you suspect interference, this gives a one-tap yes/no answer.

“Common Hyundai code” reassurance

A J1979 scan on virtually every Hyundai EV reports a permanent diagnostic code, P0C17 (Drive Motor Position Sensor Circuit), on the drive motor controller. This code does not represent a real fault — it’s a self-test artifact that the controller never fully clears, and permanent codes are sticky by design.

When your scan completes and finds P0C17 in the permanent slot, IONIQ 5 Companion now shows a brief explanation of why it’s normal, when it would actually warrant attention (driving symptoms like stuttering, limp mode, or dashboard alerts), and a “Don’t show this again” preference. The DTCs help bubble in the interrogation table also picks up a short note so users who haven’t run a scan yet can read the explanation.

The reassurance is restricted to the permanent code class only — a confirmed or pending P0C17 would represent an active fault and is not suppressed.


Build 53 — Brake Light Indicator setting, Curated DID Scan sharing, app polish

Brake Light Indicator setting

Settings now has a Dashboard section with a Brake Light Indicator option. Three modes:

  • Off — the brake chip is hidden entirely.
  • Red Background — full red flash on brake press (Build 52 behavior).
  • Red Text — only the value “On” shows in red, no background flash.

The new default is Red Text. If you preferred the Build 52 flash behavior, switch to Red Background under Settings → Dashboard. The Dashboard section only appears on cars whose registry decodes a brake-light signal — older registries hide it automatically.

Curated DID Scan sharing made easier

Previously, sending a full ECU scan to another tester meant routing through Files → On My iPhone → Ioniq 5 Diagnostics. That dance is gone.

Sender side. In the Curated Scan source picker, long-press (or left-swipe) a row and pick Share findings…. The share sheet opens with a small .iqlist file pre-attached — pick AirDrop, Messages, Mail, etc. The shared file contains just the POSITIVE DIDs from that scan plus minimal metadata (capture date, app build, source ECU). The full scan log stays on your device.

Receiver side. When a tester taps an .iqlist attachment in iMessage, Mail, or Files, iOS shows a Quick Look preview with the ECU name, DID count, capture date, sender’s app build, and a horizontal preview of the first 12 DIDs. Tap the share icon in Quick Look’s bottom toolbar and pick IONIQ 5 Companion to import — the file lands in Documents and the Curated Scan source picker opens with it at the top, ready to use.

If you receive a scan with zero positives, you’ll get a polite “no positives to share” alert instead of an empty file.

Settings copy updates

The advanced diagnostics-unlock dialog (the one that pops after the 5-tap on Build) now reads “Enable Advanced Diagnostics” instead of the older DID-Scanner-specific phrasing. The matching re-hide dialog reads “Hide Advanced Diagnostics”. Both translated across all six locales.

First-launch folder visibility

iOS hides empty app Documents folders from Files → On My iPhone, which led to “the app doesn’t have a folder, did the install break?” confusion on fresh installs. Build 53 writes a one-line README.txt on first launch describing what the folder is for, so the IONIQ 5 Companion folder shows up in Files immediately. The file is only written if absent — your edits or deletions stick across launches.


Build 52 — App rename and first-launch defaults polish — first App Store release (v1.0)

First public App Store release — version 1.0.

Build 52 renames the app to IONIQ 5 Companion and sets smarter first-launch defaults. No diagnostic feature changes — this is a polish pass before wider release.

App renamed to IONIQ 5 Companion

The Home Screen icon, app switcher, Settings entry, and Bluetooth permission prompt all now read IONIQ 5 Companion. Existing installs will pick up the new name on update — your saved data, app placement, and adapter pairings carry over unchanged.

The bundle identifier and your in-app history are untouched, so this is a name-only change with no migration to think about.

Locale-aware unit defaults on first launch

Previously the app defaulted everyone to °C / mi / psi. Build 52 reads your phone’s locale once on first launch and picks defaults that match your location:

  • US — °F, miles, psi
  • UK — °C, miles, psi
  • Continental Europe, Australia, Japan, etc. — °C, kilometers, bar

If you’ve already set Settings → Units to your preference, that choice is preserved — only fresh installs get the new defaults.

Dark mode is the new default appearance

The app now defaults to Dark on first launch instead of Auto (follow system). If you’ve already picked Auto or Light in Settings → Appearance, your choice is unchanged.


Build 51 — 2026 Ioniq 5 charging fix - part 2

Build 51 fixes the underlying issue in how the app loads addresses from the registry. With this build, 2026 owners should see charging-state detection, EVSE info, and Control Pilot duty cycle all working when plugged in.

What this fixes

On 2026 cars, the Scan Status panel on the Dashboard was showing 14/14 DIDs found instead of the expected 17 — VCMS was silently being dropped at registry-load time. Build 51 makes the per-vehicle registry the single source of truth for ECU addresses, with regression tests that prevent this class of bug from recurring.

No changes to 2022–2025 Ioniq 5 behavior — those registries already use the canonical addresses and are unaffected.


Build 50 — 2026 Ioniq 5 charging support

Hyundai moved the VCMS (Vehicle Charging Management System) ECU to a new CAN bus address starting with the 2026 model year, and the app was still polling the 2024-era address. Build 50 ships a per-model-year registry for 2026+ that points the charging signals at the correct location.

What should work in 2026 Ioniq 5

  • Charging state detection — the dashboard now correctly recognizes when AC or DC charging is active.
  • EVSE info — the dynamic CarPlay charging tab populates with EVSE max voltage, max current, present voltage/current, and max power.
  • Control Pilot duty cycle — the J1772/CCS PWM signal that advertises the EVSE’s max-current capability.

No changes to 2022–2025 Ioniq 5 behavior. 2024 RWD and AWD LR continue to use their existing registries; 2025 single-year registry preserved verbatim. Same DIDs, same signal byte offsets, same polling intervals — only the bus address changed for 2026+.

Tester credit

Thanks to tester Jeff for providing the 2026 ECU bus scan + targeted DID probe against the new address that confirmed the data layout migrated unchanged with the move. Without his diagnostic data, this fix wouldn’t have been possible.


Build 49 — Curated DID Scan, ECU Scanner overhaul, J1979 share card

NOTE TO TESTERS 1: I think we’re getting close to the first release candidate – a new issue with 2026 Ioniq 5’s might delay things a bit - looks like Hyundai move the VCMS to another address. NOTE TO TESTERS 2: The Parking section and CarPlay parking tab are temporarily hidden in this build while we polish the app for its first public release. The underlying mapping work is preserved and will return in a follow-up build.

New tool: Curated List DID Scan

Settings → Diagnostics → Curated List DID Scan.

Pick a saved Complete-ECU-Scan log, curate which DIDs you want to investigate, then capture up to three labeled snapshots (A/B/C) under different physical states — for example: door closed, door open, door closed again. The diff view buckets results into:

  • Gold — bytes that round-trip A==C ≠ B (strong evidence of a state signal). Expandable to bit-level decomposition.
  • Other change — bytes that changed but didn’t round-trip cleanly.
  • Static — bytes that never changed.
  • Missing — DIDs that errored in some snapshot.

Saves a curated_scan_*.json archive plus a sibling .md summary to Documents (visible via the Files app and ShareLink).

ECU Scanner — rewritten end-to-end

The 0x700–0x7FF discovery scan is now reliable, fast, and substantially more informative per ECU. On a 2024 Ioniq 5 it consistently finds all 38 ECUs on the bus.

Complete ECU Scan — in-progress UI redesigned for in-car readability

Big circular progress gauge with the percent in the middle and the current DID below it. Elapsed and ETA are now side-by-side labeled tiles. The Found DIDs list moved into a collapsible disclosure group. Progress is derived from the actual DID being scanned, so the bar can no longer exceed 100%, and on resume the gauge immediately reflects real progress.

J1979 crawler — styled PNG share card

The share button now exports a styled PNG report card (matching the ICCU share card style) instead of a raw .log file. The card includes:

  • Vehicle context (model / year / variant / odometer when available)
  • Crawl Summary (Started, Duration, Outcome, ECUs found, Discovery, DTCs rollup)
  • A per-ECU panel for every interrogated ECU showing the four bucket-status chips (Identity / Capabilities / DTCs / Monitors), CAL-IDs, Mode 01 PID counts, Mode 06 MID counts, and any confirmed/pending/permanent DTCs

VIN is intentionally omitted from every panel so the card can be shared publicly.

J1979 crawler — diagnostic logging integration

Diagnostic logging now flows into your normal diagnostic log (when diagnostic logging is on) instead of producing a dedicated per-crawl .log file. When diagnostic logging is off, a J1979 crawl leaves no on-disk trace at all. Removes the “mystery file” friction.

Parking sensors hidden for now

The experimental Dashboard “Parking” section and CarPlay parking tab are turned off in this build while we get the rest of the app ready for its first public release. Underlying mapping work is preserved and will re-enable in a follow-up.


Build 48 — Climate section, regen indicator on RPM gauges

NOTE TO TESTERS: The new “Climate” section appears on the Dashboard between Overview and Charging. If you’ve previously customized your section order, the new section will appear at the bottom by default — you can re-order it from Settings. If you find the AAT (outside) reading drifts from what your car’s dashboard shows, that’s expected: the app reads the raw sensor while the cluster applies its own filtering.

New “Climate” section on the Dashboard

A new section between Overview and Charging shows three live cabin readings, all from the HVAC ECU:

  • AAT Sensor — outside-air temperature (formerly the “Outside” chip in the Overview section, now relabeled and moved here).
  • IAT Sensor — interior cabin-air temperature.
  • Relative Humidity — cabin relative humidity, as a percentage.

Each chip shows -- until the first valid reading arrives. Tap “What’s AAT, IAT, and RH?” below the chips for a short explanation of each value, including a note that AAT may not match the outdoor temperature shown on the car’s dashboard — AAT is a raw sensor reading, while the cluster applies its own adjustment.

CarPlay: “Outside Temp” replaced by a “Climate” chip

On the Driving and Charging tabs, the “Outside Temp” chip has been renamed to “Climate” and now displays three rows:

  • AAT: outside air
  • IAT: cabin air
  • RH: relative humidity

Same chip footprint, three values instead of one. The labels (AAT, IAT, RH) are small and grey, the values are bold, and the units use the same proportions as the 12V chip.

CarPlay: Regen indicator on the RPM gauges

The RPM gauges on the Driving tab now show green text in the center when the battery is regenerating (current flowing from the motors back into the pack), and white text when motoring. The colored ring around the gauge still reflects RPM magnitude (green/yellow/orange).

Suggested by a tester — thanks for the idea!

Smaller polish

  • Info buttons (Climate, Battery Health, Battery Odometer) are now system blue instead of grey so they’re clearly tappable. The orange ⓘ in the ECU status panel is unchanged because it signals a problem rather than a tap target.

Build 47 — Smoother battery preconditioning countdown

NOTE TO TESTERS: If you precondition your battery before a DC fast-charge session, please watch the new “Estimated time to 70°F” countdown — both during preconditioning and as the pack approaches 70°F (21°C). Let me know how the descent feels and whether the end-of-session timing matches what you observe. I would very much like to collect full diagnostic logs for entire pre-conditioning cycles to help tune the algorithm – thanks to TheIoniqGuy for supplying log data!

Estimated time to 70°F — full rewrite

The “Estimated time to 70°F” chip that appears during battery preconditioning has been rewritten end-to-end. The previous version had two visible problems:

  • It got stuck. The displayed value would sit at the same number for 6-7 minutes at the start of a session, then jump down by 3-5 minutes at once, then stick again. That happens because the cold pack doesn’t actually warm in the first ~6 minutes — heat is moving through the coolant loop before reaching the modules — and the old algorithm assumed it was warming from the moment the heater engaged.
  • It ended too high. Even after the pack was within 1°C of target, the chip would still read “≈ 2 min” or “≈ 3 min” right up to the moment the pack reached 70°F.

What’s new:

  • Continuous mm:ss display. The chip now shows time as ≈ 12:34 instead of ≈ 13 min, and updates several times per minute. You see a real ticking countdown rather than discrete jumps.
  • Smooth descent. A first-order low-pass filter spreads any change in the underlying estimate over ~60 seconds. Where the old chip jumped 3-5 minutes at a step, the new one descends one minute at a time.
  • Honest dead-time. The first ~6 minutes of a cold-pack session are explicitly modeled as “the pack hasn’t moved yet” — the countdown ticks down minute by minute on wall-clock time, just like a real countdown should.
  • Correct end behavior. As the pack closes in on 70°F the displayed value glides down toward 0:30 (a small floor that prevents the chip from claiming “0:00” while the pack is still cold), and disappears the moment the pack actually crosses 70°F.

What it looks like in practice

For a cold-morning preconditioning session starting at 9°C, you’d typically see the chip start near ≈ 30:00, descend smoothly through 25:00, 20:00, 15:00, etc., transition into 1:30, 1:00, 0:30 as the pack reaches 20°C, and then disappear (--) when the pack hits 70°F.

If preconditioning is interrupted (you start DC fast charging, or shut off the car), the chip disappears immediately — DC fast charging takes over thermal management and the preconditioning estimate is no longer meaningful.

Caveats

This is a calibration tuned to the two preconditioning sessions we have detailed data on (a 9°C cold start that ran into DC fast charging, and a 14°C session that ran to completion). On unusually slow-heating sessions — colder ambient, weak heater, low state-of-charge — the chip may reach 0:30 before the pack actually reaches 70°F, and sit there until done. If that happens to you, please share the diagnostic log so I can tune the floor.


Build 46 — New Inspect tab: J1979 diagnostic crawl

NOTE TO TESTERS: This new feature revealed that I have a permanent trouble code on my 2024 Ioniq 5 that I didn’t know about - I’ll have to look into that! After you run the scan, pleae let me know if you also have any error codes or other issues. Thanks!

New Inspect tab

A new Inspect tab sits between Dashboard and Settings (magnifying-glass icon). It runs a one-shot J1979 diagnostic crawl across every ECU on your vehicle that responds to the universal OBD-II protocol — the same protocol every car sold in the last ~25 years is required to support.

For each responding ECU the crawl collects:

  • Identity — Vehicle Identification Number, calibration IDs, and ECU name (Mode 09)
  • Capabilities — which live-data PIDs the ECU exposes (Mode 01)
  • DTCs — confirmed, pending, and permanent trouble codes (Modes 03 / 07 / 0A), each decoded into the standard J2012 description; freeze-frame snapshot is read when there’s at least one confirmed DTC (Mode 02)
  • Monitors — supported on-board diagnostic monitor IDs (Mode 06)

Results appear in two sections on the Inspect tab:

  • Discovery — a compact summary of how many ECUs answered the broadcast vs. the per-address physical probe
  • Interrogation — one row per discovered ECU showing identity, capability, DTC, and monitor status with at-a-glance status icons. Tap any row to expand the full per-ECU details

A Share button at the end exports the full transcript as a j1979_crawl_*.log file. Your VIN is encrypted in the saved log file — only the developer holds the decryption key — so sharing the log doesn’t disclose your vehicle identifier. The in-app view still shows the full VIN to you.

What the icons mean

Status icons are consistent across both Discovery and Interrogation:

  • empty circle — pending
  • spinner — in progress
  • green check — completed cleanly
  • orange exclamation — completed but with DTCs found
  • gray minus — skipped (e.g. ECU rejected the request)
  • red triangle — failed

A small info.circle button on the Interrogation header opens a help sheet explaining each column.

Live polling pauses during the scan

Live data polling on the Dashboard pauses while a J1979 crawl is running, then resumes automatically when the crawl completes (or you cancel it). The Dashboard will go briefly blank during the crawl — that’s expected.


Build 45 — Faster startup on partial-response ICCUs, ICCU panel cleanup, headlight indicator hidden on 2025 Ioniq 5

NOTE 1 TO TESTERS: Some of the changes in this build are a litle risky, and impossible for me to fully test on my 2024 vehicle. Please let me know if you have any problems.

NOTE 2 TO TESTERS: If you have an ICCU that does not report all DIDs, it would be great if you could send me diagnostic log using this build – please be sure and start the diagnostic recording before you plug in the adapter in order to capture the initialization sequence – I want to verify the init sequence is going smoothly on your vehicle - thank you!

NOTE 3 TO TESTERS: If you have a 2025 Ioniq 5, please verify you are no longer seeing the headlight chip – that will be gone until we find a reliable headlight signal.

Faster startup on cars where the ICCU does not reply to all polled DIDs

Improved handling of multi-DID messages when some of the DIDs do not respond

Removed the FACTORY / SERVICED badge on the ICCU panel

Earlier builds displayed a green FACTORY badge in the ICCU section, driven by a single diagnostic identifier on the ICCU module. In practice that identifier only ever reported “FACTORY” or failed to respond at all — and we’ve now seen replacement ICCUs that also report “FACTORY”. The badge was at best uninformative and at worst misleading, so Build 45 removes it.

All other ICCU identity fields — part number, hardware number, serial number, build date, boot software, firmware hashes, etc. — are unchanged.

Reassurance text below the “N fields unavailable” banner

When an ICCU responds to only some of its identification fields, the app shows an orange warning banner (“N of M fields unavailable”). With the FACTORY/SERVICED badge gone, that banner is the most prominent signal on the panel, and it can read as alarming.

Build 45 adds a short caption directly below the banner:

Many ICCUs respond to only some of these fields. A partial response here is normal and does not indicate a problem with your car.

The caption is only shown when the banner itself is shown — panels where every field came through successfully display nothing new. Text is localized against all five of the app’s supported languages (English, German, Spanish, French, Dutch, Swedish).

Headlight indicator hidden on 2025 Ioniq 5 (until we find a reliable signal)

On 2025 Ioniq 5 cars, neither of the BCM data identifiers we’ve tried for headlight state has held up: the high-beam byte we relied on for 2022-2024 is missing entirely from the 2025 BCM payload, and the low-beam mapping that carried over from older model years has never been confirmed on a 2025 capture. Rather than display a perpetually-incorrect “Off” indicator, Build 45 hides the headlight chip on the 2025 Dashboard and the CarPlay driving grid.

The chip will reappear once a future tester capture identifies a reliable signal — no app update required beyond a registry tweak. 2022-2024 Ioniq 5 is unaffected.


Build 44 — Complete ECU Scan fixes, preconditioning detection rewrite, added byte to the Ioniq 5 (2025+) polling loop

Complete ECU Scan: data-integrity fix, resume fixes, and UI polish

NRC responses no longer counted as positive hits

A full DID sweep could record thousands of false “positive” rows with payload 7F 22 31 — the ECU’s own negative-response pattern, which the scanner was treating as valid data. Build 44 fixes the classifier so rejected DIDs are correctly dropped. Scans from Build 44 onward produce clean data; previously-recorded scans are not retroactively scrubbed.

Resume no longer bricks scan logs

Trying to resume a scan with the adapter disconnected could permanently mark the log as “finished” behind the scenes, making it disappear from the resume list forever. Build 44 now:

  • Checks adapter connectivity before touching the log, and shows a clear “Adapter not connected — reconnect and try again” error if it isn’t.
  • Marks the scan paused (resumable), not finished, if the connection drops mid-scan.

Logs already broken by earlier builds remain unrecoverable; this is a fix going forward only.

Resume clock and ETA fix

On a resumed scan, the elapsed-time readout and “estimated time remaining” now reflect just the current session, not the paused gap between sessions. Resuming an hours-paused scan no longer produces a wildly inflated ETA that ticks back and forth.

Preflight and scan-progress UI polish

  • Session picker matches the ECU picker’s style (single row with selected value, tap-through to list). Labels simplified to “Default (0x01)”, “Extended (0x03)”, “Both (0x01 and 0x03)”.
  • New section footer explains the session-type distinction and scan-duration expectations.
  • Start-Scan is now a full-width prominent green button; Stop is tinted red.
  • Scan-phase labels use explicit service IDs.
  • Monospaced digits on counters and summary so numbers don’t jitter as they tick.
  • Vehicle-state presets lead with “driving” and “mixed state”.

Preconditioning detection rewrite

The preconditioning chip previously used a single bit from the BMS as its trigger, with an asymmetric debounce — slow to come on, instant to go off. Tester TheIoniqGuy saw the chip briefly flicker off mid-preconditioning (most visibly in Corbin’s captures) because of a single-sample transition in the underlying command byte that happened to clear the watched bit.

Build 44 replaces the detector with a rule that reads both of the BMS’s battery-loop pump-duty command bytes directly, not through a single bit. It requires both bytes to be in a heating-calibration regime, and adds symmetric debounce on both turn-on and turn-off. The charging-state gate from the previous build is retained — preconditioning does not trigger during an active charging session.

Validated across six captures from multiple testers covering preconditioning, preconditioning→drive→DCFC, preconditioning→drive→AC charging, post-DCFC drive-home, plain driving, and the single-sample-glitch session. No false positives, no false negatives.

Extra BCM signal polled on 2025+ Ioniq 5

Build 44 re-enables a BCM data identifier (0xBC09) that was previously disabled on 2025 Ioniq 5 registries. This is a diagnostic follow-up for the open 2025 AUTO-headlamp question — the previously-watched signal stayed at a “not commanded” value while headlamps were physically on in a parking garage. No user-visible behavior change.


Special thanks to testers James and Daria for the rapid turn around on diagnostic logs!

Build 42 advertised improved polling responsiveness on OBDLink CX, but a holdover from an earlier build was quietly undoing the tuning shortly after connect — so testers on OBDLink CX likely didn’t feel any difference between Build 41 and Build 42.

Build 43 removes the leftover overrides.


Build 42 tightens one timing parameter on STN-family adapters (OBDLink CX and kin) based on measured first-frame response latencies from Build 41 tester logs. Projected polling utilization on OBDLink CX drops back to ~73 %, actually below the Carista baseline. Multi-frame reliability is unchanged — that fix (Build 41’s adapter-aware configuration) is preserved intact.

Carista and other classic ELM327 clones are unaffected by this change.


Build 41 targets the intermittent “partial data” errors some testers have seen on VCMS and ICCU multi-frame reads when using an OBDLink CX adapter.

The app now branches its ELM327 configuration during init based on a capability probe: OBDLink CX (and other STN-chipset adapters) receive a timing profile tuned for reliable multi-frame reception, while Carista and other classic ELM327 clones continue to use the same timing as Build 40 — which has been reliable on that hardware.


Build 40 — Resumable ECU Scans, Graceful Pause, Reliability Fixes

Stage-1 fix for the VCMS 0xE001 intermittent multi-frame failures observed on genuine OBDLink CX adapters. The ELM327 init sequence now explicitly configure the consecutive-frame reception window to 100 ms — tight enough to not penalize successful multi-frame tails, generous enough to catch the observed 30–60 ms CF arrival latency when VCMS does respond. Transparent no-op on non-STN adapters (Carista clones respond ? which is caught and ignored; init continues with adapter defaults).

Complete ECU Scan: Resumable Scans

A paused Complete ECU Scan can now be resumed from where it left off, with full provenance recorded across all sessions.

When you reopen the tool, any incomplete scan_log files in your Documents directory show up as a “Resume prior scan” button in the preflight. Tap it to see a list of candidates with per-scan progress, session choice (default / extended / both), and the state label from the prior session. Pick one → a confirmation screen shows what UDS session and starting DID will be swept next, with a state-label field pre-filled from the prior session. You can edit the label to reflect how conditions have changed since you paused.

The resumed scan appends to the same scan_log_*.txt and scan_found_*.md files, so your finished-scan artifact shows the full session history — every pause, every resume, every state label, every outcome. For “Both” session choice, resume automatically runs default first, then extended, skipping any UDS session that was already complete.

Complete ECU Scan: Graceful Pause When the Car Turns Off

EV-specific pain point: if you start a 1–2 hour scan and leave the car idle, it’ll eventually turn off on its own. Previously that would leave the scan in a broken state — now it pauses gracefully and attributes the cause correctly.

When the target ECU falls silent for 10 consecutive requests, the app automatically probes HVAC (the same mechanism the Dashboard uses for ignition detection). If HVAC also doesn’t respond → “the car turned off.” If HVAC still responds → “the target ECU stopped responding while the car is still on” (suggests an adapter or ECU issue). Both paths preserve partial results and surface a Resume button so you can pick up when conditions are ready.

Complete ECU Scan: Smaller Polish

  • Elapsed + ETA display. Progress section now shows running elapsed time and an ETA that improves as the scan runs. ETA is suppressed until at least 20 DIDs have been scanned so early-scan noise doesn’t produce jumpy estimates.
  • Stop button + reassurance footer. The red “Abort Scan” button is now a plain “Stop” button, with a localized footer directly below it: “A stopped scan can be resumed later, you will not lose your progress.” Translated to de / es / fr / nl / sv.
  • Extended-session ignition warning. Preflight now shows an orange warning when Extended or Both session is selected and the app doesn’t detect the ignition as on. Warn-only (Start stays enabled) since the ignition reading can be briefly stale.
  • Localization pass. The completion messaging (Scan complete / Scan stopped / Scan paused — the car turned off / Scan paused — ECU stopped responding) and all phase-progress labels now respect your in-app language override. Previously they stayed English if your iOS system language didn’t match the app’s language setting.

Reliability Fixes

  • Dashboard crash fix. Opening the Battery Temperatures section while BMS data was updating could crash the app
  • “Car off” false reading. The app could briefly report “car off” while the car was actually running, particularly if a second Bluetooth-connected diagnostic app was sending commands to the same OBD adapter. The app now only flips to “off” when HVAC genuinely stops responding (adapter reports NO DATA / UNABLE TO CONNECT). Transient glitches — multi-frame reception errors, CAN bus hiccups, cross-app interference — keep the previous ignition state rather than falsely flipping.

ICCU Details: “Failed DIDs” → “Unavailable DIDs”

The list that surfaces DIDs the ICCU declined to report is now labeled “Unavailable DIDs” instead of “Failed DIDs”. “Failed” implied a tester-side fault; “Unavailable” correctly reflects that the ECU itself chose not to respond (typically NRC 0x31 on a serviced/replaced ICCU). The heading respects the in-app language override via the localization helper. Translated to de / es / fr / nl / sv.


Changed adaptive timeout to the default setting which will hopefully remedy the problem with incomplete multi-frame messages

New: Complete ECU Scan

A new advanced-diagnostic tool that sweeps the full 0x0000–0xFFFF DID address space of a single ECU — the full 65,536 possible IDs, not just the ones we already know about. Meant for discovery: when a tester sees a signal we don’t yet read, this is how we find where it lives.

Find it under Settings → Advanced Diagnostics → Complete ECU Scan (same place as DID Scanner and ECU Scanner).

Diagnostic Logs in Files App

All diagnostic logs and DID snapshots the app writes are now accessible from the iOS Files app. Open Files → On My iPhoneIoniq 5 Diagnostics. You’ll see:

  • diagnostics_YYYY-MM-DD_HHmmss.log — files from the “Start Recording” button in Settings
  • DID_ABC_*.log — files from the A/B/C snapshot feature
  • scan_log_*.txt and scan_found_*.md — new, from Complete ECU Scan

You can share, delete, or drag these out to your Mac (via AirDrop, iCloud Drive, or a cable) without needing to go through the in-app Share sheet.


Build 38 — Battery Heating ETA, CarPlay Polish

NOTE TO TESTERS: Hi team - I don’t normally release an untested feature, but the new “Time to 70°F”/”Time to 21°C” feature seemed fairly safe and I don’t know when I’ll have a chance to charge next. Please let me know how this works out for you – this was a feautre suggested by TheIoniqGuy, thanks Corbin for the great idea! Also worth noting, last build I added a feature (multi-DID) intended to speed up initial scanning. It helps most folks, but I think may be lengthening the scan for others. I’m looking into this. Thanks – Greg

New: Battery Heating ETA

During user-invoked preconditioning, the Dashboard and CarPlay now display an estimate of how much longer until the coldest battery module reaches 21 °C (≈ 70 °F) — the threshold the pack needs for DC fast-charge readiness.

On the Dashboard, a new full-width chip inside Battery · Temperatures > Pre-conditioning shows the estimate (e.g. “Estimated time to 70°F — ≈ 12 min”). On the CarPlay Charging tab, the 12 V voltage chip is repurposed as “Time to 70°F” — showing -- when preconditioning is not active and ≈ N min while it is.

The estimate uses a hybrid model: during the first ~10 minutes of a heating session it falls back to a constant warming rate derived from recorded captures (thanks TheIoniqGuy); once the session has gathered enough data, it switches to your car’s actual observed slope. Displayed minutes only ever decrease within a session — no “time went up” surprises from sensor noise.

Label switches automatically between °F and °C based on your temperature units preference, and the Dashboard chip is translated into German, Spanish, French, Dutch, and Swedish.

CarPlay Polish

  • Monospaced digits. Numeric values in every CarPlay chip (SoC, power, 12 V, current, voltage, heating ETA, etc.) no longer jitter left/right as their digits change width. Same system font face, just tabular digit spacing.
  • Unit-switch rebuild. Switching between °F and °C now correctly updates chip labels that embed the unit (like “Time to 70°F” → “Time to 21°C”). Previously only an app-language change triggered a rebuild.

ICCU Name Correction

Corrected the expanded form of “ICCU” from “Integrated Charger Control Unit” to “Integrated Charging Control Unit” to match Hyundai’s official E-GMP terminology. The abbreviation “ICCU” and all other labels stay unchanged.


Build 37 — ICCU Details with Share Sheet, Multi-Frame Reliability, Dashboard Polish

ICCU Details Section

The Dashboard has a new collapsible ICCU section showing decoded identification data for your car’s Integrated Charger Control Unit: module ID, part numbers, dataset and software versions, calibration and build dates, serial number, and programming state (FACTORY vs. SERVICED). The data is read automatically at connect, before regular polling begins, and stays constant for the session.

CarPlay gets a new ICCU row in the Status tab with the same information in a driver-appropriate 10-row detail view.

From the iOS ICCU section, a new Share button exports a 1080×1350 branded PNG card suitable for posting to social media or sharing with other testers. The card leads with your vehicle identity (model, year, variant, odometer), lists the ICCU fields, and carries a “Report prepared by IONIQ 5 Companion” badge with a UTC timestamp. Dark aesthetic over a blurred app-icon background. Files save as “ICCU details - YYYY-MM-DD HH-mm-ss.png”.

Multi-Frame Reliability

Removed the ATCRA flow-control command from polling and scanning paths. On genuine OBDLink firmware, ATCRA disabled the adapter’s automatic flow-control filter updates, causing every multi-frame DID after the first ECU switch to stall mid-stream. The same fix empirically resolves long-standing intermittent multi-frame errors on Carista clones: a 2,750-line driving-capture now shows zero ISO-TP errors, with every VCMS multi-frame DID and the 62-byte BMS response completing cleanly across multiple polling cycles.

Full Session Reset on Disconnect

Pulling the adapter now resets all session-derived state — VIN, model year, variant, ECU registry, and live vehicle data. Only your saved-device preference and general app settings persist. Fixes a class of bug where a prior session’s VIN or registry could leak into the next connection and produce wrong-variant readings (e.g., a 2025 RWD displayed as AWD after a reconnect). The CarPlay Status tab follows the same discipline — Scan Status and ICCU rows show “Not Available” after disconnect.

Dashboard Polish

Overview reorganized: VIN now sits on its own full-width row directly below the state-of-charge gauge, so the full 17 characters display without font shrinking. The duplicate Pre-Conditioning chip was removed from Overview — it already appears in Battery · Temperatures.

Battery · Temperatures restructured into labeled sub-sections: Module Temperatures (with Min/Avg/Max/Delta stats), a new Pre-conditioning sub-section grouping Pre-Conditioning status and Battery Heater Temp, and a new Fan sub-section. The three history charts now use the same visual style as the Charging section.

Diagnostics Recorder Now Visible to All Users

The Diagnostics recorder — Start / Stop / Share — is now visible in Settings to every user, no longer hidden behind the five-tap-Build reveal. It’s the single most useful tool for reporting unexpected behavior.

A new footer explains when and how to use it and reassures that your VIN is encrypted in the log file — only the developer holds the decryption key — so sharing a log doesn’t disclose your vehicle identifier. Translated into German, Spanish, French, Dutch, Swedish.


Build 36 — Headlight indicator accuracy + multi-frame reliability

Headlight Indicator Responsiveness (2022-2024 Ioniq 5)

The low-beam indicator in the app and CarPlay now updates promptly when you turn the headlights off. Previously, the underlying signal from the Body Control Module could take several minutes to retract after the stalk was moved to Off — producing a “stuck on” indicator that only cleared on the next long drive or power cycle. The app now reads the headlight state from a different register that updates within about 6 seconds of the stalk movement.

Small caveat worth knowing about: when Auto mode decides it’s bright enough to extinguish the lamps during a daytime drive, the new register is still slower to retract — in the tens-of-seconds range. Most drivers won’t notice, because that’s a background transition you’re not watching for, but it can produce a brief “indicator still on” window when driving from shade into sunlight.

No More Transient High-Beam Icon (2022-2024 Ioniq 5)

Fixed a glitch where the high-beam icon would briefly illuminate in the app and CarPlay when the headlights came on automatically — particularly visible on a rainy day with the stalk in Auto mode. The old decoder flagged the high-beam indicator on any activity in the high-beam status byte, including unrelated state transitions the BCM produces during Auto-mode lamp changes. The decoder now looks for a specific bit pattern that only appears when the high beams are genuinely engaged.

More Reliable Multi-Frame Vehicle Data

Hardened the ISO-TP parser — the component that reassembles multi-frame responses from the car. It now validates consecutive-frame sequence counters according to the ISO 15765-2 specification, catching dropped or out-of-order frames that previously produced silently corrupt data for any ECU response longer than 7 bytes. Parser failures are now self-diagnosing, logging specific ECU addresses and byte counts rather than quietly passing bad data up the stack.

Also reordered initial adapter setup to match the ELM327 datasheet more carefully (auto-formatting before auto-flow-control) — should improve connection reliability with clone adapters that have order-sensitive state machines.


Build 35 — Crash fixes + preconditioning accuracy

CarPlay Crash on Vehicle Disconnect

Fixed a crash that could occur in CarPlay when the Scan Status detail view had been opened and the vehicle then disconnected (or the CarPlay scene reactivated). The app would trip an “Index out of range” error inside the scan-status refresh path and terminate.

Affected four testers across builds 32, 33, and 34 on iOS 26.3 and 26.4. The fix restructures the underlying data so the two lists that had to stay in sync are now a single list — the mismatch that caused the crash is now impossible by construction.

Dashboard Crash During Battery Updates

Fixed a crash on the Dashboard when viewing the cell voltage grid. If the BMS pushed a payload with a different cell count while the grid was on screen, a stale index could reach into the new shorter array and crash the app.

Affected two testers on build 33 (iPhone 17 Pro Max, iOS 26.4.1). The grid now takes a single snapshot of the cell voltages at render time and iterates over that snapshot, so the index and the data can never get out of step.

Preconditioning After DC Fast Charging

Fixed false “Preconditioning Active” readings that appeared for the entire drive home after a DC fast charging session. After a high-power charge, the pack’s thermal-management system runs its coolant loop for 15–20 minutes or more to bring the battery back to target temperature — and the app was misreading that cooling activity as active preconditioning.

Worked through 56 historical logs and 1,425 samples from four testers (2024 and 2025 AWD variants) to isolate the exact bit in the BMS thermal-status byte that separates heating from cooling. The app now distinguishes the two cleanly: heating turns on the indicator, cooling does not.


Build 34 — Brake light indicator fix

Brake Light Indicator

Fixed a long-standing issue where the brake-light indicator could appear “stuck on” while driving, even when the brake light was not on. Originally reported by tester Tom on his 2025 Ioniq 5 RWD, with a similar report later from tester Michael on his 2025 AWD Ioniq 5.

The brake-light value lives in a BCM byte that appears to pack several unrelated status bits — only one of those bits actually represents the brake-light state. The previous decoder treated any non-zero value as “brake on,” so when any of the other bits in the same byte happened to be set while the brake bit was clear, the indicator would falsely show “On” until the rest of the byte cleared.

Build 34 changes the decoder to look at only the specific brake bit, ignoring the unrelated status bits. The fix applies across all supported vehicles — 2022–2024 Ioniq 5 / Ioniq 6 read the brake state from BCM DID 0xBC06 byte 4, while 2025+ Ioniq 5 and 2026 Ioniq 9 read it from BCM DID 0xBC17 byte 4. Same byte position, same bit, just a different containing DID by model year.

The fix was validated against brake-on captures from three different vehicles (eight distinct byte values, all with the brake bit set) and confirmed live on a 2024 Ioniq 5 test drive that re-captured the exact failure pattern and decoded it correctly under the new rule.


Build 33 — Battery config display + diagnostics unlock fix

Battery Configuration Display

The Battery Configuration chip on the Dashboard now reflects the actual detected series cell count when it differs from the registry. This catches vehicles whose pack layout differs from the factory spec.

For example, Pieter’s 2022 AWD (Hyundai’s limited-edition “Project 45”) uses a 180-series pack instead of the standard 192 series. The chip now shows “180 series x 2 parallel” based on live BMS data rather than the registry default. The existing registry value is still used as a fallback until the BMS has reported cell voltages.

Fix: 5-Tap Diagnostics Unlock

The hidden 5-tap gesture that unlocks the developer/diagnostics settings in the About section was incorrectly attached to the Registry row. It’s now back on the Build number row, which is where it was designed to live.


Build 32 — CarPlay overhaul, VIN match fix

CarPlay State-Driven Lifecycle

CarPlay has been completely reworked. Previously, all tabs (Driving, Charging, Parking) were built immediately when CarPlay connected — before the app knew what vehicle you had. This caused RWD vehicles to incorrectly show the AWD layout (Front RPM + Rear RPM instead of just Motor RPM).

Now CarPlay shows only the Status tab until the adapter connects, VIN is read, and ECU training completes. Once the app knows your vehicle, the correct tabs appear. When the car turns off or the adapter disconnects, tabs are removed and the app returns to a clean Status-only state.

The Status tab connection sequence now progresses smoothly: Looking for adapter → Reading → Scanning ECUs → Connected

Fix: VIN Matching for AWD Vehicles

Fixed VIN matching for 2022-2024 AWD vehicles with VIN position 8 = C (e.g. Pieter’s Project 45). These were previously falling through to the default registry instead of explicitly matching the AWD Long Range registry.

CarPlay Polish

  • Fixed the “Vehicle Off” status icon being stretched (the car icon is now properly proportioned)
  • Fixed a brief “Vehicle Off” flash during startup when the car was actually on (stale state from the previous session)
  • Fixed a brief “Connected” flash during VIN read before ECU scanning starts

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May produce false positives during autonomous BMS thermal management.
  3. Battery odometer shows incorrect values on some vehicles (Issue #6).
  4. Parking sensors 7 and 12 (rear-side corners) not yet mapped.
  5. Parking sensor values may flicker — ECU-side behavior, not an app bug.
  6. Headlight signal sometimes delayed when manually activated in daylight (Issue #10).
  7. Brake light indicator updates every ~3 seconds due to OBD polling constraints.
  8. VCMS flow control intermittent failure — Mitigated but root cause unknown.
  9. Parking sensors only available on 2022-2024 Ioniq 5 — Not yet verified on 2025 or other models.

Build 31 — VIN detection rewrite, 2025 fixes, privacy

VIN Encryption in Diagnostic Logs

Diagnostic logs now encrypt your VIN using public-key cryptography. This allows you to safely share logs on GitHub without exposing your VIN. Your VIN can only be unencrypted with the private key that I have – and that private key is not part of code repository – it is safe and secure.

I don’t want anyone feeling nervous about sharing a diagnostic log on Github, and I want to encourage Github for issue reporting because it is a huge help to me. It is really hard to keep everything straight with so many testers sending me information.

Thanks for your support!

VIN Detection Rewrite

Rewrote the vehicle identification sequence for improved reliability across all model years. The app now waits for ignition before reading the VIN from the MCU, which works universally across 2022–2025 Ioniq 5, Ioniq 6, and Ioniq 9. The previous method (CGW) failed on 2022 models.

The VIN chip in the Overview section is now always visible — it shows “Unknown” in red text until the VIN has been read. Settings > About > Registry also shows “Not read yet” before VIN detection.

New Vehicle Registry: Ioniq 5 RWD Long Range 2025+

Added a dedicated registry for the 2025 Ioniq 5 RWD Long Range, confirmed by Tester Tom.

Fix: RWD Long Range Variant Detection (2022-2024)

Fixed variant detection for 2022-2024 RWD Long Range models (Issue #11). These vehicles were previously falling back to the default AWD registry.

Fix (hopefully): 2025 Ioniq 5 Headlights and Brake Light

Fixed headlight and brake light signal mappings for the 2025 Ioniq 5, which uses different BCM byte positions than the 2022-2024 models.

Fix: CarPlay Power Display

Fixed CarPlay Power showing “–” when not charging. Now shows instantaneous power value, and uses it as a fallback during charging until enough history accumulates for the sparkline (Issue #13).

Battery Configuration Display

The Battery Configuration chip now shows the correct cell configuration from the vehicle registry (e.g. “168 series x 3 parallel” for Ioniq 9) instead of a hardcoded value.

RWD Motor Display

The front motor RPM gauge is now hidden on RWD vehicles in both the Dashboard and CarPlay. The Motors section title changes to “Motor” on RWD vehicles.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May produce false positives during autonomous BMS thermal management.
  3. Battery odometer shows incorrect values on some vehicles (Issue #6).
  4. Parking sensors 7 and 12 (rear-side corners) not yet mapped.
  5. Parking sensor values may flicker — ECU-side behavior, not an app bug.
  6. Headlight signal sometimes delayed when manually activated in daylight (Issue #10).
  7. Brake light indicator updates every ~3 seconds due to OBD polling constraints.
  8. VCMS flow control intermittent failure — Mitigated but root cause unknown.
  9. Parking sensors only available on 2022-2024 Ioniq 5 — Not yet verified on 2025 or other models.

Build 30 — Ioniq 9 fixes, battery temperature cleanup

Fix: Ioniq 9 Battery Configuration

Corrected the Ioniq 9 cell configuration to 168S3P (504 total cells).

Fix: Ioniq 9 Tire Pressure Thresholds

The Ioniq 9 recommends 40 psi. Tire pressure color coding now uses the correct thresholds for the Ioniq 9 (green range 38–43 psi). Previously it was using Ioniq 5 values (33–38 psi), which would show orange for correctly inflated tires. Also fixed a logic issue with the registry files.

Removed BMS Max/Min Temp Chips

Removed the BMS Max Temp and BMS Min Temp data chips from the Battery Temperatures section. These values from the BMS were unclear in meaning and not useful alongside the module temperature grid.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May produce false positives during autonomous BMS thermal management.
  3. Battery odometer shows incorrect values on some vehicles (Issue #6).
  4. Parking sensors 7 and 12 (rear-side corners) not yet mapped.
  5. Parking sensor values may flicker — ECU-side behavior, not an app bug.
  6. Headlight signal sometimes delayed when manually activated in daylight (Issue #10).
  7. Brake light indicator updates every ~3 seconds due to OBD polling constraints.
  8. VCMS flow control intermittent failure — Mitigated but root cause unknown.

Build 29 — VIN detection fixes, Ioniq 9 RWD support, variant display

Fix: VIN Detection for Ioniq 6 and Ioniq 9

Vehicle type detection now uses the full 4-character VIN prefix instead of a single position. Ioniq 6 and Ioniq 9 could not be distinguished previously (both share “M” at VIN position 4). The app now correctly identifies:

  • KM8K / 7YAK — Ioniq 5
  • KMHM — Ioniq 6
  • 7YAM — Ioniq 9

Also fixed the Ioniq 6 AWD registry — VIN position 8 was incorrectly set to “F” (copied from Ioniq 5). Corrected to “C” based on confirmed real-world Ioniq 6 VINs.

New: Ioniq 9 RWD Registry

Added a separate registry for the RWD Ioniq 9 (VIN position 8 = 1). Both RWD and AWD Ioniq 9 variants share the same 110 kWh battery. The app now supports 10 vehicle configurations total.

Variant Display from Registry

The Dashboard “Variant” chip (e.g., “AWD Long Range”, “RWD”) now reads directly from the vehicle registry file instead of parsing VIN codes. This ensures correct variant names for all vehicle types, including Ioniq 6 and Ioniq 9.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May produce false positives during autonomous BMS thermal management.
  3. Battery odometer shows incorrect values on some vehicles (Issue #6).
  4. Parking sensors 7 and 12 (rear-side corners) not yet mapped.
  5. Parking sensor values may flicker — ECU-side behavior, not an app bug.
  6. Headlight signal sometimes delayed when manually activated in daylight (Issue #10).
  7. Brake light indicator updates every ~3 seconds due to OBD polling constraints.
  8. VCMS flow control intermittent failure — Mitigated but root cause unknown.

Build 28 — Per-vehicle registry, battery temp improvements, chart & CarPlay fixes

NOTE TO TESTERS: Build 28 was a major code refactoring to make supporting different vehicle types easier long term. Features that used to work may have become broken, so please pay very close attention and report anything that seems incorrect. Thanks!

Per-Vehicle ECU Registry

The app now reads your VIN immediately on adapter connect and loads a vehicle-specific signal configuration. This enables correct decoding for different models and model years.

  • 9 vehicle configurations — Ioniq 5 (5 variants by drivetrain and year), Ioniq 6 (3 variants), and Ioniq 9
  • Automatic detection — VIN is read from the CGW before the car even needs to be on
  • Dashboard shows detected model — New “Model” chip in Overview, registry name in Settings > About
  • 2025 Ioniq 5 AC voltage fixed — OBC byte offset corrected for 2025 models (Issue #8)
  • Ioniq 9 light signals mapped — BCM headlight and brake light DIDs configured for Ioniq 9 (Issue #9)
  • Parking sensors per-vehicle — Automatically hidden on vehicles where they don’t respond (Issue #7)

Battery Temperature Improvements

  • More accurate temperature sparklines — CarPlay battery temp chart now plots the actual min/max across all 16 module temperature sensors instead of the BMS-reported max/min (which included a non-cell sensor reading ~6°C higher than actual cell temps)
  • Cleaned up heater chart — Removed misleading BMS Max, BMS Min, and inlet temperature lines from the dashboard temperature history chart. Renamed to “Heater Temp History.”

Fixes

  • Charging charts appear immediately — Previously required collapsing and re-expanding the Charging section when a charge session started
  • Charts visible on first navigation — Temperature and charging charts now appear immediately when sections are already expanded (no more toggle to reveal)
  • Chart expand animation — Removed 0.25s delay, charts appear instantly
  • CarPlay parking tab — Now appears dynamically after ECU training completes. Previously could be missing if CarPlay connected before training finished.
  • CarPlay stale tabs — Data now refreshes correctly when returning from another app
  • Headlight icon visibility — Low beam icon now visible in dark mode

Share Sheet

DID Scanner and ECU Scanner now have a Share button. Exports results to a timestamped text file via the iOS share sheet (AirDrop, Messages, Mail, Files, etc.).

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May produce false positives during autonomous BMS thermal management.
  3. Battery odometer shows incorrect values on some vehicles (Issue #6).
  4. Parking sensors 7 and 12 (rear-side corners) not yet mapped.
  5. Parking sensor values may flicker — ECU-side behavior, not an app bug.
  6. Headlight signal sometimes delayed when manually activated in daylight (Issue #10).
  7. Brake light indicator updates every ~3 seconds due to OBD polling constraints.
  8. VCMS flow control intermittent failure — Mitigated but root cause unknown.

Build 27 — Training reliability, Scan Status dark mode fix, CarPlay Scan Status grouping

Fix: ECU Training Reliability

The startup ECU scan occasionally failed to detect the VCMS (charging system) and other ECUs. Multiple improvements:

  • Stale frame recovery — When an ECU’s multi-frame response is incomplete, the app now recovers data from subsequent attempts instead of discarding it. Previously, a single failed response could cascade and cause 3-6 ECUs to appear as “not found.”
  • Partial response acceptance — If an ECU responds with a valid first frame but can’t complete the full multi-frame exchange during the fast-paced training scan, it is now accepted as found. Normal polling (with 5-second intervals) reliably reads the full response.
  • Retry with recovery — Failed probes are retried once with a brief pause to clear stale data.

Fix: Scan Status Visibility

  • HVAC ECU now shows a green checkmark in Scan Status after training completes. Previously showed an empty circle despite being responsive.
  • Dark mode — Scan Status icons (checkmark, dash, hourglass) and ECU names now use primary color for better visibility. Previously nearly invisible in dark mode on both Dashboard and CarPlay.

CarPlay: Scan Status Grouped by ECU

The Scan Status detail list now groups DIDs by ECU name (e.g., “BMS — 9/9 Found”) instead of listing each DID individually. Shows “Found” or “Not Found” for each ECU group. This also resolves an issue where some ECUs were missing from the CarPlay Scan Status list.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.
  3. Battery odometer shows incorrect values on some vehicles — The cumulative energy charged/discharged values may be incorrect on some model years due to variable BMS payload lengths. Under investigation (Issue #6).
  4. Parking sensors may not report on some vehicles — The 2025 Ioniq 5 and Ioniq 9 may show all-zero parking sensor values. Under investigation (Issue #7).
  5. AC voltage may display incorrectly on some vehicles — Some 2025 models report incorrect AC charging voltage (e.g., 26 V instead of 240 V). Under investigation (Issue #8).
  6. Parking sensors 7 and 12 not yet mapped — The rear-side corner sensors (driver and passenger) have not responded in any test condition.
  7. Parking sensor values may flicker — The 1-byte ultrasonic sensors (front center and rear) intermittently report 0 (no detection) even when an object is present. This is ECU-side behavior, not an app bug.
  8. Headlights vs DRL — The app cannot yet distinguish between headlights on and daytime running lights. Both show the headlight icon.
  9. Brake light response time — The brake light indicator updates every ~3 seconds due to OBD polling constraints. It is not suitable as a real-time brake light indicator.
  10. Headlights and brake light not working on Ioniq 9 — The Ioniq 9’s BCM uses different DIDs for light status. Under investigation (Issue #9).

Build 26 — CarPlay Status tab, consistent connection states, Scan Status detail view

CarPlay Improvements

  • Connection tab renamed to “Status” — Now mirrors the Dashboard connection phases: “Looking for adapter”, “Reading”, “Vehicle Off”, “Scanning ECUs”, “Connected”.
  • Consistent pre-connection states — CarPlay and Dashboard now both show “Looking for adapter” for all pre-connection states. CarPlay previously showed “Connecting…” and “Scanning…” which were inconsistent.
  • Scan Status detail view — The Status tab now includes a Scan Status summary row. Tap to view the full DID list with icons showing which ECUs were found (checkmark), not found (dash), or still being scanned (hourglass). The list updates live as training progresses.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.
  3. Battery odometer shows incorrect values on some vehicles — The cumulative energy charged/discharged values may be incorrect on some model years due to variable BMS payload lengths. Under investigation (Issue #6).
  4. Parking sensors may not report on some vehicles — The 2025 Ioniq 5 and Ioniq 9 may show all-zero parking sensor values. Under investigation (Issue #7).
  5. AC voltage may display incorrectly on some vehicles — Some 2025 models report incorrect AC charging voltage (e.g., 26 V instead of 240 V). Under investigation (Issue #8).
  6. Parking sensors 7 and 12 not yet mapped — The rear-side corner sensors (driver and passenger) have not responded in any test condition.
  7. Parking sensor values may flicker — The 1-byte ultrasonic sensors (front center and rear) intermittently report 0 (no detection) even when an object is present. This is ECU-side behavior, not an app bug.
  8. Headlights vs DRL — The app cannot yet distinguish between headlights on and daytime running lights. Both show the headlight icon.
  9. Brake light response time — The brake light indicator updates every ~3 seconds due to OBD polling constraints. It is not suitable as a real-time brake light indicator.

Build 25 — ECU training, headlights & brake light, polling optimizations, CarPlay tab navigation fix

New: ECU Training Phase

On each Bluetooth connection, the app now automatically discovers which ECUs are present in your car before starting to poll. A progress bar is shown on the Reading screen during this scan. Only ECUs that respond are included in the polling loop, which improves data update rates and eliminates wasted bandwidth on ECUs that don’t exist on your vehicle (e.g., parking sensors on models without them).

  • Scan Status panel in the Dashboard Overview section shows which ECUs responded (green check) or failed (red X) during training. A note explains that some sensors may not be found due to model feature differences.
  • Parking section is now automatically hidden in both Dashboard and CarPlay if the parking sensor ECU was not detected during training.

New: Headlights & Brake Light Indicators

  • Headlights chip — Added to Dashboard Overview and CarPlay Driving tab. Shows a low beam icon on a white background when headlights are on. When high beams are active, the icon switches to the high beam symbol in bright blue. Shows “Off” when headlights are off.
  • Brake Light chip — Added to Dashboard Overview and CarPlay Driving tab. Background turns red with “On” when the brake pedal is pressed.
  • Note: The headlight indicator currently cannot distinguish between headlights on and daytime running lights — both show the low beam icon. We are investigating whether the BCM provides a separate DRL signal.
  • Note: The brake light indicator polls every 3 seconds. This is not fast enough to be a real-time brake light indicator — it is an informational display showing brake state, not a safety-critical signal.

Fix: Charging Charts

  • Charging Power, Pack Voltage, and Requested Current charts now sample from the BMS core data poll (3-second, high priority) instead of the VCMS poll (5-second, medium priority). This resolves the sparse, gapped time series that some users reported during charging sessions.

Fix: CarPlay Tab Reset

  • Expanding or collapsing Dashboard sections no longer causes CarPlay to navigate back to the Connection tab. Language changes still correctly rebuild CarPlay templates, and the previously selected tab is now preserved.

Parking Sensors

  • Added “Experimental” warning label and notes explaining that front sensors only report when the car is in Drive, and rear sensors only report when in Reverse.
  • Parking section re-layout: sensors grouped into Front and Rear cards with individual notes.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.
  3. Battery odometer shows incorrect values on some vehicles — The cumulative energy charged/discharged values may be incorrect on some model years due to variable BMS payload lengths. Under investigation (Issue #6).
  4. Parking sensors 7 and 12 not yet mapped — The rear-side corner sensors (driver and passenger) have not responded in any test condition.
  5. Parking sensor values may flicker — The 1-byte ultrasonic sensors (front center and rear) intermittently report 0 (no detection) even when an object is present. This is ECU-side behavior, not an app bug.
  6. Headlights vs DRL — The app cannot yet distinguish between headlights on and daytime running lights. Both show the headlight icon.
  7. Brake light response time — The brake light indicator updates every ~3 seconds due to OBD polling constraints. It is not suitable as a real-time brake light indicator.

Build 24 — Parking sensors - EXPERIMENTAL, motor RPM, CarPlay improvements

New: Parking Sensor Heatmap - EXPERIMENTAL

  • Dashboard — New “Parking” section displays all 12 ultrasonic parking sensors in a two-row layout matching the physical bumper arrangement. Sensors use a green-to-red heatmap based on proximity (green >150cm, yellow 75–150cm, orange 30–75cm, red <30cm). 10 of 12 sensors are confirmed and mapped; sensors 7 and 12 are still under investigation.
  • CarPlay — New “Parking” tab replaces the Experimental tab. Two rows of 6 rendered chips with heatmap background coloring showing distance values for all sensors.
  • Distances shown in cm (metric) or inches (imperial), honoring the app’s distance unit preference.
  • Added ADAS_PRK ECU (0x7B1) to polling at 3-second intervals.

New: Motor RPM Gauges

  • Dashboard — New “Motors” section with front and rear motor RPM arc gauges, styled like the SoC gauge. Color transitions from green to yellow to orange based on RPM.
  • CarPlay — Front and rear motor RPM gauge chips added to the Driving tab.

CarPlay Improvements

  • Driving and Charging tabs now use RowElement layout for better label wrapping in all languages.
  • Chip titles use text labels instead of emoji icons, with full translations.
  • CarPlay refresh rate increased from 2 seconds to 1 second.

Translations

  • Expanded abbreviated labels across all languages (de, es, fr, nl, sv) for Pre-Condition, Outside Temp, Battery Temp, Battery Heater Temp.
  • Swedish: “Laddar” corrected to “Laddning” for Charging tab.
  • New strings translated: Parking, Motors, Front Motor, Rear Motor, Front, Rear, sensor activation notes.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.
  3. Battery odometer shows incorrect values on some vehicles — The cumulative energy charged/discharged values may be incorrect on some model years due to variable BMS payload lengths. Under investigation (Issue #6).
  4. Parking sensors 7 and 12 not yet mapped — The rear-side corner sensors (driver and passenger) have not responded in any test condition. Physical sensor housings are present but may not be wired or may require specific activation conditions.

Build 23 — Translation fix

Bug Fix

  • EVSE note text not translating — The explanatory notes on the EVSE tab (both AC and DC) appeared in English regardless of language setting. Caused by duplicate empty entries in the localization file that overrode the translated versions. Fixed.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Charging status lags ~1 minute after stopping — Should be fixed in build 20. The new VCMS signal transitions immediately. Needs verification.
  3. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.
  4. Battery odometer shows incorrect values on some vehicles — The cumulative energy charged/discharged values may be incorrect on some model years due to variable BMS payload lengths. Under investigation (Issue #6).

Build 22 — Scanner improvements, EVSE fix, translations

ECU Scanner Reliability

  • Two-pass scanning: TesterPresent (3E 00) first, then ReadVIN (22 F1 90) for ECUs that don’t support TesterPresent (e.g., HVAC). Scan takes 3–5 minutes but finds more ECUs.
  • Fixed adapter stability issues that caused incomplete scans or crashes.

DID Scanner Improvements

  • Custom ECU address — New “Custom” option in the ECU picker. Enter any TX address (e.g., 7C4) and the RX address is auto-calculated as TX+8. Useful for scanning the unknown ECUs discovered by the ECU scanner.
  • NRC filtering — Negative responses are no longer counted or displayed. Only DIDs that return actual data appear in results.
  • Polling resume fix — Navigating away from the DID scanner while a scan is running no longer leaves polling stopped.

EVSE Power Calculation Fix

  • AC power displayed on the EVSE tab was incorrect on some vehicles. Now calculated from AC voltage and max current derived from the control pilot duty cycle, which is reliable across all markets.

Translations

  • Added translations (de/es/fr/nl/sv) for AC Voltage, CP Duty, CP Duty Cycle, Max Current, Max Power, Max Voltage, and EVSE explanatory notes.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Charging status lags ~1 minute after stopping — Should be fixed in build 20. The new VCMS signal transitions immediately. Needs verification.
  3. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.

Build 20 — Charging detection rewrite

Charging Detection Rewrite

The charging detection system has been completely rewritten using a new signal from the Vehicle Charging Management System (VCMS).

  • Works across all markets. The previous detection relied on a BMS signal that did not work on European vehicles. The new signal has been verified on both US and EU cars.
  • Immediate AC vs DC detection. The app now knows whether you are AC or DC charging as soon as the charger connects — no more “Detecting” transitional state or 6-second delay.
  • Works with car on or off. The previous detection could miss charging sessions that started with the car off. The new VCMS signal is active regardless of ignition state.

Please test and report! If you charge (AC or DC) with this build, let us know if the charging status displays correctly.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  2. Charging status lags ~1 minute after stopping — Should be fixed in this build. The old BMS signal was slow to clear; the new VCMS signal transitions immediately. Needs verification.
  3. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.

Build 19 — Charging signal investigation, ECU scanner, diagnostic improvements

Charging Signal Investigation

  • Added polling of VCMS (0x744) DIDs E002 and E003 for raw diagnostic capture. These contain EVSE (charger station) data, control pilot voltage, battery target voltage/current, and charging counters. No decoded values yet — the raw data is captured in diagnostic logs to help us analyze and improve charging detection across different vehicle markets.
  • If you are charging (AC or DC), please record a diagnostic log and share it. We are actively investigating charging detection signals that work across all Ioniq 5 variants. Logs that capture the transition from not-charging to charging are especially valuable.

ECU Scanner

  • New tool under Settings > Advanced Diagnostics. Scans all CAN bus addresses (0x700–0x7FF) to discover which ECUs are present on your vehicle. Results can be copied to clipboard. This helps us identify ECUs that may differ between model years and markets.

Diagnostic Logging Improvements

  • BLE scanning events are now captured in diagnostic logs — scan start, device discovery, and device selection. Previously only post-connection events were logged, making it difficult to diagnose connection issues.

Known Issues

  1. Charging status shows “Inactive” on some European vehicles — The BMS charging flag (used to determine if charging is active) does not set on some EU-market vehicles during AC charging. We are investigating alternative signals from the VCMS (Vehicle Charging Management System) that appear to work across all markets.
  2. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on.
  3. Charging status lags ~1 minute after stopping — The BMS isCharging flag is slow to clear.
  4. Pre-conditioning detection is experimental — May still produce false positives. We are investigating reading the pre-conditioning state directly from the instrument cluster.

Build 18 — Pre-conditioning experiment, CarPlay improvements

Pre-Conditioning Detection (Experimental)

  • The “Battery Heater” indicator has been renamed to “Pre-Conditioning” throughout the app and CarPlay.
  • Detection now uses a different BMS signal (byte 9, believed to be heater power) instead of byte 12 (which turned out to be a temperature reading, not a power indicator).
  • Added a 25-second debounce filter — the signal must be sustained for 25 seconds before pre-conditioning is shown as active. This filters out brief thermal management events that are not user-initiated preconditioning.
  • Pre-conditioning is automatically suppressed while AC or DC charging is active.
  • This is experimental. We are still working to reliably distinguish user-initiated pre-conditioning from autonomous BMS thermal management. Please report if you see false positives or missed detections.

CarPlay Improvements

  • Driving tab expanded to two rows. Row 1: SoC, Pack, Odometer. Row 2: Energy, Outside temp, Pre-Condition status, Heater Temp, Battery Temp, 12V, Cell Δ. Previously only had one row with 5 chips.
  • Charging tab also uses explicit two-row layout for consistent spacing with the Driving tab.
  • Updated chip labels: “Batt Temp” is now “Battery 🌡️”, “Outside” is now “Outside 🌡️”, added new “🔋 Heater 🌡️” chip showing heater temperature, “Pre-Conditioning” shortened to “Pre-Condition” to avoid truncation.

Bug Fixes

  • Settings connecting spinner disappearing on scroll — The spinning indicator next to the adapter name in Settings would vanish when scrolled off screen and back. Replaced with an animated SF Symbol that survives cell recycling.
  • Missing translations — Added translations (de/es/fr/nl/sv) for “Reading” and “Turn on your vehicle to view diagnostics.” which were missing after the Build 17 dashboard refactor.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on. The “don’t forget your dongle” reminder never triggers. Need a better on/off signal than HVAC responsiveness.
  2. Charging status lags ~1 minute after stopping — When charging is ended, the app continues to show active charging for about a minute. The BMS isCharging flag is slow to clear. May need a faster stop-detection signal or combination of signals.
  3. Pre-conditioning detection is experimental — May still produce false positives or miss real preconditioning events. See above.

Build 17 — Swedish language, smoother dashboard, unplug reminder fix

Swedish Language Support

  • Svenska is now available as a language option in Settings. All ~200 strings are translated, including UI labels, status messages, and the longer educational text (battery health explanations, efficiency descriptions).

Dashboard Improvements

  • The connection screens (searching for adapter, reading data, vehicle off) are now a single unified panel. Previously these were separate screens that swapped in and out, causing a jarring jump during the connection process. Now the panel stays in place and only the text, icons, and indicators change smoothly within it.
  • When connected to the adapter, the OBD port image is replaced by a car icon. When the vehicle is off, the car appears dimmed with a pulsing “Turn on your vehicle to view diagnostics” prompt.
  • Removed the “Ioniq 5” reference from the vehicle-off message — the app now says “Turn on your vehicle to view diagnostics.”

Bug Fixes

  • Unplug reminder was not firing even when the toggle showed ON. If you installed the app and never manually toggled the Unplug Reminder switch, the setting was never actually written — the toggle displayed as ON (its visual default) but the code read it as OFF. This affected all users who hadn’t explicitly toggled the switch. Fixed by registering proper defaults at app launch. Thanks to Tom for the diagnostic log that identified this.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on. The “don’t forget your dongle” reminder never triggers. Need a better on/off signal than HVAC responsiveness.
  2. Charging status lags ~1 minute after stopping — When charging is ended, the app continues to show active charging for about a minute. The BMS isCharging flag is slow to clear. May need a faster stop-detection signal or combination of signals (e.g., OBC voltage drop for AC, or VCMS byte 6 transition).
  3. Battery heater is not a reliable pre-conditioning indicator — The heater signal (BMS 0106 byte 12) shows the battery heater cycling on/off briefly during normal charging, not just during user-initiated pre-conditioning. Previous byte (9) gave false positives when heater was off; current byte gives false positives when heater is on for reasons other than pre-conditioning. Need a better signal or combination to distinguish true pre-conditioning from normal thermal management.

Build 16 — Odometer fix for 2025 models

Bug Fix

  • Odometer was showing 0 on some 2025 Ioniq 5 vehicles. The instrument cluster ECU on these cars sends a “please wait” response before the actual odometer data, which the app wasn’t handling. The app now correctly processes this delayed response pattern. Thanks to TheIoniqGuy for the diagnostic log that identified this.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on. The “don’t forget your dongle” reminder never triggers. Need a better on/off signal than HVAC responsiveness.
  2. Charging status lags ~1 minute after stopping — When charging is ended, the app continues to show active charging for about a minute. The BMS isCharging flag is slow to clear. May need a faster stop-detection signal or combination of signals (e.g., OBC voltage drop for AC, or VCMS byte 6 transition).
  3. Battery heater is not a reliable pre-conditioning indicator — The heater signal (BMS 0106 byte 12) shows the battery heater cycling on/off briefly during normal charging, not just during user-initiated pre-conditioning. Previous byte (9) gave false positives when heater was off; current byte gives false positives when heater is on for reasons other than pre-conditioning. Need a better signal or combination to distinguish true pre-conditioning from normal thermal management.

Build 15 — AC/DC charge detection, signal fixes, smarter polling

Charging

  • Charge type (AC vs DC) now correctly identified. Uses the On-Board Charger’s AC input voltage to distinguish: ~245V means AC charging, near-zero means DC fast charging. Verified at Level 2 AC and 123kW DC CCS. Replaces the previous approach which caused the Type chip to flicker between AC, DC, and Not Charging.
  • When charging begins, the Type chip briefly shows “Detecting” while the app confirms AC vs DC. Previously it would flash “DC Fast” for a few seconds during AC charging startup.
  • Removed “Locked In” chip — the signal we were using turned out to be the battery main relay status, not the charging socket. It stayed latched after DC charging even with no cable connected.
  • Removed “Inlet Temp” from CarPlay charging view — the reading was tracking outdoor ambient temperature, not battery coolant. Showed no change during DC fast charging while module temps rose 15°C.

Odometer Fix - finally!

  • The odometer was showing incorrect values (zero or swapped units) for many testers. Root cause: the car’s instrument cluster only provides the odometer in whichever unit the display is set to (km or miles) — the other value is zero. The app now reads both, uses whichever is non-zero, and converts to get the other. This has been verified to resolve the odometer issues reported by multiple testers.
  • Odometer now polls every 30 seconds (was 60) for more responsive updates while driving.

Bug Fixes

  • Battery heater status was showing “On” when the heater was off. The signal was reading the wrong byte in an undocumented BMS response. Corrected based on comparison of heater-on and heater-off diagnostic logs. See Known Issue #3.
  • DID Scanner no longer causes the CarPlay display to jump back to the Connection tab.

DID Scanner

  • Scanner remembers your last ECU, start DID, and end DID between visits.
  • New “Copy All” button copies all scan results to clipboard.

Performance

  • When the car is off, the app now only polls HVAC as an ignition probe instead of polling all ECUs. Reduces adapter traffic. All ECUs refresh immediately when the car turns back on.

Known Issues

  1. Unplug reminder does not fire while charging — The HVAC ECU stays awake when the car is off but charging, so the app thinks the car is still on. The “don’t forget your dongle” reminder never triggers. Need a better on/off signal than HVAC responsiveness.
  2. Charging status lags ~1 minute after stopping — When charging is ended, the app continues to show active charging for about a minute. The BMS isCharging flag is slow to clear. May need a faster stop-detection signal or combination of signals.
  3. Battery heater is not a reliable pre-conditioning indicator — The heater signal shows the battery heater cycling on/off briefly during normal charging, not just during user-initiated pre-conditioning. Previous byte gave false positives when heater was off; current byte gives false positives when heater is on for reasons other than pre-conditioning. Need a better signal or combination to distinguish true pre-conditioning from normal thermal management.

Build 14 — Odometer fix, dynamic cell detection, CarPlay polish

Bug Fixes

  • Odometer now updates in real time while driving. Previously read from a BMS snapshot that only updated at key-on. Now reads from the instrument cluster ECU (per OBDb database).
  • Cell voltage display no longer gets stuck on “Loading cells 180/192”. The app now dynamically detects the actual number of cells in your battery and shows whatever is available. Fixes the issue for Project 45 and other variants with non-standard cell counts.

CarPlay

  • All value+unit labels refined — units now appear in a smaller, non-bold font baseline-aligned with the value. Cleaner look across all chips.
  • Full temperature unit labels on Batt Temp sparklines — now shows “°C” or “°F” instead of just the degree symbol.
  • Odometer chip no longer clips on high-mileage vehicles.
  • “Bat Temp” renamed to “Batt Temp” on Driving tab for consistency.
  • Green checkmark now displays correctly when connected.

Diagnostics

  • Diagnostic log now starts with a header showing app version/build, device name, adapter firmware, protocol, and VIN. Makes it much easier to identify which tester and configuration produced a log.

Build 13 — Battery Health info, CarPlay Driving tab, notification logging

Battery Health

  • Info icon on the Health chip — tap it for an explanation of what the BMS-reported State of Health value means, and why it should be treated as a general indicator rather than a precise measurement.

CarPlay

  • “Battery” tab renamed to “Driving” with a new Odometer chip showing distance in your preferred unit (km/mi).

Odometer

  • Polling frequency increased from every 2 minutes to every 60 seconds. Should update more reliably during drives.

Bug Fixes

  • Navigation titles (Settings, Dashboard, Connect) could get stuck in a non-English language when switching back to System Default. Fixed by using the bundle-based localization approach for all main navigation titles.
  • Tire pressure chips no longer wrap to two lines on narrow screens — values scale down to fit instead.
  • DataChip height is now consistent across a row — long values like “Not Charging” that scale down no longer cause shorter chips.

Unplug Reminder

  • Diagnostic log now captures the full notification decision — if you’re not seeing the unplug reminder, record a diagnostic log and turn the car off. The log will show whether the notification fired and why or why not.

Build 12 — Battery Odometer with efficiency tracking

Battery Odometer

  • New section replacing the old Energy display. Shows your battery’s lifetime energy charged and discharged as a visual equation: Discharged / Charged × 100 = Efficiency %.
  • Efficiency percentage tells you how much energy your battery retains vs. loses as heat over its lifetime. Tap the info button for a full explanation.
  • “Battery · Energy” section renamed to just “Battery”.

Bug Fix

  • Language section header and picker label in Settings were not translating. Added missing translations.

Build 11 — Connection fix for adapter timeout

Bug Fix

  • Fixed a connection failure affecting multiple testers where the app would repeatedly time out trying to connect. The root cause: some adapters send a stray byte during initialization that broke the app’s ability to read the response. The adapter was responding correctly — the app just couldn’t see it. Should be fixed for all affected testers.

Build 10 — CarPlay SoC fix, connection diagnostics

Bug Fix

  • CarPlay SoC gauge now matches the dashboard — both use floor rounding to match the car’s instrument cluster. Previously 79.6% showed as 79% on dashboard but 80% on CarPlay.

Connection Improvements

  • Increased adapter settle time from 500ms to 1 second after Bluetooth service discovery before sending the first command. May help adapters that need more warm-up time after connecting.
  • Diagnostic logs now capture significantly more detail for troubleshooting connection issues — if you’re having trouble connecting, please capture a diagnostic log and send it our way.

Build 9 — Adapter compatibility, device info

Adapter Compatibility

  • Removed firmware version validation — the app no longer rejects adapters based on their ATZ response string. ELM327 clones report a wide variety of version strings (“ELM327 v1.5”, “OBDII v2.2”, etc.) and they’re all compatible. If the adapter responds at all, it’s accepted.

Settings

  • The OBD-II Adapter section now shows three details when connected: Device (Bluetooth name), Adapter (firmware version), and Protocol.

Build 8 — Diagnostic recording, expanded snapshots

Diagnostic Recording

  • “Record Data” renamed to “Start Recording Diagnostics” — now captures everything: BLE connection events, adapter initialization commands and responses, disconnect reasons, plus all vehicle data. If you’re having connection issues, start recording before connecting and share the log for troubleshooting.

A-B-C Snapshots

  • Snapshot data and diffs now write to a shareable log file instead of requiring a console connection. A “Share ABC Log” button appears after taking snapshots.
  • Snapshots now capture all 12 ECUs (45 DIDs total) instead of just BMS and HVAC — much more comprehensive for identifying what changes between conditions.

Settings

  • Diagnostics section reorganized — recording and sharing are in their own “Diagnostics” section, while DID Scanner, Snapshots, Simulate, and Reset Onboarding are grouped under “Advanced Diagnostics”.

Build 7 — Odometer fix, battery thermal monitoring

Bug Fix

  • Odometer was wrong for vehicles over 65,535 km — was reading 2 bytes instead of 3, causing high-mileage vehicles to show incorrect values (e.g. 91,874 km displayed as ~26,227 km)

Battery Thermal Monitoring

  • New Battery Inlet Temp sensor — tracks the coolant temperature entering the battery pack. Shown as a green line on the BMS Temp History chart alongside BMS Max (red), BMS Min (blue), and Heater (orange)
  • Renamed “Heater” to “Battery Heater” throughout the app to clarify this is the battery pre-conditioning heater, not the cabin climate heater

CarPlay

  • Battery Heater chip is now smarter — shows a heater temperature sparkline when the heater is active, and “Off” when inactive
  • New Inlet Temp sparkline chip replaces the old dedicated heater temp chart, giving a more complete thermal picture while charging

Build 6 — Multi-language support, temperature fix

Localization

  • Full app localization in Dutch, German, Spanish, and French (~190 strings per language)
  • In-app language picker in Settings — choose System Default, English, Nederlands, Deutsch, Español, or Français
  • All screens translate live when you switch languages, including CarPlay
  • CarPlay tab titles, card labels, and connection status all translate

Bug Fix

  • Outside temperature was incorrectly showing cabin temperature instead of ambient. Now correctly reads the Ambient Air Temperature sensor per the OBDb community database.

Overview Section

  • Added outside temperature chip showing the ambient temperature in your preferred unit

Tire Pressure

  • Extended green (normal) tire pressure range from 33–38 psi to 33–40 psi based on beta tester feedback.

Build 5 — Battery fan monitoring, CarPlay demand power

Battery Temperatures

  • New Fan Status and Fan Speed gauges — compact arc gauges showing the commanded fan level (0–9) and actual fan tachometer feedback (0–120 Hz). Useful for monitoring battery cooling and detecting potential fan issues.

CarPlay

  • Demand chip now shows calculated demand power (kW) and requested current (A) instead of a sparkline chart — easier to read at a glance while driving
  • 12V battery color made consistent (white) across Battery and Charging tabs

Build 4 — CarPlay overhaul, new sensors, time series improvements

CarPlay

  • Completely redesigned — all tabs now use card-style elements with titles and rendered images
  • Charging tab expanded to 14 items across 2 rows
  • Battery tab shows SoC gauge, pack info, BMS min/max temp sparkline, and 12V battery
  • Connection icon now changes color by state (green=connected, yellow=connecting, red=error)
  • All temperatures respect your chosen unit (°C/°F)
  • No more tab bar flickering when switching between tabs

Dashboard

  • Battery section split into “Battery – Energy” and “Battery – Temperatures”
  • Battery Temperatures section reorganized with module temperature grid, color legend, BMS Temp History chart, and Heater Status chart
  • Heater chip pulses with an orange glow when the battery heater is active
  • Dashboard sections can be reordered — tap the list icon to drag sections into your preferred order

New Sensors

  • BMS Max Temp and BMS Min Temp
  • Battery Heater Temperature
  • Tire temperatures displayed below each tire pressure reading
  • Outside temperature now matches the car’s dashboard display

Time Series Charts

  • New “Time Charts” setting to limit chart time range (1–83 hours, default 3 hours)
  • Charts break lines across time gaps instead of drawing misleading straight lines
  • Temperature chart Y-axis moved to left side with clock time on X-axis

Build 3 — VIN fix for 2025 models, reliability improvements

VIN Reading

  • Fixed: VIN now reads correctly on 2025 models (US-market VINs starting with “7” were incorrectly rejected)
  • VIN detection is faster and more reliable on cold start

Notifications

  • Fixed: Unplug reminder notification now works on first install — the permission prompt was never shown unless you toggled the setting manually

Display

  • Screen stays awake while the app is in the foreground

This site uses Just the Docs, a documentation theme for Jekyll.