UX-13 P5: Dutch text, STYLE check, DOCS screenshots, period editor
- app/ui_text/nl.json and app/uitext.py: every page word in Dutch, English fallback per key; the page picks by browser language. Home's sentences move into ui_text `home_words`, so /status?lang=nl builds them in Dutch. - test_ui_text.py: EN/NL key and placeholder parity, STYLE limits, jargon lists for both languages, no inline details, untranslated Dutch caught. Shared rules moved unchanged to tools/style_rules.py. - tools/ux13_screenshots.sh/.py: DOCS screenshots from the demo fixtures in headless Chromium; docs/img/ux13/. Battery modes (P3): no screenshot. - "Other time windows": a list editor (ui.periods) that builds static_profile and names bad times, empty prices, overlaps and gaps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,8 @@ own validator run over them.
|
||||
The wizard edits the page model one step at a time and saves it through
|
||||
uipage.to_options(), like the Installer view. `blobs()` walks each step's
|
||||
choices (meter source and sign, one to three inverters, solar rows, every
|
||||
contract and price source, region, peak limit, shadow mode) from a new
|
||||
contract and price source, time windows (P5), region, peak limit, shadow
|
||||
mode) from a new
|
||||
install as shipped, one with a power request entity, and the TEST-23 sites, and keeps what the shipped validator
|
||||
accepts, because the wizard saves nothing it refuses. test_setup.py checks
|
||||
the set; `--supervisor` runs it through Supervisor 2026.08.0's `AppOptions`
|
||||
@@ -103,6 +104,29 @@ PRICES = {
|
||||
"csv": {"ui.contract": "dynamic", "price_provider": "manual_csv",
|
||||
"price_csv_path": "/share/prices.csv", "ui.fallback": "fixed",
|
||||
"ui.fixed_price": 0.3},
|
||||
# P5: the time-window editor, odd windows the day/night preset cannot say.
|
||||
"periods": {"ui.contract": "custom", "ui.fallback": "custom",
|
||||
"ui.periods": [
|
||||
{"from": "06:30", "to": "21:15", "days": "mon-fri",
|
||||
"price": 0.31},
|
||||
{"from": "21:15", "to": "06:30", "days": "mon-fri",
|
||||
"price": 0.19},
|
||||
{"from": "00:00", "to": "12:00", "days": "sat",
|
||||
"price": 0.2},
|
||||
{"from": "12:00", "to": "24:00", "days": "sat",
|
||||
"price": 0.25},
|
||||
{"from": "00:00", "to": "24:00", "days": "sun",
|
||||
"price": 0.18}]},
|
||||
"periods_one": {"ui.contract": "custom", "ui.fallback": "custom",
|
||||
"ui.periods": [{"from": "00:00", "to": "00:00",
|
||||
"days": "mon-sun", "price": 0.29}]},
|
||||
"dynamic_periods": {"ui.contract": "dynamic",
|
||||
"price_provider": "generic_dayahead",
|
||||
"ui.fallback": "custom", "ui.periods": [
|
||||
{"from": "07:00", "to": "23:00",
|
||||
"days": "mon-sun", "price": 0.32},
|
||||
{"from": "23:00", "to": "07:00",
|
||||
"days": "mon-sun", "price": 0.21}]},
|
||||
}
|
||||
REGIONS = {"flanders": {"ui.region": "flanders"},
|
||||
"own": {"ui.region": "own", "price_taxes_eur_kwh": 0.15}}
|
||||
@@ -139,6 +163,9 @@ def plans():
|
||||
"shadow": "on"},
|
||||
{"meter": "mqtt", "roster": "two", "solar": "none",
|
||||
"prices": "formula", "region": "flanders", "peak": "low",
|
||||
"shadow": "on"},
|
||||
{"meter": "dsmr", "roster": "two", "solar": "one",
|
||||
"prices": "periods", "region": "flanders", "peak": "forecast",
|
||||
"shadow": "on"}):
|
||||
seen.append(plan)
|
||||
return seen
|
||||
|
||||
Reference in New Issue
Block a user