You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 8a8f630
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/discovery-catalogue.md
+18-6Lines changed: 18 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -58,7 +58,7 @@ restart Predbat, or read a fresh debug dump, to see anything reported later than
58
58
59
59
| Section | What it holds |
60
60
| ------- | -------------- |
61
-
|`inverters`| Battery inverters and PV-only devices - type, composition (direct/gateway/EMS), which functions it serves (`solar`, `battery`), and - where the reporter has a table mapping Predbat's controls to its entities (GivTCP today) - those entities |
61
+
|`inverters`| Battery inverters and PV-only devices - type, composition (direct/gateway/EMS), which functions it serves (`solar`, `battery`), its behaviour (`capabilities`), its fixed ratings under Predbat's own setting names, and every setting Predbat's automatic configuration binds for it (`entities`)|
62
62
|`chargers`| EV chargers, cross-linked to the cars they serve |
63
63
|`cars`| Electric vehicles, cross-linked to the charger that charges them |
64
64
|`meters`| Electricity (and gas) supply points, each with a direction (`import`/`export`) and, where known, a nested tariff record |
@@ -70,8 +70,8 @@ their automatic configuration treats every discovered inverter as a battery inve
70
70
records follow that configuration - `solar` and `battery` on every inverter - rather than
71
71
evidence about the hardware, and Solis's `solar` works the same way, since every Solis inverter
72
72
is configured as a PV source. A PV-only unit that has been configured as a battery inverter will
73
-
usually show it in its ratings: `battery` among its functions, but no `battery_kwh` or
74
-
`battery_capacity_ah`.
73
+
usually show it in its record: `battery` among its functions, but no `battery_capacity_ah` rating
74
+
and no `soc_max` entity.
75
75
76
76
No reporter (GivTCP, GE Cloud, Octopus, Ohme, Solcast, Fox, AlphaESS, Solis, Deye, Sunsynk) populates `programmes` yet - it is part of
77
77
the schema for a future Axle/VPP-style reporter - so today it is always present as an empty list
@@ -206,11 +206,12 @@ class* that value gets:
206
206
| --------- | ------- | --------- |
207
207
|`hardware_ids`| Short strings | Clear |
208
208
|`info`| Short strings, no `@`| Clear |
209
-
|`ratings`| Numbers and booleans | Clear |
209
+
|`ratings`| Numbers and booleans, keyed by Predbat's setting name where one exists (`inverter_limit`, `export_limit`, `import_limit`, `battery_rate_max`, `soc_max`, `battery_min_soc`)| Clear |
210
210
|`coverage`| A number/boolean, or a list of lowercase tokens | Clear |
211
-
|`entities`| An entity descriptor (`entity_id` plus typed fields like `domain`, `unit`, `min`/`max`) | Clear |
211
+
|`entities`| An entity descriptor: `access` (`rw` or `r`, required), exactly one of `entity_id` or a fixed `value`, and typed fields such as `domain`, `unit`, `format`, `min`/`max`, `invert`| Clear |
212
+
|`capabilities`|`true`/`false` for the seven behaviour keys of an inverter definition (`support_charge_freeze`, `support_discharge_freeze`, `support_feedin_first`, `can_span_midnight`, `charge_discharge_with_rate`, `charge_control_immediate`, `target_soc_used_for_discharge`) | Clear |
212
213
|`account_ids`| Any scalar | Pseudonymised |
213
-
|`functions` / `capabilities` / `flags` / `effects`| Lists of short lowercase tokens | Clear |
214
+
|`functions` / `flags` / `effects`| Lists of short lowercase tokens | Clear |
214
215
215
216
A value that does not fit its container's declared type is silently **dropped**, not coerced and
216
217
not raised as an error - a string offered to `ratings`, or free text over 64 characters offered to
@@ -220,6 +221,17 @@ introduce, because a container that only accepts numbers structurally cannot car
220
221
address or a pasted credential, however the schema grows. Choose whichever container matches the
221
222
*kind* of fact you are reporting, not the one that happens to accept the value you have.
222
223
224
+
### Inverter records and inverter definitions
225
+
226
+
An inverter record holds enough to rebuild that inverter's definition - the per-type table
227
+
(`INVERTER_DEF`) that tells Predbat how to drive it. `capabilities` carries its behaviour; whether it
228
+
has a reserve, a target SoC, charge/discharge enable switches, idle times or a timed pause follows
229
+
from which settings `entities` binds to a writable (`rw`) entity; and protocol detail such as the time
230
+
format or whether the charge rate is set in watts or amps is read from those entities' descriptors.
231
+
A setting Predbat replaces with a placeholder for this inverter type - SolisCloud's `reserve`, say - is
|`capabilities`|vocabulary | Recorded not acted on: `schedule`, `pause_mode`, `pause_slots`, `target_soc`, `discharge_target`, `charge_rate_power`, `charge_rate_percent`, `soh`|
158
+
|`inverter_limit`, `export_limit`, `import_limit`, `battery_rate_max`, `soc_max`, `battery_min_soc`, `modules`, `dod_percent`, `nominal_voltage`|`ratings`| Renamed to Predbat setting names on 24 Sep 2026 (was `battery_kwh`, `max_charge_w`) - see `2026-09-24-discovery-inverter-record-vocabulary-design.md`|
159
+
|`capabilities`|dict of bool | Superseded on 24 Sep 2026: the seven `INVERTER_DEF` behaviour keys as `True`/`False`, not tokens - see `2026-09-24-discovery-inverter-record-vocabulary-design.md`|
160
160
|`entities`|`entities`| Keyed by Predbat standard name |
161
161
162
162
**Cross-links may dangle, and a component must never invent a record to resolve one.**
0 commit comments