- 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
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.