noise 8dafce7dfe Docs: reflect this session's findings across the repo
- top-level README.md (new): system overview, subsystem map, skills pointer,
  notable findings.
- eg4battery README/NOTES: 3 -> 6 packs (pack 6 oddball 0x01/115200); SoC drift
  + calibration section; closed-loop comms evaluated and rejected (loses per-pack
  telemetry, no native protocol, doesn't fix drift); how to force a grid charge
  via output-priority SUB.
- LVX6048 README: closed-loop pending item -> resolved decision; new "SoC
  calibration & known firmware quirks" section (POP single-digit/POP01, MCHGC
  charge-lock, re_discharge=re-discharge can't exceed float, PIRI lag, powermon
  adhoc wedge); skills pointer.
- lvx-control README: POP encoding fix, POP crc-but-applies quirk, verify-by-
  behavior, grid-charge-via-SUB usage.
- troubleshoot-inverter skill: corrected the stale "dead string per inverter"
  claim — both strings healthy; low PV is tilt/heat/shade/curtailment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:46:02 -04:00
2026-04-24 16:34:10 -04:00
2026-05-01 16:56:37 -04:00
2026-04-24 16:34:10 -04:00

solar — home power monitoring & control

Monitoring, control, and calibration tooling for an off-grid-leaning solar + storage install, all published to one Home Assistant MQTT broker (10.0.0.41).

The system

6× EG4 LifePower4 v2 packs ──RS485 (1 FTDI each)──┐
2× MPP Solar LVX6048 inverters ──USB-HID/PI18──────┤  monitoring Pi  ──MQTT──► Home Assistant
1× OpenEVSE charger (10.0.0.249) ───────────────────┘  (daemons)            10.0.0.41:1883
  • 14.4 kW PV (36×400 W, 4×9s strings, 9s2p per inverter, 45° south) → 2 paralleled LVX6048 inverters → ~30 kWh EG4 LifePower4 bank (6× 100 Ah, 16S).

Subsystems

Dir What Entities
LVX6048/ 2 inverters via powermon (PI18/USB) + lvx-flash settings tool + lvx-control HA→PI18 bridge lvx6048_{1,2}_*
eg4battery/ 6 battery packs via RS485/Modbus daemon lifepower4_{1..6}_*
openevse/ EV charger HA-discovery publisher openevse_*
battery/ legacy V1 protocol decoder (historical)

Each subsystem has its own README.md / Install.md / NOTES.md.

Agent skills

Agent-runnable skills for monitoring, troubleshooting, and calibration live in .claude/skills/ — start with .claude/skills/REFERENCE.md (system map, real HA entity ids, known firmware quirks, action policy):

  • solar-health-check — whole-system sweep + cross-checks + R/Y/G verdict
  • troubleshoot-inverter / troubleshoot-battery — subsystem deep-dives
  • power-usage — load vs PV vs grid vs battery balance
  • calibration-charge — re-anchor drifted EG4 SoC via a full charge
  • helpers: lib/solar-snapshot (live MQTT), lib/ha-history (HA recorder lookback), lib/grid-cal-monitor (supervised grid calibration with auto-revert)

Notable findings (see per-subsystem docs + the skills' REFERENCE)

  • EG4 SoC drifts (counters never re-anchor without a full charge) → fixed by the calibration-charge skill.
  • "Low" PV is mostly geometry + curtailment, not a fault — both strings are healthy (~16 A @ 300 V at clear-noon peak); the shortfall is 45° tilt, heat, trees, and the battery charge cap throttling midday harvest.
  • LVX6048 firmware quirks: PI18 POP is single-digit (POP1, not POP01); MCHGC locked while charging; force a full grid charge via output-priority SUB, not the voltage thresholds; PIRI readback lags ~5 min (verify by behavior).
Description
No description provided
Readme 64 MiB
Languages
Python 91.7%
Shell 7.2%
Dockerfile 1.1%