Files
goodwe-addon/FIELD-GUIDE.md
adminandClaude Opus 5.5 29ca9b5157
checks / unit (pull_request) Successful in 8m8s
DOC-1: operator docs name the real P1 entity and a roster that starts
- DOCS.md / config.yaml: the watchdog's P1 age entity is
  sensor.goodwe_p1_sample_age (device "GoodWe" + "P1 sample age", as
  app/mqtt.py announces and the live install recorded), not
  sensor.p1_sample_age_s.
- DOCS.md: the inverters: example and per-entry table carry the required
  bms_soc_floor (and capacity_kwh); config.yaml's schema comment says four
  required keys, not three.
- Field guide: marked v0.1.0/outdated; slew_w row no longer recommends the
  1000 W that SAFETY-39 now refuses. HTML regenerated; the PDF is NOT
  rebuilt (no Chrome here). README/DOCS pointers fixed.
- test_docs.py: the documented roster must pass app/validate.py and the
  schema's per-entry keys; the documented entity id must equal the id
  composed from app/mqtt.py; the wrong id may appear in no shipped doc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BwRLw7eKYj2byVdwB6kbjU
2026-09-24 23:24:50 +02:00

1.9 KiB

Field Guide

The guide technicians carry is the PDF:

docs/GoodWe-RS485-Field-Guide.pdf — 10 pages, A4, print it double-sided.

⚠️ Outdated: it is v0.1.0. Its slew_w row is corrected in build_guide.py and field-guide.html, but the PDF has not been rebuilt (see below). Where the guide disagrees with goodwe_controller/DOCS.md, DOCS.md wins.

It covers, in the order the work is done: pre-visit checks, hardware, firmware, add-on install and configuration, how to read the Web UI, the six commissioning gates, the e-stop (and the statement a site without one must sign), proving a maintenance cycle, handover with a sign-off sheet, and troubleshooting.

Editing it

The text lives in docs/build_guide.py — deliberately one source, so a Markdown copy cannot drift from the PDF someone is holding in a cellar.

python3 docs/build_guide.py     # regenerates field-guide.html and the PDF

Requires Chrome or Chromium (used headless for print-to-PDF); CHROME in the script is a Windows path, so edit it on any other machine. Screenshots live in docs/img/ and are base64-embedded, so field-guide.html is standalone.

⚠️ Every section must stay under the A4 printable height (1039 px at 96 dpi with the configured margins). Chrome silently spills an over-long section onto a second page, and the pagination stops matching the step numbers. After editing, open field-guide.html and check:

document.querySelectorAll('.page').forEach(el =>
  console.log(el.getBoundingClientRect().height))   // each must be < 1039

The PDF should always come out at exactly one page per section.

Regenerating the screenshots

docs/img/ui-running.png and ui-notready.png are real captures of the add-on's own Web UI, taken by running it against stub data. If the UI changes, retake them — a field guide showing a screen that no longer exists is worse than one with no screenshots at all.