Skip to content

Commit 8ce9d1b

Browse files
committed
docs: rewrite the site for first-time installers; recolor to the brand mark
The docs had no beginner entry point. "Get Started" pointed at the wiring guide, which opens with a lethal-voltage warning and an ASCII terminal-block diagram, and the actual quick start lived in the README — off-site. Every guide was written for someone who already knew what a CCA, an MPPT, or PSRAM was. - New "Start Here" guide: what it does in plain terms, a glossary of the jargon the other pages assume, a shopping list, five numbered steps, and how to tell it's working. The hero now points here. - Sidebar regrouped by when you need something (Setting it up / Once it's running / Reference) instead of alphabetically, so nobody lands in the API tables mid-install. - Config Builder fields gained plain-language hints. It was 15 bare labels — "API encryption key" with no hint of what to do about it. The hints go INSIDE the JS-toggled wrappers (cca-ip-row, cca-mac-row, display-row) so they hide with their fields; wizard.js binds by ID only, contract intact. - Troubleshooting opens with the four problems people actually hit, in prose, ahead of the symptom tables. - Configuration / Web Server / TSDB now state up front whether you need to read them. TSDB retitled "Saving History to Flash". - Wiring answers the unspoken question — can this break my solar system? — before the DE/RE electrical detail. The TSDB cadence rationale (flash writes cutting I-cache on both cores, the ~40x MTTF change from coarsening to 30 min) moved into the reference section rather than being dropped with the rest of the simplification. Colors: the accent ramp was green and unrelated to anything. Now taken from the "Emitting" mark — accent-low is the optimizer body's silicon indigo verbatim, accent-high its busbar silver. Amber keeps its one meaning. Link text measures 11.4:1 dark / 8.5:1 light, both past WCAG AA. Site builds clean; starlightLinksValidator passes (the read-only wiring anchor was renamed, all three references updated). Claude-Session: https://claude.ai/code/session_01RgSnMCa3JQigphGnPbazdw
1 parent fa529a9 commit 8ce9d1b

11 files changed

Lines changed: 422 additions & 87 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Changed
11+
- **Docs rewritten for first-time installers.** A new **Start Here** guide covers what to buy, what the jargon means, and the five steps from parts on the desk to a live dashboard — the "Get Started" button used to drop you into a high-voltage warning and a terminal-block diagram. The sidebar is now ordered by when you need something rather than alphabetically, the Config Builder explains what each field is for, and the reference-heavy pages say up front whether you need to read them. No behaviour changed.
12+
- **Docs site recoloured to the brand mark.** Link and accent colours moved from green to the mark's silicon indigo and busbar silver; amber keeps its one meaning — this part is live.
1113
- **New brand mark.** The green-to-blue tile is replaced by an optimizer emitting a telemetry frame, in silicon indigo and amber. It's drawn at three sizes rather than scaled — the device favicon, the device UI sidebar, and the docs — so it stays legible in a browser tab. The docs site had no logo or favicon configured before and now carries the same mark the device serves.
1214

1315
### Fixed

site/astro.config.mjs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,34 @@ export default defineConfig({
3434
social: [
3535
{ icon: 'github', label: 'GitHub', href: 'https://github.com/RAR/esphome-tigomonitor' },
3636
],
37+
// Ordered by when a first-time installer needs it, not alphabetically:
38+
// setup you can't skip, then the things you reach for once it's running,
39+
// then reference nobody needs to read to get working.
3740
sidebar: [
3841
{
39-
label: 'Guides',
42+
label: 'Setting it up',
4043
items: [
41-
{ label: 'Configuration', link: '/guides/configuration/' },
44+
{ label: 'Start Here', link: '/guides/getting-started/' },
4245
{ label: 'Wiring', link: '/guides/wiring/' },
43-
{ label: 'Reducing Frame Loss', link: '/guides/uart-optimization/' },
44-
{ label: 'Web Server & API', link: '/guides/web-server/' },
45-
{ label: 'TSDB Integration', link: '/guides/tsdb-integration/' },
46+
{ label: 'Config Builder', link: '/config-builder/' },
47+
],
48+
},
49+
{
50+
label: 'Once it’s running',
51+
items: [
4652
{ label: 'Home Assistant', link: '/guides/home-assistant/' },
4753
{ label: 'Troubleshooting', link: '/guides/troubleshooting/' },
54+
{ label: 'Reducing Frame Loss', link: '/guides/uart-optimization/' },
55+
],
56+
},
57+
{
58+
label: 'Reference',
59+
items: [
60+
{ label: 'Configuration Options', link: '/guides/configuration/' },
61+
{ label: 'Web Server & API', link: '/guides/web-server/' },
62+
{ label: 'Saving History to Flash', link: '/guides/tsdb-integration/' },
4863
],
4964
},
50-
{ label: 'Config Builder', link: '/config-builder/' },
5165
],
5266
}),
5367
],

site/src/components/ConfigWizard.astro

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
---
88
<div class="tigo-wizard not-content">
99
<p class="tw-intro">
10-
Fill in your board and network details, then copy or download a ready-to-flash
11-
ESPHome YAML. Everything runs in your browser — nothing is uploaded.
10+
Answer the questions below and this writes your setup file for you — no YAML to
11+
learn. Save the result next to your ESPHome install and flash it. Everything runs
12+
in your browser; nothing is uploaded anywhere. Not sure what any of this is?
13+
Read <a href="/esphome-tigomonitor/guides/getting-started/">Start Here</a> first.
1214
</p>
1315

1416
<form id="wizard" class="tw-form">
@@ -23,46 +25,52 @@
2325

2426
<fieldset class="tw-card">
2527
<legend>Device &amp; UART</legend>
26-
<label class="field"><span>Device name</span><input id="name" value="tigo-server" /></label>
28+
<label class="field"><span>Device name</span><input id="name" value="tigo-server" /><small class="hint">What it'll be called on your network. Lowercase letters and dashes only.</small></label>
2729
<div class="grid2">
28-
<label class="field"><span>Number of devices</span><input id="num-devices" type="number" min="1" /></label>
29-
<label class="field"><span>Update interval</span><input id="update-interval" value="30s" /></label>
30-
<label class="field"><span>UART TX pin</span><input id="uart-tx" /></label>
31-
<label class="field"><span>UART RX pin</span><input id="uart-rx" /></label>
30+
<label class="field"><span>Number of devices</span><input id="num-devices" type="number" min="1" /><small class="hint">How many panels you have. Round up a little.</small></label>
31+
<label class="field"><span>Update interval</span><input id="update-interval" value="30s" /><small class="hint">How often readings go to Home Assistant.</small></label>
32+
<label class="field"><span>UART TX pin</span><input id="uart-tx" /><small class="hint">Already correct for your board.</small></label>
33+
<label class="field"><span>UART RX pin</span><input id="uart-rx" /><small class="hint">Leave these alone unless you wired it yourself.</small></label>
3234
</div>
3335
</fieldset>
3436

3537
<fieldset class="tw-card">
3638
<legend>Networking</legend>
37-
<label class="field"><span>Wi-Fi SSID</span><input id="wifi-ssid" placeholder="YOUR_WIFI_SSID" /></label>
39+
<label class="field"><span>Wi-Fi SSID</span><input id="wifi-ssid" placeholder="YOUR_WIFI_SSID" /><small class="hint">Your home Wi-Fi network name, exactly as it appears.</small></label>
3840
<label class="field"><span>Wi-Fi password</span><input id="wifi-pass" placeholder="YOUR_WIFI_PASSWORD" /></label>
39-
<label class="field"><span>Static IP <em>(optional)</em></span><input id="static-ip" /></label>
41+
<label class="field"><span>Static IP <em>(optional)</em></span><input id="static-ip" /><small class="hint">Leave blank and your router picks one. Fill it in if you want the dashboard always at the same address.</small></label>
4042
</fieldset>
4143

4244
<fieldset class="tw-card">
4345
<legend>CCA &amp; extras</legend>
46+
<p class="notes">
47+
Optional. These let the device learn your panels' real names instead of
48+
showing codes like "Module 4F2A". You can also type names in by hand later.
49+
</p>
4450
<label class="field">
4551
<span>CCA source</span>
4652
<select id="cca">
4753
<option value="none">None</option>
4854
<option value="http">HTTP (older firmware)</option>
4955
<option value="ble">Bluetooth (4.0.4+)</option>
5056
</select>
57+
<small class="hint">How to reach your Tigo box. Pick Bluetooth if its firmware is 4.0.4 or newer — those refuse network requests.</small>
5158
</label>
52-
<label class="field" id="cca-ip-row"><span>CCA IP</span><input id="cca-ip" /></label>
53-
<label class="field" id="cca-mac-row"><span>CCA Bluetooth MAC</span><input id="cca-mac" placeholder="04:C0:5B:XX:XX:XX" /></label>
54-
<label class="check"><input type="checkbox" id="cloud" /> <span>Enable Tigo cloud import</span></label>
55-
<label class="check" id="display-row"><input type="checkbox" id="display" /> <span>Include display (AtomS3R-Display)</span></label>
59+
<label class="field" id="cca-ip-row"><span>CCA IP</span><input id="cca-ip" /><small class="hint">Your Tigo box's address on your network — check your router's device list.</small></label>
60+
<label class="field" id="cca-mac-row"><span>CCA Bluetooth MAC</span><input id="cca-mac" placeholder="04:C0:5B:XX:XX:XX" /><small class="hint">A starting guess is fine — the device can search for your CCA and let you pick it.</small></label>
61+
<label class="check"><input type="checkbox" id="cloud" /> <span>Enable Tigo cloud import<small class="hint">Pulls the panel layout your installer set up, using your Tigo account.</small></span></label>
62+
<label class="check" id="display-row"><input type="checkbox" id="display" /> <span>Include display (AtomS3R-Display)<small class="hint">Only if your board has a screen on it.</small></span></label>
5663
</fieldset>
5764

5865
<fieldset class="tw-card">
5966
<legend>Security</legend>
60-
<label class="check"><input type="checkbox" id="use-secrets" checked /> <span>Generate a <code>secrets.yaml</code></span></label>
67+
<label class="check"><input type="checkbox" id="use-secrets" checked /> <span>Generate a <code>secrets.yaml</code><small class="hint">Keeps your passwords in a separate file. Recommended.</small></span></label>
6168
<label class="field">
6269
<span>API encryption key</span>
6370
<span class="with-btn"><input id="api-key" /><button type="button" id="gen-key" class="btn-secondary">Generate</button></span>
71+
<small class="hint">Lets Home Assistant talk to the device securely. Click Generate — you don't need to understand it, just don't lose it.</small>
6472
</label>
65-
<label class="field"><span>OTA password</span><input id="ota-pass" value="changeme" /></label>
73+
<label class="field"><span>OTA password</span><input id="ota-pass" value="changeme" /><small class="hint">Needed to update the firmware over Wi-Fi later. Change it from the default.</small></label>
6674
</fieldset>
6775
</form>
6876

@@ -178,12 +186,24 @@
178186
}
179187
.tigo-wizard input::placeholder { color: var(--sl-color-gray-4); }
180188

189+
/* Plain-language help under a field. Deliberately quiet — it should read as
190+
an aside to someone who needs it and be skippable by someone who doesn't. */
191+
.hint {
192+
font-size: var(--sl-text-xs);
193+
line-height: 1.45;
194+
color: var(--sl-color-gray-3);
195+
}
196+
/* Checkbox hints sit inside the label's <span>, so they need to break the line. */
197+
.check .hint { display: block; margin-top: 0.15rem; }
198+
181199
.check {
182-
display: flex; align-items: center; gap: 0.55rem;
200+
/* flex-start, not center: every checkbox here carries a two-line hint, so
201+
the box must align to the first line rather than the block's midpoint. */
202+
display: flex; align-items: flex-start; gap: 0.55rem;
183203
margin: 0.85rem 0 0; cursor: pointer;
184204
font-size: var(--sl-text-sm); color: var(--sl-color-white);
185205
}
186-
.check input[type=checkbox] { width: 1.05rem; height: 1.05rem; flex: none; accent-color: var(--sl-color-accent); }
206+
.check input[type=checkbox] { width: 1.05rem; height: 1.05rem; flex: none; margin-top: 0.15rem; accent-color: var(--sl-color-accent); }
187207
.check code { font-size: 0.9em; }
188208

189209
.with-btn { display: flex; gap: 0.5rem; }

site/src/content/docs/guides/configuration.md

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,34 @@
22
title: Configuration Guide
33
---
44

5-
Complete YAML reference for the ESPHome Tigo Monitor component — every option on the `tigo_monitor` and `tigo_server` platforms, the sensors they expose, and the ESP-IDF/PSRAM settings the firmware needs. New here? Start with the [Quick Start in the README](https://github.com/RAR/esphome-tigomonitor#quick-start), then come back for the details.
5+
This is the full list of every setting, for when you need to look one up.
6+
7+
:::tip[You probably don't need to read this]
8+
The **[Config Builder](/esphome-tigomonitor/config-builder/)** writes a working
9+
setup file for you, and the settings people actually change day-to-day can be
10+
changed on the device itself without touching any file — see
11+
[the handful that matter](#the-settings-most-people-change) below.
12+
13+
Setting up for the first time? Go to
14+
**[Start Here](/esphome-tigomonitor/guides/getting-started/)** instead.
15+
:::
16+
17+
## The settings most people change
18+
19+
Everything else on this page has a sensible default. These five are the ones
20+
worth knowing about:
21+
22+
| Setting | What it does |
23+
|---------|--------------|
24+
| `number_of_devices` | How many panels to track. Set it to your panel count (or a bit more). |
25+
| `power_calibration` | Nudges all power readings up or down if they don't match your inverter. `1.05` = +5%. |
26+
| `reset_at_midnight` | Starts the daily energy and peak-power figures fresh each night. |
27+
| `inverters:` | Groups your strings under inverter names so the dashboard mirrors your real layout. |
28+
| `api_token` / `web_password` | Passwords for the dashboard and API. Worth setting. |
29+
30+
The first three can be changed **live in the web dashboard** (Tools → Device
31+
Configuration) without rebuilding or reflashing anything — handy for tuning
32+
`power_calibration` against your inverter's own display.
633

734
## Contents
835

@@ -66,21 +93,30 @@ inverters:
6693
- "MPPT 4"
6794
```
6895

69-
MPPT labels must match CCA labels exactly. The web dashboard shows hierarchy: Inverter → MPPT → String → Panel.
96+
MPPT labels must match your CCA's labels exactly. The dashboard then shows your array the way it's really built: Inverter → MPPT → String → Panel.
97+
98+
#### Renaming things without editing the file
7099

71-
#### Renaming from the UI
100+
You can rename inverters and strings directly in the dashboard — click the ✎ next
101+
to any label on the Topology page. The new name is saved on the device (in NVS,
102+
its small settings memory) and survives reboots, so you can switch to friendly
103+
names like "South Roof" without rebuilding your config.
72104

73-
Inverter and string display names are editable from the Topology view (✎ next to each label). Overrides are persisted to NVS, keyed by canonical YAML/CCA name. The YAML-defined `name:` is still the immutable identity used everywhere internally; the override only affects display. Empty override = falls back to canonical name. Useful when you want friendlier names ("South Roof") without redeploying YAML.
105+
The name in your YAML stays the real identity behind the scenes; the rename only
106+
changes what's displayed. Clear it to go back to the original.
74107

75-
#### Per-string panel nameplate (rating)
108+
#### Telling it how big your panels are
76109

77-
Click the rating pill in the Topology view to set the per-panel nameplate watts for a string (uint16, 0 = unset). Persisted to NVS. When set:
110+
Click the rating pill on the Topology page to enter your panel's rated watts —
111+
the number on the sticker, e.g. 400. Saved on the device. Once set:
78112

79-
- Panel tiles show "% of rated" alongside watts.
80-
- Health classification uses rating-vs-power instead of median-vs-peer (with a "string sleeping" check at <5% of total nameplate so dawn doesn't paint everything red).
81-
- String aggregate roll-up shows output as % of total nameplate.
113+
- Each panel shows what percentage of its rating it's currently making.
114+
- Underperforming panels are judged against that rating rather than against their
115+
neighbours, which is more reliable. (At dawn, when the whole string is below 5%
116+
of rated, it's marked as sleeping rather than as broken.)
117+
- Each string shows its total output as a percentage of what it could be making.
82118

83-
Falls back to median-based behavior when unset.
119+
Leave it unset and panels are compared against each other instead.
84120

85121
### Midnight Reset
86122

@@ -145,6 +181,10 @@ tigo_server:
145181

146182
### CCA over Bluetooth (`cca_source: ble`)
147183

184+
**In plain terms:** newer Tigo CCAs refuse to answer questions over your home
185+
network. This option asks them over Bluetooth instead, so you can still pull your
186+
panel names and layout across. If your CCA is on older firmware you don't need it.
187+
148188
Tigo CCA firmware 4.0.4+ (incl. 4.0.5-ct) locks the local HTTP API, so the CCA Info page can instead source data over Bluetooth. With `cca_source: ble` and a `ble_client_id`, `tigo_server` becomes the BLE client and talks the CCA's `mobile_api` over GATT. The link is opened on demand and dropped after each read so the Tigo phone app can still connect (the CCA allows one BLE central at a time).
149189

150190
```yaml
@@ -182,6 +222,11 @@ The YAML value is the **default**. A stored value overrides it until you press *
182222

183223
### Tigo cloud import (`cloud_import: true`)
184224

225+
**In plain terms:** your installer already typed your panel names and layout into
226+
Tigo's system. This pulls that work down so you don't have to retype it. You sign
227+
in once with your normal Tigo account; only the resulting access token is kept on
228+
the device, never your password.
229+
185230
When the CCA's local HTTP is locked, the panel names + string/MPPT/inverter layout can be recovered from Tigo's cloud (the same API the mobile app uses). Enter your Tigo account in the **Configure** modal on the Tigo Cloud page — **only the resulting bearer token is persisted to NVS, never the password**. The page also shows Tigo's own per-equipment health/status/history; layout import is a button on the Topology page. HTTPS is verified against the mbedTLS certificate bundle, which `cloud_import` enables automatically.
186231

187232
### Authentication
@@ -461,7 +506,7 @@ Check the low-water mark at any time — `heap_min_free` in `curl http://<device
461506

462507
## On-Flash History (esp_tsdb)
463508

464-
Persistent time-series history is opt-in via two extra dependencies and a custom partition table. See [TSDB Integration](/esphome-tigomonitor/guides/tsdb-integration/) for the full schema, sizing, and query reference.
509+
Persistent time-series history is opt-in via two extra dependencies and a custom partition table. See [Saving history to flash](/esphome-tigomonitor/guides/tsdb-integration/) for the full schema, sizing, and query reference.
465510

466511
Quick form (8 MB AtomS3R):
467512

0 commit comments

Comments
 (0)