feat(eosdash): add the profile page for battery and inverter profiles

The new Profiles page of EOSdash lists the user and packaged battery and
inverter profiles and edits them as JSON: preview without saving, save,
save as and delete, or revert a user profile to the packaged one. Saved
profiles apply at once.

One toolbar row holds the profile kind and profile selection, the Edit
button, the Share link and the status of the last action. A compact grid
summarizes the profile. A battery profile shows its charge and discharge
limit maps as heat maps as EOS evaluates them (with the exact hard
cutoffs) and its efficiency curves; an inverter profile its power at
45 degC, the DC→AC and AC→DC efficiency curves over the load fraction and
the power derating over the ambient temperature with 45 degC marked. Both
show the profile as highlighted JSON with a copy button. The sections are
collapsible and keep their state across actions.

The editor is shown only in edit mode: Edit in the toolbar opens it above
the plots, Close in the editor or Close editor in the toolbar ends it.
Edit mode is kept after preview, save and save as and across profile
changes.

Share opens a new issue with the battery or inverter profile issue form,
filled in with the profile, so users can propose their profiles for
packaging with EOS; each form asks for consent to publish the values under
Apache-2.0. EOS sends nothing itself.

Additional changes
- Add a compact variant to ConfigSection and status messages in the theme
  colors, readable in dark mode, to the EOSdash components.
- Use the muted theme color for explanatory texts.
- Check profile names before saving.
- Show the paste instruction for profiles too large for the share URL as
  text, not only as tooltip; name the selections for screen readers.
- Keep the toolbar layout when the profiles cannot be listed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Assisted-by: Claude Code (claude-opus-5-5)
This commit is contained in:
Bobby Noelte
2026-11-11 22:08:18 +01:00
co-authored by Claude Opus 5.5
parent faf37abfe7
commit 3bcc902104
7 changed files with 2506 additions and 27 deletions
@@ -0,0 +1,79 @@
name: Battery profile
description: Share a battery profile so that it can be packaged with EOS for other users.
title: "[PROFILE]: ..."
labels: [battery-profile]
body:
- type: markdown
attributes:
value: >
Thank you for sharing a battery profile. EOSdash fills this form for you:
open **Profiles**, select the profile and press **Share**.
The profile is reviewed before it is packaged with EOS. See the
[battery profile documentation](https://akkudoktor-eos.readthedocs.io/en/latest/akkudoktoreos/resource.html)
for the meaning of the values.
- type: input
id: battery_model
attributes:
label: "Battery model"
description: Manufacturer and model of the battery, as on the name plate.
placeholder: "e.g. BYD Battery-Box Premium HVS 7.7"
validations:
required: true
- type: input
id: profile_name
attributes:
label: "Profile name"
description: >
Suggested name of the packaged profile: letters, digits, '.', '_' and '-',
starting with a letter or digit.
placeholder: "e.g. byd-hvs-7.7"
validations:
required: true
- type: dropdown
id: data_source
attributes:
label: "Source of the values"
description: Where do the limits and efficiencies of the profile come from?
options:
- Manufacturer datasheet
- Own measurements
- Datasheet and own measurements
- Estimated
validations:
required: true
- type: textarea
id: profile
attributes:
label: "Profile document"
description: >
The profile as JSON. If the field is empty, copy the JSON from the profile
page of EOSdash and paste it here.
render: json
validations:
required: true
- type: textarea
id: notes
attributes:
label: "Notes"
description: >
Anything reviewers should know, e.g. links to the datasheet, how you
measured, or values you are unsure about.
validations:
required: false
- type: checkboxes
id: consent
attributes:
label: "Publication"
options:
- label: >
I may share these values, and they may be published with EOS under its
license (Apache-2.0).
required: true
@@ -0,0 +1,80 @@
name: Inverter profile
description: Share an inverter profile so that it can be packaged with EOS for other users.
title: "[PROFILE]: ..."
labels: [inverter-profile]
body:
- type: markdown
attributes:
value: >
Thank you for sharing an inverter profile. EOSdash fills this form for you:
open **Profiles**, choose the inverter profiles, select the profile and press
**Share**.
The profile is reviewed before it is packaged with EOS. See the
[inverter profile documentation](https://akkudoktor-eos.readthedocs.io/en/latest/akkudoktoreos/resource.html)
for the meaning of the values.
- type: input
id: inverter_model
attributes:
label: "Inverter model"
description: Manufacturer and model of the inverter, as on the name plate.
placeholder: "e.g. Fronius Symo GEN24 10.0 Plus"
validations:
required: true
- type: input
id: profile_name
attributes:
label: "Profile name"
description: >
Suggested name of the packaged profile: letters, digits, '.', '_' and '-',
starting with a letter or digit.
placeholder: "e.g. fronius-gen24-10"
validations:
required: true
- type: dropdown
id: data_source
attributes:
label: "Source of the values"
description: Where do the efficiencies and the power derating of the profile come from?
options:
- Manufacturer datasheet
- Own measurements
- Datasheet and own measurements
- Estimated
validations:
required: true
- type: textarea
id: profile
attributes:
label: "Profile document"
description: >
The profile as JSON. If the field is empty, copy the JSON from the profile
page of EOSdash and paste it here.
render: json
validations:
required: true
- type: textarea
id: notes
attributes:
label: "Notes"
description: >
Anything reviewers should know, e.g. links to the datasheet, how you
measured, or values you are unsure about.
validations:
required: false
- type: checkboxes
id: consent
attributes:
label: "Publication"
options:
- label: >
I may share these values, and they may be published with EOS under its
license (Apache-2.0).
required: true