Grid calibration: correct lever is output-priority SUB, add grid-cal-monitor
Discovered live 2026-06-25 driving an actual grid calibration: forcing a full grid charge is done via OUTPUT PRIORITY, not voltage thresholds. - SBU (everyday) won't grid-charge unless the bank is critically low; setting charger_priority=solar_and_utility alone does nothing at 52V. - SUB (output_priority=solar_utility_battery) runs loads on grid AND charges the battery to full. Combined with charger_priority=solar_and_utility, grid charging engages (device_mode->Hybrid/Line, line_dir->input, pack current jumps to ~120A). - Both POP/PCP set via lvx-control (all-mode-safe, atomic, no flash/USB). Revert POP->solar_battery_utility, PCP->solar_first when done. The re_discharge/flash.py approach is dead (firmware NAKs stop_charge>float); profile eg4-lp4-v2-calibration.yaml marked DEPRECATED. - grid-cal-monitor: supervises a SUB grid charge, safety aborts (cell>3.60V/ temp>45C), detects re-anchor (all 6 packs ->100%), auto-reverts POP+PCP (trap). - calibration-charge skill §3 rewritten to the POP lever. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -53,18 +53,26 @@ Record and check:
|
||||
curve to bulk 56.4 V and holds absorption on its own — exactly the clean termination
|
||||
the BMS needs to re-anchor. No flash, no risk. Just monitor §4 and verify §5; skip §3.
|
||||
This is the method to default to.
|
||||
- **Grid-assist — ADVANCED / UNVALIDATED:** the field flash.py calls
|
||||
`stop_charge_voltage` is really `battery_re_discharge_voltage`; the firmware **NAKs
|
||||
`0`/"Full"** (confirmed 2026-06-24 — both units rejected `BUCD480,000`). The corrected
|
||||
lever raises it 54.0 → 56.0 so grid charges higher, but it may band-oscillate near
|
||||
56 V instead of holding a clean absorption, so it is **not proven** to re-anchor.
|
||||
Only use as a supervised experiment when solar can't reach full and you accept it
|
||||
may not fully work. Needs §3.
|
||||
- **Grid-assist — for cloudy days (CORRECT lever, validated 2026-06-25):** force a full
|
||||
grid charge by switching **output priority to SUB**, NOT by touching voltage
|
||||
thresholds. In the everyday SBU mode the inverter won't grid-charge unless the bank is
|
||||
critically low; SUB makes it run loads on grid AND charge the battery to full. Both
|
||||
setters go through lvx-control (all-mode-safe, atomic, no flash). Needs §3.
|
||||
(Do NOT use `re_discharge`/flash.py — firmware NAKs it; see memory
|
||||
`project_lvx6048_grid_charge_lever`.)
|
||||
|
||||
## 3. Grid-assist (ADVANCED): apply the calibration profile (USER-CONFIRMED setter change)
|
||||
Run `flash.py diff` FIRST and confirm the ONLY change is `stop_charge_voltage 54.0 ->
|
||||
56.0` before applying. If any apply NAKs, the cluster is unchanged (flash.py aborts on
|
||||
first failure) — fall back to solar-only.
|
||||
## 3. Grid-assist: enable grid charging via output priority (USER-CONFIRMED)
|
||||
Publish via lvx-control (atomic to both units, no powermon stop):
|
||||
```bash
|
||||
B=... # broker creds from ~/.config/powermon/powermon.yaml
|
||||
mosquitto_pub ... -t solar/control/lvx6048/charger_priority -m solar_and_utility
|
||||
mosquitto_pub ... -t solar/control/lvx6048/output_priority -m solar_utility_battery # SUB
|
||||
```
|
||||
Confirm within ~1 min: `device_mode` -> Hybrid/Line, `line_power_direction` -> input,
|
||||
pack current jumps. Verify BOTH units match (output_source_priority) — parallel sync.
|
||||
Then run `lib/grid-cal-monitor` (detached) to drive/verify/auto-revert; it reverts
|
||||
`output_priority->solar_battery_utility` + `charger_priority->solar_first` on completion
|
||||
(trap-guaranteed). Skip §3 entirely for the solar-only method.
|
||||
Mirror to BOTH inverters (parallel cluster — mismatched settings throw fault 86).
|
||||
`flash.py apply` stops powermon for exclusive USB, so MQTT telemetry pauses briefly.
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user