diff --git a/assets/js/components/Config/DeviceTags.vue b/assets/js/components/Config/DeviceTags.vue index 1fc6f2acb0..54fb4aa96d 100644 --- a/assets/js/components/Config/DeviceTags.vue +++ b/assets/js/components/Config/DeviceTags.vue @@ -78,6 +78,7 @@ export default { return `${this.fmtKw(value[0])} / ${this.fmtKw(value[1])}`; case "currentRange": return `${this.fmtNumber(value[0], 1)} A / ${this.fmtNumber(value[1], 1)} A`; + case "controllable": case "configured": return value ? this.$t("config.deviceValue.yes") diff --git a/cmd/dumper.go b/cmd/dumper.go index b369acdb38..af7a88f8da 100644 --- a/cmd/dumper.go +++ b/cmd/dumper.go @@ -116,6 +116,11 @@ func (d *dumper) Dump(name string, v interface{}) { } } + // controllable battery + if _, ok := v.(api.BatteryController); ok { + fmt.Fprintf(w, "Controllable:\ttrue\n") + } + if v, ok := v.(api.Charger); ok { if enabled, err := v.Enabled(); err != nil { fmt.Fprintf(w, "Enabled:\t%v\n", err) diff --git a/i18n/de.toml b/i18n/de.toml index 654bac129c..1c2f9bf760 100644 --- a/i18n/de.toml +++ b/i18n/de.toml @@ -24,8 +24,8 @@ never = "nur mit genug PV-Überschuss." [config] [config.battery] -titleAdd = "Batterie Zähler hinzufügen" -titleEdit = "Batterie Zähler bearbeiten" +titleAdd = "Batterie hinzufügen" +titleEdit = "Batterie bearbeiten" [config.circuits] description = "Stellt sicher, dass die Summe aller Ladepunkte, die an einen Stromkreis angeschlossen sind, die konfigurierten Leistungs- und Stromgrenzen nicht überschreitet. Stromkreise können verschachtelt werden, um eine Hierarchie aufzubauen." @@ -54,10 +54,11 @@ chargeStatusF = "Fehler" chargedEnergy = "Geladen" co2 = "Netz-CO₂" configured = "Konfiguriert" +controllable = "Steuerbar" currency = "Währung" current = "Strom" currentRange = "Strom" -enabled = "Aktiviert" +enabled = "Ladebereit" energy = "Energie" feedinPrice = "Einspeisevergütung" gridPrice = "Netzpreis" diff --git a/i18n/en.toml b/i18n/en.toml index 5ca4eb1094..6464d46bc3 100644 --- a/i18n/en.toml +++ b/i18n/en.toml @@ -24,8 +24,8 @@ never = "only with enough surplus." [config] [config.battery] -titleAdd = "Add Battery Meter" -titleEdit = "Edit Battery Meter" +titleAdd = "Add Battery" +titleEdit = "Edit Battery" [config.circuits] description = "Ensures, that the sum of all loadpoints connected to a circuit does not exceed the configured power and current limits. Circuits can be nested to build a hierarchy." @@ -54,6 +54,7 @@ chargeStatusF = "error" chargedEnergy = "Charged" co2 = "Grid CO₂" configured = "Configured" +controllable = "Controllable" currency = "Currency" current = "Current" currentRange = "Current" diff --git a/server/http_config_helper.go b/server/http_config_helper.go index 49020bc3b4..5fb19e73b8 100644 --- a/server/http_config_helper.go +++ b/server/http_config_helper.go @@ -141,6 +141,10 @@ func testInstance(instance any) map[string]testResult { res[key] = makeResult(val, err) } + if _, ok := instance.(api.BatteryController); ok { + res["controllable"] = makeResult(true, nil) + } + if dev, ok := instance.(api.VehicleOdometer); ok { val, err := dev.Odometer() res["odometer"] = makeResult(val, err) diff --git a/templates/definition/charger/demo-charger.yaml b/templates/definition/charger/demo-charger.yaml new file mode 100644 index 0000000000..8564bc8ab7 --- /dev/null +++ b/templates/definition/charger/demo-charger.yaml @@ -0,0 +1,56 @@ +template: demo-charger +group: generic +products: + - description: + de: Demowallbox + en: Demo charger +requirements: + description: + en: For demonstration purposes. Charger with a fixed set of values. + de: Zu Demonstrationszwecken. Wallbox mit festen Werten. +params: + - name: status + description: + de: Ladezustand + en: Charge status + validvalues: [A, B, C, D, E, F] + default: A + - name: power + description: + de: Leistung + en: Power + type: number + default: 0 + - name: enabled + description: + de: Ladebereit + en: Enabled + type: bool + default: true + - name: maxcurrent + description: + de: Maximale Stromstärke (A) + en: Maximum amperage (A) + help: + example: 16 + type: number + advanced: true + +render: | + type: custom + enable: + source: js + script: + enabled: + source: const + value: {{ .enabled }} + status: + source: const + value: {{ .status }} + maxcurrent: + source: js + script: | + {{ .maxcurrent }} + power: + source: const + value: {{ .power }} diff --git a/templates/definition/meter/demo-battery.yaml b/templates/definition/meter/demo-battery.yaml new file mode 100644 index 0000000000..ba657019ef --- /dev/null +++ b/templates/definition/meter/demo-battery.yaml @@ -0,0 +1,89 @@ +template: demo-battery +group: generic +products: + - description: + de: Demobatterie + en: Demo battery +requirements: + description: + en: For demonstration purposes. Battery with a fixed set of values. + de: Zu Demonstrationszwecken. Hausbatterie mit festen Werten. +params: + - name: usage + choice: ["battery"] + - name: power + description: + de: Leistung (W) + en: Power (W) + type: number + - name: soc + description: + de: Ladestand (%) + en: Charge (%) + type: number + - name: controllable + description: + de: Steuerbar + en: Controllable + type: bool + help: + de: "Unterstützt aktive Batteriesteuerung" + en: "Supports active battery control" + - name: energy + description: + de: Zählerstand (kWh) + en: Meter reading (kWh) + type: number + advanced: true + - name: currentL1 + description: + de: L1 Stromstärke (A) + en: L1 current (A) + type: number + advanced: true + - name: currentL2 + description: + de: L2 Stromstärke (A) + en: L2 current (A) + type: number + advanced: true + - name: currentL3 + description: + de: L3 Stromstärke (A) + en: L3 current (A) + type: number + advanced: true + +render: | + type: custom + power: + source: const + value: {{ .power }} + {{- if .energy }} + energy: + source: const + value: {{ .energy}} + {{- end }} + soc: + source: const + value: {{ .soc }} + {{- if .controllable }} + batterymode: + source: js + vm: shared + script: | + 1 + {{- end }} + {{- if .currentL1 }} + currents: + - source: const + value: {{ .currentL1 }} + {{- if .currentL2 }} + - source: const + value: {{ .currentL2 }} + {{- end }} + {{- if .currentL3 }} + - source: const + value: {{ .currentL3 }} + {{- end }} + {{- end }} diff --git a/templates/definition/meter/demo-meter.yaml b/templates/definition/meter/demo-meter.yaml new file mode 100644 index 0000000000..f2c9262245 --- /dev/null +++ b/templates/definition/meter/demo-meter.yaml @@ -0,0 +1,66 @@ +template: demo-meter +group: generic +products: + - description: + de: Demozähler + en: Demo meter +requirements: + description: + en: For demonstration purposes. Meter with a fixed set of values. + de: Zu Demonstrationszwecken. Zähler mit festen Werten. +params: + - name: usage + choice: ["grid", "pv", "aux", "charge"] + - name: power + description: + de: Leistung (W) + en: Power (W) + type: number + - name: energy + description: + de: Zählerstand (kWh) + en: Meter reading (kWh) + type: number + advanced: true + - name: currentL1 + description: + de: L1 Stromstärke (A) + en: L1 current (A) + type: number + advanced: true + - name: currentL2 + description: + de: L2 Stromstärke (A) + en: L2 current (A) + type: number + advanced: true + - name: currentL3 + description: + de: L3 Stromstärke (A) + en: L3 current (A) + type: number + advanced: true + +render: | + type: custom + power: + source: const + value: {{ .power }} + {{- if .energy }} + energy: + source: const + value: {{ .energy}} + {{- end }} + {{- if .currentL1 }} + currents: + - source: const + value: {{ .currentL1 }} + {{- if .currentL2 }} + - source: const + value: {{ .currentL2 }} + {{- end }} + {{- if .currentL3 }} + - source: const + value: {{ .currentL3 }} + {{- end }} + {{- end }}