diff --git a/.claude/skills/REFERENCE.md b/.claude/skills/REFERENCE.md index 4623617..18805e1 100644 --- a/.claude/skills/REFERENCE.md +++ b/.claude/skills/REFERENCE.md @@ -56,8 +56,11 @@ slug and is inconsistent across commands, so you must use the real ids, e.g.: - device mode: `sensor.lvx6048_lvx6048_{1,2}_device_mode` (device slug `lvx6048`) - fault code: `sensor.lvx6048_0{1,2}_lvx6048_{1,2}_fault_code` (slug `lvx6048_01`/`_02`) - PV/batt/load: `sensor.lvx6048_lvx6048_1_{mppt1_input_power,mppt1_input_voltage,battery_voltage,ac_output_active_power}` -- EG4 packs follow the same doubling, e.g. `sensor.lifepower4_*`. When unsure, list - them: `curl -s -H "Authorization: Bearer $(cat ~/.config/ha/token)" $HA/api/states +- EG4 packs are TRIPLE-prefixed (even worse), e.g. + `sensor.eg4_lifepower4_lifepower4_1_lifepower4_1_pack_current` — device slug + `eg4_lifepower4_lifepower4_1` + object `lifepower4_1_pack_current`. Always discover, + don't hand-construct. When unsure, list them: + `curl -s -H "Authorization: Bearer $(cat ~/.config/ha/token)" $HA/api/states | python3 -c 'import sys,json;[print(s["entity_id"]) for s in json.load(sys.stdin) if "lvx6048" in s["entity_id"]]'` Auth: reads a long-lived token from `~/.config/ha/token` (mode 600) or `$HA_TOKEN` — never on the command line, never hardcoded. Base URL `$HA_URL` else diff --git a/LVX6048/lvx-flash/profiles/eg4-lp4-v2.yaml b/LVX6048/lvx-flash/profiles/eg4-lp4-v2.yaml index 26ef672..1a48dd5 100644 --- a/LVX6048/lvx-flash/profiles/eg4-lp4-v2.yaml +++ b/LVX6048/lvx-flash/profiles/eg4-lp4-v2.yaml @@ -1,6 +1,8 @@ # LVX6048 settings profile — EG4 LifePower4 v2 LiFePO4 bank, open-loop. # -# Designed for: 3× EG4 LP4 v2 100 Ah in parallel (300 Ah, ~15.4 kWh). +# Designed for: 6× EG4 LP4 v2 100 Ah in parallel (600 Ah, ~30.7 kWh). +# (Was 3 packs originally; 3 more added — commit 38ac9ca. Values below are +# unchanged and remain correct for 6 packs — they're only MORE conservative now.) # Apply identically to both inverters in a parallel pair: # sudo systemctl stop powermon.service powermon2.service # ./flash.py apply --device /dev/lvx6048-1 --profile profiles/eg4-lp4-v2.yaml --confirm @@ -17,9 +19,14 @@ # cutoff 48.0 V = 3.000 V/cell — inverter hard shutdown floor (BMS still protects below) # Conservative off-grid policy: keep grid as a soft top-up, let solar do the bulk work. # -# Current rationale (300 Ah bank): -# 60 A/unit × 2 units = 120 A combined ≈ 0.4 C — well under bank's continuous spec -# 30 A/unit MUCHGC keeps grid-charging conservative (60 A combined) +# Current rationale (600 Ah bank): +# 60 A/unit × 2 units = 120 A combined ≈ 0.2 C — very gentle on a 600 Ah bank. +# 30 A/unit MUCHGC keeps grid-charging conservative (60 A combined). +# NOT raised to 80 A/unit (the enum max): charging is not clipping — at solar noon +# on a clear day (2026-06-24, ~5.8 kW PV) the bank drew only 71 A of the 120 A cap. +# The real harvest limiter is PV production (~5.8 kW seen vs 14.4 kW nameplate — +# the suspected down strings), not the charge ceiling. Revisit only if PV is +# restored and midday charge current is seen pinned at ~120 A below ~90% SoC. # enum: AGM | FLOODED | USER # USER required to enable the per-cell custom voltages below.