Navien, ESP32 Navilink interface

Hello,
Thank you for testing and investing so much time troubleshooting.

  1. Is there a known firmware-version-dependent variation in the checksum seed or packet framing for NPE-240A2 units?

I should admit, I am puzzled as I know countless examples of NPE240A2 working just fine (with my custom hardware and also with combination of rs485/atom boards). Can you share more about your configuration - single unit or cascade setup (I assume single), do you have the "real navilink" connected?

  1. Given the frame-splicing example above, is there a chance the receive state machine doesn't fully resynchronize after detecting a new 0xF7 marker mid-frame, especially with back-to-back packets on a busy bus?

I should check the code, but off my memory, we reject packets where the header/length does not match the number of bytes that follow - that should bringv the code to sync state even if there is a synch issue.

Can you collect and send a few raw traces - it would help to better understand what is going on.

Update: resolved — this was a stale/corrupted local build, not a 240A2 compatibility issue

Thanks for the quick reply and noting that countless examples are working with my setup. So before digging into raw traces, I did a clean-slate test: fresh directory, fresh git clone of this repo, no local edits at all, flashed exactly as-is.

Result: zero checksum errors, and every sensor value now reads correctly and matches the physical unit exactly:

Navien Controller Version >> '1.2'
Navien Panel Version >> '1.9'
Navien Device Type >> 'NPE2'
Navien DHW Set Temp >> 121.10 °F   (matches my actual 120°F setpoint)
Navien Error Code >> 0
Navien Error Level >> 0
Navien Recirculation Mode >> 'External Scheduled'

For context, my original build had gone through several rounds of manual external_components source-switching (local path ↔ git ↔ back to local again) while I was troubleshooting, plus a local checksum-bypass patch I'd added as a workaround. Somewhere in that process, something got stale or corrupted — possibly a cached build artifact, possibly a config paste error I didn't catch. Whatever it was, it's specific to my original working directory, not the repo or my hardware.

Configuration (confirmed working now):

  • Single unit, no cascade
  • No "real" NaviLink hardware — DIY M5Stack Atom Lite + Atomic RS485 Base only
  • Panel FW 1.9, Controller FW 1.2 — now correctly reported over UART too
  • 120Ω termination resistor on A/B (confirmed via multimeter the unit has no internal terminator)
  • Standard pinout: Pin 1 = ~+13V, Pin 2 = B−, Pin 3 = A+, Pin 5 = GND

Apologies for the noise — should have done a clean-slate test before assuming a model-specific bug. Everything's working great now. Thanks for building this — really appreciate it!

@htumanyan are you still planning to run a batch of these custom modules? 240a2 here and would love to buy & test one.