From 916de19f4f565ab9d9acffe25c7f1e537a3ab85d Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Wed, 31 Dec 2025 13:25:03 +0100 Subject: [PATCH 0001/1916] Sponsor: improve expire message (#26284) --- tests/sponsor.spec.ts | 4 +++- util/sponsor/auth.go | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/sponsor.spec.ts b/tests/sponsor.spec.ts index 1f0c3e4e9..2507a0522 100644 --- a/tests/sponsor.spec.ts +++ b/tests/sponsor.spec.ts @@ -71,6 +71,8 @@ test.describe("sponsor token", () => { await textarea.fill(EXPIRED_TOKEN); // Try to save to trigger validation await modal.getByRole("button", { name: "Save" }).click(); - await expect(modal).toContainText("token is expired"); + await expect(modal).toContainText( + "token is expired - get a fresh one from https://sponsor.evcc.io" + ); }); }); diff --git a/util/sponsor/auth.go b/util/sponsor/auth.go index a3991afd4..8a43521f6 100644 --- a/util/sponsor/auth.go +++ b/util/sponsor/auth.go @@ -3,6 +3,7 @@ package sponsor import ( "context" "fmt" + "strings" "sync" "time" @@ -75,7 +76,11 @@ func ConfigureSponsorship(token string) error { Subject = unavailable err = nil } else { - err = fmt.Errorf("sponsortoken: %w", err) + if strings.Contains(err.Error(), "token is expired") { + err = fmt.Errorf("%w - get a fresh one from https://sponsor.evcc.io", err) + } else { + err = fmt.Errorf("sponsortoken: %w", err) + } } } From dc6d0565380b8266f3af636a4be5546f45bcf2fe Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 31 Dec 2025 13:19:49 +0100 Subject: [PATCH 0002/1916] Reapply "Planner: add continuous strategy (BC) (#24423)" This reverts commit 7acc133f3cfa2050b0a9d027d4d5f2e9e79f7b48. --- api/plans.go | 9 +- .../components/ChargingPlans/ChargingPlan.vue | 30 +- .../ChargingPlans/PlanRepeatingSettings.vue | 57 +- .../ChargingPlans/PlanStaticSettings.vue | 62 +- .../components/ChargingPlans/PlanStrategy.vue | 167 ++++ .../ChargingPlans/PlansRepeatingSettings.vue | 2 - .../ChargingPlans/PlansSettings.vue | 149 ++-- .../ChargingPlans/PreconditionSelect.vue | 134 ---- assets/js/components/ChargingPlans/types.d.ts | 6 +- .../Loadpoints/Loadpoint.stories.ts | 5 + assets/js/components/Loadpoints/Loadpoint.vue | 3 +- .../Loadpoints/Loadpoints.stories.ts | 6 + .../js/components/Vehicles/Vehicle.stories.ts | 2 + assets/js/components/Vehicles/Vehicle.vue | 3 +- assets/js/types/evcc.ts | 5 + core/keys/loadpoint.go | 12 +- core/loadpoint.go | 28 +- core/loadpoint/api.go | 14 +- core/loadpoint/config.go | 6 +- core/loadpoint/mock.go | 79 +- core/loadpoint_api.go | 55 +- core/loadpoint_effective.go | 54 +- core/loadpoint_plan.go | 33 +- core/planner/helper.go | 79 ++ core/planner/helper_test.go | 46 ++ core/planner/planner.go | 108 ++- core/planner/planner_continuous_test.go | 717 ++++++++++++++++++ core/planner/planner_test.go | 238 +++++- core/site_vehicles.go | 62 +- core/vehicle/adapter.go | 39 +- core/vehicle/api.go | 9 +- core/vehicle/dummy.go | 14 +- core/vehicle/mock.go | 43 +- i18n/bg.json | 11 +- i18n/cs.json | 11 +- i18n/da.json | 11 +- i18n/de.json | 17 +- i18n/el.json | 11 +- i18n/en.json | 17 +- i18n/fi.json | 11 +- i18n/fr.json | 11 +- i18n/hr.json | 11 +- i18n/hu.json | 11 +- i18n/it.json | 11 +- i18n/lb.json | 11 +- i18n/lt.json | 11 +- i18n/nl.json | 11 +- i18n/pl.json | 11 +- i18n/pt.json | 11 +- i18n/sv.json | 11 +- i18n/ta.json | 11 +- i18n/tr.json | 11 +- i18n/uk.json | 11 +- i18n/zh-Hans.json | 11 +- push/hub.go | 2 +- server/helper.go | 16 - server/http.go | 3 +- server/http_config_loadpoint_handler.go | 4 +- server/http_loadpoint_handler.go | 159 ++-- server/http_vehicle_handler.go | 56 +- server/mcp/openapi.json | 134 +++- server/mcp/openapi.md | 46 +- server/mqtt.go | 29 +- server/mqtt_setter.go | 27 + server/openapi.yaml | 84 +- server/types.go | 24 + tests/plan.evcc.yaml | 2 + tests/plan.spec.ts | 90 ++- 68 files changed, 2245 insertions(+), 950 deletions(-) create mode 100644 assets/js/components/ChargingPlans/PlanStrategy.vue delete mode 100644 assets/js/components/ChargingPlans/PreconditionSelect.vue create mode 100644 core/planner/planner_continuous_test.go create mode 100644 server/types.go diff --git a/api/plans.go b/api/plans.go index 65eb9e40e..33ae03b25 100644 --- a/api/plans.go +++ b/api/plans.go @@ -1,10 +1,17 @@ package api +import "time" + type RepeatingPlan struct { Weekdays []int `json:"weekdays"` // 0-6 (Sunday-Saturday) Time string `json:"time"` // HH:MM Tz string `json:"tz"` // timezone in IANA format Soc int `json:"soc"` // target soc - Precondition int64 `json:"precondition"` // precondition duration in seconds Active bool `json:"active"` // active flag + Precondition int64 `json:"-" todo:"..."` // TODO deprecated +} + +type PlanStrategy struct { + Continuous bool `json:"continuous"` // force continuous planning + Precondition time.Duration `json:"precondition"` // precondition duration in seconds } diff --git a/assets/js/components/ChargingPlans/ChargingPlan.vue b/assets/js/components/ChargingPlans/ChargingPlan.vue index d043c4a28..61739d167 100644 --- a/assets/js/components/ChargingPlans/ChargingPlan.vue +++ b/assets/js/components/ChargingPlans/ChargingPlan.vue @@ -69,6 +69,7 @@ @static-plan-updated="updateStaticPlan" @static-plan-removed="removeStaticPlan" @repeating-plans-updated="updateRepeatingPlans" + @plan-strategy-updated="updatePlanStrategy" /> 0 ) { - return [...this.vehicle.repeatingPlans]; + return [...(this.vehicle.repeatingPlans || [])]; } return []; }, @@ -286,15 +292,12 @@ export default defineComponent({ }, updateStaticPlan(plan: StaticPlan): void { const timeISO = plan.time.toISOString(); - const params = plan.precondition ? { precondition: plan.precondition } : undefined; if (this.socBasedPlanning) { const p = plan as StaticSocPlan; - api.post(`${this.apiVehicle}plan/soc/${p.soc}/${timeISO}`, null, { params }); + api.post(`${this.apiVehicle}plan/soc/${p.soc}/${timeISO}`, null); } else { const p = plan as StaticEnergyPlan; - api.post(`${this.apiLoadpoint}plan/energy/${p.energy}/${timeISO}`, null, { - params, - }); + api.post(`${this.apiLoadpoint}plan/energy/${p.energy}/${timeISO}`, null); } }, removeStaticPlan(): void { @@ -307,6 +310,13 @@ export default defineComponent({ updateRepeatingPlans(plans: RepeatingPlan[]): void { api.post(`${this.apiVehicle}plan/repeating`, plans); }, + updatePlanStrategy(strategy: PlanStrategy): void { + if (this.socBasedPlanning) { + api.post(`${this.apiVehicle}plan/strategy`, strategy); + } else { + api.post(`${this.apiLoadpoint}plan/strategy`, strategy); + } + }, setMinSoc(soc: number): void { api.post(`${this.apiVehicle}minsoc/${soc}`); }, diff --git a/assets/js/components/ChargingPlans/PlanRepeatingSettings.vue b/assets/js/components/ChargingPlans/PlanRepeatingSettings.vue index f02f2f54b..a2122d815 100644 --- a/assets/js/components/ChargingPlans/PlanRepeatingSettings.vue +++ b/assets/js/components/ChargingPlans/PlanRepeatingSettings.vue @@ -24,17 +24,12 @@ {{ $t("main.chargingPlan.time") }} -
+
-
- -
-
+
@@ -81,7 +76,7 @@ {{ $t("main.chargingPlan.goal") }}
-
+
-
- -
-
- -
- -
- -
+ + diff --git a/assets/js/components/ChargingPlans/PlansRepeatingSettings.vue b/assets/js/components/ChargingPlans/PlansRepeatingSettings.vue index c07921acc..4162830ac 100644 --- a/assets/js/components/ChargingPlans/PlansRepeatingSettings.vue +++ b/assets/js/components/ChargingPlans/PlansRepeatingSettings.vue @@ -8,7 +8,6 @@ :formIdPrefix="formIdPrefix" v-bind="plan" :rangePerSoc="rangePerSoc" - :showPrecondition="showPrecondition" @updated="updatePlan(index, $event)" @removed="removePlan(index)" /> @@ -49,7 +48,6 @@ export default defineComponent({ id: [Number, String], rangePerSoc: Number, plans: { type: Array as PropType, default: () => [] }, - showPrecondition: Boolean, }, emits: ["updated"], computed: { diff --git a/assets/js/components/ChargingPlans/PlansSettings.vue b/assets/js/components/ChargingPlans/PlansSettings.vue index bc6199e1e..85f462b25 100644 --- a/assets/js/components/ChargingPlans/PlansSettings.vue +++ b/assets/js/components/ChargingPlans/PlansSettings.vue @@ -11,9 +11,8 @@ :soc-per-kwh="socPerKwh" :soc-based-planning="socBasedPlanning" :multiple-plans="multiplePlans" - :show-precondition="showPrecondition" - @static-plan-updated="(data) => updateStaticPlan({ index: 0, ...data })" - @static-plan-removed="() => removeStaticPlan(0)" + @static-plan-updated="updateStaticPlan" + @static-plan-removed="removeStaticPlan" @plan-preview="previewStaticPlan" />
@@ -30,7 +29,6 @@ :id="id" :rangePerSoc="rangePerSoc" :plans="repeatingPlans" - :show-precondition="showPrecondition" @updated="updateRepeatingPlans" />
@@ -38,29 +36,32 @@
-
+
{{ $t(`main.targetCharge.${noActivePlan ? "preview" : "currentPlan"}`) }} - {{ $t("main.targetCharge.preview") }} #1 + {{ $t("main.targetCharge.goalReached") }} + {{ nextPlanTitle }} +
+ @@ -70,16 +71,16 @@ import "@h2d2/shopicons/es/regular/plus"; import Preview from "./Preview.vue"; import PlanStaticSettings from "./PlanStaticSettings.vue"; +import ChargingPlanStrategy from "./PlanStrategy.vue"; import RepeatingSettings from "./PlansRepeatingSettings.vue"; import Warnings from "./Warnings.vue"; import formatter from "@/mixins/formatter"; import collector from "@/mixins/collector"; import api from "@/api"; -import CustomSelect from "../Helper/CustomSelect.vue"; import deepEqual from "@/utils/deepEqual"; import convertRates from "@/utils/convertRates"; import { defineComponent, type PropType } from "vue"; -import type { Vehicle, PartialBy, Timeout, SelectOption, CURRENCY, Forecast } from "@/types/evcc"; +import type { Vehicle, Timeout, CURRENCY, Forecast } from "@/types/evcc"; import type { StaticPlan, RepeatingPlan, @@ -87,6 +88,7 @@ import type { StaticSocPlan, StaticEnergyPlan, PlanResponse, + PlanStrategy, } from "./types"; export default defineComponent({ @@ -94,9 +96,9 @@ export default defineComponent({ components: { ChargingPlanPreview: Preview, ChargingPlanStaticSettings: PlanStaticSettings, + ChargingPlanStrategy, ChargingPlansRepeatingSettings: RepeatingSettings, ChargingPlanWarnings: Warnings, - CustomSelect, }, mixins: [formatter, collector], props: { @@ -106,6 +108,8 @@ export default defineComponent({ effectiveLimitSoc: Number, effectivePlanTime: String, effectivePlanSoc: Number, + effectivePlanPrecondition: Number, + effectivePlanContinuous: Boolean, planEnergy: Number, limitEnergy: Number, socBasedPlanning: Boolean, @@ -120,15 +124,20 @@ export default defineComponent({ planOverrun: Number, forecast: Object as PropType, }, - emits: ["static-plan-removed", "static-plan-updated", "repeating-plans-updated"], + emits: [ + "static-plan-removed", + "static-plan-updated", + "repeating-plans-updated", + "plan-strategy-updated", + ], data() { return { staticPlanPreview: {} as StaticPlan, plan: {} as PlanWrapper, activeTab: "time", debounceTimer: null as Timeout, - selectedPreviewId: 1, nextPlanId: 0, + strategyOpen: false, }; }, computed: { @@ -138,9 +147,6 @@ export default defineComponent({ multiplePlans(): boolean { return this.repeatingPlans.length !== 0; }, - selectedPreviewPlanTitle(): string { - return this.previewPlanOptions[this.selectedPreviewId - 1]?.name || ""; - }, chargingPlanWarningsProps(): any { return this.collectProps(Warnings); }, @@ -154,23 +160,12 @@ export default defineComponent({ ? { duration, plan, power, rates, targetTime, currency, smartCostType } : null; }, - previewPlanOptions(): SelectOption[] { - const name = (n: number) => `${this.$t("main.targetCharge.preview")} #${n}`; - - // static plan - const options = [{ value: 1, name: name(1) }] as SelectOption[]; - - // repeating plans - this.repeatingPlans.forEach((plan, index) => { - const number = index + 2; - options.push({ - value: number, - name: name(number), - disabled: !plan.weekdays.length, - }); - }); - - return options; + chargingPlanStrategyProps(): any { + return { + id: this.id, + precondition: this.effectivePlanPrecondition, + continuous: this.effectivePlanContinuous, + }; }, alreadyReached(): boolean { return this.plan.duration === 0; @@ -178,7 +173,7 @@ export default defineComponent({ nextPlanTitle(): string { return `${this.$t("main.targetCharge.nextPlan")} #${this.nextPlanId}`; }, - showPrecondition(): boolean { + showStrategy(): boolean { // only show option if planner forecast has different values const slots = this.forecast?.planner || []; const values = new Set(slots.map(({ value }) => value)); @@ -191,6 +186,12 @@ export default defineComponent({ this.updatePlanDebounced(); } }, + effectivePlanPrecondition() { + this.updatePlanDebounced(); + }, + effectivePlanContinuous() { + this.updatePlanDebounced(); + }, staticPlan: { deep: true, handler(vNew: StaticPlan, vOld: StaticPlan) { @@ -203,7 +204,6 @@ export default defineComponent({ deep: true, handler(vNew: RepeatingPlan[], vOld: RepeatingPlan[]) { if (!deepEqual(vNew, vOld)) { - this.adjustPreviewId(); this.updatePlanDebounced(); } }, @@ -213,10 +213,6 @@ export default defineComponent({ this.updatePlanDebounced(); }, methods: { - selectPreviewPlan(id: number): void { - this.selectedPreviewId = id; - this.updatePlanDebounced(); - }, async updatePlanDebounced() { if (this.noActivePlan) { await this.updatePlanPreviewDebounced(); @@ -224,11 +220,6 @@ export default defineComponent({ await this.updateActivePlanDebounced(); } }, - adjustPreviewId(): void { - if (this.selectedPreviewId > this.previewPlanOptions.length) { - this.selectedPreviewId = this.previewPlanOptions.length; - } - }, async updateActivePlan(): Promise { try { const res = await this.apiFetchPlan(`loadpoints/${this.id}/plan`); @@ -240,22 +231,15 @@ export default defineComponent({ }, async fetchStaticPreviewSoc(plan: StaticSocPlan): Promise { const timeISO = plan.time.toISOString(); - const params = plan.precondition ? { precondition: plan.precondition } : undefined; + const params: Record = {}; return await this.apiFetchPlan( `loadpoints/${this.id}/plan/static/preview/soc/${plan.soc}/${timeISO}`, params ); }, - async fetchRepeatingPreview( - plan: PartialBy - ): Promise { - return await this.apiFetchPlan( - `loadpoints/${this.id}/plan/repeating/preview/${plan.soc}/${plan.weekdays}/${plan.time}/${encodeURIComponent(plan.tz)}` - ); - }, async fetchStaticPreviewEnergy(plan: StaticEnergyPlan): Promise { const timeISO = plan.time.toISOString(); - const params = plan.precondition ? { precondition: plan.precondition } : undefined; + const params: Record = {}; return await this.apiFetchPlan( `loadpoints/${this.id}/plan/static/preview/energy/${plan.energy}/${timeISO}`, params @@ -285,8 +269,7 @@ export default defineComponent({ try { let planRes: PlanResponse | undefined = undefined; - - if (this.selectedPreviewId < 2 && this.staticPlanPreview) { + if (this.staticPlanPreview) { // static plan let plan = this.staticPlanPreview; if (this.socBasedPlanning) { @@ -294,33 +277,14 @@ export default defineComponent({ planRes = await this.fetchStaticPreviewSoc({ soc: plan.soc, time: plan.time, - precondition: plan.precondition, }); } else { plan = plan as StaticEnergyPlan; planRes = await this.fetchStaticPreviewEnergy({ energy: plan.energy, time: plan.time, - precondition: plan.precondition, }); } - } else { - // repeating plan - const plan = this.repeatingPlans[this.selectedPreviewId - 2]; - if (!plan) { - return; - } - const { weekdays, soc, time, tz, precondition } = plan; - if (weekdays.length === 0) { - return; - } - planRes = await this.fetchRepeatingPreview({ - weekdays, - soc, - time, - tz, - precondition, - }); } this.plan = planRes?.data ?? ({} as PlanWrapper); } catch (e) { @@ -343,8 +307,8 @@ export default defineComponent({ clearTimeout(this.debounceTimer); this.debounceTimer = setTimeout(async () => await this.updateActivePlan(), 1000); }, - removeStaticPlan(index: number): void { - this.$emit("static-plan-removed", index); + removeStaticPlan(): void { + this.$emit("static-plan-removed"); }, updateStaticPlan(plan: StaticPlan): void { this.$emit("static-plan-updated", plan); @@ -356,6 +320,9 @@ export default defineComponent({ this.staticPlanPreview = plan; this.updatePlanPreviewDebounced(); }, + updatePlanStrategy(strategy: PlanStrategy): void { + this.$emit("plan-strategy-updated", strategy); + }, }, }); @@ -364,13 +331,13 @@ export default defineComponent({ h5 { position: relative; display: flex; - top: -25px; + top: -33px; margin-bottom: -0.5rem; padding: 0 0.5rem; justify-content: center; } h5 .inner { - padding: 0 0.5rem; + padding: 0 1rem; background-color: var(--evcc-box); font-weight: normal; color: var(--evcc-gray); diff --git a/assets/js/components/ChargingPlans/PreconditionSelect.vue b/assets/js/components/ChargingPlans/PreconditionSelect.vue deleted file mode 100644 index b132e642f..000000000 --- a/assets/js/components/ChargingPlans/PreconditionSelect.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - diff --git a/assets/js/components/ChargingPlans/types.d.ts b/assets/js/components/ChargingPlans/types.d.ts index 2a667897f..91031a05c 100644 --- a/assets/js/components/ChargingPlans/types.d.ts +++ b/assets/js/components/ChargingPlans/types.d.ts @@ -6,7 +6,6 @@ export interface RepeatingPlan { tz: string; // timezone like "Europe/Berlin" soc: number; active: boolean; - precondition: number; } export interface PlanWrapper { @@ -27,11 +26,14 @@ export type StaticPlan = StaticSocPlan | StaticEnergyPlan; export interface StaticSocPlan { soc: number; time: Date; - precondition: number; } export interface StaticEnergyPlan { energy: number; time: Date; +} + +export interface PlanStrategy { + continuous: boolean; precondition: number; } diff --git a/assets/js/components/Loadpoints/Loadpoint.stories.ts b/assets/js/components/Loadpoints/Loadpoint.stories.ts index f953f1281..08238fad5 100644 --- a/assets/js/components/Loadpoints/Loadpoint.stories.ts +++ b/assets/js/components/Loadpoints/Loadpoint.stories.ts @@ -52,6 +52,7 @@ const baseState = { planEnergy: 0, planOverrun: 0, planPrecondition: 0, + planContinuous: false, planProjectedEnd: undefined, planProjectedStart: undefined, planTime: undefined, @@ -82,6 +83,8 @@ const baseState = { capacity: 8, features: ["Offline"], repeatingPlans: [], + planPrecondition: 0, + planContinuous: false, }, { name: "vehicle_4", @@ -90,6 +93,8 @@ const baseState = { capacity: 80, features: ["Offline"], repeatingPlans: [], + planPrecondition: 0, + planContinuous: false, }, ], smartCostType: SMART_COST_TYPE.PRICE_FORECAST, diff --git a/assets/js/components/Loadpoints/Loadpoint.vue b/assets/js/components/Loadpoints/Loadpoint.vue index 63197b9a9..907136581 100644 --- a/assets/js/components/Loadpoints/Loadpoint.vue +++ b/assets/js/components/Loadpoints/Loadpoint.vue @@ -178,10 +178,11 @@ export default defineComponent({ planProjectedEnd: String as PropType, planOverrun: { type: Number, default: 0 }, planEnergy: Number, - planPrecondition: Number, planTime: String as PropType, effectivePlanTime: String as PropType, effectivePlanSoc: Number, + effectivePlanPrecondition: Number, + effectivePlanContinuous: Boolean, vehicleProviderLoggedIn: Boolean, vehicleProviderLoginPath: String, vehicleProviderLogoutPath: String, diff --git a/assets/js/components/Loadpoints/Loadpoints.stories.ts b/assets/js/components/Loadpoints/Loadpoints.stories.ts index d303d680b..1137b279c 100644 --- a/assets/js/components/Loadpoints/Loadpoints.stories.ts +++ b/assets/js/components/Loadpoints/Loadpoints.stories.ts @@ -48,6 +48,8 @@ const baseArgs = { capacity: 8, features: ["Offline"], repeatingPlans: [], + planPrecondition: 0, + planContinuous: false, }, { name: "vehicle_4", @@ -56,6 +58,8 @@ const baseArgs = { capacity: 80, features: ["Offline"], repeatingPlans: [], + planPrecondition: 0, + planContinuous: false, }, { name: "vehicle_5", @@ -64,6 +68,8 @@ const baseArgs = { capacity: 0.46, features: ["Offline"], repeatingPlans: [], + planPrecondition: 0, + planContinuous: false, }, ], smartCostType: SMART_COST_TYPE.PRICE_FORECAST, diff --git a/assets/js/components/Vehicles/Vehicle.stories.ts b/assets/js/components/Vehicles/Vehicle.stories.ts index b1f0b54a0..d26fa0111 100644 --- a/assets/js/components/Vehicles/Vehicle.stories.ts +++ b/assets/js/components/Vehicles/Vehicle.stories.ts @@ -10,6 +10,8 @@ const baseState = { features: [], name: "", repeatingPlans: [], + planPrecondition: 0, + planContinuous: false, }, enabled: false, connected: true, diff --git a/assets/js/components/Vehicles/Vehicle.vue b/assets/js/components/Vehicles/Vehicle.vue index d2bdfe30a..acd160a69 100644 --- a/assets/js/components/Vehicles/Vehicle.vue +++ b/assets/js/components/Vehicles/Vehicle.vue @@ -103,6 +103,8 @@ export default defineComponent({ effectiveLimitSoc: Number, effectivePlanSoc: Number, effectivePlanTime: String, + effectivePlanPrecondition: Number, + effectivePlanContinuous: Boolean, batteryBoostActive: Boolean, enabled: Boolean, heating: Boolean, @@ -120,7 +122,6 @@ export default defineComponent({ planProjectedEnd: String, planTime: String, planTimeUnreachable: Boolean, - planPrecondition: Number, planOverrun: Number, pvAction: String, pvRemainingInterpolated: Number, diff --git a/assets/js/types/evcc.ts b/assets/js/types/evcc.ts index 03f5c85f2..1d3569526 100644 --- a/assets/js/types/evcc.ts +++ b/assets/js/types/evcc.ts @@ -246,6 +246,8 @@ export interface Loadpoint { effectivePlanId: number; effectivePlanSoc: number; effectivePlanTime: string | null; + effectivePlanPrecondition: number; + effectivePlanContinuous: boolean; effectivePriority: number; enableDelay: number; enableThreshold: number; @@ -264,6 +266,7 @@ export interface Loadpoint { planEnergy: number; planOverrun: number; planPrecondition: number; + planContinuous: boolean; planProjectedEnd: string | null; planProjectedStart: string | null; planTime: string | null; @@ -473,6 +476,8 @@ export interface Vehicle { limitSoc?: number; plan?: StaticPlan; repeatingPlans: RepeatingPlan[] | null; + planPrecondition: number; + planContinuous: boolean; title: string; features?: string[]; capacity?: number; diff --git a/core/keys/loadpoint.go b/core/keys/loadpoint.go index dc59e5d92..7b6598515 100644 --- a/core/keys/loadpoint.go +++ b/core/keys/loadpoint.go @@ -57,7 +57,11 @@ const ( EffectivePlanSoc = "effectivePlanSoc" // effective plan soc EffectiveMinCurrent = "effectiveMinCurrent" // effective min current EffectiveMaxCurrent = "effectiveMaxCurrent" // effective max current - EffectiveLimitSoc = "effectiveLimitSoc" // effective limit soc + + EffectiveLimitSoc = "effectiveLimitSoc" // effective limit soc + EffectivePlanStrategy = "effectivePlanStrategy" // effective plan strategy (deprecated, use individual fields) + EffectivePlanPrecondition = "effectivePlanPrecondition" // effective plan precondition duration + EffectivePlanContinuous = "effectivePlanContinuous" // effective plan continuous planning // measurements ChargePower = "chargePower" // charge power @@ -73,15 +77,17 @@ const ( ChargeRemainingEnergy = "chargeRemainingEnergy" // charge remaining energy // plan + Plan = "plan" // charge plan time slots PlanTime = "planTime" // charge plan finish time goal PlanEnergy = "planEnergy" // charge plan energy goal PlanSoc = "planSoc" // charge plan soc goal - PlanPrecondition = "planPrecondition" // charge plan precondition duration PlanActive = "planActive" // charge plan has determined current slot to be an active slot PlanProjectedStart = "planProjectedStart" // charge plan start time (earliest slot) PlanProjectedEnd = "planProjectedEnd" // charge plan ends (end of last slot) PlanOverrun = "planOverrun" // charge plan goal not reachable in time - Plan = "plan" // charge plan time slots + PlanStrategy = "planStrategy" // charge plan strategy (precondition, continuous) + PlanPrecondition = "planPrecondition" // charge plan precondition duration + PlanContinuous = "planContinuous" // charge plan continuous planning // repeating plans RepeatingPlans = "repeatingPlans" // key to access all repeating plans in db diff --git a/core/loadpoint.go b/core/loadpoint.go index 2929db407..207befe21 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -145,13 +145,13 @@ type Loadpoint struct { // charge planning planner *planner.Planner - planTime time.Time // time goal - planPrecondition time.Duration // precondition duration - planEnergy float64 // Plan charge energy in kWh (dumb vehicles) - planEnergyOffset float64 // already charged energy in kWh when plan was set - planSlotEnd time.Time // current plan slot end time - planActive bool // charge plan exists and has a currently active slot - planOverrunSent bool // notification has been sent already + planTime time.Time // time goal + planStrategy api.PlanStrategy // plan strategy (precondition, continuous) + planEnergy float64 // Plan charge energy in kWh (dumb vehicles) + planEnergyOffset float64 // already charged energy in kWh when plan was set + planSlotEnd time.Time // current plan slot end time + planActive bool // charge plan exists and has a currently active slot + planOverrunSent bool // notification has been sent already // cached state status api.ChargeStatus // Charger status @@ -370,9 +370,14 @@ func (lp *Loadpoint) restoreSettings() { t, err1 := lp.settings.Time(keys.PlanTime) v, err2 := lp.settings.Float(keys.PlanEnergy) - d, _ := lp.settings.Int(keys.PlanPrecondition) if err1 == nil && err2 == nil { - lp.setPlanEnergy(t, time.Duration(d)*time.Second, v) + lp.setPlanEnergy(t, v) + } + + // load plan strategy (continuous mode and precondition duration) + var planStrategy api.PlanStrategy + if err := lp.settings.Json(keys.PlanStrategy, &planStrategy); err == nil { + lp.setPlanStrategy(planStrategy) } } @@ -686,7 +691,8 @@ func (lp *Loadpoint) Prepare(site site.API, uiChan chan<- util.Param, pushChan c // restored settings lp.publish(keys.PlanTime, lp.planTime) lp.publish(keys.PlanEnergy, lp.planEnergy) - lp.publish(keys.PlanPrecondition, lp.planPrecondition) + lp.publish(keys.PlanPrecondition, int64(lp.planStrategy.Precondition.Seconds())) + lp.publish(keys.PlanContinuous, lp.planStrategy.Continuous) lp.publish(keys.LimitSoc, lp.limitSoc) lp.publish(keys.LimitEnergy, lp.limitEnergy) @@ -983,7 +989,7 @@ func (lp *Loadpoint) repeatingPlanning() bool { if !lp.socBasedPlanning() { return false } - _, _, _, id := lp.NextVehiclePlan() + _, _, id := lp.NextVehiclePlan() return id > 1 } diff --git a/core/loadpoint/api.go b/core/loadpoint/api.go index 036cfe80f..55ba3b84e 100644 --- a/core/loadpoint/api.go +++ b/core/loadpoint/api.go @@ -108,6 +108,8 @@ type API interface { EffectiveMinPower() float64 // EffectiveMaxPower returns the max charging power taking active phases into account EffectiveMaxPower() float64 + // EffectivePlanStrategy returns the effective plan strategy + EffectivePlanStrategy() api.PlanStrategy // PublishEffectiveValues publishes effective values for currently attached vehicle PublishEffectiveValues() @@ -116,19 +118,21 @@ type API interface { // // GetPlanEnergy returns the charge plan energy - GetPlanEnergy() (time.Time, time.Duration, float64) + GetPlanEnergy() (time.Time, float64) // SetPlanEnergy sets the charge plan energy - SetPlanEnergy(time.Time, time.Duration, float64) error + SetPlanEnergy(time.Time, float64) error // GetPlanGoal returns the plan goal and if the goal is soc based GetPlanGoal() (float64, bool) // GetPlanRequiredDuration returns required duration of plan to reach the goal from current state GetPlanRequiredDuration(goal, maxPower float64) time.Duration - // GetPlanPreCondDuration returns the precondition duration - GetPlanPreCondDuration() time.Duration + // GetPlanStrategy returns the plan strategy + GetPlanStrategy() api.PlanStrategy + // SetPlanStrategy sets the plan strategy + SetPlanStrategy(api.PlanStrategy) error // SocBasedPlanning determines if the planner is soc based SocBasedPlanning() bool // GetPlan creates a charging plan - GetPlan(targetTime time.Time, requiredDuration, precondition time.Duration) api.Rates + GetPlan(targetTime time.Time, requiredDuration, precondition time.Duration, continuous bool) api.Rates // GetSocConfig returns the soc poll settings GetSocConfig() SocConfig diff --git a/core/loadpoint/config.go b/core/loadpoint/config.go index 3bc38d83d..86e326f46 100644 --- a/core/loadpoint/config.go +++ b/core/loadpoint/config.go @@ -27,10 +27,11 @@ type DynamicConfig struct { SmartFeedInPriorityLimit *float64 `json:"smartFeedInPriorityLimit"` PlanEnergy float64 `json:"planEnergy"` PlanTime time.Time `json:"planTime"` - PlanPrecondition int64 `json:"planPrecondition"` LimitEnergy float64 `json:"limitEnergy"` LimitSoc int `json:"limitSoc"` + PlanStrategy api.PlanStrategy `json:"planStrategy"` + Thresholds ThresholdsConfig `json:"thresholds"` Soc SocConfig `json:"soc"` } @@ -59,7 +60,8 @@ func (payload DynamicConfig) Apply(lp API) error { lp.SetSmartCostLimit(payload.SmartCostLimit) lp.SetSmartFeedInPriorityLimit(payload.SmartFeedInPriorityLimit) lp.SetThresholds(payload.Thresholds) - lp.SetPlanEnergy(payload.PlanTime, time.Duration(payload.PlanPrecondition)*time.Second, payload.PlanEnergy) + lp.SetPlanEnergy(payload.PlanTime, payload.PlanEnergy) + lp.SetPlanStrategy(payload.PlanStrategy) lp.SetLimitEnergy(payload.LimitEnergy) lp.SetLimitSoc(payload.LimitSoc) diff --git a/core/loadpoint/mock.go b/core/loadpoint/mock.go index c4436f062..61e93af70 100644 --- a/core/loadpoint/mock.go +++ b/core/loadpoint/mock.go @@ -111,6 +111,20 @@ func (mr *MockAPIMockRecorder) EffectivePlanId() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EffectivePlanId", reflect.TypeOf((*MockAPI)(nil).EffectivePlanId)) } +// EffectivePlanStrategy mocks base method. +func (m *MockAPI) EffectivePlanStrategy() api.PlanStrategy { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EffectivePlanStrategy") + ret0, _ := ret[0].(api.PlanStrategy) + return ret0 +} + +// EffectivePlanStrategy indicates an expected call of EffectivePlanStrategy. +func (mr *MockAPIMockRecorder) EffectivePlanStrategy() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EffectivePlanStrategy", reflect.TypeOf((*MockAPI)(nil).EffectivePlanStrategy)) +} + // EffectivePlanTime mocks base method. func (m *MockAPI) EffectivePlanTime() time.Time { m.ctrl.T.Helper() @@ -434,27 +448,26 @@ func (mr *MockAPIMockRecorder) GetPhasesConfigured() *gomock.Call { } // GetPlan mocks base method. -func (m *MockAPI) GetPlan(targetTime time.Time, requiredDuration, precondition time.Duration) api.Rates { +func (m *MockAPI) GetPlan(targetTime time.Time, requiredDuration, precondition time.Duration, continuous bool) api.Rates { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPlan", targetTime, requiredDuration, precondition) + ret := m.ctrl.Call(m, "GetPlan", targetTime, requiredDuration, precondition, continuous) ret0, _ := ret[0].(api.Rates) return ret0 } // GetPlan indicates an expected call of GetPlan. -func (mr *MockAPIMockRecorder) GetPlan(targetTime, requiredDuration, precondition any) *gomock.Call { +func (mr *MockAPIMockRecorder) GetPlan(targetTime, requiredDuration, precondition, continuous any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlan", reflect.TypeOf((*MockAPI)(nil).GetPlan), targetTime, requiredDuration, precondition) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlan", reflect.TypeOf((*MockAPI)(nil).GetPlan), targetTime, requiredDuration, precondition, continuous) } // GetPlanEnergy mocks base method. -func (m *MockAPI) GetPlanEnergy() (time.Time, time.Duration, float64) { +func (m *MockAPI) GetPlanEnergy() (time.Time, float64) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetPlanEnergy") ret0, _ := ret[0].(time.Time) - ret1, _ := ret[1].(time.Duration) - ret2, _ := ret[2].(float64) - return ret0, ret1, ret2 + ret1, _ := ret[1].(float64) + return ret0, ret1 } // GetPlanEnergy indicates an expected call of GetPlanEnergy. @@ -478,20 +491,6 @@ func (mr *MockAPIMockRecorder) GetPlanGoal() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlanGoal", reflect.TypeOf((*MockAPI)(nil).GetPlanGoal)) } -// GetPlanPreCondDuration mocks base method. -func (m *MockAPI) GetPlanPreCondDuration() time.Duration { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPlanPreCondDuration") - ret0, _ := ret[0].(time.Duration) - return ret0 -} - -// GetPlanPreCondDuration indicates an expected call of GetPlanPreCondDuration. -func (mr *MockAPIMockRecorder) GetPlanPreCondDuration() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlanPreCondDuration", reflect.TypeOf((*MockAPI)(nil).GetPlanPreCondDuration)) -} - // GetPlanRequiredDuration mocks base method. func (m *MockAPI) GetPlanRequiredDuration(goal, maxPower float64) time.Duration { m.ctrl.T.Helper() @@ -506,6 +505,20 @@ func (mr *MockAPIMockRecorder) GetPlanRequiredDuration(goal, maxPower any) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlanRequiredDuration", reflect.TypeOf((*MockAPI)(nil).GetPlanRequiredDuration), goal, maxPower) } +// GetPlanStrategy mocks base method. +func (m *MockAPI) GetPlanStrategy() api.PlanStrategy { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPlanStrategy") + ret0, _ := ret[0].(api.PlanStrategy) + return ret0 +} + +// GetPlanStrategy indicates an expected call of GetPlanStrategy. +func (mr *MockAPIMockRecorder) GetPlanStrategy() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlanStrategy", reflect.TypeOf((*MockAPI)(nil).GetPlanStrategy)) +} + // GetPriority mocks base method. func (m *MockAPI) GetPriority() int { m.ctrl.T.Helper() @@ -901,17 +914,31 @@ func (mr *MockAPIMockRecorder) SetPhasesConfigured(arg0 any) *gomock.Call { } // SetPlanEnergy mocks base method. -func (m *MockAPI) SetPlanEnergy(arg0 time.Time, arg1 time.Duration, arg2 float64) error { +func (m *MockAPI) SetPlanEnergy(arg0 time.Time, arg1 float64) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetPlanEnergy", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "SetPlanEnergy", arg0, arg1) ret0, _ := ret[0].(error) return ret0 } // SetPlanEnergy indicates an expected call of SetPlanEnergy. -func (mr *MockAPIMockRecorder) SetPlanEnergy(arg0, arg1, arg2 any) *gomock.Call { +func (mr *MockAPIMockRecorder) SetPlanEnergy(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPlanEnergy", reflect.TypeOf((*MockAPI)(nil).SetPlanEnergy), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPlanEnergy", reflect.TypeOf((*MockAPI)(nil).SetPlanEnergy), arg0, arg1) +} + +// SetPlanStrategy mocks base method. +func (m *MockAPI) SetPlanStrategy(arg0 api.PlanStrategy) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetPlanStrategy", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetPlanStrategy indicates an expected call of SetPlanStrategy. +func (mr *MockAPIMockRecorder) SetPlanStrategy(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPlanStrategy", reflect.TypeOf((*MockAPI)(nil).SetPlanStrategy), arg0) } // SetPriority mocks base method. diff --git a/core/loadpoint_api.go b/core/loadpoint_api.go index b9d4e5273..4eb9e8eac 100644 --- a/core/loadpoint_api.go +++ b/core/loadpoint_api.go @@ -343,19 +343,19 @@ func (lp *Loadpoint) SetLimitEnergy(energy float64) { } // GetPlanEnergy returns plan target energy -func (lp *Loadpoint) GetPlanEnergy() (time.Time, time.Duration, float64) { +func (lp *Loadpoint) GetPlanEnergy() (time.Time, float64) { lp.RLock() defer lp.RUnlock() return lp.getPlanEnergy() } // getPlanEnergy returns plan target energy -func (lp *Loadpoint) getPlanEnergy() (time.Time, time.Duration, float64) { - return lp.planTime, lp.planPrecondition, lp.planEnergy +func (lp *Loadpoint) getPlanEnergy() (time.Time, float64) { + return lp.planTime, lp.planEnergy } // setPlanEnergy sets plan target energy (no mutex) -func (lp *Loadpoint) setPlanEnergy(finishAt time.Time, precondition time.Duration, energy float64) { +func (lp *Loadpoint) setPlanEnergy(finishAt time.Time, energy float64) { lp.planEnergy = energy lp.publish(keys.PlanEnergy, energy) lp.settings.SetFloat(keys.PlanEnergy, energy) @@ -363,16 +363,12 @@ func (lp *Loadpoint) setPlanEnergy(finishAt time.Time, precondition time.Duratio // remove plan if energy == 0 { finishAt = time.Time{} - precondition = 0 } lp.planTime = finishAt - lp.planPrecondition = precondition lp.planEnergyOffset = lp.getChargedEnergy() / 1e3 lp.publish(keys.PlanTime, finishAt) - lp.publish(keys.PlanPrecondition, precondition) lp.settings.SetTime(keys.PlanTime, finishAt) - lp.settings.SetInt(keys.PlanPrecondition, int64(precondition.Seconds())) if finishAt.IsZero() { lp.setPlanActive(false) @@ -380,7 +376,7 @@ func (lp *Loadpoint) setPlanEnergy(finishAt time.Time, precondition time.Duratio } // SetPlanEnergy sets plan target energy -func (lp *Loadpoint) SetPlanEnergy(finishAt time.Time, precondition time.Duration, energy float64) error { +func (lp *Loadpoint) SetPlanEnergy(finishAt time.Time, energy float64) error { lp.Lock() defer lp.Unlock() @@ -391,14 +387,51 @@ func (lp *Loadpoint) SetPlanEnergy(finishAt time.Time, precondition time.Duratio lp.log.DEBUG.Printf("set plan energy: %.3gkWh @ %v", energy, finishAt.Round(time.Second).Local()) // apply immediately - if lp.planEnergy != energy || lp.planPrecondition != precondition || !lp.planTime.Equal(finishAt) { - lp.setPlanEnergy(finishAt, precondition, energy) + if lp.planEnergy != energy || !lp.planTime.Equal(finishAt) { + lp.setPlanEnergy(finishAt, energy) lp.requestUpdate() } return nil } +// setPlanStrategy sets the plan strategy (no mutex) +func (lp *Loadpoint) setPlanStrategy(strategy api.PlanStrategy) error { + if err := lp.settings.SetJson(keys.PlanStrategy, strategy); err != nil { + return err + } + + lp.planStrategy = strategy + lp.publish(keys.PlanPrecondition, int64(strategy.Precondition.Seconds())) + lp.publish(keys.PlanContinuous, strategy.Continuous) + + lp.requestUpdate() + + return nil +} + +// SetPlanStrategy sets the plan strategy +func (lp *Loadpoint) SetPlanStrategy(strategy api.PlanStrategy) error { + lp.Lock() + defer lp.Unlock() + + lp.log.DEBUG.Printf("set plan strategy: continuous=%v, precondition=%v", strategy.Continuous, strategy.Precondition) + + return lp.setPlanStrategy(strategy) +} + +// getPlanStrategy returns the plan strategy (no mutex) +func (lp *Loadpoint) getPlanStrategy() api.PlanStrategy { + return lp.planStrategy +} + +// GetPlanStrategy returns the plan strategy +func (lp *Loadpoint) GetPlanStrategy() api.PlanStrategy { + lp.RLock() + defer lp.RUnlock() + return lp.getPlanStrategy() +} + // GetSoc returns the PV mode threshold settings func (lp *Loadpoint) GetSocConfig() loadpoint.SocConfig { lp.RLock() diff --git a/core/loadpoint_effective.go b/core/loadpoint_effective.go index 010454b84..358f1d038 100644 --- a/core/loadpoint_effective.go +++ b/core/loadpoint_effective.go @@ -12,6 +12,7 @@ import ( // PublishEffectiveValues publishes all effective values func (lp *Loadpoint) PublishEffectiveValues() { + strategy := lp.EffectivePlanStrategy() lp.publish(keys.EffectivePriority, lp.EffectivePriority()) lp.publish(keys.EffectivePlanId, lp.EffectivePlanId()) lp.publish(keys.EffectivePlanTime, lp.EffectivePlanTime()) @@ -19,6 +20,8 @@ func (lp *Loadpoint) PublishEffectiveValues() { lp.publish(keys.EffectiveMinCurrent, lp.effectiveMinCurrent()) lp.publish(keys.EffectiveMaxCurrent, lp.effectiveMaxCurrent()) lp.publish(keys.EffectiveLimitSoc, lp.EffectiveLimitSoc()) + lp.publish(keys.EffectivePlanPrecondition, int64(strategy.Precondition.Seconds())) + lp.publish(keys.EffectivePlanContinuous, strategy.Continuous) } // EffectivePriority returns the effective priority @@ -32,11 +35,10 @@ func (lp *Loadpoint) EffectivePriority() int { } type plan struct { - Id int - Start time.Time // last possible start time - End time.Time // user-selected finish time - Precondition time.Duration - Soc int + Id int + Start time.Time // last possible start time + End time.Time // user-selected finish time + Soc int } func (lp *Loadpoint) nextActivePlan(maxPower float64, plans []plan) *plan { @@ -60,20 +62,20 @@ func (lp *Loadpoint) nextActivePlan(maxPower float64, plans []plan) *plan { } // NextVehiclePlan returns the next vehicle plan time, soc and id -func (lp *Loadpoint) NextVehiclePlan() (time.Time, time.Duration, int, int) { +func (lp *Loadpoint) NextVehiclePlan() (time.Time, int, int) { lp.RLock() defer lp.RUnlock() return lp.nextVehiclePlan() } -// nextVehiclePlan returns the next vehicle plan time, precondition duration, soc and id -func (lp *Loadpoint) nextVehiclePlan() (time.Time, time.Duration, int, int) { +// nextVehiclePlan returns the next vehicle plan time, soc, id +func (lp *Loadpoint) nextVehiclePlan() (time.Time, int, int) { if v := lp.GetVehicle(); v != nil { var plans []plan // static plan - if planTime, precondition, soc := vehicle.Settings(lp.log, v).GetPlanSoc(); soc != 0 { - plans = append(plans, plan{Id: 1, Precondition: precondition, Soc: soc, End: planTime}) + if planTime, soc := vehicle.Settings(lp.log, v).GetPlanSoc(); soc != 0 { + plans = append(plans, plan{Id: 1, Soc: soc, End: planTime}) } // repeating plans @@ -88,28 +90,27 @@ func (lp *Loadpoint) nextVehiclePlan() (time.Time, time.Duration, int, int) { continue } - precondition := time.Duration(rp.Precondition) * time.Second - plans = append(plans, plan{Id: index + 2, Precondition: precondition, Soc: rp.Soc, End: planTime}) + plans = append(plans, plan{Id: index + 2, Soc: rp.Soc, End: planTime}) } // calculate earliest required plan start if plan := lp.nextActivePlan(lp.effectiveMaxPower(), plans); plan != nil { - return plan.End, plan.Precondition, plan.Soc, plan.Id + return plan.End, plan.Soc, plan.Id } } - return time.Time{}, 0, 0, 0 + return time.Time{}, 0, 0 } // EffectivePlanSoc returns the soc target for the current plan func (lp *Loadpoint) EffectivePlanSoc() int { - _, _, soc, _ := lp.NextVehiclePlan() + _, soc, _ := lp.NextVehiclePlan() return soc } // EffectivePlanId returns the id for the current plan func (lp *Loadpoint) EffectivePlanId() int { if lp.socBasedPlanning() { - _, _, _, id := lp.NextVehiclePlan() + _, _, id := lp.NextVehiclePlan() return id } if lp.planEnergy > 0 { @@ -122,11 +123,11 @@ func (lp *Loadpoint) EffectivePlanId() int { // EffectivePlanTime returns the effective plan time func (lp *Loadpoint) EffectivePlanTime() time.Time { if lp.socBasedPlanning() { - ts, _, _, _ := lp.NextVehiclePlan() + ts, _, _ := lp.NextVehiclePlan() return ts } - ts, _, _ := lp.GetPlanEnergy() + ts, _ := lp.GetPlanEnergy() return ts } @@ -239,3 +240,20 @@ func (lp *Loadpoint) effectiveMaxPower() float64 { } return Voltage * lp.effectiveMaxCurrent() * float64(lp.maxActivePhases()) } + +// EffectivePlanStrategy returns the effective plan strategy +func (lp *Loadpoint) EffectivePlanStrategy() api.PlanStrategy { + lp.RLock() + defer lp.RUnlock() + return lp.getEffectivePlanStrategy() +} + +func (lp *Loadpoint) getEffectivePlanStrategy() api.PlanStrategy { + if v := lp.GetVehicle(); v != nil { + if lp.socBasedPlanning() { + return vehicle.Settings(lp.log, v).GetPlanStrategy() + } + } + + return lp.getPlanStrategy() +} diff --git a/core/loadpoint_plan.go b/core/loadpoint_plan.go index 608ff85b9..7e2839966 100644 --- a/core/loadpoint_plan.go +++ b/core/loadpoint_plan.go @@ -30,9 +30,9 @@ func (lp *Loadpoint) finishPlan() { if lp.repeatingPlanning() { return // noting to do } else if !lp.socBasedPlanning() { - lp.setPlanEnergy(time.Time{}, 0, 0) + lp.setPlanEnergy(time.Time{}, 0) } else if v := lp.GetVehicle(); v != nil { - vehicle.Settings(lp.log, v).SetPlanSoc(time.Time{}, 0, 0) + vehicle.Settings(lp.log, v).SetPlanSoc(time.Time{}, 0) } } @@ -67,36 +67,25 @@ func (lp *Loadpoint) GetPlanGoal() (float64, bool) { defer lp.RUnlock() if lp.socBasedPlanning() { - _, _, soc, _ := lp.nextVehiclePlan() + _, soc, _ := lp.nextVehiclePlan() return float64(soc), true } - _, _, limit := lp.getPlanEnergy() + _, limit := lp.getPlanEnergy() return limit, false } -// GetPlanPreCondDuration returns the plan precondition duration -func (lp *Loadpoint) GetPlanPreCondDuration() time.Duration { - lp.RLock() - defer lp.RUnlock() - - if lp.socBasedPlanning() { - _, precondition, _, _ := lp.nextVehiclePlan() - return precondition - } - - _, precondition, _ := lp.getPlanEnergy() - return precondition -} - // GetPlan creates a charging plan for given time and duration // The plan is sorted by time -func (lp *Loadpoint) GetPlan(targetTime time.Time, requiredDuration, precondition time.Duration) api.Rates { +func (lp *Loadpoint) GetPlan(targetTime time.Time, requiredDuration, precondition time.Duration, continuous bool) api.Rates { if lp.planner == nil || targetTime.IsZero() { return nil } - return lp.planner.Plan(requiredDuration, precondition, targetTime) + lp.log.TRACE.Printf("plan: creating plan with continuous=%v, precondition=%v, duration=%v, target=%v", + continuous, precondition, requiredDuration.Round(time.Second), targetTime.Round(time.Second).Local()) + + return lp.planner.Plan(requiredDuration, precondition, targetTime, continuous) } // plannerActive checks if the charging plan has a currently active slot @@ -146,7 +135,9 @@ func (lp *Loadpoint) plannerActive() (active bool) { return false } - plan = lp.GetPlan(planTime, requiredDuration, lp.GetPlanPreCondDuration()) + strategy := lp.getEffectivePlanStrategy() + + plan = lp.GetPlan(planTime, requiredDuration, strategy.Precondition, strategy.Continuous) if plan == nil { return false } diff --git a/core/planner/helper.go b/core/planner/helper.go index aebf48061..1b12f5818 100644 --- a/core/planner/helper.go +++ b/core/planner/helper.go @@ -4,6 +4,7 @@ import ( "time" "github.com/evcc-io/evcc/api" + "github.com/samber/lo" ) // Start returns the earliest slot's start time @@ -46,6 +47,9 @@ func AverageCost(plan api.Rates) float64 { duration += slotDuration cost += float64(slotDuration) * slot.Value } + if duration == 0 { + return 0 + } return cost / float64(duration) } @@ -80,3 +84,78 @@ func IsFirst(r api.Rate, plan api.Rates) bool { } return true } + +// clampRates filters rates to the given time window and adjusts boundary slots +func clampRates(rates api.Rates, start, end time.Time) api.Rates { + res := make(api.Rates, 0, len(rates)+2) + + for _, r := range rates { + // slot before continuous plan + if !r.End.After(start) { + continue + } + + // slot after continuous plan + if !r.Start.Before(end) { + continue + } + + // calculate adjusted bounds + adjustedStart := r.Start + if adjustedStart.Before(start) { + adjustedStart = start + } + + adjustedEnd := r.End + if adjustedEnd.After(end) { + adjustedEnd = end + } + + // skip if adjustment would create invalid slot + if !adjustedEnd.After(adjustedStart) { + continue + } + + slot := r + slot.Start = adjustedStart + slot.End = adjustedEnd + res = append(res, slot) + } + + return res +} + +// findContinuousWindow finds the cheapest continuous window of slots for the given duration. +// - rates are filtered to [now, targetTime] window by caller +// Returns the selected rates. +func findContinuousWindow(rates api.Rates, effectiveDuration time.Duration, targetTime time.Time) api.Rates { + var bestCost *float64 + var bestIndex *int + + for i := range rates { + windowEnd := rates[i].Start.Add(effectiveDuration) + if windowEnd.After(targetTime) { + break + } + + cost := lo.SumBy(clampRates(rates[i:], rates[i].Start, windowEnd), func(r api.Rate) float64 { + return float64(r.End.Sub(r.Start)) * r.Value + }) + + // Prefer later start if equal cost + if bestCost == nil || cost <= *bestCost { + bestCost = &cost + bestIndex = &i + } + } + + // No valid window found + if bestIndex == nil { + return nil + } + + // Build the best window only once + windowEnd := rates[*bestIndex].Start.Add(effectiveDuration) + + return clampRates(rates[*bestIndex:], rates[*bestIndex].Start, windowEnd) +} diff --git a/core/planner/helper_test.go b/core/planner/helper_test.go index 2206e7a17..92d656225 100644 --- a/core/planner/helper_test.go +++ b/core/planner/helper_test.go @@ -47,3 +47,49 @@ func TestIsFirst(t *testing.T) { // ensure single slot is always first require.True(t, IsFirst(first, []api.Rate{first})) } + +func TestDuration(t *testing.T) { + now := time.Now() + plan := api.Rates{ + {Start: now, End: now.Add(time.Hour)}, + {Start: now.Add(time.Hour), End: now.Add(time.Hour)}, // zero - without impact + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour)}, + } + require.Equal(t, 2*time.Hour, Duration(plan)) + require.Equal(t, time.Duration(0), Duration(api.Rates{})) +} + +func TestAverageCost(t *testing.T) { + now := time.Now() + plan := api.Rates{ + {Start: now, End: now.Add(30 * time.Minute), Value: 10.0}, // 0.5h * 10 = 5 + {Start: now, End: now, Value: 999.0}, // zero - ignored + {Start: now.Add(30 * time.Minute), End: now.Add(2 * time.Hour), Value: 20.0}, // 1.5h * 20 = 30 + } + require.Equal(t, 17.5, AverageCost(plan)) // (5 + 30) / 2h = 17.5 + require.Equal(t, 0.0, AverageCost(api.Rates{})) + require.Equal(t, 0.0, AverageCost(api.Rates{{Start: now, End: now, Value: 10}})) +} + +func TestStartEnd(t *testing.T) { + now := time.Now() + plan := api.Rates{ + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour)}, + {Start: now, End: now.Add(time.Hour)}, + } + require.Equal(t, now, Start(plan)) + require.Equal(t, now.Add(3*time.Hour), End(plan)) + require.True(t, Start(api.Rates{}).IsZero()) + require.True(t, End(api.Rates{}).IsZero()) +} + +func TestSlotAt(t *testing.T) { + now := time.Now() + plan := api.Rates{ + {Start: now, End: now.Add(time.Hour), Value: 1}, + {Start: now.Add(time.Hour), End: now.Add(2 * time.Hour), Value: 2}, + } + require.Equal(t, 1.0, SlotAt(now.Add(30*time.Minute), plan).Value) + require.Equal(t, 2.0, SlotAt(now.Add(90*time.Minute), plan).Value) + require.True(t, SlotAt(now.Add(3*time.Hour), plan).IsZero()) +} diff --git a/core/planner/planner.go b/core/planner/planner.go index 626898162..d27a2f88b 100644 --- a/core/planner/planner.go +++ b/core/planner/planner.go @@ -32,27 +32,13 @@ func New(log *util.Logger, tariff api.Tariff, opt ...func(t *Planner)) *Planner } // plan creates a lowest-cost plan or required duration. -// It MUST already established that +// It MUST already be established that: // - rates are sorted in ascending order by cost and descending order by start time (prefer late slots) -// - target time and required duration are before end of rates +// - rates are filtered to [now, targetTime] window by caller func (t *Planner) plan(rates api.Rates, requiredDuration time.Duration, targetTime time.Time) api.Rates { var plan api.Rates - for _, source := range rates { - // slot not relevant - if !(source.End.After(t.clock.Now()) && source.Start.Before(targetTime)) { - continue - } - - // adjust slot start and end - slot := source - if slot.Start.Before(t.clock.Now()) { - slot.Start = t.clock.Now() - } - if slot.End.After(targetTime) { - slot.End = targetTime - } - + for _, slot := range rates { slotDuration := slot.End.Sub(slot.Start) requiredDuration -= slotDuration @@ -65,10 +51,6 @@ func (t *Planner) plan(rates api.Rates, requiredDuration time.Duration, targetTi slot.End = slot.End.Add(requiredDuration) } requiredDuration = 0 - - if slot.End.Before(slot.Start) { - panic("slot end before start") - } } plan = append(plan, slot) @@ -82,34 +64,9 @@ func (t *Planner) plan(rates api.Rates, requiredDuration time.Duration, targetTi return plan } -// Plan creates a continuous emergency charging plan -func (t *Planner) continuousPlan(rates api.Rates, start, end time.Time) api.Rates { - rates.Sort() - - res := make(api.Rates, 0, len(rates)+2) - for _, r := range rates { - // slot before continuous plan - if !r.End.After(start) { - continue - } - - // slot after continuous plan - if !r.Start.Before(end) { - continue - } - - // adjust first slot - if r.Start.Before(start) && r.End.After(start) { - r.Start = start - } - - // adjust last slot - if r.Start.Before(end) && r.End.After(end) { - r.End = end - } - - res = append(res, r) - } +// continuousPlan creates a continuous emergency charging plan +func continuousPlan(rates api.Rates, start, end time.Time) api.Rates { + res := clampRates(rates, start, end) if len(res) == 0 { return []api.Rate{{ @@ -136,14 +93,16 @@ func (t *Planner) continuousPlan(rates api.Rates, start, end time.Time) api.Rate return res } -func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime time.Time) api.Rates { +func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime time.Time, continuous bool) api.Rates { if t == nil || requiredDuration <= 0 { return nil } + now := t.clock.Now().Truncate(time.Second) + latestStart := targetTime.Add(-requiredDuration) - if latestStart.Before(t.clock.Now()) { - latestStart = t.clock.Now() + if latestStart.Before(now) { + latestStart = now targetTime = latestStart.Add(requiredDuration) } @@ -169,15 +128,7 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime // consume remaining time if t.clock.Until(targetTime) <= requiredDuration { - return t.continuousPlan(rates, latestStart, targetTime) - } - - // cut off all rates after target time - for i := 1; i < len(rates); i++ { - if !rates[i].Start.Before(targetTime) { - rates = rates[:i] - break - } + return continuousPlan(rates, latestStart, targetTime) } // rates are by default sorted by date, oldest to newest @@ -192,7 +143,7 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime } // need to use some of the available slots - t.log.DEBUG.Printf("target time beyond available slots- reducing plan horizon from %v to %v", + t.log.DEBUG.Printf("planner: target time beyond available slots- reducing plan horizon from %v to %v", requiredDuration.Round(time.Second), durationAfterRates.Round(time.Second)) targetTime = last @@ -200,22 +151,51 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime precondition = max(precondition-durationAfterRates, 0) } + rates = clampRates(rates, now, targetTime) + // don't precondition longer than charging duration precondition = min(precondition, requiredDuration) // reduce target time by precondition duration targetTime = targetTime.Add(-precondition) - requiredDuration = max(requiredDuration-precondition, 0) // separate precond rates, to be appended to plan afterwards var precond api.Rates if precondition > 0 { rates, precond = splitPreconditionSlots(rates, targetTime) + + // reduce required duration by precondition, skip planning if required + requiredDuration = max(requiredDuration-precondition, 0) + if requiredDuration == 0 { + return precond + } } // create plan unless only precond slots remaining var plan api.Rates - if requiredDuration > 0 { + if continuous { + // check if available tariff slots span is sufficient for sliding window algorithm + // verify that actual tariff data covers enough duration (may have gaps or start late) + if len(rates) > 0 { + start := rates[0].Start + if start.Before(now) { + start = now + } + + end := rates[len(rates)-1].End + if end.After(targetTime) { + end = targetTime + } + + // available window too small for sliding window - charge continuously from now to target + if end.Sub(start) < requiredDuration { + return continuousPlan(append(rates, precond...), now, targetTime.Add(precondition)) + } + } + + // find cheapest continuous window + plan = findContinuousWindow(rates, requiredDuration, targetTime) + } else { // sort rates by price and time slices.SortStableFunc(rates, sortByCost) diff --git a/core/planner/planner_continuous_test.go b/core/planner/planner_continuous_test.go new file mode 100644 index 000000000..ff383ea87 --- /dev/null +++ b/core/planner/planner_continuous_test.go @@ -0,0 +1,717 @@ +package planner + +import ( + "testing" + "time" + + "github.com/benbjohnson/clock" + "github.com/evcc-io/evcc/api" + "github.com/evcc-io/evcc/tariff" + "github.com/evcc-io/evcc/util" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func TestContinuous_CheapestContiguousSlots(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + ctrl := gomock.NewController(t) + + rates := api.Rates{ + {Start: now, End: now.Add(1 * time.Hour), Value: 0.09}, + {Start: now.Add(1 * time.Hour), End: now.Add(2 * time.Hour), Value: 0.20}, + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.11}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.11}, + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.25}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: c, + tariff: trf, + } + + plan := p.Plan(2*time.Hour, 0, now.Add(6*time.Hour), true) + + require.Len(t, plan, 2) + assert.Equal(t, rates[2].Start, plan[0].Start) + assert.Equal(t, rates[3].End, plan[len(plan)-1].End) + assert.Equal(t, rates[2].Value, plan[0].Value) + assert.Equal(t, rates[3].Value, plan[1].Value) +} + +func TestContinuous_WindowWithPastRates(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + + rates := api.Rates{ + {Start: now.Add(-3 * time.Hour), End: now.Add(-2 * time.Hour), Value: 0.05}, + {Start: now.Add(-2 * time.Hour), End: now.Add(-1 * time.Hour), Value: 0.08}, + {Start: now.Add(-1 * time.Hour), End: now, Value: 0.07}, + {Start: now, End: now.Add(1 * time.Hour), Value: 0.20}, + {Start: now.Add(1 * time.Hour), End: now.Add(2 * time.Hour), Value: 0.09}, + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.15}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.11}, + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.25}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: c, + tariff: trf, + } + + targetTime := now.Add(6 * time.Hour) + requiredDuration := 2 * time.Hour + + plan := p.Plan(requiredDuration, 0, targetTime, true) + + require.NotEmpty(t, plan) + require.Len(t, plan, 2) + assert.False(t, plan[0].Start.Before(now)) + assert.Equal(t, now.Add(1*time.Hour), plan[0].Start) + assert.Equal(t, now.Add(3*time.Hour), plan[len(plan)-1].End) + assert.Equal(t, 0.09, plan[0].Value) + assert.Equal(t, 0.10, plan[1].Value) +} + +func TestContinuous_WindowAllRatesInPast(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + + rates := api.Rates{ + {Start: now.Add(-6 * time.Hour), End: now.Add(-5 * time.Hour), Value: 0.05}, + {Start: now.Add(-5 * time.Hour), End: now.Add(-4 * time.Hour), Value: 0.08}, + {Start: now.Add(-4 * time.Hour), End: now.Add(-3 * time.Hour), Value: 0.07}, + {Start: now.Add(-3 * time.Hour), End: now.Add(-2 * time.Hour), Value: 0.09}, + {Start: now.Add(-2 * time.Hour), End: now.Add(-1 * time.Hour), Value: 0.10}, + {Start: now.Add(-1 * time.Hour), End: now, Value: 0.11}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: c, + tariff: trf, + } + + targetTime := now.Add(3 * time.Hour) + requiredDuration := 2 * time.Hour + + plan := p.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + // When all rates are in the past and target is in future, expect nil plan + assert.Empty(t, plan, "plan should be nil when all rates are in the past") +} + +// TestContinuous_WindowRatesSpanningPastAndFuture tests continuous mode with rates +// spanning from past to future, where the optimal window would start in the past +func TestContinuous_WindowRatesSpanningPastAndFuture(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + + // Rates spanning from 3h before now to 6h after now + // The cheapest window would be -3h to -1h, but that's in the past + rates := api.Rates{ + {Start: now.Add(-3 * time.Hour), End: now.Add(-2 * time.Hour), Value: 0.05}, // cheapest, but past + {Start: now.Add(-2 * time.Hour), End: now.Add(-1 * time.Hour), Value: 0.06}, // cheap, but past + {Start: now.Add(-1 * time.Hour), End: now, Value: 0.12}, // partially past + {Start: now, End: now.Add(1 * time.Hour), Value: 0.15}, + {Start: now.Add(1 * time.Hour), End: now.Add(2 * time.Hour), Value: 0.08}, // cheapest future + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.09}, // second cheapest future + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.18}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.14}, + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.20}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: c, + tariff: trf, + } + + targetTime := now.Add(6 * time.Hour) + requiredDuration := 2 * time.Hour + + plan := p.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan) + require.Len(t, plan, 2) + + // Critical: plan must start at or after now, even if cheaper rates existed in the past + assert.False(t, plan[0].Start.Before(now), "plan must not start in the past") + + // Should find cheapest 2-hour window starting from now or later + // Expected: 1h-3h window (two slots with prices 0.08 and 0.09) + assert.Equal(t, now.Add(1*time.Hour), plan[0].Start, "start should be at cheapest future window") + assert.Equal(t, now.Add(3*time.Hour), plan[len(plan)-1].End, "end should match 2-hour window") + assert.Equal(t, 0.08, plan[0].Value, "first slot should have actual price") + assert.Equal(t, 0.09, plan[1].Value, "second slot should have actual price") +} + +// TestContinuous_WindowRatesStartInFuture tests continuous mode when tariff data +// starts in the future, but target time is within the tariff data range +func TestContinuous_WindowRatesStartInFuture(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + + rates := api.Rates{ + {Start: now.Add(1 * time.Hour), End: now.Add(2 * time.Hour), Value: 0.20}, + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.08}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.09}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.15}, + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.18}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: c, + tariff: trf, + } + + targetTime := now.Add(5 * time.Hour) + requiredDuration := 2 * time.Hour + + plan := p.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan) + require.Len(t, plan, 2) + + // Plan must not start in the past + assert.False(t, plan[0].Start.Before(now), "plan must not start in the past") + + // Should find cheapest 2-hour window within available rates + // Expected: 2h-4h window (two slots with prices 0.08 and 0.09) + assert.Equal(t, now.Add(2*time.Hour), plan[0].Start, "start should be at cheapest window in future rates") + assert.Equal(t, now.Add(4*time.Hour), plan[len(plan)-1].End, "end should match 2-hour window") + assert.Equal(t, 0.08, plan[0].Value, "first slot should have actual price") + assert.Equal(t, 0.09, plan[1].Value, "second slot should have actual price") +} + +func TestContinuous_WindowLateChargingPreference(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + + rates := api.Rates{ + {Start: now, End: now.Add(1 * time.Hour), Value: 0.10}, + {Start: now.Add(1 * time.Hour), End: now.Add(2 * time.Hour), Value: 0.10}, + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.10}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.10}, + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.15}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: c, + tariff: trf, + } + + targetTime := now.Add(6 * time.Hour) + requiredDuration := 2 * time.Hour + + plan := p.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan) + require.Len(t, plan, 2) + + // Should select the latest window with equal cost (3h-5h) + // All windows from 0h-2h, 1h-3h, 2h-4h, and 3h-5h have the same total cost + // But we prefer late charging, so 3h-5h should be selected + assert.Equal(t, now.Add(3*time.Hour), plan[0].Start, "should select latest window with equal cost") + assert.Equal(t, now.Add(5*time.Hour), plan[len(plan)-1].End, "end should be 2 hours after start") + assert.Equal(t, 0.10, plan[0].Value, "first slot should have actual price") + assert.Equal(t, 0.10, plan[1].Value, "second slot should have actual price") +} + +func TestContinuous_TargetAfterKnownPrices(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{0}, clock.Now(), time.Hour), nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + tariff: trf, + } + + plan := p.Plan(40*time.Minute, 0, clock.Now().Add(2*time.Hour), true) // charge efficiency does not allow to test with 1h + assert.False(t, !SlotAt(clock.Now(), plan).IsZero(), "should not start if car can be charged completely after known prices ") + + plan = p.Plan(2*time.Hour, 0, clock.Now().Add(2*time.Hour), true) + assert.True(t, !SlotAt(clock.Now(), plan).IsZero(), "should start if car can not be charged completely after known prices ") +} + +func TestContinuous_Precondition(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + trf := api.NewMockTariff(ctrl) + + trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{1, 2, 3, 4}, clock.Now(), tariff.SlotDuration), nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + tariff: trf, + } + + plan := p.Plan(tariff.SlotDuration, tariff.SlotDuration, clock.Now().Add(4*tariff.SlotDuration), true) + assert.Equal(t, api.Rates{ + { + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), + Value: 4, + }, + }, plan, "expected last slot") + + plan = p.Plan(2*tariff.SlotDuration, tariff.SlotDuration, clock.Now().Add(4*tariff.SlotDuration), true) + assert.Equal(t, api.Rates{ + { + Start: clock.Now(), + End: clock.Now().Add(1 * tariff.SlotDuration), + Value: 1, + }, + { + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), + Value: 4, + }, + }, plan, "expected two slots") + + plan = p.Plan(time.Duration(1.5*float64(tariff.SlotDuration)), tariff.SlotDuration, clock.Now().Add(4*tariff.SlotDuration), true) + assert.Equal(t, api.Rates{ + { + Start: clock.Now(), + End: clock.Now().Add(time.Duration(0.5 * float64(tariff.SlotDuration))), + Value: 1, + }, + { + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), + Value: 4, + }, + }, plan, "expected trimmed slot at beginning and precondition slot") + + plan = p.Plan(tariff.SlotDuration, 24*time.Hour, clock.Now().Add(time.Hour), true) + assert.Equal(t, api.Rates{ + { + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), + Value: 4, + }, + }, plan, "all precondition") +} + +func TestContinuous_Precondition_NonSlotBoundary(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + trf := api.NewMockTariff(ctrl) + + slotDuration := 15 * time.Minute + + // Create rates with 15-minute slots covering 8 hours (32 slots) + prices := make([]float64, 32) + for i := range prices { + prices[i] = float64(i + 1) + } + trf.EXPECT().Rates().AnyTimes().Return(rates(prices, clock.Now(), slotDuration), nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + tariff: trf, + } + + // Target time at 7:20 (non-slot boundary, between 7:15 and 7:30) + // 7:20 is 29 slots + 5 minutes from now + targetTime := clock.Now().Add(29*slotDuration + 5*time.Minute) + + // 30 minutes preconditioning, 1 hour charging + precondition := 30 * time.Minute + requiredDuration := 1 * time.Hour + + plan := p.Plan(requiredDuration, precondition, targetTime, true) + + // Verify precondition ends exactly at target time + require.NotEmpty(t, plan) + lastSlot := plan[len(plan)-1] + assert.Equal(t, targetTime, lastSlot.End, "precondition should end exactly at target time") + + // Calculate total precondition duration + var precondDuration time.Duration + // Precondition starts at targetTime - 30min = 6:50 + precondStart := targetTime.Add(-precondition) + for _, slot := range plan { + if !slot.Start.Before(precondStart) { + precondDuration += slot.End.Sub(slot.Start) + } + } + assert.Equal(t, precondition, precondDuration, "total precondition duration should be exactly 30 minutes") + + // In continuous mode, find cheapest continuous 30min window (after precondition reduction) + // Cheapest window: 01:00-01:30 (slots 0-1, prices 1+2) + // Precondition: 07:50-08:20 (exactly 30min before target at 08:20) + expectedPlan := api.Rates{ + // Charging slots (cheapest continuous 30 minutes) + {Start: clock.Now(), End: clock.Now().Add(slotDuration), Value: 1}, + {Start: clock.Now().Add(slotDuration), End: clock.Now().Add(2 * slotDuration), Value: 2}, + // Precondition slots (exactly 30min before target, trimmed at both ends) + {Start: targetTime.Add(-precondition), End: clock.Now().Add(28 * slotDuration), Value: 28}, + {Start: clock.Now().Add(28 * slotDuration), End: clock.Now().Add(29 * slotDuration), Value: 29}, + {Start: clock.Now().Add(29 * slotDuration), End: targetTime, Value: 30}, + } + + assert.Equal(t, expectedPlan, plan, "expected continuous charging slots and trimmed precondition slots") +} + +func TestPrecondition_Everything(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + trf := api.NewMockTariff(ctrl) + + // Create 8 hours of rates with varying prices (cheaper toward the end) + prices := []float64{10, 9, 8, 7, 6, 5, 4, 3} + trf.EXPECT().Rates().AnyTimes().Return(rates(prices, clock.Now(), tariff.SlotDuration), nil) + + p := &Planner{ + log: util.NewLogger("test"), + clock: clock, + tariff: trf, + } + + targetTime := clock.Now().Add(8 * tariff.SlotDuration) // 8 hours from now + requiredDuration := 2 * tariff.SlotDuration // need 2 hours + precondition := 7 * 24 * time.Hour // "everything" = 7 days + + // Test with continuous=false (cheapest mode - should be ignored) + plan := p.Plan(requiredDuration, precondition, targetTime, false) + + require.NotEmpty(t, plan, "plan should not be empty") + + // Plan should end exactly at target time + assert.Equal(t, targetTime, plan[len(plan)-1].End, "plan should end at target time") + + // Plan should have total duration = requiredDuration (NOT precondition duration) + totalDuration := Duration(plan) + assert.Equal(t, requiredDuration, totalDuration, "plan duration should equal required duration, not precondition") + + // Plan should start at latest possible time (targetTime - requiredDuration) + expectedStart := targetTime.Add(-requiredDuration) + assert.Equal(t, expectedStart, plan[0].Start, "plan should start at latest possible time") + + // Should contain actual rate data (slots 6-7 with prices 4, 3) + assert.Len(t, plan, 2, "should have 2 slots for 30-minute duration") + assert.Equal(t, 4.0, plan[0].Value, "should have actual rate value from slot 6") + assert.Equal(t, 3.0, plan[1].Value, "should have actual rate value from slot 7") + + // Test with continuous=true (should also be ignored when precondition=everything) + planContinuous := p.Plan(requiredDuration, precondition, targetTime, true) + assert.Equal(t, plan, planContinuous, "continuous flag should be ignored when precondition=everything") +} + +func TestContinuous_ContinuousPlanNoTariff(t *testing.T) { + clock := clock.NewMock() + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + } + + plan := p.Plan(time.Hour, 0, clock.Now(), true) + + // single-slot plan + assert.Len(t, plan, 1) + assert.Equal(t, clock.Now(), SlotAt(clock.Now(), plan).Start) + assert.Equal(t, clock.Now().Add(time.Hour), SlotAt(clock.Now(), plan).End) +} + +func TestContinuous_ContinuousPlan(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{0}, clock.Now().Add(time.Hour), time.Hour), nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + tariff: trf, + } + + plan := p.Plan(150*time.Minute, 0, clock.Now(), true) + + // 3-slot plan + assert.Len(t, plan, 3) +} + +func TestContinuous_ContinuousPlanOutsideRates(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{0}, clock.Now().Add(time.Hour), time.Hour), nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + tariff: trf, + } + + plan := p.Plan(30*time.Minute, 0, clock.Now(), true) + + // 3-slot plan + assert.Len(t, plan, 1) +} + +// TestContinuous_StartBeforeRates tests that when current time is before +// the first available rate, the planner waits and starts charging when +// rates become available, as long as there's enough time to reach the target +func TestContinuous_StartBeforeRates(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + log := util.NewLogger("test") + + // Rates start 2 hours in the future (gap from now until first rate) + rates := api.Rates{ + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.15}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.08}, // cheapest + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.20}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + planner := &Planner{ + log: log, + clock: c, + tariff: trf, + } + + targetTime := now.Add(6 * time.Hour) + requiredDuration := time.Hour + + plan := planner.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan, "plan should not be empty") + require.Len(t, plan, 1, "should create single slot with actual price") + + // Should wait until rates are available and pick the cheapest slot + assert.Equal(t, now.Add(4*time.Hour), plan[0].Start, "should start at cheapest available rate") + assert.Equal(t, now.Add(5*time.Hour), plan[0].End, "should end after required duration") + assert.Equal(t, 0.08, plan[0].Value, "should have actual price from cheapest slot") + + // Plan must not start before rates are available + assert.False(t, plan[0].Start.Before(rates[0].Start), "plan must not start before first available rate") +} + +// TestContinuous_StartBeforeRatesInsufficientTime tests that when current time +// is before the first available rate AND there's not enough time after rates +// start to complete charging before target, the planner starts charging as soon +// as rates become available (best effort approach) +func TestContinuous_StartBeforeRatesInsufficientTime(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + log := util.NewLogger("test") + + // Rates start 2 hours in the future, but we need 3 hours to charge + // and target is only 4 hours away (not enough time to fully charge) + rates := api.Rates{ + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.15}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + planner := &Planner{ + log: log, + clock: c, + tariff: trf, + } + + targetTime := now.Add(4 * time.Hour) + requiredDuration := 3 * time.Hour // Need 3h but only 2h available after rates start + + plan := planner.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan, "plan should not be empty") + + // Best effort: start immediately to maximize charging time + assert.Equal(t, now, plan[0].Start, "should start immediately") + assert.Equal(t, 0.0, plan[0].Value, "gap-filling slot before rates has no price") +} + +// TestContinuous_StartBeforeRatesSufficientTime tests that when current time +// is before the first available rate AND there IS enough time to complete +// charging, the planner finds the cheapest continuous window +func TestContinuous_StartBeforeRatesSufficientTime(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + log := util.NewLogger("test") + + // Rates start 2 hours in the future, we need 2 hours to charge + // and target is 8 hours away (enough time to optimize) + rates := api.Rates{ + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.20}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.15}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.10}, // cheapest + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.08}, // cheapest + {Start: now.Add(6 * time.Hour), End: now.Add(7 * time.Hour), Value: 0.12}, + {Start: now.Add(7 * time.Hour), End: now.Add(8 * time.Hour), Value: 0.25}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + planner := &Planner{ + log: log, + clock: c, + tariff: trf, + } + + targetTime := now.Add(8 * time.Hour) + requiredDuration := 2 * time.Hour + + plan := planner.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan, "plan should not be empty") + require.Len(t, plan, 2, "should find 2-hour continuous window") + + // Should find cheapest continuous 2-hour window (04:00-06:00) + assert.Equal(t, now.Add(4*time.Hour), plan[0].Start, "should start at cheapest window") + assert.Equal(t, 0.10, plan[0].Value, "first slot should have cheapest window price") + assert.Equal(t, 0.08, plan[1].Value, "second slot should have cheapest window price") +} + +// the target time (even at non-slot boundaries) by starting early +func TestContinuous_ExcessTimeFinishesAtTarget(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + ctrl := gomock.NewController(t) + log := util.NewLogger("test") + slotDuration := 15 * time.Minute + + // Create 20 slots of 15 minutes each (5 hours total) + // Prices: cheaper in the middle slots + prices := []float64{ + 0.30, 0.30, 0.30, 0.30, // 00:00-01:00 expensive + 0.15, 0.10, 0.10, 0.10, // 01:00-02:00 medium+cheap + 0.08, 0.08, 0.08, 0.08, // 02:00-03:00 cheapest + 0.12, 0.12, 0.12, 0.12, // 03:00-04:00 medium + 0.20, 0.20, 0.20, 0.20, // 04:00-05:00 expensive + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates(prices, now, slotDuration), nil) + + planner := &Planner{ + log: log, + clock: c, + tariff: trf, + } + + // Target at 03:10 (non-slot boundary - 10 minutes into the 03:00-03:15 slot) + targetTime := now.Add(3*time.Hour + 10*time.Minute) + requiredDuration := 2*time.Hour + 5*time.Minute // need 2h5m, have 3h10m available + + plan := planner.Plan(requiredDuration, 0, targetTime, true) // continuous, no precondition + + require.NotEmpty(t, plan) + + // Plan must not extend beyond target + lastSlot := plan[len(plan)-1] + assert.False(t, lastSlot.End.After(targetTime), + "plan must not extend beyond target") + + // Total duration must equal required duration + assert.Equal(t, requiredDuration, Duration(plan), "plan duration must match required") + + // Plan should use the cheapest slots (02:00-03:00 range, prices 0.08) + avgCost := AverageCost(plan) + assert.Less(t, avgCost, 0.12, "plan should use cheaper slots") + + // Target at 03:10 (non-slot boundary - must finish before target) + requiredDurationShort := 12 * time.Minute // need 12m, have 3h10m available + plan = planner.Plan(requiredDurationShort, 0, targetTime, true) // continuous, no precondition + + require.NotEmpty(t, plan) + + // Plan must not extend beyond target + lastSlotShort := plan[len(plan)-1] + assert.False(t, lastSlotShort.End.After(targetTime), + "plan must not extend beyond target") + + // Total duration must equal required duration + assert.Equal(t, requiredDurationShort, Duration(plan), "plan (short) duration must match required") + + // Plan should use the cheapest slots + avgCostShort := AverageCost(plan) + assert.Equal(t, 0.08, avgCostShort, "plan (short) should use cheapest slots (0.08)") + + // Target at 03:10 (non-slot boundary - must finish before target) + requiredDurationMedium := 27 * time.Minute // need 27m, have 3h10m available + plan = planner.Plan(requiredDurationMedium, 0, targetTime, true) // continuous, no precondition + + require.NotEmpty(t, plan) + + // Plan must not extend beyond target + lastSlotMedium := plan[len(plan)-1] + assert.False(t, lastSlotMedium.End.After(targetTime), + "plan must not extend beyond target") + + // Total duration must equal required duration + assert.Equal(t, requiredDurationMedium, Duration(plan), "plan (medium) duration must match required") + + // Plan should use the cheapest slots + avgCostMedium := AverageCost(plan) + assert.Equal(t, 0.08, avgCostMedium, "plan (medium) should use cheapest slots (0.08)") +} diff --git a/core/planner/planner_test.go b/core/planner/planner_test.go index b2f28d2d7..e3825e21b 100644 --- a/core/planner/planner_test.go +++ b/core/planner/planner_test.go @@ -7,6 +7,7 @@ import ( "github.com/benbjohnson/clock" "github.com/evcc-io/evcc/api" + "github.com/evcc-io/evcc/tariff" "github.com/evcc-io/evcc/util" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -17,7 +18,7 @@ func rates(prices []float64, start time.Time, slotDuration time.Duration) api.Ra res := make(api.Rates, 0, len(prices)) for i, v := range prices { - slotStart := start.Add(time.Duration(i) * time.Hour) + slotStart := start.Add(time.Duration(i) * slotDuration) ar := api.Rate{ Start: slotStart, End: slotStart.Add(slotDuration), @@ -29,15 +30,16 @@ func rates(prices []float64, start time.Time, slotDuration time.Duration) api.Ra return res } -// func dumpRates(rr api.Rates) string { -// var b []byte -// for _, r := range rr { -// b = fmt.Appendf(b, "%+v\n", r) -// } -// return string(b) -// } +func TestClampRates(t *testing.T) { + clock := clock.NewMock() + rr := rates([]float64{0, 1}, clock.Now(), time.Hour) -// TODO start before start of rates + assert.Equal(t, rr, clampRates(rr, clock.Now(), clock.Now().Add(2*time.Hour))) + assert.Equal(t, rates([]float64{0}, clock.Now(), time.Hour), clampRates(rr, clock.Now(), clock.Now().Add(time.Hour))) + + exp := api.Rates{{Start: clock.Now().Add(time.Hour), End: clock.Now().Add(2 * time.Hour), Value: 1}} + assert.Equal(t, exp, clampRates(rr, clock.Now().Add(time.Hour), clock.Now().Add(2*time.Hour))) +} func TestPlan(t *testing.T) { clock := clock.NewMock() @@ -57,7 +59,8 @@ func TestPlan(t *testing.T) { slices.SortStableFunc(rates, sortByCost) { - plan := p.plan(rates, time.Hour, clock.Now()) + // filter rates to [now, now] window - should return empty + plan := p.plan(clampRates(rates, clock.Now(), clock.Now()), time.Hour, clock.Now()) assert.Empty(t, plan) } @@ -125,7 +128,8 @@ func TestPlan(t *testing.T) { for i, tc := range tc { t.Log(tc.desc) clock.Set(tc.now) - plan := p.plan(rates, tc.duration, tc.target) + // filter rates to [now, target] window as caller would do + plan := p.plan(clampRates(rates, tc.now, tc.target), tc.duration, tc.target) assert.Equalf(t, tc.planStart.UTC(), Start(plan).UTC(), "case %d start", i) assert.Equalf(t, tc.duration, Duration(plan), "case %d duration", i) @@ -141,7 +145,7 @@ func TestNilTariff(t *testing.T) { clock: clock, } - plan := p.Plan(time.Hour, 0, clock.Now().Add(30*time.Minute)) + plan := p.Plan(time.Hour, 0, clock.Now().Add(30*time.Minute), false) assert.Equal(t, api.Rates{ { Start: clock.Now(), @@ -163,7 +167,7 @@ func TestRatesError(t *testing.T) { tariff: trf, } - plan := p.Plan(time.Hour, 0, clock.Now().Add(30*time.Minute)) + plan := p.Plan(time.Hour, 0, clock.Now().Add(30*time.Minute), false) assert.Equal(t, api.Rates{ { Start: clock.Now(), @@ -192,10 +196,10 @@ func TestFlatTariffTargetInThePast(t *testing.T) { }, } - plan := p.Plan(time.Hour, 0, clock.Now().Add(30*time.Minute)) + plan := p.Plan(time.Hour, 0, clock.Now().Add(30*time.Minute), false) assert.Equal(t, simplePlan, plan, "expected simple plan") - plan = p.Plan(time.Hour, 0, clock.Now().Add(-30*time.Minute)) + plan = p.Plan(time.Hour, 0, clock.Now().Add(-30*time.Minute), false) assert.Equal(t, simplePlan, plan, "expected simple plan") } @@ -216,12 +220,12 @@ func TestFlatTariffLongSlots(t *testing.T) { // that slots are not longer than 1 hour and with that context this is not a problem // expect 00:00-01:00 UTC - plan := p.Plan(time.Hour, 0, clock.Now().Add(2*time.Hour)) + plan := p.Plan(time.Hour, 0, clock.Now().Add(2*time.Hour), false) assert.Equal(t, api.Rate{Start: clock.Now(), End: clock.Now().Add(time.Hour)}, SlotAt(clock.Now(), plan)) assert.Equal(t, api.Rate{}, SlotAt(clock.Now().Add(time.Hour), plan)) // expect 00:00-01:00 UTC - plan = p.Plan(time.Hour, 0, clock.Now().Add(time.Hour)) + plan = p.Plan(time.Hour, 0, clock.Now().Add(time.Hour), false) assert.Equal(t, api.Rate{Start: clock.Now(), End: clock.Now().Add(time.Hour)}, SlotAt(clock.Now(), plan)) } @@ -238,10 +242,10 @@ func TestTargetAfterKnownPrices(t *testing.T) { tariff: trf, } - plan := p.Plan(40*time.Minute, 0, clock.Now().Add(2*time.Hour)) // charge efficiency does not allow to test with 1h + plan := p.Plan(40*time.Minute, 0, clock.Now().Add(2*time.Hour), false) // charge efficiency does not allow to test with 1h assert.False(t, !SlotAt(clock.Now(), plan).IsZero(), "should not start if car can be charged completely after known prices ") - plan = p.Plan(2*time.Hour, 0, clock.Now().Add(2*time.Hour)) + plan = p.Plan(2*time.Hour, 0, clock.Now().Add(2*time.Hour), false) assert.True(t, !SlotAt(clock.Now(), plan).IsZero(), "should start if car can not be charged completely after known prices ") } @@ -265,19 +269,18 @@ func TestChargeAfterTargetTime(t *testing.T) { }, } - plan := p.Plan(time.Hour, 0, clock.Now()) + plan := p.Plan(time.Hour, 0, clock.Now(), false) assert.Equal(t, simplePlan, plan, "expected simple plan") - plan = p.Plan(time.Hour, 0, clock.Now().Add(-time.Hour)) + plan = p.Plan(time.Hour, 0, clock.Now().Add(-time.Hour), false) assert.Equal(t, simplePlan, plan, "expected simple plan") } func TestPrecondition(t *testing.T) { clock := clock.NewMock() ctrl := gomock.NewController(t) - trf := api.NewMockTariff(ctrl) - trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{1, 2, 3, 4}, clock.Now(), time.Hour), nil) + trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{1, 2, 3, 4}, clock.Now(), tariff.SlotDuration), nil) p := &Planner{ log: util.NewLogger("foo"), @@ -285,54 +288,120 @@ func TestPrecondition(t *testing.T) { tariff: trf, } - plan := p.Plan(time.Hour, time.Hour, clock.Now().Add(4*time.Hour)) + plan := p.Plan(tariff.SlotDuration, tariff.SlotDuration, clock.Now().Add(4*tariff.SlotDuration), false) assert.Equal(t, api.Rates{ { - Start: clock.Now().Add(3 * time.Hour), - End: clock.Now().Add(4 * time.Hour), + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), Value: 4, }, }, plan, "expected last slot") - // NOTE: with 15min slots we no longer expect late start of the slot - plan = p.Plan(2*time.Hour, time.Hour, clock.Now().Add(4*time.Hour)) + plan = p.Plan(2*tariff.SlotDuration, tariff.SlotDuration, clock.Now().Add(4*tariff.SlotDuration), false) + assert.Equal(t, api.Rates{ { Start: clock.Now(), - End: clock.Now().Add(1 * time.Hour), + End: clock.Now().Add(1 * tariff.SlotDuration), Value: 1, }, { - Start: clock.Now().Add(3 * time.Hour), - End: clock.Now().Add(4 * time.Hour), + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), Value: 4, }, }, plan, "expected two slots") - plan = p.Plan(time.Hour, 30*time.Minute, clock.Now().Add(4*time.Hour)) + plan = p.Plan(time.Duration(1.5*float64(tariff.SlotDuration)), tariff.SlotDuration, clock.Now().Add(4*tariff.SlotDuration), false) assert.Equal(t, api.Rates{ { Start: clock.Now(), - End: clock.Now().Add(30 * time.Minute), + End: clock.Now().Add(time.Duration(0.5 * float64(tariff.SlotDuration))), Value: 1, }, { - Start: clock.Now().Add(210 * time.Minute), // 3.5h - End: clock.Now().Add(4 * time.Hour), // 4.0h + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), Value: 4, }, - }, plan, "expected short early and split late slot") + }, plan, "expected trimmed slot at beginning and precondition slot") - plan = p.Plan(time.Hour, 24*time.Hour, clock.Now().Add(4*time.Hour)) + plan = p.Plan(tariff.SlotDuration, 24*time.Hour, clock.Now().Add(time.Hour), false) assert.Equal(t, api.Rates{ { - Start: clock.Now().Add(3 * time.Hour), - End: clock.Now().Add(4 * time.Hour), + Start: clock.Now().Add(3 * tariff.SlotDuration), + End: clock.Now().Add(4 * tariff.SlotDuration), Value: 4, }, }, plan, "all precondition") } +func TestPrecondition_NonSlotBoundary(t *testing.T) { + clock := clock.NewMock() + ctrl := gomock.NewController(t) + trf := api.NewMockTariff(ctrl) + + slotDuration := 15 * time.Minute + + // Create rates with 15-minute slots covering 8 hours (32 slots) + prices := make([]float64, 32) + for i := range prices { + prices[i] = float64(i + 1) + } + trf.EXPECT().Rates().AnyTimes().Return(rates(prices, clock.Now(), slotDuration), nil) + + p := &Planner{ + log: util.NewLogger("foo"), + clock: clock, + tariff: trf, + } + + // Target time at 7:20 (non-slot boundary, between 7:15 and 7:30) + // 7:20 is 29 slots + 5 minutes from now + targetTime := clock.Now().Add(29*slotDuration + 5*time.Minute) + + // 30 minutes preconditioning, 1 hour charging + precondition := 30 * time.Minute + requiredDuration := 1 * time.Hour + + plan := p.Plan(requiredDuration, precondition, targetTime, false) + + // Verify precondition ends exactly at target time + require.NotEmpty(t, plan) + lastSlot := plan[len(plan)-1] + assert.Equal(t, targetTime, lastSlot.End, "precondition should end exactly at target time") + + // Calculate total precondition duration + var precondDuration time.Duration + // Precondition starts at targetTime - 30min = 6:50 + precondStart := targetTime.Add(-precondition) + for _, slot := range plan { + if !slot.Start.Before(precondStart) { + precondDuration += slot.End.Sub(slot.Start) + } + } + assert.Equal(t, precondition, precondDuration, "total precondition duration should be exactly 30 minutes") + + // Verify expected slots structure + // Note: precondition (30min) reduces effective required duration from 1h to 30min + // Cheapest 30min charging: slots at 01:00-01:30 (slots 0-1, prices 1,2) + // Precondition: 07:50-08:20 (exactly 30min before target at 08:20) + // - 07:45-08:00 (slot 27, price 28) -> trimmed to 07:50-08:00 (10min) + // - 08:00-08:15 (slot 28, price 29) -> full slot (15min) + // - 08:15-08:30 (slot 29, price 30) -> trimmed to 08:15-08:20 (5min) + expectedPlan := api.Rates{ + // Charging slots (cheapest 30 minutes after precondition reduction) + {Start: clock.Now(), End: clock.Now().Add(slotDuration), Value: 1}, + {Start: clock.Now().Add(slotDuration), End: clock.Now().Add(2 * slotDuration), Value: 2}, + // Precondition slots (exactly 30min before target, trimmed at both ends) + {Start: targetTime.Add(-precondition), End: clock.Now().Add(28 * slotDuration), Value: 28}, + {Start: clock.Now().Add(28 * slotDuration), End: clock.Now().Add(29 * slotDuration), Value: 29}, + {Start: clock.Now().Add(29 * slotDuration), End: targetTime, Value: 30}, + } + + assert.Equal(t, expectedPlan, plan, "expected charging slots and trimmed precondition slots") +} + func TestContinuousPlanNoTariff(t *testing.T) { clock := clock.NewMock() @@ -341,7 +410,7 @@ func TestContinuousPlanNoTariff(t *testing.T) { clock: clock, } - plan := p.Plan(time.Hour, 0, clock.Now()) + plan := p.Plan(time.Hour, 0, clock.Now(), false) // single-slot plan assert.Len(t, plan, 1) @@ -362,7 +431,7 @@ func TestContinuousPlan(t *testing.T) { tariff: trf, } - plan := p.Plan(150*time.Minute, 0, clock.Now()) + plan := p.Plan(150*time.Minute, 0, clock.Now(), false) // 3-slot plan assert.Len(t, plan, 3) @@ -381,8 +450,93 @@ func TestContinuousPlanOutsideRates(t *testing.T) { tariff: trf, } - plan := p.Plan(30*time.Minute, 0, clock.Now()) + plan := p.Plan(30*time.Minute, 0, clock.Now(), false) // 3-slot plan assert.Len(t, plan, 1) } + +// TestStartBeforeRates tests that when current time is before +// the first available rate, the planner waits and starts charging when +// rates become available, as long as there's enough time to reach the target +func TestStartBeforeRates(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + log := util.NewLogger("test") + + // Rates start 2 hours in the future (gap from now until first rate) + rates := api.Rates{ + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.15}, + {Start: now.Add(4 * time.Hour), End: now.Add(5 * time.Hour), Value: 0.08}, // cheapest + {Start: now.Add(5 * time.Hour), End: now.Add(6 * time.Hour), Value: 0.20}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + planner := &Planner{ + log: log, + clock: c, + tariff: trf, + } + + targetTime := now.Add(6 * time.Hour) + requiredDuration := time.Hour + + plan := planner.Plan(requiredDuration, 0, targetTime, true) // continuous mode + + require.NotEmpty(t, plan, "plan should not be empty") + require.Len(t, plan, 1, "should create single slot with actual price") + + // Should wait until rates are available and pick the cheapest slot + assert.Equal(t, now.Add(4*time.Hour), plan[0].Start, "should start at cheapest available rate") + assert.Equal(t, now.Add(5*time.Hour), plan[0].End, "should end after required duration") + assert.Equal(t, 0.08, plan[0].Value, "should have actual price from cheapest slot") + + // Plan must not start before rates are available + assert.False(t, plan[0].Start.Before(rates[0].Start), "plan must not start before first available rate") +} + +// TestStartBeforeRatesInsufficientTime tests that when current time +// is before the first available rate AND there's not enough time after rates +// start to complete charging before target, the planner starts charging as soon +// as rates become available (best effort approach) +func TestStartBeforeRatesInsufficientTime(t *testing.T) { + now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) + c := clock.NewMock() + c.Set(now) + + ctrl := gomock.NewController(t) + log := util.NewLogger("test") + + // Rates start 2 hours in the future, but we need 3 hours to charge + // and target is only 4 hours away (not enough time to fully charge) + rates := api.Rates{ + {Start: now.Add(2 * time.Hour), End: now.Add(3 * time.Hour), Value: 0.10}, + {Start: now.Add(3 * time.Hour), End: now.Add(4 * time.Hour), Value: 0.15}, + } + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates, nil) + + planner := &Planner{ + log: log, + clock: c, + tariff: trf, + } + + targetTime := now.Add(4 * time.Hour) + requiredDuration := 3 * time.Hour // Need 3h but only 2h available after rates start + + plan := planner.Plan(requiredDuration, 0, targetTime, false) // dispersed mode + + require.NotEmpty(t, plan, "plan should not be empty - starts when rates become available") + + // Best effort: start as soon as rates are available + assert.Equal(t, now.Add(2*time.Hour), plan[0].Start, "should start at first available rate") + assert.Equal(t, 0.10, plan[0].Value, "should use first available rate price") +} diff --git a/core/site_vehicles.go b/core/site_vehicles.go index 043a669f4..f4fc55215 100644 --- a/core/site_vehicles.go +++ b/core/site_vehicles.go @@ -14,24 +14,26 @@ import ( type planStruct struct { Soc int `json:"soc"` + Continuous bool `json:"continuous"` Precondition int64 `json:"precondition"` Time time.Time `json:"time"` } type vehicleStruct struct { - Title string `json:"title"` - Icon string `json:"icon,omitempty"` - Capacity float64 `json:"capacity,omitempty"` - Phases int `json:"phases,omitempty"` - MinSoc int `json:"minSoc,omitempty"` - LimitSoc int `json:"limitSoc,omitempty"` - MinCurrent float64 `json:"minCurrent,omitempty"` - MaxCurrent float64 `json:"maxCurrent,omitempty"` - MaxPower float64 `json:"maxPower,omitempty"` - Priority int `json:"priority,omitempty"` - Features []string `json:"features,omitempty"` - Plan *planStruct `json:"plan,omitempty"` - RepeatingPlans []api.RepeatingPlan `json:"repeatingPlans"` + Title string `json:"title"` + Icon string `json:"icon,omitempty"` + Capacity float64 `json:"capacity,omitempty"` + Phases int `json:"phases,omitempty"` + MinSoc int `json:"minSoc,omitempty"` + LimitSoc int `json:"limitSoc,omitempty"` + MinCurrent float64 `json:"minCurrent,omitempty"` + MaxCurrent float64 `json:"maxCurrent,omitempty"` + Priority int `json:"priority,omitempty"` + Features []string `json:"features,omitempty"` + Plan *planStruct `json:"plan,omitempty"` + RepeatingPlans []api.RepeatingPlan `json:"repeatingPlans"` + PlanPrecondition int64 `json:"planPrecondition"` + PlanContinuous bool `json:"planContinuous"` } // publishVehicles returns a list of vehicle titles @@ -46,30 +48,32 @@ func (site *Site) publishVehicles() { } ac := instance.OnIdentified() + strategy := v.GetPlanStrategy() var plan *planStruct - if time, precondition, soc := v.GetPlanSoc(); !time.IsZero() { - plan = &planStruct{Soc: soc, Precondition: int64(precondition.Seconds()), Time: time} + if time, soc := v.GetPlanSoc(); !time.IsZero() { + plan = &planStruct{Soc: soc, Precondition: int64(strategy.Precondition.Seconds()), Time: time} } res[v.Name()] = vehicleStruct{ - Title: instance.GetTitle(), - Icon: instance.Icon(), - Capacity: instance.Capacity(), - Phases: instance.Phases(), - MinSoc: v.GetMinSoc(), - LimitSoc: v.GetLimitSoc(), - MinCurrent: ac.MinCurrent, - MaxCurrent: ac.MaxCurrent, - MaxPower: ac.MaxPower, - Priority: ac.Priority, - Features: lo.Map(instance.Features(), func(f api.Feature, _ int) string { return f.String() }), - Plan: plan, - RepeatingPlans: v.GetRepeatingPlans(), + Title: instance.GetTitle(), + Icon: instance.Icon(), + Capacity: instance.Capacity(), + Phases: instance.Phases(), + MinSoc: v.GetMinSoc(), + LimitSoc: v.GetLimitSoc(), + MinCurrent: ac.MinCurrent, + MaxCurrent: ac.MaxCurrent, + Priority: ac.Priority, + Features: lo.Map(instance.Features(), func(f api.Feature, _ int) string { return f.String() }), + Plan: plan, + RepeatingPlans: v.GetRepeatingPlans(), + PlanPrecondition: int64(strategy.Precondition.Seconds()), + PlanContinuous: strategy.Continuous, } if lp := site.coordinator.Owner(instance); lp != nil { - lp.PublishEffectiveValues() + go lp.PublishEffectiveValues() } } diff --git a/core/vehicle/adapter.go b/core/vehicle/adapter.go index e801c26f5..40fbaf5eb 100644 --- a/core/vehicle/adapter.go +++ b/core/vehicle/adapter.go @@ -71,24 +71,20 @@ func (v *adapter) SetLimitSoc(soc int) { } // GetPlanSoc returns the charge plan soc -func (v *adapter) GetPlanSoc() (time.Time, time.Duration, int) { +func (v *adapter) GetPlanSoc() (time.Time, int) { var ts time.Time if v, err := settings.Time(v.key() + keys.PlanTime); err == nil { ts = v } - var precondition time.Duration - if v, err := settings.Int(v.key() + keys.PlanPrecondition); err == nil { - precondition = time.Duration(v) * time.Second - } var soc int if v, err := settings.Int(v.key() + keys.PlanSoc); err == nil { soc = int(v) } - return ts, precondition, soc + return ts, soc } // SetPlanSoc sets the charge plan soc -func (v *adapter) SetPlanSoc(ts time.Time, precondition time.Duration, soc int) error { +func (v *adapter) SetPlanSoc(ts time.Time, soc int) error { if !ts.IsZero() && ts.Before(time.Now()) { return errors.New("timestamp is in the past") } @@ -98,11 +94,10 @@ func (v *adapter) SetPlanSoc(ts time.Time, precondition time.Duration, soc int) ts = time.Time{} v.log.DEBUG.Printf("delete %s plan", v.name) } else { - v.log.DEBUG.Printf("set %s plan soc: %d @ %v (precondition: %v)", v.name, soc, ts.Round(time.Second).Local(), precondition) + v.log.DEBUG.Printf("set %s plan soc: %d @ %v", v.name, soc, ts.Round(time.Second).Local()) } settings.SetTime(v.key()+keys.PlanTime, ts) - settings.SetInt(v.key()+keys.PlanPrecondition, int64(precondition.Seconds())) settings.SetInt(v.key()+keys.PlanSoc, int64(soc)) v.publish() @@ -125,10 +120,11 @@ func (v *adapter) SetRepeatingPlans(plans []api.RepeatingPlan) error { } } + if err := settings.SetJson(v.key()+keys.RepeatingPlans, plans); err != nil { + return err + } + v.log.DEBUG.Printf("update repeating plans for %s to: %v", v.name, plans) - - settings.SetJson(v.key()+keys.RepeatingPlans, plans) - v.publish() return nil @@ -143,3 +139,22 @@ func (v *adapter) GetRepeatingPlans() []api.RepeatingPlan { return plans } + +func (v *adapter) GetPlanStrategy() api.PlanStrategy { + var strategy api.PlanStrategy + if err := settings.Json(v.key()+keys.PlanStrategy, &strategy); err != nil { + return api.PlanStrategy{} + } + return strategy +} + +func (v *adapter) SetPlanStrategy(planStrategy api.PlanStrategy) error { + if err := settings.SetJson(v.key()+keys.PlanStrategy, planStrategy); err != nil { + return err + } + + v.log.DEBUG.Printf("update plan strategy for vehicle %s (precondition: %vs, continuous: %v)", v.name, planStrategy.Continuous, planStrategy.Precondition) + v.publish() + + return nil +} diff --git a/core/vehicle/api.go b/core/vehicle/api.go index da134d852..5dde92b6d 100644 --- a/core/vehicle/api.go +++ b/core/vehicle/api.go @@ -39,15 +39,20 @@ type API interface { SetLimitSoc(soc int) // GetPlanSoc returns the charge plan soc - GetPlanSoc() (time.Time, time.Duration, int) + GetPlanSoc() (time.Time, int) // SetPlanSoc sets the charge plan time and soc - SetPlanSoc(time.Time, time.Duration, int) error + SetPlanSoc(time.Time, int) error // GetRepeatingPlans returns every repeating plan GetRepeatingPlans() []api.RepeatingPlan // SetRepeatingPlans stores every repeating plan SetRepeatingPlans([]api.RepeatingPlan) error + // GetPlanStrategy returns the plan strategy + GetPlanStrategy() api.PlanStrategy + // SetPlanStrategy sets the plan strategy + SetPlanStrategy(api.PlanStrategy) error + // // GetMinCurrent returns the min charging current // GetMinCurrent() float64 // // SetMinCurrent sets the min charging current diff --git a/core/vehicle/dummy.go b/core/vehicle/dummy.go index a648d7830..fe76e9381 100644 --- a/core/vehicle/dummy.go +++ b/core/vehicle/dummy.go @@ -39,12 +39,12 @@ func (v *dummy) SetLimitSoc(soc int) { } // GetPlanSoc returns the charge plan soc -func (v *dummy) GetPlanSoc() (time.Time, time.Duration, int) { - return time.Time{}, 0, 0 +func (v *dummy) GetPlanSoc() (time.Time, int) { + return time.Time{}, 0 } // SetPlanSoc sets the charge plan soc -func (v *dummy) SetPlanSoc(ts time.Time, precondition time.Duration, soc int) error { +func (v *dummy) SetPlanSoc(ts time.Time, soc int) error { return nil } @@ -56,3 +56,11 @@ func (v *dummy) SetRepeatingPlans(plans []api.RepeatingPlan) error { func (v *dummy) GetRepeatingPlans() []api.RepeatingPlan { return nil } + +func (v *dummy) GetPlanStrategy() api.PlanStrategy { + return api.PlanStrategy{} +} + +func (v *dummy) SetPlanStrategy(strategy api.PlanStrategy) error { + return nil +} diff --git a/core/vehicle/mock.go b/core/vehicle/mock.go index 120335104..5db465b22 100644 --- a/core/vehicle/mock.go +++ b/core/vehicle/mock.go @@ -70,13 +70,12 @@ func (mr *MockAPIMockRecorder) GetMinSoc() *gomock.Call { } // GetPlanSoc mocks base method. -func (m *MockAPI) GetPlanSoc() (time.Time, time.Duration, int) { +func (m *MockAPI) GetPlanSoc() (time.Time, int) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetPlanSoc") ret0, _ := ret[0].(time.Time) - ret1, _ := ret[1].(time.Duration) - ret2, _ := ret[2].(int) - return ret0, ret1, ret2 + ret1, _ := ret[1].(int) + return ret0, ret1 } // GetPlanSoc indicates an expected call of GetPlanSoc. @@ -85,6 +84,20 @@ func (mr *MockAPIMockRecorder) GetPlanSoc() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlanSoc", reflect.TypeOf((*MockAPI)(nil).GetPlanSoc)) } +// GetPlanStrategy mocks base method. +func (m *MockAPI) GetPlanStrategy() api.PlanStrategy { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPlanStrategy") + ret0, _ := ret[0].(api.PlanStrategy) + return ret0 +} + +// GetPlanStrategy indicates an expected call of GetPlanStrategy. +func (mr *MockAPIMockRecorder) GetPlanStrategy() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlanStrategy", reflect.TypeOf((*MockAPI)(nil).GetPlanStrategy)) +} + // GetRepeatingPlans mocks base method. func (m *MockAPI) GetRepeatingPlans() []api.RepeatingPlan { m.ctrl.T.Helper() @@ -152,17 +165,31 @@ func (mr *MockAPIMockRecorder) SetMinSoc(soc any) *gomock.Call { } // SetPlanSoc mocks base method. -func (m *MockAPI) SetPlanSoc(arg0 time.Time, arg1 time.Duration, arg2 int) error { +func (m *MockAPI) SetPlanSoc(arg0 time.Time, arg1 int) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetPlanSoc", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "SetPlanSoc", arg0, arg1) ret0, _ := ret[0].(error) return ret0 } // SetPlanSoc indicates an expected call of SetPlanSoc. -func (mr *MockAPIMockRecorder) SetPlanSoc(arg0, arg1, arg2 any) *gomock.Call { +func (mr *MockAPIMockRecorder) SetPlanSoc(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPlanSoc", reflect.TypeOf((*MockAPI)(nil).SetPlanSoc), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPlanSoc", reflect.TypeOf((*MockAPI)(nil).SetPlanSoc), arg0, arg1) +} + +// SetPlanStrategy mocks base method. +func (m *MockAPI) SetPlanStrategy(arg0 api.PlanStrategy) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetPlanStrategy", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetPlanStrategy indicates an expected call of SetPlanStrategy. +func (mr *MockAPIMockRecorder) SetPlanStrategy(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPlanStrategy", reflect.TypeOf((*MockAPI)(nil).SetPlanStrategy), arg0) } // SetRepeatingPlans mocks base method. diff --git a/i18n/bg.json b/i18n/bg.json index 1601f5d67..44dfb1319 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -636,11 +636,12 @@ "modalTitle": "План за зареждане", "none": "няма", "planNumber": "План {number}", - "preconditionDescription": "Зареди за {duration} преди тръгване, за да бъде кондиционирана батерията на автомобила.", - "preconditionLong": "Късно зареждане", - "preconditionOptionAll": "всичко", - "preconditionOptionNo": "не", - "preconditionShort": "Късно", + "precondition": { + "description": "Зареди за {duration} преди тръгване, за да бъде кондиционирана батерията на автомобила.", + "label": "Късно зареждане", + "optionAll": "всичко", + "optionNo": "не" + }, "remove": "Премахване", "repeating": "повтарящ се", "repeatingPlans": "Повтарящи се планове", diff --git a/i18n/cs.json b/i18n/cs.json index 5aaabcc04..34295adae 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -814,11 +814,12 @@ "modalTitle": "Plán nabíjení", "none": "Žádný", "planNumber": "Plán {number}", - "preconditionDescription": "Nabíjení bude dokončeno {duration} před časem odjezdu. Vhodné v zimě pro zahřátí baterie či její šetření při vyšším stavu nabití.", - "preconditionLong": "Odložené nabíjení", - "preconditionOptionAll": "všechen", - "preconditionOptionNo": "ne", - "preconditionShort": "Odložené nabíjení", + "precondition": { + "description": "Nabíjení bude dokončeno {duration} před časem odjezdu. Vhodné v zimě pro zahřátí baterie či její šetření při vyšším stavu nabití.", + "label": "Odložené nabíjení", + "optionAll": "všechen", + "optionNo": "ne" + }, "remove": "Odebrat", "repeating": "opakující se", "repeatingPlans": "Opakující se plány", diff --git a/i18n/da.json b/i18n/da.json index 7eee310c7..22954c773 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -889,11 +889,12 @@ "modalTitle": "Lade plan", "none": "ingen", "planNumber": "Plan {number}", - "preconditionDescription": "Oplad {duration} før afgang til batterikonditionering.", - "preconditionLong": "Sen opladning", - "preconditionOptionAll": "alt", - "preconditionOptionNo": "nej", - "preconditionShort": "Sen", + "precondition": { + "description": "Oplad {duration} før afgang til batterikonditionering.", + "label": "Sen opladning", + "optionAll": "alt", + "optionNo": "nej" + }, "remove": "Fjern", "repeating": "Gentager", "repeatingPlans": "Gentager plan", diff --git a/i18n/de.json b/i18n/de.json index b1baa2971..a740889dc 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -877,16 +877,23 @@ "goal": "Ladeziel", "modalTitle": "Ladeplanung", "none": "keiner", + "optimization": { + "cheapest": "günstigst", + "continuous": "kontinuierlich", + "label": "Optimierung" + }, "planNumber": "Plan {number}", - "preconditionDescription": "Lade {duration} vor Abfahrt zur Batterie-Vorkonditionierung.", - "preconditionLong": "Spätes Laden", - "preconditionOptionAll": "alles", - "preconditionOptionNo": "nein", - "preconditionShort": "Spät", + "precondition": { + "description": "Lade {duration} vor Abfahrt zur Batterie-Vorkonditionierung.", + "label": "Spätes Laden", + "optionAll": "alles", + "optionNo": "nein" + }, "remove": "Entfernen", "repeating": "wiederholend", "repeatingPlans": "Wiederholende Pläne", "selectAll": "Alle wählen", + "strategySettings": "Strategie-Einstellungen", "time": "Zeit", "title": "Plan", "titleMinSoc": "Min. Ladung", diff --git a/i18n/el.json b/i18n/el.json index a6e106648..9a61de87f 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -798,11 +798,12 @@ "modalTitle": "Πρόγραμμα Φόρτισης", "none": "κανένα", "planNumber": "Πρόγραμμα {number}", - "preconditionDescription": "Φορτίστε {duration} πριν από την αναχώρηση για προετοιμασία μπαταρίας.", - "preconditionLong": "Καθυστερημένη φόρτιση", - "preconditionOptionAll": "Όλα", - "preconditionOptionNo": "Όχι", - "preconditionShort": "Αργά", + "precondition": { + "description": "Φορτίστε {duration} πριν από την αναχώρηση για προετοιμασία μπαταρίας.", + "label": "Καθυστερημένη φόρτιση", + "optionAll": "Όλα", + "optionNo": "Όχι" + }, "remove": "Αφαίρεση", "repeating": "επαναλαμβανόμενο", "repeatingPlans": "Επαναλαμβανόμενα προγράμματα", diff --git a/i18n/en.json b/i18n/en.json index c9c06b6bb..3d1f141c4 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -877,16 +877,23 @@ "goal": "Charging goal", "modalTitle": "Charging Plan", "none": "none", + "optimization": { + "cheapest": "cheapest", + "continuous": "continuous", + "label": "Optimization" + }, "planNumber": "Plan {number}", - "preconditionDescription": "Charge {duration} before departure for battery preconditioning.", - "preconditionLong": "Late Charging", - "preconditionOptionAll": "everything", - "preconditionOptionNo": "no", - "preconditionShort": "Late", + "precondition": { + "description": "Charge {duration} before departure for battery preconditioning.", + "label": "Late Charging", + "optionAll": "everything", + "optionNo": "no" + }, "remove": "Remove", "repeating": "repeating", "repeatingPlans": "Repeating plans", "selectAll": "Select all", + "strategySettings": "Strategy settings", "time": "Time", "title": "Plan", "titleMinSoc": "Min charge", diff --git a/i18n/fi.json b/i18n/fi.json index 06a653849..6869bfeb5 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -888,11 +888,12 @@ "modalTitle": "Lataussuunnitelma", "none": "ei mitään", "planNumber": "Suunnitelma {number}", - "preconditionDescription": "Ladataan {duration} ennen lähtöä akunesilämmitystä varten.", - "preconditionLong": "Viimehetken lataus", - "preconditionOptionAll": "koko latausmäärä", - "preconditionOptionNo": "ei", - "preconditionShort": "Viimehetkellinen", + "precondition": { + "description": "Ladataan {duration} ennen lähtöä akunesilämmitystä varten.", + "label": "Viimehetken lataus", + "optionAll": "koko latausmäärä", + "optionNo": "ei" + }, "remove": "Poista", "repeating": "toistetaan", "repeatingPlans": "Toistuvat suunnitelmat", diff --git a/i18n/fr.json b/i18n/fr.json index bd11a5454..8f2689346 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -888,11 +888,12 @@ "modalTitle": "Planification de la charge", "none": "aucune", "planNumber": "Planning {number}", - "preconditionDescription": "Charge {duration} avant le départ pour pré-conditionner la batterie.", - "preconditionLong": "Chargement tardif", - "preconditionOptionAll": "tous", - "preconditionOptionNo": "non", - "preconditionShort": "Tardif", + "precondition": { + "description": "Charge {duration} avant le départ pour pré-conditionner la batterie.", + "label": "Chargement tardif", + "optionAll": "tous", + "optionNo": "non" + }, "remove": "Enlever", "repeating": "récurrent", "repeatingPlans": "Plannings récurrents", diff --git a/i18n/hr.json b/i18n/hr.json index 102944abf..6b23f3d6a 100644 --- a/i18n/hr.json +++ b/i18n/hr.json @@ -818,11 +818,12 @@ "modalTitle": "Plan punjenja", "none": "nema, dodaj", "planNumber": "Plan {number}", - "preconditionDescription": "Punjenje {duration} prije polaska kako bi se izvršilo predkondicioniranje baterije.", - "preconditionLong": "Kasnije punjenje", - "preconditionOptionAll": "sve", - "preconditionOptionNo": "ne", - "preconditionShort": "Kasno", + "precondition": { + "description": "Punjenje {duration} prije polaska kako bi se izvršilo predkondicioniranje baterije.", + "label": "Kasnije punjenje", + "optionAll": "sve", + "optionNo": "ne" + }, "remove": "Ukloni", "repeating": "ponavljanje", "repeatingPlans": "Ponavljajući planovi", diff --git a/i18n/hu.json b/i18n/hu.json index 7af003e47..3fc41e2c1 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -786,11 +786,12 @@ "modalTitle": "Töltési Tervezet", "none": "nincs", "planNumber": "Terv {number}", - "preconditionDescription": "Töltse {duration} indulás előtt az akkumulátor előkondícionálásához.", - "preconditionLong": "Késleltetett Töltés", - "preconditionOptionAll": "minden", - "preconditionOptionNo": "nem", - "preconditionShort": "Később", + "precondition": { + "description": "Töltse {duration} indulás előtt az akkumulátor előkondícionálásához.", + "label": "Késleltetett Töltés", + "optionAll": "minden", + "optionNo": "nem" + }, "remove": "Törlés", "repeating": "ismétlődő", "repeatingPlans": "Ismétlődő tervek", diff --git a/i18n/it.json b/i18n/it.json index 8d4fed497..6c1e9711e 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -616,11 +616,12 @@ "modalTitle": "Piano di ricarica", "none": "nessuno", "planNumber": "Piano {number}", - "preconditionDescription": "Carica {duration} prima della partenza per pre-condizionare la batteria.", - "preconditionLong": "Carica ritardata", - "preconditionOptionAll": "tutto", - "preconditionOptionNo": "no", - "preconditionShort": "Ritardata", + "precondition": { + "description": "Carica {duration} prima della partenza per pre-condizionare la batteria.", + "label": "Carica ritardata", + "optionAll": "tutto", + "optionNo": "no" + }, "remove": "Rimuovi", "repeating": "ricorrente", "repeatingPlans": "Piani ricorrenti", diff --git a/i18n/lb.json b/i18n/lb.json index 6e0fff1d8..b321d6c82 100644 --- a/i18n/lb.json +++ b/i18n/lb.json @@ -887,11 +887,12 @@ "modalTitle": "Luedplanifikatioun", "none": "keng", "planNumber": "Planifkatioun {number}", - "preconditionDescription": "Luetzäit {duration} virum Fortfuere fir Batterie-Prekonditionéierung.", - "preconditionLong": "Verspéit Lueden", - "preconditionOptionAll": "Alles", - "preconditionOptionNo": "Nee", - "preconditionShort": "Spéit", + "precondition": { + "description": "Luetzäit {duration} virum Fortfuere fir Batterie-Prekonditionéierung.", + "label": "Verspéit Lueden", + "optionAll": "Alles", + "optionNo": "Nee" + }, "remove": "Ewechhuelen", "repeating": "widderhuelend", "repeatingPlans": "Widderhuelend Planifikatiounen", diff --git a/i18n/lt.json b/i18n/lt.json index 11962b699..9446a6ca0 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -889,11 +889,12 @@ "modalTitle": "Įkrovimo planas", "none": "nėra", "planNumber": "Planas {number}", - "preconditionDescription": "Įkrovimas {duration} prieš išvykstant, baterijos paruošimui.", - "preconditionLong": "Vėlyvas įkrovimas", - "preconditionOptionAll": "viskas", - "preconditionOptionNo": "ne", - "preconditionShort": "Vėlai", + "precondition": { + "description": "Įkrovimas {duration} prieš išvykstant, baterijos paruošimui.", + "label": "Vėlyvas įkrovimas", + "optionAll": "viskas", + "optionNo": "ne" + }, "remove": "Pašalinti", "repeating": "kartojasi", "repeatingPlans": "Pasikartojantys planai", diff --git a/i18n/nl.json b/i18n/nl.json index a70a2a9ea..1b9432a6f 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -888,11 +888,12 @@ "modalTitle": "Laad Plan", "none": "geen", "planNumber": "Schema {number}", - "preconditionDescription": "Laad {duration} voor vertrek voor accu voorbereiding.", - "preconditionLong": "Laat Opladen", - "preconditionOptionAll": "alles", - "preconditionOptionNo": "nee", - "preconditionShort": "Laat", + "precondition": { + "description": "Laad {duration} voor vertrek voor accu voorbereiding.", + "label": "Laat Opladen", + "optionAll": "alles", + "optionNo": "nee" + }, "remove": "Verwijderen", "repeating": "herhalend", "repeatingPlans": "Herhalende schema's", diff --git a/i18n/pl.json b/i18n/pl.json index c66725ab1..29bb36cb9 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -509,11 +509,12 @@ "goal": "Cel ładowania", "modalTitle": "Plan ładowania", "none": "brak", - "preconditionDescription": "Naładuj {duration} przed wyjazdem dla wstępnego kondycjonowania akumulatora.", - "preconditionLong": "Późniejsze ładowanie", - "preconditionOptionAll": "wszystko", - "preconditionOptionNo": "nie", - "preconditionShort": "Później", + "precondition": { + "description": "Naładuj {duration} przed wyjazdem dla wstępnego kondycjonowania akumulatora.", + "label": "Późniejsze ładowanie", + "optionAll": "wszystko", + "optionNo": "nie" + }, "remove": "Wymaż", "repeating": "powtórzenie", "repeatingPlans": "Powtarzające się plany", diff --git a/i18n/pt.json b/i18n/pt.json index ddb8320dc..ea3e27b77 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -887,11 +887,12 @@ "modalTitle": "Plano de carga", "none": "nenhum", "planNumber": "Plano {number}", - "preconditionDescription": "Carregar {duration} antes da partida para pré-condicionamento da bateria.", - "preconditionLong": "Carga tardia", - "preconditionOptionAll": "tudo", - "preconditionOptionNo": "não", - "preconditionShort": "Tarde", + "precondition": { + "description": "Carregar {duration} antes da partida para pré-condicionamento da bateria.", + "label": "Carga tardia", + "optionAll": "tudo", + "optionNo": "não" + }, "remove": "Apagar", "repeating": "recorrente", "repeatingPlans": "Repetição de planos", diff --git a/i18n/sv.json b/i18n/sv.json index 3ecf08cfb..1f31cf92b 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -889,11 +889,12 @@ "modalTitle": "Laddplan", "none": "ingen", "planNumber": "Plan {number}", - "preconditionDescription": "Ladda {duration} före avfärd för batteriuppvärmning.", - "preconditionLong": "Sen laddning", - "preconditionOptionAll": "allt", - "preconditionOptionNo": "nej", - "preconditionShort": "Sen", + "precondition": { + "description": "Ladda {duration} före avfärd för batteriuppvärmning.", + "label": "Sen laddning", + "optionAll": "allt", + "optionNo": "nej" + }, "remove": "Ta bort", "repeating": "återkommande", "repeatingPlans": "Återkommande planer", diff --git a/i18n/ta.json b/i18n/ta.json index f4117f4e4..6abfd6e87 100644 --- a/i18n/ta.json +++ b/i18n/ta.json @@ -683,11 +683,12 @@ "modalTitle": "மின்சேர்வி திட்டம்", "none": "எதுவுமில்லை", "planNumber": "திட்டம் {number}", - "preconditionDescription": "பேட்டரி முன்நிபந்தனைக்கு புறப்படுவதற்கு முன் {duration} சார்ஜ் செய்யவும்.", - "preconditionLong": "தாமதமாக சார்சிங்", - "preconditionOptionAll": "எல்லாம்", - "preconditionOptionNo": "இல்லை", - "preconditionShort": "தாமதமாக", + "precondition": { + "description": "பேட்டரி முன்நிபந்தனைக்கு புறப்படுவதற்கு முன் {duration} சார்ஜ் செய்யவும்.", + "label": "தாமதமாக சார்சிங்", + "optionAll": "எல்லாம்", + "optionNo": "இல்லை" + }, "remove": "அகற்று", "repeating": "மறுநிகழ்தல்", "repeatingPlans": "மறுநிகழ்வு திட்டங்கள்", diff --git a/i18n/tr.json b/i18n/tr.json index 366b84418..97f8211d0 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -887,11 +887,12 @@ "modalTitle": "Doldurma Planı", "none": "yok", "planNumber": "Plan {number}", - "preconditionDescription": "Batarya ön ısıtması için kalkıştan önce {duration} doldur.", - "preconditionLong": "Geç doldurma", - "preconditionOptionAll": "hepsi", - "preconditionOptionNo": "hayır", - "preconditionShort": "Geç", + "precondition": { + "description": "Batarya ön ısıtması için kalkıştan önce {duration} doldur.", + "label": "Geç doldurma", + "optionAll": "hepsi", + "optionNo": "hayır" + }, "remove": "Kaldır", "repeating": "“tekrarlanan”", "repeatingPlans": "“Tekrarlanan planlar”", diff --git a/i18n/uk.json b/i18n/uk.json index 608d412a8..399d38bce 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -889,11 +889,12 @@ "modalTitle": "Тарифний план", "none": "немає", "planNumber": "План {number}", - "preconditionDescription": "Зарядіть {duration} перед відправленням для попередньої підготовки акумулятора.", - "preconditionLong": "Пізня зарядка", - "preconditionOptionAll": "все", - "preconditionOptionNo": "ні", - "preconditionShort": "Пізно", + "precondition": { + "description": "Зарядіть {duration} перед відправленням для попередньої підготовки акумулятора.", + "label": "Пізня зарядка", + "optionAll": "все", + "optionNo": "ні" + }, "remove": "Yсувати", "repeating": "повторення", "repeatingPlans": "Повторювані плани", diff --git a/i18n/zh-Hans.json b/i18n/zh-Hans.json index 33d9d2f57..0db908a02 100644 --- a/i18n/zh-Hans.json +++ b/i18n/zh-Hans.json @@ -610,11 +610,12 @@ "modalTitle": "充电计划", "none": "无", "planNumber": "计划 {number}", - "preconditionDescription": "出发前充电 {duration} 以进行电池预处理。", - "preconditionLong": "延迟充电", - "preconditionOptionAll": "全部", - "preconditionOptionNo": "否", - "preconditionShort": "延迟", + "precondition": { + "description": "出发前充电 {duration} 以进行电池预处理。", + "label": "延迟充电", + "optionAll": "全部", + "optionNo": "否" + }, "remove": "移除", "repeating": "重复", "repeatingPlans": "重复计划", diff --git a/push/hub.go b/push/hub.go index 2a3e96f0e..addb76219 100644 --- a/push/hub.go +++ b/push/hub.go @@ -85,7 +85,7 @@ func (h *Hub) apply(ev Event, tmpl string) (string, error) { if v, err := h.vehicles.ByName(name); err == nil { attr["vehicleLimitSoc"] = v.GetLimitSoc() attr["vehicleMinSoc"] = v.GetMinSoc() - attr["vehiclePlanTime"], _, attr["vehiclePlanSoc"] = v.GetPlanSoc() + attr["vehiclePlanTime"], attr["vehiclePlanSoc"] = v.GetPlanSoc() instance := v.Instance() attr["vehicleTitle"] = instance.GetTitle() diff --git a/server/helper.go b/server/helper.go index da270c65a..ed6c84428 100644 --- a/server/helper.go +++ b/server/helper.go @@ -9,7 +9,6 @@ import ( "slices" "strconv" "strings" - "time" ) // pass converts a simple api without return value to api with nil error return value @@ -29,21 +28,6 @@ func parseFloat(payload string) (float64, error) { return f, err } -// parseDuration parses a duration string as seconds -func parseDuration(payload string) (time.Duration, error) { - if payload == "" { - return 0, nil - } - v, err := strconv.Atoi(payload) - if err != nil { - return 0, err - } - if v < 0 { - return 0, fmt.Errorf("invalid duration: %s", payload) - } - return time.Duration(v) * time.Second, err -} - // jsonDecoder returns a json decoder with disallowed unknown fields func jsonDecoder(r io.Reader) *json.Decoder { dec := json.NewDecoder(r) diff --git a/server/http.go b/server/http.go index 7aa0b8bf6..1579deb67 100644 --- a/server/http.go +++ b/server/http.go @@ -173,6 +173,7 @@ func (s *HTTPd) RegisterSiteHandlers(site site.API, valueChan chan<- util.Param) "plan": {"POST", "/vehicles/{name:[a-zA-Z0-9_.:-]+}/plan/soc/{value:[0-9]+}/{time:[0-9TZ:.+-]+}", planSocHandler(site)}, "plan2": {"DELETE", "/vehicles/{name:[a-zA-Z0-9_.:-]+}/plan/soc", planSocRemoveHandler(site)}, "repeatingPlans": {"POST", "/vehicles/{name:[a-zA-Z0-9_.:-]+}/plan/repeating", addRepeatingPlansHandler(site)}, + "planStrategy": {"POST", "/vehicles/{name:[a-zA-Z0-9_.:-]+}/plan/strategy", updatePlanStrategyHandler(site)}, // config ui // "mode": {"POST", "/mode/{value:[a-z]+}", chargeModeHandler(v)}, @@ -199,9 +200,9 @@ func (s *HTTPd) RegisterSiteHandlers(site site.API, valueChan chan<- util.Param) "phases": {"POST", "/phases/{value:[0-9]+}", intHandler(lp.SetPhasesConfigured, lp.GetPhasesConfigured)}, "plan": {"GET", "/plan", planHandler(lp)}, "staticPlanPreview": {"GET", "/plan/static/preview/{type:(?:soc|energy)}/{value:[0-9.]+}/{time:[0-9TZ:.+-]+}", staticPlanPreviewHandler(lp)}, - "repeatingPlanPreview": {"GET", "/plan/repeating/preview/{soc:[0-9]+}/{weekdays:[0-6,]+}/{time:[0-2][0-9]:[0-5][0-9]}/{tz:[a-zA-Z0-9_./:-]+}", repeatingPlanPreviewHandler(lp)}, "planenergy": {"POST", "/plan/energy/{value:[0-9.]+}/{time:[0-9TZ:.+-]+}", planEnergyHandler(lp)}, "planenergy2": {"DELETE", "/plan/energy", planRemoveHandler(lp)}, + "planStrategy": {"POST", "/plan/strategy", planStrategyHandler(lp)}, "vehicle": {"POST", "/vehicle/{name:[a-zA-Z0-9_.:-]+}", vehicleSelectHandler(site, lp)}, "vehicle2": {"DELETE", "/vehicle", vehicleRemoveHandler(lp)}, "vehicleDetect": {"PATCH", "/vehicle", vehicleDetectHandler(lp)}, diff --git a/server/http_config_loadpoint_handler.go b/server/http_config_loadpoint_handler.go index 90972c6bb..af4441b60 100644 --- a/server/http_config_loadpoint_handler.go +++ b/server/http_config_loadpoint_handler.go @@ -27,7 +27,7 @@ func getLoadpointStaticConfig(lp loadpoint.API) loadpoint.StaticConfig { } func getLoadpointDynamicConfig(lp loadpoint.API) loadpoint.DynamicConfig { - planTime, planPrecondition, planEnergy := lp.GetPlanEnergy() + planTime, planEnergy := lp.GetPlanEnergy() return loadpoint.DynamicConfig{ Title: lp.GetTitle(), DefaultMode: string(lp.GetDefaultMode()), @@ -41,7 +41,7 @@ func getLoadpointDynamicConfig(lp loadpoint.API) loadpoint.DynamicConfig { Soc: lp.GetSocConfig(), PlanEnergy: planEnergy, PlanTime: planTime, - PlanPrecondition: int64(planPrecondition.Seconds()), + PlanStrategy: lp.GetPlanStrategy(), LimitEnergy: lp.GetLimitEnergy(), LimitSoc: lp.GetLimitSoc(), } diff --git a/server/http_loadpoint_handler.go b/server/http_loadpoint_handler.go index a8deae57c..92fbf7d03 100644 --- a/server/http_loadpoint_handler.go +++ b/server/http_loadpoint_handler.go @@ -5,31 +5,31 @@ import ( "fmt" "net/http" "strconv" - "strings" "time" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/core/loadpoint" "github.com/evcc-io/evcc/core/site" - "github.com/evcc-io/evcc/util" "github.com/gorilla/mux" ) type PlanResponse struct { - PlanId int `json:"planId"` - PlanTime time.Time `json:"planTime"` - Duration int64 `json:"duration"` - Precondition int64 `json:"precondition"` - Plan api.Rates `json:"plan"` - Power float64 `json:"power"` + PlanId int `json:"planId"` + PlanTime time.Time `json:"planTime"` + Duration int64 `json:"duration"` + Plan api.Rates `json:"plan"` + Power float64 `json:"power"` } type PlanPreviewResponse struct { - PlanTime time.Time `json:"planTime"` - Duration int64 `json:"duration"` - Precondition int64 `json:"precondition"` - Plan api.Rates `json:"plan"` - Power float64 `json:"power"` + PlanTime time.Time `json:"planTime"` + Duration int64 `json:"duration"` + Plan api.Rates `json:"plan"` + Power float64 `json:"power"` + + // TODO remove + Continuous bool `json:"continuous"` + Precondition int64 `json:"precondition"` } // planHandler returns the current plan @@ -40,17 +40,16 @@ func planHandler(lp loadpoint.API) http.HandlerFunc { id := lp.EffectivePlanId() goal, _ := lp.GetPlanGoal() - precondition := lp.GetPlanPreCondDuration() requiredDuration := lp.GetPlanRequiredDuration(goal, maxPower) - plan := lp.GetPlan(planTime, requiredDuration, precondition) + strategy := lp.EffectivePlanStrategy() + plan := lp.GetPlan(planTime, requiredDuration, strategy.Precondition, strategy.Continuous) res := PlanResponse{ - PlanId: id, - PlanTime: planTime, - Duration: int64(requiredDuration.Seconds()), - Precondition: int64(precondition.Seconds()), - Plan: plan, - Power: maxPower, + PlanId: id, + PlanTime: planTime, + Duration: int64(requiredDuration.Seconds()), + Plan: plan, + Power: maxPower, } jsonWrite(w, res) @@ -61,7 +60,6 @@ func planHandler(lp loadpoint.API) http.HandlerFunc { func staticPlanPreviewHandler(lp loadpoint.API) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) - query := r.URL.Query() planTime, err := time.ParseInLocation(time.RFC3339, vars["time"], nil) if err != nil { @@ -75,12 +73,6 @@ func staticPlanPreviewHandler(lp loadpoint.API) http.HandlerFunc { return } - precondition, err := parseDuration(query.Get("precondition")) - if err != nil { - jsonError(w, http.StatusBadRequest, err) - return - } - switch typ := vars["type"]; typ { case "soc": if !lp.SocBasedPlanning() { @@ -99,66 +91,19 @@ func staticPlanPreviewHandler(lp loadpoint.API) http.HandlerFunc { maxPower := lp.EffectiveMaxPower() requiredDuration := lp.GetPlanRequiredDuration(goal, maxPower) - plan := lp.GetPlan(planTime, requiredDuration, precondition) + strategy := lp.EffectivePlanStrategy() + + plan := lp.GetPlan(planTime, requiredDuration, strategy.Precondition, strategy.Continuous) res := PlanPreviewResponse{ - PlanTime: planTime, - Duration: int64(requiredDuration.Seconds()), - Precondition: int64(precondition.Seconds()), - Plan: plan, - Power: maxPower, - } + PlanTime: planTime, + Duration: int64(requiredDuration.Seconds()), + Plan: plan, + Power: maxPower, - jsonWrite(w, res) - } -} - -func repeatingPlanPreviewHandler(lp loadpoint.API) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - query := r.URL.Query() - - hourMinute := vars["time"] - tz := vars["tz"] - - var weekdays []int - for weekdayStr := range strings.SplitSeq(vars["weekdays"], ",") { - weekday, err := strconv.Atoi(weekdayStr) - if err != nil { - jsonError(w, http.StatusBadRequest, fmt.Errorf("invalid weekdays format")) - return - } - weekdays = append(weekdays, weekday) - } - - soc, err := strconv.ParseFloat(vars["soc"], 64) - if err != nil { - jsonError(w, http.StatusBadRequest, err) - return - } - - planTime, err := util.GetNextOccurrence(weekdays, hourMinute, tz) - if err != nil { - jsonError(w, http.StatusBadRequest, err) - return - } - - precondition, err := parseDuration(query.Get("precondition")) - if err != nil { - jsonError(w, http.StatusBadRequest, err) - return - } - - maxPower := lp.EffectiveMaxPower() - requiredDuration := lp.GetPlanRequiredDuration(soc, maxPower) - plan := lp.GetPlan(planTime, requiredDuration, precondition) - - res := PlanPreviewResponse{ - PlanTime: planTime, - Duration: int64(requiredDuration.Seconds()), - Precondition: int64(precondition.Seconds()), - Plan: plan, - Power: maxPower, + // TODO remove + Continuous: strategy.Continuous, + Precondition: int64(strategy.Precondition.Seconds()), } jsonWrite(w, res) @@ -169,7 +114,6 @@ func repeatingPlanPreviewHandler(lp loadpoint.API) http.HandlerFunc { func planEnergyHandler(lp loadpoint.API) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) - query := r.URL.Query() ts, err := time.ParseInLocation(time.RFC3339, vars["time"], nil) if err != nil { @@ -183,27 +127,19 @@ func planEnergyHandler(lp loadpoint.API) http.HandlerFunc { return } - precondition, err := parseDuration(query.Get("precondition")) - if err != nil { + if err := lp.SetPlanEnergy(ts, val); err != nil { jsonError(w, http.StatusBadRequest, err) return } - if err := lp.SetPlanEnergy(ts, precondition, val); err != nil { - jsonError(w, http.StatusBadRequest, err) - return - } - - ts, precondition, energy := lp.GetPlanEnergy() + ts, energy := lp.GetPlanEnergy() res := struct { - Energy float64 `json:"energy"` - Precondition int64 `json:"precondition"` - Time time.Time `json:"time"` + Energy float64 `json:"energy"` + Time time.Time `json:"time"` }{ - Energy: energy, - Precondition: int64(precondition.Seconds()), - Time: ts, + Energy: energy, + Time: ts, } jsonWrite(w, res) @@ -213,13 +149,12 @@ func planEnergyHandler(lp loadpoint.API) http.HandlerFunc { // planRemoveHandler removes plan time func planRemoveHandler(lp loadpoint.API) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - if err := lp.SetPlanEnergy(time.Time{}, 0, 0); err != nil { + if err := lp.SetPlanEnergy(time.Time{}, 0); err != nil { jsonError(w, http.StatusBadRequest, err) return } - res := struct{}{} - jsonWrite(w, res) + jsonWrite(w, struct{}{}) } } @@ -251,8 +186,7 @@ func vehicleSelectHandler(site site.API, lp loadpoint.API) http.HandlerFunc { func vehicleRemoveHandler(lp loadpoint.API) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { lp.SetVehicle(nil) - res := struct{}{} - jsonWrite(w, res) + jsonWrite(w, struct{}{}) } } @@ -260,7 +194,20 @@ func vehicleRemoveHandler(lp loadpoint.API) http.HandlerFunc { func vehicleDetectHandler(lp loadpoint.API) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { lp.StartVehicleDetection() - res := struct{}{} + jsonWrite(w, struct{}{}) + } +} + +// planStrategyHandler updates plan strategy for loadpoint +func planStrategyHandler(lp loadpoint.API) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if err := planStrategyHandlerSetter(r, lp.SetPlanStrategy); err != nil { + jsonError(w, http.StatusBadRequest, err) + return + } + + res := planStrategyPayloadFromApi(lp.GetPlanStrategy()) + jsonWrite(w, res) } } diff --git a/server/http_vehicle_handler.go b/server/http_vehicle_handler.go index 6a2f9169e..e857296c6 100644 --- a/server/http_vehicle_handler.go +++ b/server/http_vehicle_handler.go @@ -73,7 +73,6 @@ func limitSocHandler(site site.API) http.HandlerFunc { func planSocHandler(site site.API) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) - query := r.URL.Query() v, err := site.Vehicles().ByName(vars["name"]) if err != nil { @@ -93,28 +92,52 @@ func planSocHandler(site site.API) http.HandlerFunc { return } - precondition, err := parseDuration(query.Get("precondition")) + if err := v.SetPlanSoc(ts, soc); err != nil { + jsonError(w, http.StatusBadRequest, err) + return + } + + ts, soc = v.GetPlanSoc() + + res := struct { + Soc int `json:"soc"` + Time time.Time `json:"time"` + }{ + Soc: soc, + Time: ts, + } + + jsonWrite(w, res) + } +} + +func planStrategyHandlerSetter(r *http.Request, set func(api.PlanStrategy) error) error { + var planStrategy planStrategyPayload + if err := json.NewDecoder(r.Body).Decode(&planStrategy); err != nil { + return err + } + return set(api.PlanStrategy{ + Continuous: planStrategy.Continuous, + Precondition: time.Duration(planStrategy.Precondition) * time.Second, + }) +} + +// updatePlanStrategyHandler updates plan strategy +func updatePlanStrategyHandler(site site.API) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + v, err := site.Vehicles().ByName(vars["name"]) if err != nil { jsonError(w, http.StatusBadRequest, err) return } - if err := v.SetPlanSoc(ts, precondition, soc); err != nil { + if err := planStrategyHandlerSetter(r, v.SetPlanStrategy); err != nil { jsonError(w, http.StatusBadRequest, err) return } - ts, precondition, soc = v.GetPlanSoc() - - res := struct { - Soc int `json:"soc"` - Precondition int64 `json:"precondition"` - Time time.Time `json:"time"` - }{ - Soc: soc, - Precondition: int64(precondition.Seconds()), - Time: ts, - } + res := planStrategyPayloadFromApi(v.GetPlanStrategy()) jsonWrite(w, res) } @@ -157,12 +180,11 @@ func planSocRemoveHandler(site site.API) http.HandlerFunc { return } - if err := v.SetPlanSoc(time.Time{}, 0, 0); err != nil { + if err := v.SetPlanSoc(time.Time{}, 0); err != nil { jsonError(w, http.StatusBadRequest, err) return } - res := struct{}{} - jsonWrite(w, res) + jsonWrite(w, struct{}{}) } } diff --git a/server/mcp/openapi.json b/server/mcp/openapi.json index 937c2281b..fd302146b 100644 --- a/server/mcp/openapi.json +++ b/server/mcp/openapi.json @@ -594,6 +594,21 @@ }, "type": "object" }, + "PlanStrategy": { + "description": "Charging plan strategy configuration", + "properties": { + "continuous": { + "description": "Force continuous planning", + "type": "boolean" + }, + "precondition": { + "description": "Precondition duration in seconds", + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, "Power": { "description": "Power in W", "example": 2500, @@ -638,9 +653,6 @@ "description": "Set plan active.", "type": "boolean" }, - "precondition": { - "$ref": "#/components/schemas/Precondition" - }, "soc": { "$ref": "#/components/schemas/Soc" }, @@ -675,9 +687,6 @@ "energy": { "$ref": "#/components/schemas/Energy" }, - "precondition": { - "$ref": "#/components/schemas/Precondition" - }, "time": { "$ref": "#/components/schemas/Timestamp" } @@ -689,9 +698,6 @@ "url": "https://docs.evcc.io/en/docs/features/plans#create-charging-plan" }, "properties": { - "precondition": { - "$ref": "#/components/schemas/Precondition" - }, "soc": { "$ref": "#/components/schemas/Soc" }, @@ -1423,9 +1429,6 @@ "properties": { "planId": { "$ref": "#/components/schemas/Id" - }, - "precondition": { - "$ref": "#/components/schemas/Precondition" } }, "type": "object" @@ -1606,6 +1609,51 @@ ] } }, + "/loadpoints/{id}/plan/strategy": { + "post": { + "description": "Updates the charging plan strategy for the loadpoint.", + "externalDocs": { + "url": "https://docs.evcc.io/en/docs/features/plans" + }, + "operationId": "setLoadpointPlanStrategy", + "parameters": [ + { + "$ref": "#/components/parameters/id" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanStrategy" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "$ref": "#/components/schemas/PlanStrategy" + } + }, + "type": "object" + } + } + }, + "description": "Success" + } + }, + "summary": "Set plan strategy", + "tags": [ + "loadpoints" + ] + } + }, "/loadpoints/{id}/priority/{priority}": { "post": { "description": "Set loadpoint priority.", @@ -2502,13 +2550,6 @@ }, { "$ref": "#/components/parameters/timestamp" - }, - { - "in": "query", - "name": "precondition", - "schema": { - "$ref": "#/components/schemas/Precondition" - } } ], "responses": { @@ -2518,7 +2559,15 @@ "schema": { "properties": { "result": { - "$ref": "#/components/schemas/StaticSocPlan" + "properties": { + "soc": { + "$ref": "#/components/schemas/Soc" + }, + "time": { + "$ref": "#/components/schemas/Timestamp" + } + }, + "type": "object" } }, "type": "object" @@ -2533,6 +2582,51 @@ "vehicles" ] } + }, + "/vehicles/{name}/plan/strategy": { + "post": { + "description": "Updates the charging plan strategy for the vehicle.", + "externalDocs": { + "url": "https://docs.evcc.io/en/docs/features/plans" + }, + "operationId": "setVehiclePlanStrategy", + "parameters": [ + { + "$ref": "#/components/parameters/vehicleName" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanStrategy" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "$ref": "#/components/schemas/PlanStrategy" + } + }, + "type": "object" + } + } + }, + "description": "Success" + } + }, + "summary": "Set plan strategy", + "tags": [ + "vehicles" + ] + } } }, "tags": [ diff --git a/server/mcp/openapi.md b/server/mcp/openapi.md index 8200af16a..98cf41e7f 100644 --- a/server/mcp/openapi.md +++ b/server/mcp/openapi.md @@ -730,6 +730,28 @@ call setLoadpointPhases { } ``` +## setLoadpointPlanStrategy + +Updates the charging plan strategy for the loadpoint. + +**Tags:** loadpoints + +**Arguments:** + +| Name | Type | Description | +|------|------|-------------| +| id | integer | Loadpoint index starting at 1 | +| requestBody | object | The JSON request body. | + +**Example call:** + +```json +call setLoadpointPlanStrategy { + "id": 123, + "requestBody": "..." +} +``` + ## setLoadpointPriority Set loadpoint priority. @@ -1054,6 +1076,28 @@ call setVehicleMinSoc { } ``` +## setVehiclePlanStrategy + +Updates the charging plan strategy for the vehicle. + +**Tags:** vehicles + +**Arguments:** + +| Name | Type | Description | +|------|------|-------------| +| name | string | Vehicle name | +| requestBody | object | The JSON request body. | + +**Example call:** + +```json +call setVehiclePlanStrategy { + "name": "example", + "requestBody": "..." +} +``` + ## setVehicleSocLimit Charging will stop when this SoC is reached. @@ -1087,7 +1131,6 @@ Create charging plan with fixed time and SoC target. | Name | Type | Description | |------|------|-------------| | name | string | Vehicle name | -| precondition | integer | Late charging duration in seconds. | | soc | number | SOC in % | | timestamp | string | Timestamp in RFC3339 format | @@ -1096,7 +1139,6 @@ Create charging plan with fixed time and SoC target. ```json call setVehicleSocPlan { "name": "example", - "precondition": 123, "soc": 123.45, "timestamp": "example" } diff --git a/server/mqtt.go b/server/mqtt.go index d3556916c..b33bcb43a 100644 --- a/server/mqtt.go +++ b/server/mqtt.go @@ -1,7 +1,6 @@ package server import ( - "encoding/json" "fmt" "reflect" "strconv" @@ -252,18 +251,8 @@ func (m *MQTT) listenLoadpointSetters(topic string, site site.API, lp loadpoint. {"smartCostLimit", floatPtrSetter(pass(lp.SetSmartCostLimit))}, {"smartFeedInPriorityLimit", floatPtrSetter(pass(lp.SetSmartFeedInPriorityLimit))}, {"batteryBoost", boolSetter(lp.SetBatteryBoost)}, - {"planEnergy", func(payload string) error { - var plan struct { - Time time.Time `json:"time"` - Precondition int64 `json:"precondition"` - Value float64 `json:"value"` - } - err := json.Unmarshal([]byte(payload), &plan) - if err == nil { - err = lp.SetPlanEnergy(plan.Time, time.Duration(plan.Precondition)*time.Second, plan.Value) - } - return err - }}, + {"planStrategy", planStrategySetter(lp.SetPlanStrategy)}, + {"planEnergy", planGoalSetter(lp.SetPlanEnergy)}, {"vehicle", func(payload string) error { // https://github.com/evcc-io/evcc/issues/11184 empty payload is swallowed by listener if isEmpty(payload) { @@ -289,18 +278,8 @@ func (m *MQTT) listenVehicleSetters(topic string, v vehicle.API) error { for _, s := range []setter{ {"limitSoc", intSetter(pass(v.SetLimitSoc))}, {"minSoc", intSetter(pass(v.SetMinSoc))}, - {"planSoc", func(payload string) error { - var plan struct { - Time time.Time `json:"time"` - Precondition int64 `json:"precondition"` - Value int `json:"value"` - } - err := json.Unmarshal([]byte(payload), &plan) - if err == nil { - err = v.SetPlanSoc(plan.Time, time.Duration(plan.Precondition)*time.Second, plan.Value) - } - return err - }}, + {"planStrategy", planStrategySetter(v.SetPlanStrategy)}, + {"planSoc", planGoalSetter(v.SetPlanSoc)}, } { if err := m.Handler.ListenSetter(topic+"/"+s.topic, s.fun); err != nil { return err diff --git a/server/mqtt_setter.go b/server/mqtt_setter.go index 8541260b6..68fb38259 100644 --- a/server/mqtt_setter.go +++ b/server/mqtt_setter.go @@ -1,10 +1,12 @@ package server import ( + "encoding/json" "slices" "strconv" "time" + "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" "github.com/spf13/cast" ) @@ -63,3 +65,28 @@ func boolSetter(set func(bool) error) func(string) error { func durationSetter(set func(time.Duration) error) func(string) error { return setterFunc(util.ParseDuration, set) } + +func planStrategySetter(set func(api.PlanStrategy) error) func(string) error { + return func(payload string) error { + var planStrategy planStrategyPayload + if err := json.Unmarshal([]byte(payload), &planStrategy); err != nil { + return err + } + + return set(api.PlanStrategy{ + Continuous: planStrategy.Continuous, + Precondition: time.Duration(planStrategy.Precondition) * time.Second, + }) + } +} + +func planGoalSetter[T any](set func(time.Time, T) error) func(string) error { + return func(payload string) error { + var plan planGoal[T] + if err := json.Unmarshal([]byte(payload), &plan); err != nil { + return err + } + + return set(plan.Time, plan.Value) + } +} diff --git a/server/openapi.yaml b/server/openapi.yaml index 80765b72e..45aeb155d 100644 --- a/server/openapi.yaml +++ b/server/openapi.yaml @@ -398,8 +398,6 @@ paths: properties: planId: $ref: "#/components/schemas/Id" - precondition: - $ref: "#/components/schemas/Precondition" - $ref: "#/components/schemas/PlanRates" /loadpoints/{id}/plan/energy: delete: @@ -488,6 +486,33 @@ paths: responses: "200": $ref: "#/components/responses/PlanRatesResult" + /loadpoints/{id}/plan/strategy: + post: + operationId: setLoadpointPlanStrategy + summary: Set plan strategy + description: "Updates the charging plan strategy for the loadpoint." + externalDocs: + url: https://docs.evcc.io/en/docs/features/plans + tags: + - loadpoints + parameters: + - $ref: "#/components/parameters/id" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PlanStrategy" + responses: + 200: + description: Success + content: + application/json: + schema: + type: object + properties: + result: + $ref: "#/components/schemas/PlanStrategy" /loadpoints/{id}/priority/{priority}: post: operationId: setLoadpointPriority @@ -1080,10 +1105,6 @@ paths: - $ref: "#/components/parameters/vehicleName" - $ref: "#/components/parameters/soc" - $ref: "#/components/parameters/timestamp" - - in: query - name: precondition - schema: - $ref: "#/components/schemas/Precondition" responses: "200": description: Success @@ -1093,7 +1114,39 @@ paths: type: object properties: result: - $ref: "#/components/schemas/StaticSocPlan" + type: object + properties: + soc: + $ref: "#/components/schemas/Soc" + time: + $ref: "#/components/schemas/Timestamp" + /vehicles/{name}/plan/strategy: + post: + operationId: setVehiclePlanStrategy + summary: Set plan strategy + description: "Updates the charging plan strategy for the vehicle." + externalDocs: + url: https://docs.evcc.io/en/docs/features/plans + tags: + - vehicles + parameters: + - $ref: "#/components/parameters/vehicleName" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PlanStrategy" + responses: + 200: + description: Success + content: + application/json: + schema: + type: object + properties: + result: + $ref: "#/components/schemas/PlanStrategy" components: schemas: BatteryMode: @@ -1304,6 +1357,17 @@ components: type: array items: $ref: "#/components/schemas/Rate" + PlanStrategy: + description: Charging plan strategy configuration + type: object + properties: + continuous: + description: "Force continuous planning" + type: boolean + precondition: + description: "Precondition duration in seconds" + type: integer + minimum: 0 RepeatingPlan: externalDocs: url: https://docs.evcc.io/en/docs/features/plans#repeating-plans @@ -1312,8 +1376,6 @@ components: active: description: "Set plan active." type: boolean - precondition: - $ref: "#/components/schemas/Precondition" soc: $ref: "#/components/schemas/Soc" time: @@ -1338,8 +1400,6 @@ components: properties: energy: $ref: "#/components/schemas/Energy" - precondition: - $ref: "#/components/schemas/Precondition" time: $ref: "#/components/schemas/Timestamp" StaticSocPlan: @@ -1347,8 +1407,6 @@ components: url: https://docs.evcc.io/en/docs/features/plans#create-charging-plan type: object properties: - precondition: - $ref: "#/components/schemas/Precondition" soc: $ref: "#/components/schemas/Soc" time: diff --git a/server/types.go b/server/types.go new file mode 100644 index 000000000..cb5d9c973 --- /dev/null +++ b/server/types.go @@ -0,0 +1,24 @@ +package server + +import ( + "time" + + "github.com/evcc-io/evcc/api" +) + +type planStrategyPayload struct { + Continuous bool `json:"continuous"` + Precondition int64 `json:"precondition"` +} + +func planStrategyPayloadFromApi(ps api.PlanStrategy) planStrategyPayload { + return planStrategyPayload{ + Continuous: ps.Continuous, + Precondition: int64(ps.Precondition.Seconds()), + } +} + +type planGoal[T any] struct { + Time time.Time `json:"time"` + Value T `json:"value"` +} diff --git a/tests/plan.evcc.yaml b/tests/plan.evcc.yaml index 344bbedca..127688fd1 100755 --- a/tests/plan.evcc.yaml +++ b/tests/plan.evcc.yaml @@ -16,7 +16,9 @@ meters: loadpoints: - title: Loadpoint charger: charger + mode: pv - title: Loadpoint with SoC + mode: pv charger: chargerSoc chargers: diff --git a/tests/plan.spec.ts b/tests/plan.spec.ts index b2d649510..5a80050e1 100644 --- a/tests/plan.spec.ts +++ b/tests/plan.spec.ts @@ -79,24 +79,22 @@ test.describe("basic functionality", async () => { await page.getByTestId("static-plan-day").selectOption({ index: 1 }); await page.getByTestId("static-plan-time").fill("09:30"); await page.getByTestId("static-plan-soc").selectOption("80%"); - await page.getByTestId("static-plan-precondition-lg-toggle").click(); - await page - .getByTestId("static-plan-precondition-lg-select") - .getByRole("combobox") - .selectOption("1 hour"); + await page.getByRole("button", { name: "Strategy settings" }).click(); + await expect(page.getByLabel("Late Charging")).toBeVisible(); + await page.getByLabel("Late Charging").selectOption("1 hour"); await page.getByTestId("static-plan-active").click(); await page.getByRole("button", { name: "Close" }).click(); await expect(lp1.getByTestId("plan-marker")).toBeVisible(); await expect(lp1.getByTestId("charging-plan").getByRole("button")).toHaveText( - "tomorrow 09:3080%" + ["tomorrow 09:30", "80%"].join("") ); await expect(lp1.getByTestId("vehicle-status-charger")).toHaveText("Connected."); await expect(lp1.getByTestId("vehicle-status-planstart")).toHaveText(/tomorrow .*/); await expect(lp1.getByTestId("plan-marker")).toBeVisible(); await expect(lp1.getByTestId("charging-plan").getByRole("button")).toHaveText( - "tomorrow 09:3080%" + ["tomorrow 09:30", "80%"].join("") ); await lp1.getByTestId("charging-plan").getByRole("button").click(); await expect(page.getByTestId("static-plan-soc")).toHaveValue("80"); @@ -484,26 +482,17 @@ test.describe("repeating", async () => { await modal.getByRole("checkbox", { name: "Select all" }).check(); await modal.getByTestId("repeating-plan-time").fill("11:11"); - // switch between previews + // with multiple plans, preview shows first plan await page.waitForLoadState("networkidle"); - await modal - .getByTestId("plan-preview-title") - .getByRole("combobox") - .selectOption("Preview plan #2"); - await expect(modal.getByTestId("target-text")).toContainText("11:11"); - - await modal - .getByTestId("plan-preview-title") - .getByRole("combobox") - .selectOption("Preview plan #1"); + await expect(modal.getByTestId("plan-preview-title")).toHaveText("Preview plan #1"); await expect(modal.getByTestId("target-text")).toContainText("09:00"); - // activate #1 + // activate #1 - should show next plan #1 await modal.getByTestId("static-plan-active").click(); await expect(modal.getByTestId("plan-preview-title")).toHaveText("Next plan #1"); await expect(modal.getByTestId("target-text")).toContainText("09:00"); - // activate #2 + // deactivate #1, activate #2 - should show next plan #2 await modal.getByTestId("static-plan-active").click(); await modal.getByTestId("repeating-plan-active").click(); await expect(modal.getByTestId("plan-preview-title")).toHaveText("Next plan #2"); @@ -511,9 +500,7 @@ test.describe("repeating", async () => { // back to preview if no active plan await modal.getByTestId("repeating-plan-active").click(); - await expect(modal.getByTestId("plan-preview-title").locator("option:checked")).toHaveText( - "Preview plan #1" - ); + await expect(modal.getByTestId("plan-preview-title")).toHaveText("Preview plan #1"); await expect(modal.getByTestId("target-text")).toContainText("9:00"); }); @@ -663,11 +650,9 @@ test.describe("repeating", async () => { await plan.getByRole("checkbox", { name: "Select all" }).click(); // uncheck all await plan.getByRole("checkbox", { name: tomorrow }).check(); await plan.getByTestId("repeating-plan-time").fill("09:20"); - await plan.getByTestId("repeating-plan-precondition-lg-toggle").click(); - await plan - .getByTestId("repeating-plan-precondition-lg-select") - .getByRole("combobox") - .selectOption("2 hours"); + await modal.getByRole("button", { name: "Strategy settings" }).click(); + await expect(modal.getByLabel("Late Charging")).toBeVisible(); + await modal.getByLabel("Late Charging").selectOption("2 hours"); await plan.getByTestId("repeating-plan-active").click(); await expect(modal.getByTestId("plan-preview-title")).toHaveText("Next plan #2"); await expect(modal.getByTestId("target-text")).toContainText("09:20"); @@ -689,26 +674,55 @@ test.describe("repeating", async () => { await expect(modal.getByTestId("plan-entry")).toHaveCount(2); await expect(modal.getByTestId("plan-preview-title")).toHaveText("Next plan #2"); await expect(modal.getByTestId("target-text")).toContainText("09:20"); - await expect(modal.getByTestId("repeating-plan-precondition-lg-toggle")).toBeChecked(); - await expect( - modal.getByTestId("repeating-plan-precondition-lg-select").locator("option:checked") - ).toHaveText("2 hours"); + await expect(modal.getByLabel("Late Charging")).toHaveValue("7200"); }); }); // add test for precondition, start with basic.evcc.yaml and verify that precondition toggle element is not visible. make dedicated describe block -test.describe("precondition", async () => { +test.describe("plan strategy", async () => { test("only if dynamic tariff exists", async ({ page }) => { await restart(CONFIG_NO_TARIFF); await page.goto("/"); const lp1 = await page.getByTestId("loadpoint").first(); await lp1.getByTestId("charging-plan").getByRole("button", { name: "none" }).click(); - await expect(page.getByTestId("static-plan-active")).toBeVisible(); - await expect(page.getByTestId("static-plan-precondition-lg-toggle")).not.toBeVisible(); - await expect(page.getByTestId("static-plan-precondition-lg-select")).not.toBeVisible(); + const modal = page.getByTestId("charging-plan-modal"); + await expect(modal.getByTestId("static-plan-active")).toBeVisible(); + // Strategy toggle should not be visible when no dynamic tariff exists + await expect(modal.getByRole("button", { name: "Strategy settings" })).not.toBeVisible(); + }); - // verify small viewport + test("visible and functional on mobile", async ({ page }) => { + await page.goto("/"); + + // Set mobile viewport await page.setViewportSize(mobile); - await expect(page.getByTestId("static-plan-precondition-select")).not.toBeVisible(); + + const lp1 = await page.getByTestId("loadpoint").first(); + await lp1 + .getByTestId("change-vehicle") + .locator("select") + .selectOption("Vehicle with SoC with Capacity"); + + await lp1.getByTestId("charging-plan").getByRole("button", { name: "none" }).click(); + + const modal = page.getByTestId("charging-plan-modal"); + + // Strategy toggle should be visible on mobile + await expect(modal.getByRole("button", { name: "Strategy settings" })).toBeVisible(); + + // Open strategy panel + await modal.getByRole("button", { name: "Strategy settings" }).click(); + + // Strategy controls should be visible and functional + await expect(modal.getByLabel("Optimization")).toBeVisible(); + await expect(modal.getByLabel("Late Charging")).toBeVisible(); + + // Test changing strategy on mobile + await modal.getByLabel("Optimization").selectOption("true"); + await modal.getByLabel("Late Charging").selectOption("1 hour"); + + // Verify the selections work + await expect(modal.getByLabel("Optimization")).toHaveValue("true"); + await expect(modal.getByLabel("Late Charging")).toHaveValue("3600"); }); }); From 1bdc6a6fe59e471a78486e27c8fcd9f76c59900e Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 31 Dec 2025 13:38:57 +0100 Subject: [PATCH 0003/1916] Templates: don't validate deprecated parameters (#26292) --- util/templates/template.go | 2 +- util/templates/template_test.go | 43 ++++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/util/templates/template.go b/util/templates/template.go index f6e0768ec..8a282e128 100644 --- a/util/templates/template.go +++ b/util/templates/template.go @@ -366,7 +366,7 @@ func (t *Template) RenderResult(renderMode int, other map[string]any) ([]byte, m } // validate required fields from yaml - if s == "" && p.IsRequired() && (renderMode == RenderModeUnitTest || + if s == "" && p.IsRequired() && !p.IsDeprecated() && (renderMode == RenderModeUnitTest || renderMode == RenderModeInstance && !testing.Testing()) { // validate required per usage if len(p.Usages) == 0 || slices.Contains(p.Usages, usage) { diff --git a/util/templates/template_test.go b/util/templates/template_test.go index 6504755a9..10b889e89 100644 --- a/util/templates/template_test.go +++ b/util/templates/template_test.go @@ -3,6 +3,7 @@ package templates import ( "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -48,22 +49,56 @@ func TestRequired(t *testing.T) { _, _, err := tmpl.RenderResult(RenderModeUnitTest, map[string]any{ "Param": "foo", }) - require.NoError(t, err) + assert.NoError(t, err, "test: required present") _, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{ "Param": "", }) - require.Error(t, err) + assert.Error(t, err, "test: required present but empty") _, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{ "Param": nil, }) - require.Error(t, err) + assert.Error(t, err, "test: required present but nil") _, _, err = tmpl.RenderResult(RenderModeDocs, map[string]any{ "Param": nil, }) - require.NoError(t, err) + assert.NoError(t, err, "docs: required present but nil") +} + +func TestRequiredDeprecated(t *testing.T) { + tmpl := &Template{ + TemplateDefinition: TemplateDefinition{ + Params: []Param{ + { + Name: "param", + Required: true, + Deprecated: true, + }, + }, + }, + } + + _, _, err := tmpl.RenderResult(RenderModeUnitTest, map[string]any{ + "Param": "foo", + }) + assert.NoError(t, err, "test: required present") + + _, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{ + "Param": "", + }) + assert.NoError(t, err, "test: required present but empty") + + _, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{ + "Param": nil, + }) + assert.NoError(t, err, "test: required present but nil") + + _, _, err = tmpl.RenderResult(RenderModeDocs, map[string]any{ + "Param": nil, + }) + assert.NoError(t, err, "docs: required present but nil") } func TestRequiredPerUsage(t *testing.T) { From fba4cb48034d86132e6a2be4137777b855136647 Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 31 Dec 2025 13:20:57 +0100 Subject: [PATCH 0004/1916] Planner: fix backwards compatibility --- core/loadpoint.go | 2 +- core/loadpoint/config.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/loadpoint.go b/core/loadpoint.go index 207befe21..201205938 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -184,7 +184,7 @@ type Loadpoint struct { func NewLoadpointFromConfig(log *util.Logger, settings settings.Settings, other map[string]any) (*Loadpoint, error) { lp := NewLoadpoint(log, settings) if err := util.DecodeOther(other, lp); err != nil { - return nil, err + return lp, err } // set vehicle polling mode diff --git a/core/loadpoint/config.go b/core/loadpoint/config.go index 86e326f46..8a307e460 100644 --- a/core/loadpoint/config.go +++ b/core/loadpoint/config.go @@ -27,6 +27,7 @@ type DynamicConfig struct { SmartFeedInPriorityLimit *float64 `json:"smartFeedInPriorityLimit"` PlanEnergy float64 `json:"planEnergy"` PlanTime time.Time `json:"planTime"` + PlanPrecondition_ int64 `json:"planPrecondition" mapstructure:"planPrecondition"` // TODO deprecated, keep for compatibility LimitEnergy float64 `json:"limitEnergy"` LimitSoc int `json:"limitSoc"` From c2a3122b4074ca245ffd56c7277f7390b4c9e0b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Jan 2026 10:02:00 +0100 Subject: [PATCH 0005/1916] chore(deps): bump actions/cache from 4 to 5 (#26310) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/default.yml | 14 +++++++------- .github/workflows/nightly.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml index 4fcd1b906..8141fcc90 100644 --- a/.github/workflows/default.yml +++ b/.github/workflows/default.yml @@ -26,7 +26,7 @@ jobs: cache: false # avoid cache thrashing id: go - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | ~/.cache/go-build @@ -66,7 +66,7 @@ jobs: cache: false id: go - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | ~/.cache/go-build @@ -104,7 +104,7 @@ jobs: cache: false id: go - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | ~/.cache/go-build @@ -135,7 +135,7 @@ jobs: cache: false # avoid cache thrashing id: go - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | ~/.cache/go-build @@ -191,7 +191,7 @@ jobs: - name: Cache dist # avoid cache thrashing by nightly if: github.event_name == 'push' || github.event_name == 'pull_request' - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 id: cache-dist with: path: dist @@ -220,7 +220,7 @@ jobs: cache: false id: go - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | ~/.cache/go-build @@ -246,7 +246,7 @@ jobs: run: echo "PLAYWRIGHT_VERSION=$(node -e "console.log(require('./package-lock.json').packages['node_modules/@playwright/test'].version)")" >> $GITHUB_ENV - name: Cache Playwright browsers - uses: actions/cache@v4 + uses: actions/cache@v5 id: playwright-cache with: path: ~/.cache/ms-playwright diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 6580db0a3..ae749d82d 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -59,7 +59,7 @@ jobs: persist-credentials: false - name: Get dist from cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 id: cache-dist with: path: dist @@ -158,7 +158,7 @@ jobs: run: make patch-asn1-sudo - name: Get dist from cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 id: cache-dist with: path: dist diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e24ec1e5f..98aac6c76 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,7 +82,7 @@ jobs: run: make patch-asn1-sudo - name: Get dist from cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 id: cache-dist with: path: dist From a7cf82e1fa3cdbba05ee70f7ef0ee0eb686282bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Jan 2026 10:02:20 +0100 Subject: [PATCH 0006/1916] chore(deps): bump actions/upload-artifact from 5 to 6 (#26311) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml index 8141fcc90..c5dae132a 100644 --- a/.github/workflows/default.yml +++ b/.github/workflows/default.yml @@ -266,7 +266,7 @@ jobs: env: TZ: Europe/Berlin - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v6 if: ${{ !cancelled() }} with: name: playwright-report From 9ba0a015f7e8176f8a368c6e4c72e9e465ac2919 Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 1 Jan 2026 13:21:08 +0100 Subject: [PATCH 0007/1916] chore: simplify --- templates/definition/meter/kostal-plenticore-gen2.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/templates/definition/meter/kostal-plenticore-gen2.yaml b/templates/definition/meter/kostal-plenticore-gen2.yaml index 86e5d71e4..6a2a7a955 100644 --- a/templates/definition/meter/kostal-plenticore-gen2.yaml +++ b/templates/definition/meter/kostal-plenticore-gen2.yaml @@ -120,7 +120,6 @@ render: | encoding: {{ if (eq .endianness "big") }}float32{{ else }}float32s{{ end }} - case: 3 # charge set: - {{- if .maxchargepower }} source: const value: -{{ .maxchargepower }} # W set: @@ -130,10 +129,6 @@ render: | address: 1034 # Battery charge power (DC) setpoint, absolute [W] type: writemultiple encoding: {{ if (eq .endianness "big") }}float32{{ else }}float32s{{ end }} - {{- else }} - source: error - error: ErrNotAvailable - {{- end }} capacity: {{ .capacity }} # kWh maxchargepower: {{ .maxchargepower }} # W maxdischargepower: {{ .maxdischargepower }} # W From cc02d429b029ade1c51708846e56328296fdf855 Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Thu, 1 Jan 2026 15:27:23 +0100 Subject: [PATCH 0008/1916] RCT: fix battery control (#26329) --- meter/rct.go | 2 +- templates/definition/meter/rct-power.yaml | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/meter/rct.go b/meter/rct.go index e7d3e39cc..88bbd69a8 100644 --- a/meter/rct.go +++ b/meter/rct.go @@ -140,7 +140,7 @@ func NewRCT(ctx context.Context, uri, usage string, batterySocLimits batterySocL } // check for normal operating mode - if batStatus != 1032 { + if batStatus != 0 && batStatus != 1032 { return fmt.Errorf("invalid battery operating mode: %d", batStatus) } } diff --git a/templates/definition/meter/rct-power.yaml b/templates/definition/meter/rct-power.yaml index 05a57a7eb..4d294018c 100644 --- a/templates/definition/meter/rct-power.yaml +++ b/templates/definition/meter/rct-power.yaml @@ -6,9 +6,6 @@ products: capabilities: ["battery-control"] requirements: evcc: ["skiptest"] - description: - de: Es wird mindestens die BMS-Version 5615 benötigt. - en: At least BMS version 5615 is needed. params: - name: usage choice: ["grid", "pv", "battery"] From 109eaeb696b2d988c6d4c82c0c7f837a2b10349b Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 1 Jan 2026 16:01:17 +0100 Subject: [PATCH 0009/1916] chore: fix compile error on empty required param --- templates/definition/meter/kostal-plenticore-gen2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/definition/meter/kostal-plenticore-gen2.yaml b/templates/definition/meter/kostal-plenticore-gen2.yaml index 6a2a7a955..6fd1814ab 100644 --- a/templates/definition/meter/kostal-plenticore-gen2.yaml +++ b/templates/definition/meter/kostal-plenticore-gen2.yaml @@ -121,7 +121,7 @@ render: | - case: 3 # charge set: source: const - value: -{{ .maxchargepower }} # W + value: {{ if .maxchargerate }}-{{ .maxchargerate }}{{ end }} # % set: source: modbus {{- include "modbus" . | indent 10 }} From 3115bb1a2e4227014252e809a2f2d421c01f7cb2 Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 1 Jan 2026 17:30:51 +0100 Subject: [PATCH 0010/1916] chore: avoid allocating intermediate slices (#26320) --- core/planner/helper.go | 85 +++++++++++++++++++++--------------- core/planner/helper_test.go | 22 ++++++++++ core/planner/planner.go | 7 +-- core/planner/planner_test.go | 9 +--- 4 files changed, 79 insertions(+), 44 deletions(-) diff --git a/core/planner/helper.go b/core/planner/helper.go index 1b12f5818..2f1840c93 100644 --- a/core/planner/helper.go +++ b/core/planner/helper.go @@ -1,10 +1,11 @@ package planner import ( + "iter" + "slices" "time" "github.com/evcc-io/evcc/api" - "github.com/samber/lo" ) // Start returns the earliest slot's start time @@ -87,42 +88,58 @@ func IsFirst(r api.Rate, plan api.Rates) bool { // clampRates filters rates to the given time window and adjusts boundary slots func clampRates(rates api.Rates, start, end time.Time) api.Rates { - res := make(api.Rates, 0, len(rates)+2) + res := make(api.Rates, 0, len(rates)) + return slices.AppendSeq(res, clampRatesSeq(rates, start, end)) +} - for _, r := range rates { - // slot before continuous plan - if !r.End.After(start) { - continue +// clampRatesSeq returns an iterator for filtering rates to the given time window and adjusts boundary slots +func clampRatesSeq(rates api.Rates, start, end time.Time) iter.Seq[api.Rate] { + return func(yield func(api.Rate) bool) { + for _, r := range rates { + // slot before continuous plan + if !r.End.After(start) { + continue + } + + // slot after continuous plan + if !r.Start.Before(end) { + continue + } + + // calculate adjusted bounds + adjustedStart := r.Start + if adjustedStart.Before(start) { + adjustedStart = start + } + + adjustedEnd := r.End + if adjustedEnd.After(end) { + adjustedEnd = end + } + + // skip if adjustment would create invalid slot + if !adjustedEnd.After(adjustedStart) { + continue + } + + if !yield(api.Rate{ + Start: adjustedStart, + End: adjustedEnd, + Value: r.Value, + }) { + return // Stop early if yield returns false + } } - - // slot after continuous plan - if !r.Start.Before(end) { - continue - } - - // calculate adjusted bounds - adjustedStart := r.Start - if adjustedStart.Before(start) { - adjustedStart = start - } - - adjustedEnd := r.End - if adjustedEnd.After(end) { - adjustedEnd = end - } - - // skip if adjustment would create invalid slot - if !adjustedEnd.After(adjustedStart) { - continue - } - - slot := r - slot.Start = adjustedStart - slot.End = adjustedEnd - res = append(res, slot) } +} - return res +// SumBySeq sums over a sequence +func SumBySeq[T any, R float64](seq iter.Seq[T], iteratee func(item T) R) R { + var sum R + for t := range seq { + sum += iteratee(t) + } + return sum } // findContinuousWindow finds the cheapest continuous window of slots for the given duration. @@ -138,7 +155,7 @@ func findContinuousWindow(rates api.Rates, effectiveDuration time.Duration, targ break } - cost := lo.SumBy(clampRates(rates[i:], rates[i].Start, windowEnd), func(r api.Rate) float64 { + cost := SumBySeq(clampRatesSeq(rates[i:], rates[i].Start, windowEnd), func(r api.Rate) float64 { return float64(r.End.Sub(r.Start)) * r.Value }) diff --git a/core/planner/helper_test.go b/core/planner/helper_test.go index 92d656225..c2759ea23 100644 --- a/core/planner/helper_test.go +++ b/core/planner/helper_test.go @@ -7,6 +7,8 @@ import ( "github.com/benbjohnson/clock" "github.com/evcc-io/evcc/api" + "github.com/evcc-io/evcc/tariff" + "github.com/samber/lo" "github.com/stretchr/testify/require" ) @@ -93,3 +95,23 @@ func TestSlotAt(t *testing.T) { require.Equal(t, 2.0, SlotAt(now.Add(90*time.Minute), plan).Value) require.True(t, SlotAt(now.Add(3*time.Hour), plan).IsZero()) } + +func BenchmarkFindContinuousWindow(b *testing.B) { + rr := rates(lo.RepeatBy(96, func(i int) float64 { + return float64(i) + }), time.Now(), tariff.SlotDuration) + + for b.Loop() { + findContinuousWindow(rr, 4*tariff.SlotDuration, rr[len(rr)-1].End) + } +} + +func BenchmarkOptimalPlan(b *testing.B) { + rr := rates(lo.RepeatBy(96, func(i int) float64 { + return float64(i) + }), time.Now(), tariff.SlotDuration) + + for b.Loop() { + optimalPlan(rr, 4*tariff.SlotDuration, rr[len(rr)-1].End) + } +} diff --git a/core/planner/planner.go b/core/planner/planner.go index d27a2f88b..c0bbe7ecb 100644 --- a/core/planner/planner.go +++ b/core/planner/planner.go @@ -6,6 +6,7 @@ import ( "github.com/benbjohnson/clock" "github.com/evcc-io/evcc/api" + "github.com/evcc-io/evcc/tariff" "github.com/evcc-io/evcc/util" ) @@ -35,8 +36,8 @@ func New(log *util.Logger, tariff api.Tariff, opt ...func(t *Planner)) *Planner // It MUST already be established that: // - rates are sorted in ascending order by cost and descending order by start time (prefer late slots) // - rates are filtered to [now, targetTime] window by caller -func (t *Planner) plan(rates api.Rates, requiredDuration time.Duration, targetTime time.Time) api.Rates { - var plan api.Rates +func optimalPlan(rates api.Rates, requiredDuration time.Duration, targetTime time.Time) api.Rates { + plan := make(api.Rates, 0, int64(requiredDuration)/int64(tariff.SlotDuration)+3) for _, slot := range rates { slotDuration := slot.End.Sub(slot.Start) @@ -199,7 +200,7 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime // sort rates by price and time slices.SortStableFunc(rates, sortByCost) - plan = t.plan(rates, requiredDuration, targetTime) + plan = optimalPlan(rates, requiredDuration, targetTime) // sort plan by time plan.Sort() diff --git a/core/planner/planner_test.go b/core/planner/planner_test.go index e3825e21b..011d7a473 100644 --- a/core/planner/planner_test.go +++ b/core/planner/planner_test.go @@ -48,11 +48,6 @@ func TestPlan(t *testing.T) { trf := api.NewMockTariff(ctrl) trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{20, 60, 10, 80, 40, 90}, clock.Now(), time.Hour), nil) - p := &Planner{ - log: util.NewLogger("foo"), - clock: clock, - } - rates, err := trf.Rates() require.NoError(t, err) @@ -60,7 +55,7 @@ func TestPlan(t *testing.T) { { // filter rates to [now, now] window - should return empty - plan := p.plan(clampRates(rates, clock.Now(), clock.Now()), time.Hour, clock.Now()) + plan := optimalPlan(clampRates(rates, clock.Now(), clock.Now()), time.Hour, clock.Now()) assert.Empty(t, plan) } @@ -129,7 +124,7 @@ func TestPlan(t *testing.T) { t.Log(tc.desc) clock.Set(tc.now) // filter rates to [now, target] window as caller would do - plan := p.plan(clampRates(rates, tc.now, tc.target), tc.duration, tc.target) + plan := optimalPlan(clampRates(rates, tc.now, tc.target), tc.duration, tc.target) assert.Equalf(t, tc.planStart.UTC(), Start(plan).UTC(), "case %d start", i) assert.Equalf(t, tc.duration, Duration(plan), "case %d duration", i) From a861b11c81a353d49d64626d675f583639542ef3 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Thu, 1 Jan 2026 20:20:40 +0100 Subject: [PATCH 0011/1916] minor: fix slimmelezer brand --- templates/definition/meter/slimmelezer.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/definition/meter/slimmelezer.yaml b/templates/definition/meter/slimmelezer.yaml index 4cb3d0346..8daa764a2 100644 --- a/templates/definition/meter/slimmelezer.yaml +++ b/templates/definition/meter/slimmelezer.yaml @@ -6,9 +6,9 @@ products: - brand: ESPHome description: generic: DSMR - - brand: mhendriks + - brand: Smartstuff description: - generic: P1 dongle + generic: P1 Dongle params: - name: usage choice: ["grid"] @@ -22,8 +22,8 @@ params: de: Skalierungsfaktor en: Scale factor help: - de: Verwenden Skala von 1000 für Zuidwijk Slimmelezer. Verwenden Skala 1 für ESPHome DSMR und mhendriks P1 Dongle - en: Use scale of 1000 for Zuidwijk Slimmelezer. Use scale 1 for ESPHome DSMR and mhendriks P1 Dongle + de: Faktor 1000 für Zuidwijk Slimmelezer, Faktor 1 für ESPHome DSMR und das P1 Dongle + en: Use scale of 1000 for Zuidwijk Slimmelezer. Use scale 1 for ESPHome DSMR and P1 Dongle render: | type: custom power: From aa9723b32354efdf4022c2a7bbfa3e5008729d55 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 2 Jan 2026 09:00:22 +0100 Subject: [PATCH 0012/1916] Fix effectiveMaxPower returning vehile value only --- core/loadpoint_effective.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/loadpoint_effective.go b/core/loadpoint_effective.go index 358f1d038..49d1b7461 100644 --- a/core/loadpoint_effective.go +++ b/core/loadpoint_effective.go @@ -233,12 +233,13 @@ func (lp *Loadpoint) EffectiveMaxPower() float64 { // effectiveMaxPower returns the effective max power taking vehicle capabilities and phase scaling into account func (lp *Loadpoint) effectiveMaxPower() float64 { + res := Voltage * lp.effectiveMaxCurrent() * float64(lp.maxActivePhases()) if lp.vehicle != nil { if maxPower, ok := lp.vehicle.OnIdentified().GetMaxPower(); ok { - return maxPower + return min(maxPower, res) } } - return Voltage * lp.effectiveMaxCurrent() * float64(lp.maxActivePhases()) + return res } // EffectivePlanStrategy returns the effective plan strategy From df5bf5f452b10c746a1cb591ec4c748388c1d238 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 2 Jan 2026 09:05:35 +0100 Subject: [PATCH 0013/1916] chore: add template agent --- .github/agents/template.agent.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/agents/template.agent.md diff --git a/.github/agents/template.agent.md b/.github/agents/template.agent.md new file mode 100644 index 000000000..9b5ef1fdc --- /dev/null +++ b/.github/agents/template.agent.md @@ -0,0 +1,6 @@ +--- +description: 'Tidy templates' +tools: ["read", "edit", "search"] +--- +Validate templates files inside templates/definition/** against default parameters in util/tempaltes/defaults.yaml. +Make sure that templates don't repeat parts of the default parameter definition. From 9b50d3082ac694539cdbe8694726c49e47401e5d Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 2 Jan 2026 09:11:31 +0100 Subject: [PATCH 0014/1916] chore: tidy duplicate definitions --- templates/definition/charger/openwb-native.yaml | 7 ------- templates/definition/meter/senec-home.yaml | 1 - 2 files changed, 8 deletions(-) diff --git a/templates/definition/charger/openwb-native.yaml b/templates/definition/charger/openwb-native.yaml index 36a39b02d..303b33d5b 100644 --- a/templates/definition/charger/openwb-native.yaml +++ b/templates/definition/charger/openwb-native.yaml @@ -137,14 +137,7 @@ params: advanced: true - name: connector type: int - description: - en: Connector - de: Ladepunkt - help: - en: 1 or 2, usually 1, except for Duo - de: 1 oder 2, normalerweise 1, ausser bei Duo default: 1 - advanced: true render: | type: openwb-native phases1p3p: {{ .phases1p3p }} diff --git a/templates/definition/meter/senec-home.yaml b/templates/definition/meter/senec-home.yaml index 276cf1605..a891867c5 100644 --- a/templates/definition/meter/senec-home.yaml +++ b/templates/definition/meter/senec-home.yaml @@ -14,7 +14,6 @@ params: allinone: true - name: host - name: schema - default: https - name: capacity advanced: true render: | From a827e37454534493410e516406c2f8b71bea50f9 Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Fri, 2 Jan 2026 09:35:15 +0100 Subject: [PATCH 0015/1916] UI: add IDs for mobile testing (2) (#26325) --- assets/js/components/Top/Navigation.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/assets/js/components/Top/Navigation.vue b/assets/js/components/Top/Navigation.vue index e240f8ead..914068e13 100644 --- a/assets/js/components/Top/Navigation.vue +++ b/assets/js/components/Top/Navigation.vue @@ -124,7 +124,12 @@
  • -
  • From 44ab703f1877e88bd1ccbe4b86c4de60f5ccbaf8 Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Fri, 2 Jan 2026 09:55:23 +0100 Subject: [PATCH 0016/1916] Revert "Residual power default of 100W" (#26353) --- core/site.go | 1 - evcc.dist.yaml | 2 +- i18n/de.json | 2 +- i18n/en.json | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/site.go b/core/site.go index 2fb87723a..cfefc896b 100644 --- a/core/site.go +++ b/core/site.go @@ -266,7 +266,6 @@ func NewSite() *Site { site := &Site{ log: util.NewLogger("site"), Voltage: 230, // V - ResidualPower: 100, // W pvEnergy: make(map[string]*meterEnergy), fcstEnergy: &meterEnergy{clock: clock.New()}, householdEnergy: &meterEnergy{clock: clock.New()}, diff --git a/evcc.dist.yaml b/evcc.dist.yaml index 1962f6218..cc3178339 100644 --- a/evcc.dist.yaml +++ b/evcc.dist.yaml @@ -105,7 +105,7 @@ site: - battery # list of battery meters aux: - aux # list of auxiliary meters for adjusting grid operating point - residualPower: 100 # additional household usage margin + residualPower: 0 # additional household usage margin # loadpoint describes the charger, charge meter and connected vehicle loadpoints: diff --git a/i18n/de.json b/i18n/de.json index a740889dc..4d7992173 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -100,7 +100,7 @@ "control": { "description": "Normalerweise sind die Standardwerte in Ordnung. Ändere nur etwas, wenn du weißt, was du tust.", "descriptionInterval": "Aktualisierungszyklus in Sekunden. Definiert, wie oft evcc Messdaten liest und die Ladung anpasst. Die Standardeinstellung von 30 Sekunden ist eine sichere Wahl. Geräte wie Fahrzeuge, Wallbox und Wechselrichter brauchen in der Regel mehrere Sekunden um ihr Verhalten anzupassen. Wenn deine Komponenten schnell reagieren kannst du niedrigere Werte verwenden. Wir empfehlen dringend nicht unter 10 Sekunden zu gehen. Wenn du komisches Regelverhalten oder springende Leistungswerte beobachtest wähle ein größeres Intervall.", - "descriptionResidualPower": "Verschiebt den Betriebspunkt des Regelkreises. Der Standardwert von 100 W gibt Hausbatterien eine leichte Priorität gegenüber dem Netzbezug. Wenn du keine Batterie hast, kannst du den Wert auf 0 W setzen, um den Netzbezug im PV-Modus zu minimieren.", + "descriptionResidualPower": "Verschiebt den Betriebspunkt des Regelkreises. Wenn du eine Hausbatterie hast, wird empfohlen, einen Wert von 100 W einzustellen. Auf diese Weise erhält die Batterie eine leichte Priorität gegenüber dem Netzbezug.", "labelInterval": "Aktualisierungsintervall", "labelResidualPower": "Residualleistung", "title": "Regelverhalten" diff --git a/i18n/en.json b/i18n/en.json index 3d1f141c4..22f8e8d3b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -100,7 +100,7 @@ "control": { "description": "Usually the default values are fine. Only change them if you know what you are doing.", "descriptionInterval": "Update cycle in seconds. Defines how often evcc reads meter data and adjusts charging. The default of 30 seconds is a safe choice. Devices like vehicles, wallboxes and inverters typically need several seconds to adjust their behavior. If your components react quickly you can use lower values. We strongly recommend not going below 10 seconds. If you observe erratic control behavior or jumping power values choose a larger interval.", - "descriptionResidualPower": "Shifts the operation point of the control loop. The default of 100 W gives home batteries slight priority over grid use. If you don't have a battery, you can set this to 0 W to minimize grid consumption in solar mode.", + "descriptionResidualPower": "Shifts the operation point of the control loop. If you have a home battery it's recommended to set a value of 100 W. This way the battery will get slight priority over grid use.", "labelInterval": "Update interval", "labelResidualPower": "Residual power", "title": "Control behavior" From bd46743e4ad5bc279720b98cd05951cf9778a12c Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Fri, 2 Jan 2026 10:17:25 +0100 Subject: [PATCH 0017/1916] chore: upgrade npm dependencies (#26354) --- package-lock.json | 160 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 77 insertions(+), 85 deletions(-) diff --git a/package-lock.json b/package-lock.json index 05c52f3f6..f1d680918 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-promise": "^7.2.1", "eslint-plugin-vue": "^10.6.2", - "globals": "^16.5.0", + "globals": "^17.0.0", "happy-dom": "^20.0.11", "jiti": "^2.6.1", "kill-port": "^2.0.1", @@ -2463,13 +2463,13 @@ } }, "node_modules/@intlify/core-base": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.2.2.tgz", - "integrity": "sha512-0mCTBOLKIqFUP3BzwuFW23hYEl9g/wby6uY//AC5hTgQfTsM2srCYF2/hYGp+a5DZ/HIFIgKkLJMzXTt30r0JQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.2.8.tgz", + "integrity": "sha512-nBq6Y1tVkjIUsLsdOjDSJj4AsjvD0UG3zsg9Fyc+OivwlA/oMHSKooUy9tpKj0HqZ+NWFifweHavdljlBLTwdA==", "license": "MIT", "dependencies": { - "@intlify/message-compiler": "11.2.2", - "@intlify/shared": "11.2.2" + "@intlify/message-compiler": "11.2.8", + "@intlify/shared": "11.2.8" }, "engines": { "node": ">= 16" @@ -2479,12 +2479,12 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.2.2.tgz", - "integrity": "sha512-XS2p8Ff5JxWsKhgfld4/MRQzZRQ85drMMPhb7Co6Be4ZOgqJX1DzcZt0IFgGTycgqL8rkYNwgnD443Q+TapOoA==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.2.8.tgz", + "integrity": "sha512-A5n33doOjmHsBtCN421386cG1tWp5rpOjOYPNsnpjIJbQ4POF0QY2ezhZR9kr0boKwaHjbOifvyQvHj2UTrDFQ==", "license": "MIT", "dependencies": { - "@intlify/shared": "11.2.2", + "@intlify/shared": "11.2.8", "source-map-js": "^1.0.2" }, "engines": { @@ -2495,9 +2495,9 @@ } }, "node_modules/@intlify/shared": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.2.2.tgz", - "integrity": "sha512-OtCmyFpSXxNu/oET/aN6HtPCbZ01btXVd0f3w00YsHOb13Kverk1jzA2k47pAekM55qbUw421fvPF1yxZ+gicw==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.2.8.tgz", + "integrity": "sha512-l6e4NZyUgv8VyXXH4DbuucFOBmxLF56C/mqh2tvApbzl2Hrhi1aTDcuv5TKdxzfHYmpO3UB0Cz04fgDT9vszfw==", "license": "MIT", "engines": { "node": ">= 16" @@ -3118,13 +3118,13 @@ "license": "MIT" }, "node_modules/@storybook/builder-vite": { - "version": "10.1.10", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.1.10.tgz", - "integrity": "sha512-6m6zOyDhHLynv3lvkH70s1YoIkIFPhbpGsBKvHchRLrZLe8hCPeafIFLfZRPoD4yIPwBS6rWbjMsSvBMFlR+ag==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.1.11.tgz", + "integrity": "sha512-MMD09Ap7FyzDfWG961pkIMv/w684XXe1bBEi+wCEpHxvrgAd3j3A9w/Rqp9Am2uRDPCEdi1QgSzS3SGW3aGThQ==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.1.10", + "@storybook/csf-plugin": "10.1.11", "@vitest/mocker": "3.2.4", "ts-dedent": "^2.0.0" }, @@ -3133,14 +3133,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.1.10", + "storybook": "^10.1.11", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.1.10", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.1.10.tgz", - "integrity": "sha512-2dri4TRU8uuj/skmx/ZBw+GnnXf8EZHiMDMeijVRdBQtYFWPeoYzNIrGRpNfbuGpnDP0dcxrqti/TsedoxwFkA==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.1.11.tgz", + "integrity": "sha512-Ant0NhgqHKzQsseeVTSetZCuDHHs0W2HRkHt51Kg/sUl0T/sDtfVA+fWZT8nGzGZqYSFkxqYPWjauPmIhPtaRw==", "dev": true, "license": "MIT", "dependencies": { @@ -3153,7 +3153,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.1.10", + "storybook": "^10.1.11", "vite": "*", "webpack": "*" }, @@ -3191,9 +3191,9 @@ } }, "node_modules/@storybook/vue3": { - "version": "10.1.10", - "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-10.1.10.tgz", - "integrity": "sha512-NqMxLzW9VbuQOGbWIuwzi5yHcjP/iAUnmFtQ+Qm1vYGkxCdSmZAPiTo/nW3nK8KgPkSbSLumUbeCE7YyGBLiBA==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-10.1.11.tgz", + "integrity": "sha512-1QnVCZUN9fZspK1933xL7xUqi1TZEMY58zxfIpgQnkVhkGmbK82e6kYzB+XhHrnuYt33E1Pc5QFV9/5CvYK0Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -3206,19 +3206,19 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.1.10", + "storybook": "^10.1.11", "vue": "^3.0.0" } }, "node_modules/@storybook/vue3-vite": { - "version": "10.1.10", - "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-10.1.10.tgz", - "integrity": "sha512-lH6Ae2BI++0QUASco6BXsECnf3V+5ZNtY2ij1/gY3RQFM9kGhHF0k9VWulK+1KmwnjRDWzh1PTZ6B4FC9DDq2Q==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-10.1.11.tgz", + "integrity": "sha512-Kq5co2xdBhShYRzDfLlt1xoYiHo8RHOjX7wtsFQTtSwTKIPsm34j45pmGov4xEUMhfSf1PIor//spTzd1HDR9Q==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/builder-vite": "10.1.10", - "@storybook/vue3": "10.1.10", + "@storybook/builder-vite": "10.1.11", + "@storybook/vue3": "10.1.11", "magic-string": "^0.30.0", "typescript": "^5.8.3", "vue-component-meta": "^2.0.0", @@ -3229,7 +3229,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.1.10", + "storybook": "^10.1.11", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -3746,13 +3746,13 @@ } }, "node_modules/@unhead/vue": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.0.19.tgz", - "integrity": "sha512-7BYjHfOaoZ9+ARJkT10Q2TjnTUqDXmMpfakIAsD/hXiuff1oqWg1xeXT5+MomhNcC15HbiABpbbBmITLSHxdKg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.1.tgz", + "integrity": "sha512-WYa8ORhfv7lWDSoNpkMKhbW1Dbsux/3HqMcVkZS3xZ2/c/VrcChLj+IMadpCd1WNR0srITfRJhBYZ1i9hON5Qw==", "license": "MIT", "dependencies": { "hookable": "^5.5.3", - "unhead": "2.0.19" + "unhead": "2.1.1" }, "funding": { "url": "https://github.com/sponsors/harlan-zw" @@ -6949,9 +6949,9 @@ } }, "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.0.0.tgz", + "integrity": "sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==", "dev": true, "license": "MIT", "engines": { @@ -9184,9 +9184,9 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10174,9 +10174,9 @@ } }, "node_modules/storybook": { - "version": "10.1.10", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.1.10.tgz", - "integrity": "sha512-oK0t0jEogiKKfv5Z1ao4Of99+xWw1TMUGuGRYDQS4kp2yyBsJQEgu7NI7OLYsCDI6gzt5p3RPtl1lqdeVLUi8A==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.1.11.tgz", + "integrity": "sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10968,9 +10968,9 @@ "license": "MIT" }, "node_modules/unhead": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.0.19.tgz", - "integrity": "sha512-gEEjkV11Aj+rBnY6wnRfsFtF2RxKOLaPN4i+Gx3UhBxnszvV6ApSNZbGk7WKyy/lErQ6ekPN63qdFL7sa1leow==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.1.tgz", + "integrity": "sha512-NOt8n2KybAOxSLfNXegAVai4SGU8bPKqWnqCzNAvnRH2i8mW+0bbFjN/L75LBgCSTiOjJSpANe5w2V34Grr7Cw==", "license": "MIT", "dependencies": { "hookable": "^5.5.3" @@ -11593,13 +11593,13 @@ "license": "MIT" }, "node_modules/vue-i18n": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.2.2.tgz", - "integrity": "sha512-ULIKZyRluUPRCZmihVgUvpq8hJTtOqnbGZuv4Lz+byEKZq4mU0g92og414l6f/4ju+L5mORsiUuEPYrAuX2NJg==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.2.8.tgz", + "integrity": "sha512-vJ123v/PXCZntd6Qj5Jumy7UBmIuE92VrtdX+AXr+1WzdBHojiBxnAxdfctUFL+/JIN+VQH4BhsfTtiGsvVObg==", "license": "MIT", "dependencies": { - "@intlify/core-base": "11.2.2", - "@intlify/shared": "11.2.2", + "@intlify/core-base": "11.2.8", + "@intlify/shared": "11.2.8", "@vue/devtools-api": "^6.5.0" }, "engines": { @@ -11638,14 +11638,14 @@ } }, "node_modules/vue-tsc": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.1.8.tgz", - "integrity": "sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.1.tgz", + "integrity": "sha512-I23Rk8dkQfmcSbxDO0dmg9ioMLjKA1pjlU3Lz6Jfk2pMGu3Uryu9810XkcZH24IzPbhzPCnkKo2rEMRX0skSrw==", "dev": true, "license": "MIT", "dependencies": { - "@volar/typescript": "2.4.26", - "@vue/language-core": "3.1.8" + "@volar/typescript": "2.4.27", + "@vue/language-core": "3.2.1" }, "bin": { "vue-tsc": "bin/vue-tsc.js" @@ -11655,62 +11655,54 @@ } }, "node_modules/vue-tsc/node_modules/@volar/language-core": { - "version": "2.4.26", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.26.tgz", - "integrity": "sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz", + "integrity": "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.26" + "@volar/source-map": "2.4.27" } }, "node_modules/vue-tsc/node_modules/@volar/source-map": { - "version": "2.4.26", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.26.tgz", - "integrity": "sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.27.tgz", + "integrity": "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==", "dev": true, "license": "MIT" }, "node_modules/vue-tsc/node_modules/@volar/typescript": { - "version": "2.4.26", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.26.tgz", - "integrity": "sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.27.tgz", + "integrity": "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.26", + "@volar/language-core": "2.4.27", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "node_modules/vue-tsc/node_modules/@vue/language-core": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.1.8.tgz", - "integrity": "sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.1.tgz", + "integrity": "sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.26", + "@volar/language-core": "2.4.27", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, "node_modules/vue-tsc/node_modules/alien-signals": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.1.tgz", - "integrity": "sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 380664cc0..8d02c4123 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-promise": "^7.2.1", "eslint-plugin-vue": "^10.6.2", - "globals": "^16.5.0", + "globals": "^17.0.0", "happy-dom": "^20.0.11", "jiti": "^2.6.1", "kill-port": "^2.0.1", From 468561611fa8131843e859c4d297a7a3164f82b2 Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Fri, 2 Jan 2026 10:44:43 +0100 Subject: [PATCH 0018/1916] chore: faster runner for playwright (#26355) --- .github/workflows/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml index c5dae132a..fe5a5ea10 100644 --- a/.github/workflows/default.yml +++ b/.github/workflows/default.yml @@ -203,7 +203,7 @@ jobs: integration: name: Integration - runs-on: depot-ubuntu-24.04-arm-16 + runs-on: depot-ubuntu-24.04-arm-32 permissions: contents: read From 1e0539ec7d282cf7b3f206a2fe06376900c17d6c Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 2 Jan 2026 12:05:03 +0100 Subject: [PATCH 0019/1916] chore: improve generator dependencies (#26360) --- cmd/decorate/decorate.go | 12 +- vehicle/vehicle_decorators.go | 7424 ++------------------------------- 2 files changed, 264 insertions(+), 7172 deletions(-) diff --git a/cmd/decorate/decorate.go b/cmd/decorate/decorate.go index b1beba1d2..58fd9a1db 100644 --- a/cmd/decorate/decorate.go +++ b/cmd/decorate/decorate.go @@ -58,6 +58,9 @@ var a struct { api.BatteryController api.BatterySocLimiter api.BatteryPowerLimiter + + api.CurrentController + api.CurrentGetter } func typ(i any) string { @@ -65,10 +68,11 @@ func typ(i any) string { } var dependents = map[string][]string{ - typ(&a.Meter): {typ(&a.MeterEnergy), typ(&a.PhaseCurrents), typ(&a.PhaseVoltages), typ(&a.MaxACPowerGetter)}, - typ(&a.PhaseCurrents): {typ(&a.PhasePowers)}, // phase powers are only used to determine currents sign - typ(&a.PhaseSwitcher): {typ(&a.PhaseGetter)}, - typ(&a.Battery): {typ(&a.BatteryCapacity), typ(&a.SocLimiter), typ(&a.BatteryController), typ(&a.BatterySocLimiter), typ(&a.BatteryPowerLimiter)}, + typ(&a.Meter): {typ(&a.MeterEnergy), typ(&a.PhaseCurrents), typ(&a.PhaseVoltages), typ(&a.MaxACPowerGetter)}, + typ(&a.PhaseCurrents): {typ(&a.PhasePowers)}, // phase powers are only used to determine currents sign + typ(&a.PhaseSwitcher): {typ(&a.PhaseGetter)}, + typ(&a.Battery): {typ(&a.BatteryCapacity), typ(&a.SocLimiter), typ(&a.BatteryController), typ(&a.BatterySocLimiter), typ(&a.BatteryPowerLimiter)}, + typ(&a.CurrentController): {typ(&a.CurrentGetter)}, } // hasIntersection returns if the slices intersect diff --git a/vehicle/vehicle_decorators.go b/vehicle/vehicle_decorators.go index d63eb82e9..930b9dc42 100644 --- a/vehicle/vehicle_decorators.go +++ b/vehicle/vehicle_decorators.go @@ -10,10 +10,10 @@ import ( func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeState func() (api.ChargeStatus, error), vehicleRange func() (int64, error), vehicleOdometer func() (float64, error), vehicleClimater func() (bool, error), currentController func(int64) error, currentGetter func() (float64, error), vehicleFinishTimer func() (time.Time, error), resurrector func() error, chargeController func(bool) error) api.Vehicle { switch { - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return base - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -24,7 +24,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -35,7 +35,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -50,7 +50,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleRange @@ -61,7 +61,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -76,7 +76,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -91,7 +91,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -110,7 +110,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleOdometer @@ -121,7 +121,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -136,7 +136,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -151,7 +151,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -170,7 +170,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleOdometer @@ -185,7 +185,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -204,7 +204,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -223,7 +223,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -246,7 +246,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleClimater @@ -257,7 +257,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -272,7 +272,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -287,7 +287,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -306,7 +306,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleClimater @@ -321,7 +321,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -340,7 +340,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -359,7 +359,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -382,7 +382,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleClimater @@ -397,7 +397,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -416,7 +416,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -435,7 +435,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -458,7 +458,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleClimater @@ -477,7 +477,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -500,7 +500,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -523,7 +523,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -1222,678 +1222,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController == nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -2694,7 +2022,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleFinishTimer @@ -2705,7 +2033,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -2720,7 +2048,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -2735,7 +2063,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -2754,7 +2082,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleFinishTimer @@ -2769,7 +2097,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -2788,7 +2116,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -2807,7 +2135,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -2830,7 +2158,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleFinishTimer @@ -2845,7 +2173,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -2864,7 +2192,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -2883,7 +2211,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -2906,7 +2234,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleFinishTimer @@ -2925,7 +2253,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -2948,7 +2276,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -2971,7 +2299,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -2998,7 +2326,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleClimater @@ -3013,7 +2341,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -3032,7 +2360,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -3051,7 +2379,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -3074,7 +2402,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleClimater @@ -3093,7 +2421,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -3116,7 +2444,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -3139,7 +2467,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -3166,7 +2494,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleClimater @@ -3185,7 +2513,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.SocLimiter @@ -3208,7 +2536,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -3231,7 +2559,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -3258,7 +2586,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleClimater @@ -3281,7 +2609,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.SocLimiter @@ -3308,7 +2636,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -3335,7 +2663,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -4166,806 +3494,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController == nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -5894,7 +4422,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -5905,7 +4433,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -5920,7 +4448,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -5935,7 +4463,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -5954,7 +4482,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -5969,7 +4497,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -5988,7 +4516,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6007,7 +4535,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6030,7 +4558,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -6045,7 +4573,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -6064,7 +4592,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -6083,7 +4611,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -6106,7 +4634,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -6125,7 +4653,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -6148,7 +4676,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6171,7 +4699,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6198,7 +4726,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -6213,7 +4741,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -6232,7 +4760,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -6251,7 +4779,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -6274,7 +4802,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -6293,7 +4821,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -6316,7 +4844,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6339,7 +4867,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6366,7 +4894,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -6385,7 +4913,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -6408,7 +4936,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -6431,7 +4959,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -6458,7 +4986,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -6481,7 +5009,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -6508,7 +5036,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -6535,7 +5063,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -7366,806 +5894,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController == nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -9094,7 +6822,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9109,7 +6837,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9128,7 +6856,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9147,7 +6875,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9170,7 +6898,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9189,7 +6917,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9212,7 +6940,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9235,7 +6963,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9262,7 +6990,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9281,7 +7009,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9304,7 +7032,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9327,7 +7055,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9354,7 +7082,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9377,7 +7105,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9404,7 +7132,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9431,7 +7159,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9462,7 +7190,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9481,7 +7209,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9504,7 +7232,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9527,7 +7255,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9554,7 +7282,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9577,7 +7305,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9604,7 +7332,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9631,7 +7359,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9662,7 +7390,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9685,7 +7413,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -9712,7 +7440,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9739,7 +7467,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -9770,7 +7498,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9797,7 +7525,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -9828,7 +7556,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -9859,7 +7587,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -10822,934 +8550,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController == nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController == nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -12806,7 +9606,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12817,7 +9617,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12832,7 +9632,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12847,7 +9647,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12866,7 +9666,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -12881,7 +9681,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -12900,7 +9700,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -12919,7 +9719,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -12942,7 +9742,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12957,7 +9757,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12976,7 +9776,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -12995,7 +9795,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13018,7 +9818,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13037,7 +9837,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13060,7 +9860,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13083,7 +9883,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13110,7 +9910,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13125,7 +9925,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13144,7 +9944,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13163,7 +9963,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13186,7 +9986,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13205,7 +10005,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13228,7 +10028,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13251,7 +10051,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13278,7 +10078,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13297,7 +10097,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13320,7 +10120,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13343,7 +10143,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -13370,7 +10170,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13393,7 +10193,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13420,7 +10220,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -13447,7 +10247,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -14278,806 +11078,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController != nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -16006,7 +12006,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16021,7 +12021,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16040,7 +12040,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16059,7 +12059,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16082,7 +12082,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16101,7 +12101,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16124,7 +12124,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16147,7 +12147,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16174,7 +12174,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16193,7 +12193,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16216,7 +12216,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16239,7 +12239,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16266,7 +12266,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16289,7 +12289,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16316,7 +12316,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16343,7 +12343,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16374,7 +12374,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16393,7 +12393,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16416,7 +12416,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16439,7 +12439,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16466,7 +12466,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16489,7 +12489,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16516,7 +12516,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16543,7 +12543,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16574,7 +12574,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16597,7 +12597,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16624,7 +12624,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16651,7 +12651,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -16682,7 +12682,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16709,7 +12709,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16740,7 +12740,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -16771,7 +12771,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -17734,934 +13734,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector == nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController != nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector == nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -19718,7 +14790,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19733,7 +14805,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19752,7 +14824,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19771,7 +14843,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19794,7 +14866,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -19813,7 +14885,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -19836,7 +14908,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -19859,7 +14931,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -19886,7 +14958,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19905,7 +14977,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19928,7 +15000,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19951,7 +15023,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -19978,7 +15050,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20001,7 +15073,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20028,7 +15100,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20055,7 +15127,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20086,7 +15158,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20105,7 +15177,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20128,7 +15200,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20151,7 +15223,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20178,7 +15250,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20201,7 +15273,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20228,7 +15300,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20255,7 +15327,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20286,7 +15358,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20309,7 +15381,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20336,7 +15408,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20363,7 +15435,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -20394,7 +15466,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20421,7 +15493,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20452,7 +15524,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -20483,7 +15555,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -21446,934 +16518,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer == nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController != nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle @@ -23430,7 +17574,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23449,7 +17593,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23472,7 +17616,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23495,7 +17639,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23522,7 +17666,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23545,7 +17689,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23572,7 +17716,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23599,7 +17743,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23630,7 +17774,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23653,7 +17797,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23680,7 +17824,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23707,7 +17851,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23738,7 +17882,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23765,7 +17909,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23796,7 +17940,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23827,7 +17971,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23862,7 +18006,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23885,7 +18029,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23912,7 +18056,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23939,7 +18083,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -23970,7 +18114,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -23997,7 +18141,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -24028,7 +18172,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -24059,7 +18203,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -24094,7 +18238,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -24121,7 +18265,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -24152,7 +18296,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -24183,7 +18327,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeController @@ -24218,7 +18362,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -24249,7 +18393,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -24284,7 +18428,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -24319,7 +18463,7 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeController @@ -25414,1062 +19558,6 @@ func decorateVehicle(base api.Vehicle, socLimiter func() (int64, error), chargeS }, } - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange == nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState == nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - - case chargeController != nil && chargeState != nil && currentController == nil && currentGetter != nil && resurrector != nil && socLimiter != nil && vehicleClimater != nil && vehicleFinishTimer != nil && vehicleOdometer != nil && vehicleRange != nil: - return &struct { - api.Vehicle - api.ChargeController - api.ChargeState - api.CurrentGetter - api.Resurrector - api.SocLimiter - api.VehicleClimater - api.VehicleFinishTimer - api.VehicleOdometer - api.VehicleRange - }{ - Vehicle: base, - ChargeController: &decorateVehicleChargeControllerImpl{ - chargeController: chargeController, - }, - ChargeState: &decorateVehicleChargeStateImpl{ - chargeState: chargeState, - }, - CurrentGetter: &decorateVehicleCurrentGetterImpl{ - currentGetter: currentGetter, - }, - Resurrector: &decorateVehicleResurrectorImpl{ - resurrector: resurrector, - }, - SocLimiter: &decorateVehicleSocLimiterImpl{ - socLimiter: socLimiter, - }, - VehicleClimater: &decorateVehicleVehicleClimaterImpl{ - vehicleClimater: vehicleClimater, - }, - VehicleFinishTimer: &decorateVehicleVehicleFinishTimerImpl{ - vehicleFinishTimer: vehicleFinishTimer, - }, - VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ - vehicleOdometer: vehicleOdometer, - }, - VehicleRange: &decorateVehicleVehicleRangeImpl{ - vehicleRange: vehicleRange, - }, - } - case chargeController != nil && chargeState == nil && currentController != nil && currentGetter != nil && resurrector != nil && socLimiter == nil && vehicleClimater == nil && vehicleFinishTimer != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle From 30b1e135e4f6f48114de0a41f4c18726e6452d50 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 2 Jan 2026 12:28:13 +0100 Subject: [PATCH 0020/1916] chore: allow decorator to split functions (#26357) --- cmd/decorate/decorate.go | 88 +- cmd/decorate/decorate.tpl | 8 - cmd/decorate/header.tpl | 7 + meter/meter.go | 55 +- meter/meter_average.go | 6 +- meter/meter_decorators.go | 11966 +++--------------------------------- meter/meter_test.go | 31 +- meter/openwb.go | 6 +- 8 files changed, 903 insertions(+), 11264 deletions(-) create mode 100644 cmd/decorate/header.tpl diff --git a/cmd/decorate/decorate.go b/cmd/decorate/decorate.go index 58fd9a1db..b0a39bda4 100644 --- a/cmd/decorate/decorate.go +++ b/cmd/decorate/decorate.go @@ -32,6 +32,9 @@ import ( //go:embed decorate.tpl var srcTmpl string +//go:embed header.tpl +var header string + type dynamicType struct { typ, function, signature string } @@ -85,7 +88,7 @@ func hasIntersection[T comparable](a, b []T) bool { return false } -func generate(out io.Writer, packageName, functionName, baseType string, dynamicTypes ...dynamicType) error { +func generate(out io.Writer, functionName, baseType string, dynamicTypes ...dynamicType) error { types := make(map[string]typeStruct, len(dynamicTypes)) combos := make([]string, 0) @@ -186,15 +189,12 @@ COMBO: } vars := struct { - API string - Package, Function string + Function string BaseType, ShortBase string ReturnType string Types map[string]typeStruct Combinations [][]string }{ - API: "github.com/evcc-io/evcc/api", - Package: packageName, Function: functionName, BaseType: baseType, ShortBase: shortBase, @@ -206,6 +206,11 @@ COMBO: return tmpl.Execute(out, vars) } +type decorationSet struct { + function, base, ret string + types []string +} + var ( target = pflag.StringP("out", "o", "", "output file") pkg = pflag.StringP("package", "p", "", "package name") @@ -223,13 +228,17 @@ func Usage() { pflag.PrintDefaults() } -func parseFile(file string, function, basetype, returntype *string, types *[]string) error { +func parseFile(file string) ([]decorationSet, error) { + var res []decorationSet + f, err := os.Open(file) if err != nil { - return err + return nil, err } defer f.Close() + var current decorationSet + scanner := bufio.NewScanner(f) for scanner.Scan() { line := scanner.Text() @@ -242,20 +251,29 @@ func parseFile(file string, function, basetype, returntype *string, types *[]str switch segs[0] { case "function": - *function = segs[1] + // must be first + if current.function != "" { + res = append(res, current) + current = decorationSet{} + } + current.function = segs[1] case "basetype": - *basetype = segs[1] + current.base = segs[1] case "returntype": - *returntype = segs[1] + current.ret = segs[1] case "type": - *types = append(*types, segs[1]) + current.types = append(current.types, segs[1]) default: panic("invalid directive //evcc:" + segs[0]) } } } - return scanner.Err() + if current.function != "" { + res = append(res, current) + } + + return res, scanner.Err() } func main() { @@ -274,32 +292,22 @@ func main() { pkg = &gopkg } + sets := []decorationSet{{*function, *base, *ret, *types}} + if *function == "" { - if err := parseFile(gofile, function, base, ret, types); err != nil { + all, err := parseFile(gofile) + if err != nil { fmt.Println(err) os.Exit(2) } + sets = all } - if *base == "" || *pkg == "" || len(*types) == 0 { + if *pkg == "" || len(sets) == 0 || sets[0].base == "" || len(sets[0].types) == 0 { Usage() os.Exit(2) } - var dynamicTypes []dynamicType - for _, v := range *types { - split := strings.SplitN(v, ",", 3) - dt := dynamicType{split[0], split[1], split[2]} - dynamicTypes = append(dynamicTypes, dt) - } - - var buf bytes.Buffer - if err := generate(&buf, *pkg, *function, *base, dynamicTypes...); err != nil { - fmt.Println(err) - os.Exit(2) - } - generated := strings.TrimSpace(buf.String()) + "\n" - var out io.Writer = os.Stdout var name string @@ -319,9 +327,29 @@ func main() { out = dst } - formatted, err := format.Source([]byte(generated)) + generated := new(bytes.Buffer) + fmt.Fprintln(generated, strings.ReplaceAll(header, "{{.Package}}", *pkg)) + + for _, set := range sets { + var dynamicTypes []dynamicType + for _, v := range set.types { + split := strings.SplitN(v, ",", 3) + dt := dynamicType{split[0], split[1], split[2]} + dynamicTypes = append(dynamicTypes, dt) + } + + var buf bytes.Buffer + if err := generate(&buf, set.function, set.base, dynamicTypes...); err != nil { + fmt.Println(err) + os.Exit(2) + } + + fmt.Fprintln(generated, buf.String()) + } + + formatted, err := format.Source(generated.Bytes()) if err != nil { - formatted = []byte(generated) + formatted = generated.Bytes() } formatted, err = imports.Process(name, formatted, nil) diff --git a/cmd/decorate/decorate.tpl b/cmd/decorate/decorate.tpl index cc686a980..b4d1aecdb 100644 --- a/cmd/decorate/decorate.tpl +++ b/cmd/decorate/decorate.tpl @@ -1,11 +1,3 @@ -package {{.Package}} - -// Code generated by github.com/evcc-io/evcc/cmd/tools/decorate.go. DO NOT EDIT. - -import ( - "{{.API}}" -) - {{define "case"}} {{- $combo := .Combo}} {{- $prefix := .Prefix}} diff --git a/cmd/decorate/header.tpl b/cmd/decorate/header.tpl new file mode 100644 index 000000000..b3ea644a5 --- /dev/null +++ b/cmd/decorate/header.tpl @@ -0,0 +1,7 @@ +package {{.Package}} + +// Code generated by github.com/evcc-io/evcc/cmd/tools/decorate.go. DO NOT EDIT. + +import ( + "github.com/evcc-io/evcc/api" +) diff --git a/meter/meter.go b/meter/meter.go index cd0fff31e..11aad1b35 100644 --- a/meter/meter.go +++ b/meter/meter.go @@ -14,7 +14,24 @@ func init() { registry.AddCtx(api.Custom, NewConfigurableFromConfig) } -//go:generate go tool decorate -f decorateMeter -b api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.PhasePowers,Powers,func() (float64, float64, float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryPowerLimiter,GetPowerLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.MaxACPowerGetter,MaxACPower,func() float64" +//go:generate go tool decorate + +//evcc:function decorateMeter +//evcc:basetype api.Meter +//evcc:type api.MeterEnergy,TotalEnergy,func() (float64, error) +//evcc:type api.PhaseCurrents,Currents,func() (float64, float64, float64, error) +//evcc:type api.PhaseVoltages,Voltages,func() (float64, float64, float64, error) +//evcc:type api.PhasePowers,Powers,func() (float64, float64, float64, error) +//evcc:type api.MaxACPowerGetter,MaxACPower,func() float64 + +//evcc:function decorateMeterBattery +//evcc:basetype api.Meter +//evcc:type api.MeterEnergy,TotalEnergy,func() (float64, error) +//evcc:type api.Battery,Soc,func() (float64, error) +//evcc:type api.BatteryCapacity,Capacity,func() float64 +//evcc:type api.BatterySocLimiter,GetSocLimits,func() (float64, float64) +//evcc:type api.BatteryPowerLimiter,GetPowerLimits,func() (float64, float64) +//evcc:type api.BatteryController,SetBatteryMode,func(api.BatteryMode) error // NewConfigurableFromConfig creates api.Meter from config func NewConfigurableFromConfig(ctx context.Context, other map[string]any) (api.Meter, error) { @@ -83,13 +100,18 @@ func NewConfigurableFromConfig(ctx context.Context, other map[string]any) (api.M } } - res := m.Decorate( - energyG, currentsG, voltagesG, powersG, - socG, cc.batteryCapacity.Decorator(), cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator(), batModeS, - cc.pvMaxACPower.Decorator(), - ) + if socG != nil { + return m.DecorateBattery( + energyG, + socG, cc.batteryCapacity.Decorator(), + cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator(), + batModeS, + ), nil + } - return res, nil + return m.Decorate( + energyG, currentsG, voltagesG, powersG, cc.pvMaxACPower.Decorator(), + ), nil } // NewConfigurable creates a new meter @@ -109,19 +131,28 @@ type Meter struct { func (m *Meter) Decorate( totalEnergy func() (float64, error), currents, voltages, powers func() (float64, float64, float64, error), - batterySoc func() (float64, error), - batteryCapacity func() float64, - batterySocLimits, batteryPowerLimits func() (float64, float64), - setBatteryMode func(api.BatteryMode) error, maxACPower func() float64, ) api.Meter { return decorateMeter(m, totalEnergy, currents, voltages, powers, - batterySoc, batteryCapacity, batterySocLimits, batteryPowerLimits, setBatteryMode, maxACPower, ) } +func (m *Meter) DecorateBattery( + totalEnergy func() (float64, error), + soc func() (float64, error), capacity func() float64, + socLimits, powerLimits func() (float64, float64), + setMode func(api.BatteryMode) error, +) api.Meter { + return decorateMeterBattery(m, + totalEnergy, + soc, capacity, + socLimits, powerLimits, + setMode, + ) +} + // CurrentPower implements the api.Meter interface func (m *Meter) CurrentPower() (float64, error) { return m.currentPowerG() diff --git a/meter/meter_average.go b/meter/meter_average.go index d0a740e4c..dc9ab1baf 100644 --- a/meter/meter_average.go +++ b/meter/meter_average.go @@ -70,7 +70,11 @@ func NewMovingAverageFromConfig(ctx context.Context, other map[string]any) (api. powers = m.Powers } - return meter.Decorate(totalEnergy, currents, voltages, powers, batterySoc, cc.Meter.batteryCapacity.Decorator(), nil, nil, nil, nil), nil + if batterySoc != nil { + return meter.DecorateBattery(totalEnergy, batterySoc, cc.Meter.batteryCapacity.Decorator(), nil, nil, nil), nil + } + + return meter.Decorate(totalEnergy, currents, voltages, powers, nil), nil } type MovingAverage struct { diff --git a/meter/meter_decorators.go b/meter/meter_decorators.go index ca490cbe1..e0d9a9439 100644 --- a/meter/meter_decorators.go +++ b/meter/meter_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), phasePowers func() (float64, float64, float64, error), battery func() (float64, error), batteryCapacity func() float64, batterySocLimiter func() (float64, float64), batteryPowerLimiter func() (float64, float64), batteryController func(api.BatteryMode) error, maxACPowerGetter func() float64) api.Meter { +func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), phasePowers func() (float64, float64, float64, error), maxACPowerGetter func() float64) api.Meter { switch { - case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return base - case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.MeterEnergy @@ -22,7 +22,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.PhaseCurrents @@ -33,7 +33,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.MeterEnergy @@ -48,7 +48,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.PhaseVoltages @@ -59,7 +59,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.MeterEnergy @@ -74,7 +74,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.PhaseCurrents @@ -89,7 +89,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.MeterEnergy @@ -108,7 +108,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.PhaseCurrents @@ -123,7 +123,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.MeterEnergy @@ -142,7 +142,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.PhaseCurrents @@ -161,7 +161,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.MeterEnergy @@ -184,10960 +184,24 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter - api.Battery - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.MaxACPowerGetter - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: - return &struct { - api.Meter - api.Battery - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter - api.MaxACPowerGetter - api.MeterEnergy - api.PhaseCurrents - api.PhasePowers - api.PhaseVoltages - }{ - Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, - MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ - maxACPowerGetter: maxACPowerGetter, - }, - MeterEnergy: &decorateMeterMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ - phaseCurrents: phaseCurrents, - }, - PhasePowers: &decorateMeterPhasePowersImpl{ - phasePowers: phasePowers, - }, - PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ - phaseVoltages: phaseVoltages, - }, - } - - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: - return &struct { - api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.MeterEnergy }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11146,33 +210,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.PhaseCurrents }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11181,34 +225,14 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11220,33 +244,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.PhaseVoltages }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11255,34 +259,14 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.MeterEnergy api.PhaseVoltages }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11294,34 +278,14 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.PhaseCurrents api.PhaseVoltages }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11333,35 +297,15 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhaseVoltages }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11376,34 +320,14 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.PhaseCurrents api.PhasePowers }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11415,35 +339,15 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhasePowers }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11458,35 +362,15 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.PhaseCurrents api.PhasePowers api.PhaseVoltages }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11501,14 +385,9 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter - api.Battery - api.BatteryCapacity - api.BatteryController - api.BatteryPowerLimiter - api.BatterySocLimiter api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents @@ -11516,21 +395,6 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur api.PhaseVoltages }{ Meter: base, - Battery: &decorateMeterBatteryImpl{ - battery: battery, - }, - BatteryCapacity: &decorateMeterBatteryCapacityImpl{ - batteryCapacity: batteryCapacity, - }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, - }, - BatteryPowerLimiter: &decorateMeterBatteryPowerLimiterImpl{ - batteryPowerLimiter: batteryPowerLimiter, - }, - BatterySocLimiter: &decorateMeterBatterySocLimiterImpl{ - batterySocLimiter: batterySocLimiter, - }, MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ maxACPowerGetter: maxACPowerGetter, }, @@ -11552,46 +416,6 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur return nil } -type decorateMeterBatteryImpl struct { - battery func() (float64, error) -} - -func (impl *decorateMeterBatteryImpl) Soc() (float64, error) { - return impl.battery() -} - -type decorateMeterBatteryCapacityImpl struct { - batteryCapacity func() float64 -} - -func (impl *decorateMeterBatteryCapacityImpl) Capacity() float64 { - return impl.batteryCapacity() -} - -type decorateMeterBatteryControllerImpl struct { - batteryController func(api.BatteryMode) error -} - -func (impl *decorateMeterBatteryControllerImpl) SetBatteryMode(p0 api.BatteryMode) error { - return impl.batteryController(p0) -} - -type decorateMeterBatteryPowerLimiterImpl struct { - batteryPowerLimiter func() (float64, float64) -} - -func (impl *decorateMeterBatteryPowerLimiterImpl) GetPowerLimits() (float64, float64) { - return impl.batteryPowerLimiter() -} - -type decorateMeterBatterySocLimiterImpl struct { - batterySocLimiter func() (float64, float64) -} - -func (impl *decorateMeterBatterySocLimiterImpl) GetSocLimits() (float64, float64) { - return impl.batterySocLimiter() -} - type decorateMeterMaxACPowerGetterImpl struct { maxACPowerGetter func() float64 } @@ -11631,3 +455,743 @@ type decorateMeterPhaseVoltagesImpl struct { func (impl *decorateMeterPhaseVoltagesImpl) Voltages() (float64, float64, float64, error) { return impl.phaseVoltages() } + +func decorateMeterBattery(base api.Meter, meterEnergy func() (float64, error), battery func() (float64, error), batteryCapacity func() float64, batterySocLimiter func() (float64, float64), batteryPowerLimiter func() (float64, float64), batteryController func(api.BatteryMode) error) api.Meter { + switch { + case battery == nil && meterEnergy == nil: + return base + + case battery == nil && meterEnergy != nil: + return &struct { + api.Meter + api.MeterEnergy + }{ + Meter: base, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryPowerLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryPowerLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryPowerLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateMeterBatteryBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateMeterBatteryBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateMeterBatteryMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + } + + return nil +} + +type decorateMeterBatteryBatteryImpl struct { + battery func() (float64, error) +} + +func (impl *decorateMeterBatteryBatteryImpl) Soc() (float64, error) { + return impl.battery() +} + +type decorateMeterBatteryBatteryCapacityImpl struct { + batteryCapacity func() float64 +} + +func (impl *decorateMeterBatteryBatteryCapacityImpl) Capacity() float64 { + return impl.batteryCapacity() +} + +type decorateMeterBatteryBatteryControllerImpl struct { + batteryController func(api.BatteryMode) error +} + +func (impl *decorateMeterBatteryBatteryControllerImpl) SetBatteryMode(p0 api.BatteryMode) error { + return impl.batteryController(p0) +} + +type decorateMeterBatteryBatteryPowerLimiterImpl struct { + batteryPowerLimiter func() (float64, float64) +} + +func (impl *decorateMeterBatteryBatteryPowerLimiterImpl) GetPowerLimits() (float64, float64) { + return impl.batteryPowerLimiter() +} + +type decorateMeterBatteryBatterySocLimiterImpl struct { + batterySocLimiter func() (float64, float64) +} + +func (impl *decorateMeterBatteryBatterySocLimiterImpl) GetSocLimits() (float64, float64) { + return impl.batterySocLimiter() +} + +type decorateMeterBatteryMeterEnergyImpl struct { + meterEnergy func() (float64, error) +} + +func (impl *decorateMeterBatteryMeterEnergyImpl) TotalEnergy() (float64, error) { + return impl.meterEnergy() +} diff --git a/meter/meter_test.go b/meter/meter_test.go index b40e25b51..6f38efcd1 100644 --- a/meter/meter_test.go +++ b/meter/meter_test.go @@ -8,22 +8,33 @@ import ( "github.com/stretchr/testify/require" ) -func TestACPower(t *testing.T) { +func TestPV(t *testing.T) { m, err := NewConfigurableFromConfig(t.Context(), map[string]any{ + "power": map[string]any{ + "source": "const", + "value": 1000, + }, + "maxacpower": 1000, + }) + require.NoError(t, err) + + // must not have soc/capacity + assert.Implements(t, new(api.MaxACPowerGetter), m) +} +func TestBattery(t *testing.T) { + m, err := NewConfigurableFromConfig(t.Context(), map[string]any{ + "power": map[string]any{ + "source": "const", + "value": 1000, + }, "capacity": 23, "soc": map[string]any{ "source": "const", "value": 47, }, - "maxacpower": 1000, - "power": map[string]any{ - "source": "const", - "value": 1000, - }, }) require.NoError(t, err) - _, ok := m.(api.BatteryCapacity) - assert.True(t, ok, "api.BatteryCapacity") - _, ok = m.(api.MaxACPowerGetter) - assert.True(t, ok, "api.MaxACPowerGetter") + + assert.Implements(t, new(api.Battery), m) + assert.Implements(t, new(api.BatteryCapacity), m) } diff --git a/meter/openwb.go b/meter/openwb.go index 8f5942af4..2f6292a09 100644 --- a/meter/openwb.go +++ b/meter/openwb.go @@ -139,7 +139,9 @@ func NewOpenWBFromConfig(other map[string]any) (api.Meter, error) { return nil, err } - res := m.Decorate(nil, currents, nil, nil, soc, capacity, nil, nil, nil, nil) + if strings.ToLower(cc.Usage) == "battery" { + return m.DecorateBattery(nil, soc, capacity, nil, nil, nil), nil + } - return res, nil + return m.Decorate(nil, currents, nil, nil, nil), nil } From 4a7498ac9cc539666ad708b4f888ee9488827e90 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 2 Jan 2026 13:20:09 +0100 Subject: [PATCH 0021/1916] Optimizer: standardize definition of battery parameters (#26302) --- meter/e3dc.go | 30 +- meter/e3dc_decorators.go | 570 +++++++++++++++++- meter/lgess.go | 9 +- meter/lgess_decorators.go | 410 ++++++++++++- meter/mbmd.go | 2 + .../definition/meter/alpha-ess-smile.yaml | 9 +- templates/definition/meter/batterx.yaml | 7 +- templates/definition/meter/bosch-bpt.yaml | 3 +- .../definition/meter/deye-hybrid-3p.yaml | 11 +- .../definition/meter/deye-hybrid-hp3.yaml | 11 +- templates/definition/meter/deye-storage.yaml | 5 +- templates/definition/meter/e3dc-modbus.yaml | 5 +- templates/definition/meter/e3dc-rscp.yaml | 35 +- templates/definition/meter/enphase.yaml | 11 +- .../definition/meter/fox-ess-avocado.yaml | 11 +- templates/definition/meter/fox-ess-h1.yaml | 2 + .../definition/meter/fox-ess-h3-smart.yaml | 15 +- templates/definition/meter/fox-ess-h3.yaml | 5 +- templates/definition/meter/fronius-gen24.yaml | 13 +- .../definition/meter/fronius-solarapi-v1.yaml | 5 +- .../definition/meter/fronius-vertoplus.yaml | 5 +- templates/definition/meter/goodwe-hybrid.yaml | 11 +- .../definition/meter/growatt-hybrid-tlxh.yaml | 5 +- .../definition/meter/growatt-hybrid.yaml | 5 +- .../definition/meter/hager-flow-modbus.yaml | 3 +- templates/definition/meter/huawei-emma.yaml | 5 +- .../definition/meter/huawei-smartlogger.yaml | 17 +- .../definition/meter/huawei-sun2000.yaml | 18 +- .../definition/meter/kostal-piko-hybrid.yaml | 5 +- .../meter/kostal-plenticore-gen2.yaml | 17 +- .../definition/meter/kostal-plenticore.yaml | 14 +- .../definition/meter/lg-ess-home-15.yaml | 14 +- .../definition/meter/lg-ess-home-8-10.yaml | 14 +- .../meter/marstek-jupiterc-plus.yaml | 7 +- templates/definition/meter/marstek-venus.yaml | 12 +- templates/definition/meter/mtec-eb-gen3.yaml | 5 +- .../definition/meter/openems-modbus.yaml | 19 +- templates/definition/meter/openems.yaml | 15 +- templates/definition/meter/plexlog.yaml | 5 +- .../definition/meter/qcells-hybrid-cloud.yaml | 5 +- templates/definition/meter/rct-power.yaml | 43 +- templates/definition/meter/saj-h1.yaml | 21 +- templates/definition/meter/saj-h2.yaml | 9 +- templates/definition/meter/sax.yaml | 5 +- templates/definition/meter/senec-home.yaml | 5 +- .../definition/meter/senergy-hybrid.yaml | 11 +- .../definition/meter/sermatec-hybrid.yaml | 5 +- .../definition/meter/siemens-junelight.yaml | 5 +- templates/definition/meter/sigenergy.yaml | 13 +- .../definition/meter/sma-datamanager.yaml | 5 +- templates/definition/meter/sma-hybrid.yaml | 5 +- .../meter/sma-inverter-speedwire.yaml | 3 +- templates/definition/meter/sofarsolar-g3.yaml | 13 +- templates/definition/meter/sofarsolar.yaml | 5 +- .../definition/meter/solaredge-hybrid.yaml | 31 +- .../definition/meter/solarmax-maxstorage.yaml | 5 +- .../definition/meter/solarwatt-flex.yaml | 5 +- .../meter/solarwatt-myreserve-matrix.yaml | 5 +- templates/definition/meter/solarwatt.yaml | 5 +- .../definition/meter/solax-hybrid-cloud.yaml | 5 +- templates/definition/meter/solax.yaml | 15 +- .../definition/meter/solis-hybrid-s.yaml | 11 +- templates/definition/meter/solis-hybrid.yaml | 5 +- .../definition/meter/sonnenbatterie.yaml | 14 +- .../meter/sonnenbatterie_eco56.yaml | 7 +- templates/definition/meter/storaxe.yaml | 5 +- .../definition/meter/sungrow-hybrid.yaml | 17 +- templates/definition/meter/sungrow-ihm.yaml | 5 +- .../meter/sunspec-battery-control.yaml | 14 +- .../definition/meter/sunspec-hybrid.yaml | 5 +- .../meter/sunspec-inverter-control.yaml | 5 +- .../definition/meter/sunspec-inverter.yaml | 5 +- templates/definition/meter/varta.yaml | 9 +- .../definition/meter/victron-energy.yaml | 16 +- .../definition/meter/wattsonic-gen3.yaml | 11 +- templates/definition/meter/wattsonic.yaml | 9 +- .../meter/zendure-solarflow-ac.yaml | 5 +- .../meter/zendure-solarflow-pro.yaml | 3 +- util/templates/defaults.yaml | 7 + util/templates/includes/battery-params.tpl | 7 + 80 files changed, 1184 insertions(+), 565 deletions(-) create mode 100644 util/templates/includes/battery-params.tpl diff --git a/meter/e3dc.go b/meter/e3dc.go index 118eefa49..bfc1900e2 100644 --- a/meter/e3dc.go +++ b/meter/e3dc.go @@ -29,20 +29,22 @@ func init() { registry.Add("e3dc-rscp", NewE3dcFromConfig) } -//go:generate go tool decorate -f decorateE3dc -b *E3dc -r api.Meter -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.MaxACPowerGetter,MaxACPower,func() float64" +//go:generate go tool decorate -f decorateE3dc -b *E3dc -r api.Meter -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryPowerLimiter,GetPowerLimits,func() (float64, float64)" -t "api.MaxACPowerGetter,MaxACPower,func() float64" func NewE3dcFromConfig(other map[string]any) (api.Meter, error) { cc := struct { - batteryCapacity `mapstructure:",squash"` - pvMaxACPower `mapstructure:",squash"` - Usage templates.Usage - Uri string - User string - Password string - Key string - ExternalPower bool - DischargeLimit uint32 - Timeout time.Duration + batteryCapacity `mapstructure:",squash"` + batteryPowerLimits `mapstructure:",squash"` + batterySocLimits `mapstructure:",squash"` + pvMaxACPower `mapstructure:",squash"` + Usage templates.Usage + Uri string + User string + Password string + Key string + ExternalPower bool + DischargeLimit uint32 + Timeout time.Duration }{ Timeout: request.Timeout, } @@ -69,12 +71,12 @@ func NewE3dcFromConfig(other map[string]any) (api.Meter, error) { ReceiveTimeout: cc.Timeout, } - return NewE3dc(cfg, cc.Usage, cc.DischargeLimit, cc.ExternalPower, cc.batteryCapacity.Decorator(), cc.pvMaxACPower.Decorator()) + return NewE3dc(cfg, cc.Usage, cc.DischargeLimit, cc.ExternalPower, cc.batteryCapacity.Decorator(), cc.pvMaxACPower.Decorator(), cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator()) } var e3dcOnce sync.Once -func NewE3dc(cfg rscp.ClientConfig, usage templates.Usage, dischargeLimit uint32, externalPower bool, capacity, maxacpower func() float64) (api.Meter, error) { +func NewE3dc(cfg rscp.ClientConfig, usage templates.Usage, dischargeLimit uint32, externalPower bool, capacity, maxacpower func() float64, batterySocLimits, batteryPowerLimits func() (float64, float64)) (api.Meter, error) { e3dcOnce.Do(func() { log := util.NewLogger("e3dc") rscp.Log.SetLevel(logrus.DebugLevel) @@ -112,7 +114,7 @@ func NewE3dc(cfg rscp.ClientConfig, usage templates.Usage, dischargeLimit uint32 batteryMode = m.setBatteryMode } - return decorateE3dc(m, batterySoc, batteryCapacity, batteryMode, maxacpower), nil + return decorateE3dc(m, batterySoc, batteryCapacity, batteryMode, batterySocLimits, batteryPowerLimits, maxacpower), nil } // retryMessage executes a single message request with retry diff --git a/meter/e3dc_decorators.go b/meter/e3dc_decorators.go index a517635ac..5c2e2279a 100644 --- a/meter/e3dc_decorators.go +++ b/meter/e3dc_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity func() float64, batteryController func(api.BatteryMode) error, maxACPowerGetter func() float64) api.Meter { +func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity func() float64, batteryController func(api.BatteryMode) error, batterySocLimiter func() (float64, float64), batteryPowerLimiter func() (float64, float64), maxACPowerGetter func() float64) api.Meter { switch { case battery == nil && maxACPowerGetter == nil: return base - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil: return &struct { *E3dc api.Battery @@ -22,7 +22,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil: return &struct { *E3dc api.Battery @@ -37,7 +37,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil: return &struct { *E3dc api.Battery @@ -52,7 +52,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter == nil: return &struct { *E3dc api.Battery @@ -71,6 +71,250 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryController + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryPowerLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryController + api.BatteryPowerLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter == nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + case battery == nil && maxACPowerGetter != nil: return &struct { *E3dc @@ -82,7 +326,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil: return &struct { *E3dc api.Battery @@ -97,7 +341,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil: return &struct { *E3dc api.Battery @@ -116,7 +360,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil: return &struct { *E3dc api.Battery @@ -135,7 +379,7 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && maxACPowerGetter != nil: return &struct { *E3dc api.Battery @@ -157,6 +401,298 @@ func decorateE3dc(base *E3dc, battery func() (float64, error), batteryCapacity f maxACPowerGetter: maxACPowerGetter, }, } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryController + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryPowerLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && maxACPowerGetter != nil: + return &struct { + *E3dc + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MaxACPowerGetter + }{ + E3dc: base, + Battery: &decorateE3dcBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateE3dcBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateE3dcBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateE3dcBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateE3dcBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MaxACPowerGetter: &decorateE3dcMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } } return nil @@ -186,6 +722,22 @@ func (impl *decorateE3dcBatteryControllerImpl) SetBatteryMode(p0 api.BatteryMode return impl.batteryController(p0) } +type decorateE3dcBatteryPowerLimiterImpl struct { + batteryPowerLimiter func() (float64, float64) +} + +func (impl *decorateE3dcBatteryPowerLimiterImpl) GetPowerLimits() (float64, float64) { + return impl.batteryPowerLimiter() +} + +type decorateE3dcBatterySocLimiterImpl struct { + batterySocLimiter func() (float64, float64) +} + +func (impl *decorateE3dcBatterySocLimiterImpl) GetSocLimits() (float64, float64) { + return impl.batterySocLimiter() +} + type decorateE3dcMaxACPowerGetterImpl struct { maxACPowerGetter func() float64 } diff --git a/meter/lgess.go b/meter/lgess.go index 4962bbba8..29adcbec8 100644 --- a/meter/lgess.go +++ b/meter/lgess.go @@ -22,7 +22,7 @@ func init() { registry.Add("lgess15", NewLgEss15FromConfig) } -//go:generate go tool decorate -f decorateLgEss -b *LgEss -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" +//go:generate go tool decorate -f decorateLgEss -b *LgEss -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryPowerLimiter,GetPowerLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" func NewLgEss8FromConfig(other map[string]any) (api.Meter, error) { return NewLgEssFromConfig(other, lgpcs.LgEss8) @@ -37,6 +37,7 @@ func NewLgEssFromConfig(other map[string]any, essType lgpcs.Model) (api.Meter, e cc := struct { batteryCapacity `mapstructure:",squash"` batterySocLimits `mapstructure:",squash"` + batteryPowerLimits `mapstructure:",squash"` URI, Usage string Registration, Password string Cache time.Duration @@ -56,11 +57,11 @@ func NewLgEssFromConfig(other map[string]any, essType lgpcs.Model) (api.Meter, e return nil, errors.New("missing usage") } - return NewLgEss(cc.URI, cc.Usage, cc.Registration, cc.Password, cc.Cache, cc.batteryCapacity.Decorator(), cc.batterySocLimits, essType) + return NewLgEss(cc.URI, cc.Usage, cc.Registration, cc.Password, cc.Cache, cc.batteryCapacity.Decorator(), cc.batterySocLimits, cc.batteryPowerLimits, essType) } // NewLgEss creates an LgEss Meter -func NewLgEss(uri, usage, registration, password string, cache time.Duration, capacity func() float64, batterySocLimits batterySocLimits, essType lgpcs.Model) (api.Meter, error) { +func NewLgEss(uri, usage, registration, password string, cache time.Duration, capacity func() float64, batterySocLimits batterySocLimits, batteryPowerLimits batteryPowerLimits, essType lgpcs.Model) (api.Meter, error) { conn, err := lgpcs.GetInstance(uri, registration, password, cache, essType) if err != nil { return nil, err @@ -90,7 +91,7 @@ func NewLgEss(uri, usage, registration, password string, cache time.Duration, ca } } - return decorateLgEss(m, totalEnergy, capacity, batterySoc, batterySocLimiter, setBatteryMode), nil + return decorateLgEss(m, totalEnergy, capacity, batterySoc, batterySocLimiter, batteryPowerLimits.Decorator(), setBatteryMode), nil } // CurrentPower implements the api.Meter interface diff --git a/meter/lgess_decorators.go b/meter/lgess_decorators.go index c42057c2b..7515f66a6 100644 --- a/meter/lgess_decorators.go +++ b/meter/lgess_decorators.go @@ -6,7 +6,7 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapacity func() float64, battery func() (float64, error), batterySocLimiter func() (float64, float64), batteryController func(api.BatteryMode) error) api.Meter { +func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapacity func() float64, battery func() (float64, error), batterySocLimiter func() (float64, float64), batteryPowerLimiter func() (float64, float64), batteryController func(api.BatteryMode) error) api.Meter { switch { case battery == nil && meterEnergy == nil: return base @@ -22,7 +22,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -33,7 +33,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -48,7 +48,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -63,7 +63,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -82,7 +82,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -97,7 +97,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -116,7 +116,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -135,7 +135,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -158,7 +158,175 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryPowerLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryPowerLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -173,7 +341,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -192,7 +360,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -211,7 +379,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter == nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -234,7 +402,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -253,7 +421,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -276,7 +444,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy == nil: return &struct { *LgEss api.Battery @@ -299,7 +467,7 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter == nil && batterySocLimiter != nil && meterEnergy != nil: return &struct { *LgEss api.Battery @@ -325,6 +493,206 @@ func decorateLgEss(base *LgEss, meterEnergy func() (float64, error), batteryCapa meterEnergy: meterEnergy, }, } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryController + api.BatteryPowerLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter == nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy == nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryPowerLimiter != nil && batterySocLimiter != nil && meterEnergy != nil: + return &struct { + *LgEss + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryPowerLimiter + api.BatterySocLimiter + api.MeterEnergy + }{ + LgEss: base, + Battery: &decorateLgEssBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateLgEssBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateLgEssBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryPowerLimiter: &decorateLgEssBatteryPowerLimiterImpl{ + batteryPowerLimiter: batteryPowerLimiter, + }, + BatterySocLimiter: &decorateLgEssBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + MeterEnergy: &decorateLgEssMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } } return nil @@ -354,6 +722,14 @@ func (impl *decorateLgEssBatteryControllerImpl) SetBatteryMode(p0 api.BatteryMod return impl.batteryController(p0) } +type decorateLgEssBatteryPowerLimiterImpl struct { + batteryPowerLimiter func() (float64, float64) +} + +func (impl *decorateLgEssBatteryPowerLimiterImpl) GetPowerLimits() (float64, float64) { + return impl.batteryPowerLimiter() +} + type decorateLgEssBatterySocLimiterImpl struct { batterySocLimiter func() (float64, float64) } diff --git a/meter/mbmd.go b/meter/mbmd.go index 21bf9d14e..e08fd1773 100644 --- a/meter/mbmd.go +++ b/meter/mbmd.go @@ -33,6 +33,8 @@ func NewModbusMbmdFromConfig(ctx context.Context, other map[string]any) (api.Met cc := struct { Model string batteryCapacity `mapstructure:",squash"` + batteryPowerLimits `mapstructure:",squash"` + batterySocLimits `mapstructure:",squash"` modbus.Settings `mapstructure:",squash"` Power, Energy, Soc string Currents []string diff --git a/templates/definition/meter/alpha-ess-smile.yaml b/templates/definition/meter/alpha-ess-smile.yaml index 425b10f0a..9117a849f 100644 --- a/templates/definition/meter/alpha-ess-smile.yaml +++ b/templates/definition/meter/alpha-ess-smile.yaml @@ -18,13 +18,8 @@ params: choice: ["rs485", "tcpip"] baudrate: 9600 id: 85 - - name: capacity - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -204,5 +199,5 @@ render: | address: 2133 # 0x855 Charge Cut Soc type: writemultiple decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/batterx.yaml b/templates/definition/meter/batterx.yaml index a03b6a902..eaea8c5ff 100644 --- a/templates/definition/meter/batterx.yaml +++ b/templates/definition/meter/batterx.yaml @@ -11,9 +11,8 @@ params: - name: host - name: port default: 80 - - name: capacity - advanced: true - name: externalpv + type: bool description: de: | Benötigt bei ein weiterer Solarwechselrichter. @@ -28,7 +27,7 @@ params: This parameter is needed when the BatterX station is connected to another solar inverter. The total produced solar power can so be reported through one system. Further auxilary solar inverters do not need to be connected to evcc. - default: "false" + - preset: battery-params render: | type: custom power: @@ -81,6 +80,6 @@ render: | uri: http://{{ .host }}:{{ .port }}/api.php?set=command&type=20738&text1=3&text2=1 # Battery Charge AC - ON - source: http uri: http://{{ .host }}:{{ .port }}/api.php?set=command&type=20738&text1=4&text2=0 # Battery Discharging - OFF - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} {{- end }} diff --git a/templates/definition/meter/bosch-bpt.yaml b/templates/definition/meter/bosch-bpt.yaml index a2843b40b..a3fdefe12 100644 --- a/templates/definition/meter/bosch-bpt.yaml +++ b/templates/definition/meter/bosch-bpt.yaml @@ -12,8 +12,7 @@ params: choice: ["grid", "pv", "battery"] allinone: true - name: uri - - name: capacity - advanced: true + - preset: battery-params render: | type: bosch-bpt usage: {{ .usage }} diff --git a/templates/definition/meter/deye-hybrid-3p.yaml b/templates/definition/meter/deye-hybrid-3p.yaml index 5e3afb3d3..6ef2be65d 100644 --- a/templates/definition/meter/deye-hybrid-3p.yaml +++ b/templates/definition/meter/deye-hybrid-3p.yaml @@ -16,13 +16,8 @@ params: choice: ["rs485", "tcpip"] baudrate: 9600 id: 1 - - name: capacity - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - name: maxacpower + - preset: battery-params - name: maxdischargecurrent required: true default: 100 @@ -384,7 +379,5 @@ render: | address: 109 # Battery Max Discharging Current type: writemultiple decode: uint16 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/deye-hybrid-hp3.yaml b/templates/definition/meter/deye-hybrid-hp3.yaml index 175f7e547..7fdcc279f 100644 --- a/templates/definition/meter/deye-hybrid-hp3.yaml +++ b/templates/definition/meter/deye-hybrid-hp3.yaml @@ -19,13 +19,8 @@ params: type: int default: 1 advanced: true - - name: capacity - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - name: maxacpower + - preset: battery-params - name: includegenport type: bool advanced: true @@ -306,7 +301,5 @@ render: | address: 172 type: writemultiple decode: int32s - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/deye-storage.yaml b/templates/definition/meter/deye-storage.yaml index 94a382899..36365f5f9 100644 --- a/templates/definition/meter/deye-storage.yaml +++ b/templates/definition/meter/deye-storage.yaml @@ -13,8 +13,7 @@ params: choice: ["rs485", "tcpip"] baudrate: 9600 id: 1 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -103,5 +102,5 @@ render: | address: 184 # "battery capacity" type: holding decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/e3dc-modbus.yaml b/templates/definition/meter/e3dc-modbus.yaml index 731b54b2f..c2f22c950 100644 --- a/templates/definition/meter/e3dc-modbus.yaml +++ b/templates/definition/meter/e3dc-modbus.yaml @@ -9,8 +9,7 @@ params: - name: host - name: port default: 502 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -56,5 +55,5 @@ render: | address: 40082 # Batterie-SOC in % type: holding decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/e3dc-rscp.yaml b/templates/definition/meter/e3dc-rscp.yaml index 9b299280f..5159c9ff5 100644 --- a/templates/definition/meter/e3dc-rscp.yaml +++ b/templates/definition/meter/e3dc-rscp.yaml @@ -38,6 +38,18 @@ params: de: Muss auf dem Bildschirm des Hauskraftwerks unter 'Personalisieren' > 'Benutzerprofil' angelegt werden. mask: true required: true + - name: maxacpower + - name: externalpower + type: bool + description: + de: Externe Quelle einschließen + en: Include external power + help: + de: Bezieht alle angeschlossenen externen Quellen in die PV-Berechnung ein (Standard). + en: Includes all connected external sources into the PV calculation (default). + advanced: true + usages: ["pv"] + default: true - name: battery description: generic: Battery @@ -52,20 +64,7 @@ params: type: int advanced: true usages: ["battery"] - - name: maxacpower - - name: capacity - advanced: true - - name: externalpower - type: bool - description: - de: Externe Quelle einschließen - en: Include external power - help: - de: Bezieht alle angeschlossenen externen Quellen in die PV-Berechnung ein (Standard). - en: Includes all connected external sources into the PV calculation (default). - advanced: true - usages: ["pv"] - default: "true" + - preset: battery-params render: | type: e3dc-rscp usage: {{ .usage }} @@ -73,11 +72,11 @@ render: | user: {{ .user }} password: {{ .password }} key: {{ .key }} - {{- if eq .usage "battery" }} - dischargelimit: {{ .dischargelimit }} - capacity: {{ .capacity }} # kWh - {{- end }} {{- if eq .usage "pv" }} maxacpower: {{ .maxacpower }} # W externalpower: {{ .externalpower }} {{- end }} + {{- if eq .usage "battery" }} + dischargelimit: {{ .dischargelimit }} + {{- include "battery-params" . }} + {{- end }} diff --git a/templates/definition/meter/enphase.yaml b/templates/definition/meter/enphase.yaml index 17ca1228a..57ef156c0 100644 --- a/templates/definition/meter/enphase.yaml +++ b/templates/definition/meter/enphase.yaml @@ -15,11 +15,6 @@ params: help: en: "Required if Envoy Firmware D7.x.xxx. Token is valid for one year. Instructions for obtaining a token via web UI: https://enphase.com/download/accessing-iq-gateway-local-apis-or-local-ui-token-based-authentication" de: "Ab Envoy Firmware D7.x.xxx notwendig. Token ist ein Jahr gültig. Anleitung (Obtaining a token via web UI): https://enphase.com/download/accessing-iq-gateway-local-apis-or-local-ui-token-based-authentication" - - name: capacity - advanced: true - - name: cache - advanced: true - default: 1s - name: battery_type description: en: "Enphase Battery Type (AC or IQ)" @@ -30,6 +25,10 @@ params: default: ac choice: ["ac", "iq"] advanced: true + - preset: battery-params + - name: cache + advanced: true + default: 1s render: | type: custom {{- if eq .usage "grid" }} @@ -163,5 +162,5 @@ render: | {{- end }} cache: {{ .cache }} jq: '[.[].devices[] | select(.percentFull != null) | .percentFull] | add / length' - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fox-ess-avocado.yaml b/templates/definition/meter/fox-ess-avocado.yaml index 129d5b96b..162a980f0 100644 --- a/templates/definition/meter/fox-ess-avocado.yaml +++ b/templates/definition/meter/fox-ess-avocado.yaml @@ -14,14 +14,15 @@ params: choice: ["rs485", "tcpip"] baudrate: 9600 id: 1 + - name: maxacpower + default: 800 + - preset: battery-params - name: capacity default: 2.11 # kWh - name: minsoc default: 10 - name: maxsoc default: 100 - - name: maxacpower - default: 800 - name: maxchargepower default: 1200 render: | @@ -188,9 +189,5 @@ render: | address: 46003 # Remote Active Power type: writemultiple encoding: int32 - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxacpower }} # W - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fox-ess-h1.yaml b/templates/definition/meter/fox-ess-h1.yaml index a8bd78c4d..65939fbaf 100644 --- a/templates/definition/meter/fox-ess-h1.yaml +++ b/templates/definition/meter/fox-ess-h1.yaml @@ -10,6 +10,7 @@ params: - name: modbus choice: ["rs485", "tcpip"] id: 247 + - preset: battery-params render: | type: custom {{- if eq .usage "pv" }} @@ -64,4 +65,5 @@ render: | type: input {{- end }} decode: int16 + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fox-ess-h3-smart.yaml b/templates/definition/meter/fox-ess-h3-smart.yaml index 9c8c8a569..d0ee8e6c8 100644 --- a/templates/definition/meter/fox-ess-h3-smart.yaml +++ b/templates/definition/meter/fox-ess-h3-smart.yaml @@ -10,17 +10,8 @@ params: - name: modbus choice: ["rs485", "tcpip"] id: 247 - - name: capacity - type: float - advanced: true - # battery control - - name: minsoc - type: int - advanced: true - - name: maxsoc - type: int - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -124,7 +115,5 @@ render: | address: 46611 # Minimum SoC OnGrid type: writesingle decode: uint16 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fox-ess-h3.yaml b/templates/definition/meter/fox-ess-h3.yaml index 2429279e9..1645133e3 100644 --- a/templates/definition/meter/fox-ess-h3.yaml +++ b/templates/definition/meter/fox-ess-h3.yaml @@ -10,6 +10,7 @@ params: - name: modbus choice: ["rs485", "tcpip"] id: 247 + - preset: battery-params - name: capacity advanced: true # battery control @@ -99,7 +100,5 @@ render: | address: 41009 # limit soc type: writesingle decode: uint16 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fronius-gen24.yaml b/templates/definition/meter/fronius-gen24.yaml index 6af4dd06c..deb527965 100644 --- a/templates/definition/meter/fronius-gen24.yaml +++ b/templates/definition/meter/fronius-gen24.yaml @@ -32,14 +32,9 @@ params: generic: Integer deprecated: true - name: maxacpower + - preset: battery-params - name: maxchargerate advanced: true - - name: capacity - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true render: | type: custom # sunspec model 20x (int+sf)/ 21x (float) meter @@ -248,13 +243,11 @@ render: | id: 1 value: 124:0:StorCtl_Mod - source: const - value: -{{ .maxchargerate }} # % + value: {{ if .maxchargerate }}-{{ .maxchargerate }}{{ end }} # % set: source: sunspec uri: {{ .host }}:{{ .port }} id: 1 value: 124:0:OutWRte - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fronius-solarapi-v1.yaml b/templates/definition/meter/fronius-solarapi-v1.yaml index aabd02041..0232717d4 100644 --- a/templates/definition/meter/fronius-solarapi-v1.yaml +++ b/templates/definition/meter/fronius-solarapi-v1.yaml @@ -23,8 +23,6 @@ params: choice: ["grid", "pv", "battery"] allinone: true - name: host - - name: capacity - advanced: true - name: user default: customer description: @@ -44,6 +42,7 @@ params: help: de: Firmware Versionen ab 1.36.5-1 erfordern /api/config. en: Firmware starting with 1.36.5-1 requires /api/config. + - preset: battery-params render: | type: custom power: @@ -113,5 +112,5 @@ render: | - source: error error: ErrNotAvailable {{- end }} - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/fronius-vertoplus.yaml b/templates/definition/meter/fronius-vertoplus.yaml index 40cdedb65..2ad36f31c 100644 --- a/templates/definition/meter/fronius-vertoplus.yaml +++ b/templates/definition/meter/fronius-vertoplus.yaml @@ -21,8 +21,7 @@ params: - name: maxacpower - name: maxchargerate advanced: true - - name: capacity - advanced: true + - preset: battery-params render: | type: custom # sunspec model 20x (int+sf)/ 21x (float) meter @@ -246,5 +245,5 @@ render: | uri: {{ .host }}:{{ .port }} id: 1 value: 124:0:OutWRte - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/goodwe-hybrid.yaml b/templates/definition/meter/goodwe-hybrid.yaml index b866ba06b..eac500c08 100644 --- a/templates/definition/meter/goodwe-hybrid.yaml +++ b/templates/definition/meter/goodwe-hybrid.yaml @@ -11,6 +11,7 @@ params: choice: ["rs485", "tcpip", "udp"] baudrate: 9600 id: 247 + - name: maxacpower - name: battery default: 1 type: choice @@ -19,9 +20,7 @@ params: de: Batteriespeichernummer choice: [1, 2] usages: ["battery"] - - name: capacity - advanced: true - - name: maxacpower + - preset: battery-params - name: maxchargepower default: 10000 - name: maxdischargepower @@ -230,9 +229,5 @@ render: | address: 47512 # EMSPowerSet [0-10000] type: writemultiple encoding: uint16 - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/growatt-hybrid-tlxh.yaml b/templates/definition/meter/growatt-hybrid-tlxh.yaml index 367ba34c5..69ce4b042 100644 --- a/templates/definition/meter/growatt-hybrid-tlxh.yaml +++ b/templates/definition/meter/growatt-hybrid-tlxh.yaml @@ -11,9 +11,8 @@ params: choice: ["rs485", "tcpip"] baudrate: 9600 id: 1 - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -214,5 +213,5 @@ render: | address: 3049 type: writemultiple decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/growatt-hybrid.yaml b/templates/definition/meter/growatt-hybrid.yaml index b53a7fc8e..e6f14ecd8 100644 --- a/templates/definition/meter/growatt-hybrid.yaml +++ b/templates/definition/meter/growatt-hybrid.yaml @@ -23,9 +23,8 @@ params: choice: ["rs485", "tcpip"] baudrate: 9600 id: 1 - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -176,5 +175,5 @@ render: | address: 1092 type: writemultiple decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/hager-flow-modbus.yaml b/templates/definition/meter/hager-flow-modbus.yaml index a9ef517c5..886bcb165 100644 --- a/templates/definition/meter/hager-flow-modbus.yaml +++ b/templates/definition/meter/hager-flow-modbus.yaml @@ -23,8 +23,7 @@ params: - name: host - name: port default: 502 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} diff --git a/templates/definition/meter/huawei-emma.yaml b/templates/definition/meter/huawei-emma.yaml index 96f136b9d..c9171d69b 100644 --- a/templates/definition/meter/huawei-emma.yaml +++ b/templates/definition/meter/huawei-emma.yaml @@ -9,8 +9,7 @@ params: allinone: true - name: modbus choice: ["tcpip"] - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -104,5 +103,5 @@ render: | type: holding decode: uint16nan scale: 0.01 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/huawei-smartlogger.yaml b/templates/definition/meter/huawei-smartlogger.yaml index 55da95500..5eedae0b1 100644 --- a/templates/definition/meter/huawei-smartlogger.yaml +++ b/templates/definition/meter/huawei-smartlogger.yaml @@ -14,18 +14,16 @@ params: advanced: true - name: modbus choice: ["tcpip"] - - name: timeout - default: 15s - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params + - name: timeout + deprecated: true render: | type: custom {{- if eq .usage "grid" }} power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} connectdelay: 1s register: address: 32278 # Active power @@ -35,7 +33,6 @@ render: | energy: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 32349 # Negative active electricity type: holding @@ -44,7 +41,6 @@ render: | currents: - source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 32272 # Huawei phase A grid current type: holding @@ -52,7 +48,6 @@ render: | scale: 0.1 - source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 32274 # Huawei phase B grid current type: holding @@ -60,7 +55,6 @@ render: | scale: 0.1 - source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 32276 # Huawei phase C grid current type: holding @@ -91,7 +85,6 @@ render: | power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} connectdelay: 1s register: {{- if eq .storageunit "1" }} @@ -106,7 +99,6 @@ render: | energy: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: {{- if eq .storageunit "1" }} address: 37068 # [Energy storage unit 1] Total discharge @@ -120,7 +112,6 @@ render: | soc: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: {{- if eq .storageunit "1" }} address: 37004 @@ -238,5 +229,5 @@ render: | address: 47087 # Charge from grid type: writesingle encoding: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/huawei-sun2000.yaml b/templates/definition/meter/huawei-sun2000.yaml index a2fb94fcb..d09e98e41 100644 --- a/templates/definition/meter/huawei-sun2000.yaml +++ b/templates/definition/meter/huawei-sun2000.yaml @@ -27,15 +27,6 @@ params: type: int default: 1 advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - - name: maxchargepower - default: 10000 - - name: maxdischargepower - - name: capacity - advanced: true - name: maxacpower - name: forceaccharging default: false @@ -48,6 +39,9 @@ params: help: en: Keep AC charging active to charge the storage from other inverters via AC. Prevents stand-by. de: AC-Laden bleibt aktiv zum Laden des Speichers aus anderen AC Quellen für Wechselrichterkaskaden. Verhindert Stand-by. + - preset: battery-params + - name: maxchargepower + default: 10000 render: | type: custom {{- if eq .usage "grid" }} @@ -281,9 +275,5 @@ render: | address: 47087 # Charge from grid type: writesingle encoding: uint16 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/kostal-piko-hybrid.yaml b/templates/definition/meter/kostal-piko-hybrid.yaml index c9a680896..d69becf9e 100644 --- a/templates/definition/meter/kostal-piko-hybrid.yaml +++ b/templates/definition/meter/kostal-piko-hybrid.yaml @@ -9,8 +9,7 @@ params: choice: ["grid", "pv", "battery"] allinone: true - name: host - - name: capacity - advanced: true + - preset: battery-params render: | {{- if eq .usage "grid" }} type: custom @@ -48,5 +47,5 @@ render: | uri: http://{{ .host }}/api/dxs.json?dxsEntries=33556229 # Battery SOC # | ----------------------------- Bat SOC% --------- | jq: (.dxsEntries[] | select(.dxsId==33556229) | .value ) - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/kostal-plenticore-gen2.yaml b/templates/definition/meter/kostal-plenticore-gen2.yaml index 6fd1814ab..875e869cd 100644 --- a/templates/definition/meter/kostal-plenticore-gen2.yaml +++ b/templates/definition/meter/kostal-plenticore-gen2.yaml @@ -38,19 +38,10 @@ params: choice: ["little", "big"] default: little advanced: true - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params - name: maxchargerate deprecated: true - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - - name: maxchargepower - required: true - - name: maxdischargepower - name: watchdog type: duration default: 60s @@ -87,8 +78,6 @@ render: | source: sunspec {{- include "modbus" . | indent 2 }} value: 802:SoC # 802 battery control - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % batterymode: source: watchdog timeout: {{ .watchdog }} # re-write at timeout/2 @@ -129,7 +118,5 @@ render: | address: 1034 # Battery charge power (DC) setpoint, absolute [W] type: writemultiple encoding: {{ if (eq .endianness "big") }}float32{{ else }}float32s{{ end }} - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/kostal-plenticore.yaml b/templates/definition/meter/kostal-plenticore.yaml index a7f51b790..79d935b6d 100644 --- a/templates/definition/meter/kostal-plenticore.yaml +++ b/templates/definition/meter/kostal-plenticore.yaml @@ -34,16 +34,8 @@ params: choice: ["little", "big"] default: little advanced: true - - name: capacity - advanced: true - name: maxacpower - # battery control - - name: minsoc - type: int - advanced: true - - name: maxsoc - type: int - advanced: true + - preset: battery-params - name: watchdog type: duration default: 60s @@ -90,7 +82,5 @@ render: | address: 1042 # limit soc type: writemultiple encoding: {{ if (eq .endianness "big") }}float32{{ else }}float32s{{ end }} - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/lg-ess-home-15.yaml b/templates/definition/meter/lg-ess-home-15.yaml index e318ca838..6ab7cbc54 100644 --- a/templates/definition/meter/lg-ess-home-15.yaml +++ b/templates/definition/meter/lg-ess-home-15.yaml @@ -26,15 +26,7 @@ params: help: en: ID of the LG ESS HOME inverter. de: Nummer des LG ESS HOME Wechselrichters. - - name: capacity - advanced: true - # battery control - - name: minsoc - type: int - advanced: true - - name: maxsoc - type: int - advanced: true + - preset: battery-params render: | type: lgess15 usage: {{ .usage }} @@ -47,7 +39,5 @@ render: | registration: {{ .registration }} {{- end }} {{- if eq .usage "battery" }} - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} - maxsoc: {{ .maxsoc }} + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/lg-ess-home-8-10.yaml b/templates/definition/meter/lg-ess-home-8-10.yaml index 490f3deb7..2cc663627 100644 --- a/templates/definition/meter/lg-ess-home-8-10.yaml +++ b/templates/definition/meter/lg-ess-home-8-10.yaml @@ -32,15 +32,7 @@ params: help: en: ID of the LG ESS HOME inverter. de: Nummer des LG ESS HOME Wechselrichters. - - name: capacity - advanced: true - # battery control - - name: minsoc - type: int - advanced: true - - name: maxsoc - type: int - advanced: true + - preset: battery-params render: | type: lgess8 usage: {{ .usage }} @@ -53,7 +45,5 @@ render: | registration: {{ .registration }} {{- end }} {{- if eq .usage "battery" }} - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} - maxsoc: {{ .maxsoc }} + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/marstek-jupiterc-plus.yaml b/templates/definition/meter/marstek-jupiterc-plus.yaml index c073907ed..01ffdd8ba 100644 --- a/templates/definition/meter/marstek-jupiterc-plus.yaml +++ b/templates/definition/meter/marstek-jupiterc-plus.yaml @@ -10,13 +10,14 @@ params: choice: ["rs485"] baudrate: 115200 comset: 8N1 + - name: maxacpower + default: 800 # W + - preset: battery-params - name: capacity default: 2.56 help: de: Basisgerät 2.56 kWh, jede Erweiterung zzgl. 2.56 kWh en: Base unit 2.56 kWh, each extension plus 2.56 kWh - - name: maxacpower - default: 800 # W render: | type: custom {{- if eq .usage "pv" }} @@ -94,5 +95,5 @@ render: | type: holding decode: uint16 scale: -1 # Substract PV power to calc battery charge - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/marstek-venus.yaml b/templates/definition/meter/marstek-venus.yaml index 93f6d8d66..93cbd166d 100644 --- a/templates/definition/meter/marstek-venus.yaml +++ b/templates/definition/meter/marstek-venus.yaml @@ -11,23 +11,17 @@ params: choice: ["rs485", "tcpip"] baudrate: 115200 comset: 8N1 + - preset: battery-params - name: capacity - default: 5.12 help: de: Venus-E 5.12 kWh, Venus-C 2.56 kWh en: Venus-E 5.12 kWh, Venus-C 2.56 kWh - name: minsoc default: 11 - advanced: true - name: maxsoc default: 100 - advanced: true - name: maxchargepower default: 2500 - advanced: true - help: - en: 2500W is the maximum for Venus. - de: 2500W ist das Maximum für Venus. - name: work_mode_normal default: 1 advanced: true @@ -152,6 +146,4 @@ render: | type: writesingle decode: uint16 # Do not disable RS485 Control Mode because it will reset the device and let it charge/discharge again - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} diff --git a/templates/definition/meter/mtec-eb-gen3.yaml b/templates/definition/meter/mtec-eb-gen3.yaml index 0c820f20a..5010a76df 100644 --- a/templates/definition/meter/mtec-eb-gen3.yaml +++ b/templates/definition/meter/mtec-eb-gen3.yaml @@ -10,8 +10,7 @@ params: - name: modbus choice: ["rs485", "tcpip"] id: 255 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -85,5 +84,5 @@ render: | address: 50000 type: writesingle decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/openems-modbus.yaml b/templates/definition/meter/openems-modbus.yaml index f9b323c53..ead55a0e0 100644 --- a/templates/definition/meter/openems-modbus.yaml +++ b/templates/definition/meter/openems-modbus.yaml @@ -72,6 +72,7 @@ params: generic: ProductionActiveEnergy (Wh) usages: ["pv"] advanced: true + - name: maxacpower - name: battery_power_register type: int default: 415 @@ -120,15 +121,7 @@ params: en: battery control API timeout usages: ["battery"] advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - - name: capacity - advanced: true - - name: maxchargepower - - name: maxdischargepower - - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -226,11 +219,7 @@ render: | {{- else }} source: error error: ErrNotAvailable - {{- end }} + {{- end }} {{- end }} - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/openems.yaml b/templates/definition/meter/openems.yaml index e5a53c98b..3035de440 100644 --- a/templates/definition/meter/openems.yaml +++ b/templates/definition/meter/openems.yaml @@ -34,6 +34,7 @@ params: mask: true default: user advanced: true + - name: maxacpower - name: battery example: ess0 description: @@ -55,13 +56,7 @@ params: en: FEMS/OpenEMS standard 60s usages: ["battery"] advanced: true - - name: minsoc - - name: maxsoc - - name: capacity - advanced: true - - name: maxchargepower - - name: maxdischargepower - - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -168,9 +163,5 @@ render: | error: ErrNotAvailable {{- end }} {{- end }} - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/plexlog.yaml b/templates/definition/meter/plexlog.yaml index a5faee6c6..1801c6e35 100644 --- a/templates/definition/meter/plexlog.yaml +++ b/templates/definition/meter/plexlog.yaml @@ -16,8 +16,7 @@ params: choice: ["tcpip"] id: 1 port: 503 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -75,5 +74,5 @@ render: | type: input decode: uint16 timeout: 30s - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/qcells-hybrid-cloud.yaml b/templates/definition/meter/qcells-hybrid-cloud.yaml index 02d73d746..f8c6d0ca6 100644 --- a/templates/definition/meter/qcells-hybrid-cloud.yaml +++ b/templates/definition/meter/qcells-hybrid-cloud.yaml @@ -40,8 +40,7 @@ params: help: de: Registriernummer von https://qhome-ess-g3.q-cells.eu/blue/#/inverter oder https://qhome-ess-g3.q-cells.us/blue/#/inverter hier eintragen. en: Go to https://qhome-ess-g3.q-cells.eu/blue/#/inverter or https://qhome-ess-g3.q-cells.us/blue/#/inverter and take the value of registration number. - - name: capacity - advanced: true + - preset: battery-params render: | type: custom power: @@ -77,5 +76,5 @@ render: | uri: https://qhome-ess-g3.q-cells.{{ lower .region }}/proxyApp/proxy/api/getRealtimeInfo.do?tokenId={{ urlEncode .tokenid }}&sn={{ urlEncode .serial }} jq: .result.soc # Solax API inverter.DC.battery.energy.SOC cache: 2m30s - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/rct-power.yaml b/templates/definition/meter/rct-power.yaml index 4d294018c..48ee69913 100644 --- a/templates/definition/meter/rct-power.yaml +++ b/templates/definition/meter/rct-power.yaml @@ -11,28 +11,6 @@ params: choice: ["grid", "pv", "battery"] allinone: true - name: host - - name: capacity - - name: capacity2 - unit: kWh - description: - de: Akkukapazität der zweiten Batterie - en: Battery capacity of the second battery - example: 50 - type: float - usages: ["battery"] - # battery control - - name: minsoc - type: int - default: 7 - advanced: true - - name: maxsoc - type: int - default: 97 - advanced: true - - name: cache - advanced: true - default: 30s - - name: maxchargepower - name: externalpower type: bool description: @@ -43,14 +21,27 @@ params: en: Query external power of all devices connected to S0 advanced: true usages: ["pv"] + - preset: battery-params + - name: minsoc + default: 7 + - name: maxsoc + default: 97 + - name: capacity2 + unit: kWh + description: + de: Akkukapazität der zweiten Batterie + en: Battery capacity of the second battery + example: 50 + type: float + usages: ["battery"] + - name: cache + advanced: true + default: 30s render: | type: rct uri: {{ .host }} usage: {{ .usage }} cache: {{ .cache }} - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} capacity2: {{ .capacity2 }} # kWh - minsoc: {{ .minsoc }} - maxsoc: {{ .maxsoc }} - maxchargepower: {{ .maxchargepower }} externalpower: {{ .externalpower }} diff --git a/templates/definition/meter/saj-h1.yaml b/templates/definition/meter/saj-h1.yaml index 1dbd027ea..453d1ac51 100644 --- a/templates/definition/meter/saj-h1.yaml +++ b/templates/definition/meter/saj-h1.yaml @@ -8,17 +8,13 @@ params: choice: ["grid", "pv", "battery"] - name: modbus choice: ["tcpip"] - - name: timeout - default: 5s - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x40A1 # SmartMeterTotalGridPowerWatt (undocumented) type: holding @@ -26,7 +22,6 @@ render: | energy: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x40FD # Total_FeedInEnergy type: holding @@ -37,7 +32,6 @@ render: | power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x40A5 # TotalPVPower type: holding @@ -45,7 +39,6 @@ render: | energy: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x40C5 # Total PVEnergy type: holding @@ -56,7 +49,6 @@ render: | power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x40A6 # TotalBatteryPower type: holding @@ -64,7 +56,6 @@ render: | energy: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x40D5 # Total BatDisEnergy type: holding @@ -73,7 +64,6 @@ render: | soc: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0x406F # BatEnergyPercent type: holding @@ -91,7 +81,6 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3247 # AppMode type: writeholding @@ -105,7 +94,6 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3247 # AppMode type: writeholding @@ -119,7 +107,6 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3247 # AppMode type: writeholding @@ -129,7 +116,6 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3604 # Charge time enable control type: writeholding @@ -139,7 +125,6 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3606 # Battery first charging time (start) type: writeholding @@ -149,7 +134,6 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3607 # Battery first charging time (end) type: writeholding @@ -159,10 +143,9 @@ render: | set: source: modbus {{- include "modbus" . | indent 10 }} - timeout: {{ .timeout }} register: address: 0x3608 # Battery first charging time (power) type: writeholding decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/saj-h2.yaml b/templates/definition/meter/saj-h2.yaml index 46b470251..3c59ad7ba 100644 --- a/templates/definition/meter/saj-h2.yaml +++ b/templates/definition/meter/saj-h2.yaml @@ -13,16 +13,11 @@ params: choice: ["rs485", "tcpip"] baudrate: 115200 comset: 8N1 - - name: capacity - advanced: true # battery control - name: defaultmode default: 2 advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -201,5 +196,5 @@ render: | address: 13832 # First_charge_power_time type: writeholding decode: int16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sax.yaml b/templates/definition/meter/sax.yaml index d8be36db4..362eb10cb 100644 --- a/templates/definition/meter/sax.yaml +++ b/templates/definition/meter/sax.yaml @@ -17,8 +17,7 @@ params: choice: ["tcpip"] port: 502 id: 64 - - name: capacity - advanced: true + - preset: battery-params - name: watchdog type: duration default: 240s @@ -89,5 +88,5 @@ render: | address: 43 # 2Bh battery discharging power [W] type: writemultiple encoding: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/senec-home.yaml b/templates/definition/meter/senec-home.yaml index a891867c5..5127f8b5b 100644 --- a/templates/definition/meter/senec-home.yaml +++ b/templates/definition/meter/senec-home.yaml @@ -14,8 +14,7 @@ params: allinone: true - name: host - name: schema - - name: capacity - advanced: true + - preset: battery-params render: | type: custom power: @@ -77,5 +76,5 @@ render: | headers: - content-type: application/json body: '{"ENERGY":{"SAFE_CHARGE_FORCE":"u8_01"}}' # force to charge - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/senergy-hybrid.yaml b/templates/definition/meter/senergy-hybrid.yaml index d60ad27f1..2f8b85e31 100644 --- a/templates/definition/meter/senergy-hybrid.yaml +++ b/templates/definition/meter/senergy-hybrid.yaml @@ -13,8 +13,8 @@ params: choice: ["rs485"] baudrate: 9600 id: 1 - - name: capacity - advanced: true + - name: maxacpower + - preset: battery-params - name: maxchargepower default: 10000 - name: maxdischargepower @@ -23,7 +23,6 @@ params: default: 10 - name: maxsoc default: 100 - - name: maxacpower render: | type: custom {{- if eq .usage "grid" }} @@ -220,9 +219,5 @@ render: | address: 0x214C # Time-based control Enable type: writesingle encoding: uint16 - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sermatec-hybrid.yaml b/templates/definition/meter/sermatec-hybrid.yaml index 305e0783e..af32237cf 100644 --- a/templates/definition/meter/sermatec-hybrid.yaml +++ b/templates/definition/meter/sermatec-hybrid.yaml @@ -13,9 +13,8 @@ params: choice: ["rs485"] baudrate: 9600 id: 1 - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -71,5 +70,5 @@ render: | address: 0x3003 # Battery SOC type: holding decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/siemens-junelight.yaml b/templates/definition/meter/siemens-junelight.yaml index 5a7448c76..3688ff307 100644 --- a/templates/definition/meter/siemens-junelight.yaml +++ b/templates/definition/meter/siemens-junelight.yaml @@ -13,10 +13,9 @@ params: - name: usage choice: ["grid", "pv", "battery"] allinone: true - - name: capacity - advanced: true - name: modbus choice: ["tcpip"] + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -54,5 +53,5 @@ render: | address: 8 # "battery soc" type: holding decode: int32 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sigenergy.yaml b/templates/definition/meter/sigenergy.yaml index 0ba7dce13..6ae4555a0 100644 --- a/templates/definition/meter/sigenergy.yaml +++ b/templates/definition/meter/sigenergy.yaml @@ -17,14 +17,7 @@ params: default: 502 - name: id default: 1 - - name: capacity - advanced: true - - name: minsoc - type: int - advanced: true - - name: maxsoc - type: int - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -121,7 +114,5 @@ render: | type: writeholding decode: uint16 scale: 10 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sma-datamanager.yaml b/templates/definition/meter/sma-datamanager.yaml index ddbfd6be5..53217f58b 100644 --- a/templates/definition/meter/sma-datamanager.yaml +++ b/templates/definition/meter/sma-datamanager.yaml @@ -15,8 +15,7 @@ params: - name: modbus choice: ["tcpip"] id: 2 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "pv" }} @@ -100,5 +99,5 @@ render: | address: 30845 # Battery Soc, % type: holding decode: uint32nan - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sma-hybrid.yaml b/templates/definition/meter/sma-hybrid.yaml index e3c51a0ba..3d64b3a43 100644 --- a/templates/definition/meter/sma-hybrid.yaml +++ b/templates/definition/meter/sma-hybrid.yaml @@ -20,9 +20,8 @@ params: help: en: ModbusTCP server needs to be enabled. de: Der ModbusTCP Server muss aktiviert sein. - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params - name: maxchargepower default: 4200 - name: watchdog @@ -376,5 +375,5 @@ render: | address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung type: writemultiple decode: uint32 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sma-inverter-speedwire.yaml b/templates/definition/meter/sma-inverter-speedwire.yaml index a23a0e58a..bdcfa8fb9 100644 --- a/templates/definition/meter/sma-inverter-speedwire.yaml +++ b/templates/definition/meter/sma-inverter-speedwire.yaml @@ -16,8 +16,7 @@ params: help: en: Password for user group Standard de: Passwort für Benutzergruppe Benutzer - - name: capacity - advanced: true + - preset: battery-params render: | type: sma uri: {{ .host }} # IP address or hostname diff --git a/templates/definition/meter/sofarsolar-g3.yaml b/templates/definition/meter/sofarsolar-g3.yaml index 8ed364864..8cc6d4161 100644 --- a/templates/definition/meter/sofarsolar-g3.yaml +++ b/templates/definition/meter/sofarsolar-g3.yaml @@ -33,8 +33,6 @@ params: type: int default: 1 advanced: true - - name: capacity - advanced: true - name: maxacpower - name: defaultmode help: @@ -43,14 +41,6 @@ params: default: 0 # self use advanced: true # battery control - - name: minsoc - type: int - advanced: true - deprecated: true - - name: maxsoc - type: int - advanced: true - deprecated: true - name: externalpower type: bool description: @@ -61,6 +51,7 @@ params: en: Includes all connected external sources, like the power generation of cascaded inverters, into the PV power calculation. advanced: true usages: ["pv"] + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -303,5 +294,5 @@ render: | address: 0x1187 type: writemultiple decode: bytes - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sofarsolar.yaml b/templates/definition/meter/sofarsolar.yaml index c9aba2b8b..c247be693 100644 --- a/templates/definition/meter/sofarsolar.yaml +++ b/templates/definition/meter/sofarsolar.yaml @@ -21,8 +21,7 @@ params: comset: 8N1 port: 502 id: 1 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -97,5 +96,5 @@ render: | address: 0x0210 # The residual capacity of battery type: holding decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solaredge-hybrid.yaml b/templates/definition/meter/solaredge-hybrid.yaml index f6a94628e..0ea5d1bbe 100644 --- a/templates/definition/meter/solaredge-hybrid.yaml +++ b/templates/definition/meter/solaredge-hybrid.yaml @@ -20,17 +20,10 @@ params: choice: ["tcpip", "rs485"] id: 1 port: 1502 - - name: timeout - - name: capacity - advanced: true - name: maxacpower - - name: maxchargepower + - preset: battery-params - name: maxdischargepower default: 5000 - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - name: watchdog type: duration default: 60s @@ -41,65 +34,54 @@ render: | power: source: sunspec {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:W scale: -1 energy: source: sunspec {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:TotWhImp scale: 0.001 currents: - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:AphA - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:AphB - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:AphC voltages: - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:PhVphA - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:PhVphB - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:PhVphC powers: - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:WphA scale: -1 - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:WphB scale: -1 - source: sunspec {{- include "modbus" . | indent 4 }} - timeout: {{ .timeout }} subdevice: 1 # Metering device value: 203:WphC scale: -1 @@ -110,13 +92,11 @@ render: | add: - source: sunspec {{- include "modbus" . | indent 6 }} - timeout: {{ .timeout }} value: - 101:DCW - 103:DCW - source: modbus {{- include "modbus" . | indent 6 }} - timeout: {{ .timeout }} register: address: 62836 # Battery 1 Instantaneous Power type: holding @@ -124,7 +104,6 @@ render: | energy: source: sunspec {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} value: - 101:WH - 103:WH @@ -135,7 +114,6 @@ render: | power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0xE174 # Battery 1 Instantaneous Power type: holding @@ -144,13 +122,10 @@ render: | soc: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 0xE184 # Battery 1 State of Energy (SOE) type: holding decode: float32nans - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % batterymode: source: watchdog timeout: {{ .watchdog }} @@ -224,7 +199,5 @@ render: | address: 0xE010 # StorageRemoteCtrl_DischargeLimit type: writemultiple encoding: float32s - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solarmax-maxstorage.yaml b/templates/definition/meter/solarmax-maxstorage.yaml index 2800252ee..147b4893e 100644 --- a/templates/definition/meter/solarmax-maxstorage.yaml +++ b/templates/definition/meter/solarmax-maxstorage.yaml @@ -15,9 +15,8 @@ params: - name: modbus choice: ["tcpip"] id: 1 - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params # battery control - name: watchdog type: duration @@ -140,5 +139,5 @@ render: | set: source: error error: ErrNotAvailable - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solarwatt-flex.yaml b/templates/definition/meter/solarwatt-flex.yaml index 3be70f0a9..6c1fd2063 100644 --- a/templates/definition/meter/solarwatt-flex.yaml +++ b/templates/definition/meter/solarwatt-flex.yaml @@ -15,8 +15,7 @@ params: choice: ["grid", "pv", "battery"] allinone: true - name: host - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -76,5 +75,5 @@ render: | jq: > def parseSecondNumber: sub("[^|]*\\|(?[.\\d]*).*"; "\(.number)") | tonumber; (.[] | select(.name | test("^kiwigrid_location_standard_.*_harmonized_work_released_total$")).state | parseSecondNumber / 1000) // 0 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solarwatt-myreserve-matrix.yaml b/templates/definition/meter/solarwatt-myreserve-matrix.yaml index 2235a54d7..bf90318a7 100644 --- a/templates/definition/meter/solarwatt-myreserve-matrix.yaml +++ b/templates/definition/meter/solarwatt-myreserve-matrix.yaml @@ -10,8 +10,7 @@ params: - name: host - name: port default: 8080 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom power: @@ -29,5 +28,5 @@ render: | source: http uri: http://{{ .host }}:{{ .port }}/ jq: .SData.SoC - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solarwatt.yaml b/templates/definition/meter/solarwatt.yaml index c3db9b7c5..0d40a092f 100644 --- a/templates/definition/meter/solarwatt.yaml +++ b/templates/definition/meter/solarwatt.yaml @@ -15,8 +15,7 @@ params: choice: ["grid", "pv", "battery"] allinone: true - name: host - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -52,5 +51,5 @@ render: | source: http uri: http://{{ .host }}/rest/kiwigrid/wizard/devices # EnergyManager jq: .result.items[] | select(.deviceModel[].deviceClass == "com.kiwigrid.devices.location.Location" ) | (.tagValues.WorkReleased.value // 0) / 1000 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solax-hybrid-cloud.yaml b/templates/definition/meter/solax-hybrid-cloud.yaml index 9a92ddbba..ecd65c1e8 100644 --- a/templates/definition/meter/solax-hybrid-cloud.yaml +++ b/templates/definition/meter/solax-hybrid-cloud.yaml @@ -33,8 +33,7 @@ params: help: de: https://www.solaxcloud.com/ -> Gerät -> Wechselrichter (neue Website) oder Support (alte Website), Wert von Registrierungsnummer hier eintragen en: https://www.solaxcloud.com/ -> Device -> Inverter (new site) or Support (old site), use the registration number - - name: capacity - advanced: true + - preset: battery-params render: | type: custom power: @@ -70,5 +69,5 @@ render: | uri: https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId={{ unquote .tokenid }}&sn={{ unquote .serial }} jq: .result.soc # Solax API inverter.DC.battery.energy.SOC cache: 2m30s - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solax.yaml b/templates/definition/meter/solax.yaml index 230ba252f..3158407e3 100644 --- a/templates/definition/meter/solax.yaml +++ b/templates/definition/meter/solax.yaml @@ -28,18 +28,11 @@ params: type: int default: 1 advanced: true - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params - name: defaultmode default: 0 # "SelfUse" advanced: true - - name: maxchargepower - - name: maxdischargepower - - name: minsoc - advanced: true - - name: maxsoc - advanced: true render: | type: custom {{- if eq .usage "grid" }} @@ -125,8 +118,6 @@ render: | # type: input # decode: uint32s # scale: 0.1 - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % batterymode: source: switch switch: @@ -185,7 +176,5 @@ render: | address: 0x001F # SolarChargeUseMode type: writesingle decode: uint16 - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solis-hybrid-s.yaml b/templates/definition/meter/solis-hybrid-s.yaml index 468162173..db89d3bae 100644 --- a/templates/definition/meter/solis-hybrid-s.yaml +++ b/templates/definition/meter/solis-hybrid-s.yaml @@ -28,13 +28,8 @@ params: choice: ["rs485"] baudrate: 9600 id: 1 - - name: capacity - advanced: true - name: maxacpower - - name: minsoc - advanced: true - - name: maxsoc - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -158,7 +153,5 @@ render: | address: 43024 # Battery Reserve Mode SOC type: writeholding encoding: uint16 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/solis-hybrid.yaml b/templates/definition/meter/solis-hybrid.yaml index 237230f43..c3e666cd9 100644 --- a/templates/definition/meter/solis-hybrid.yaml +++ b/templates/definition/meter/solis-hybrid.yaml @@ -11,9 +11,8 @@ params: choice: ["rs485"] baudrate: 9600 id: 1 - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -118,5 +117,5 @@ render: | address: 33139 # Battery capacity SOC type: input decode: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sonnenbatterie.yaml b/templates/definition/meter/sonnenbatterie.yaml index 4fd5d9a78..7ae4031a7 100644 --- a/templates/definition/meter/sonnenbatterie.yaml +++ b/templates/definition/meter/sonnenbatterie.yaml @@ -22,15 +22,9 @@ params: - name: host - name: port default: 8080 - - name: capacity - advanced: true + - preset: battery-params - name: maxchargepower default: 3300 - - name: maxdischargepower - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - name: token help: de: API Token (benötigt für aktive Batteriesteuerung) @@ -63,8 +57,6 @@ render: | source: http uri: http://{{ .host }}:{{ .port }}/api/v1/status jq: .USOC - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % {{- if .token }} batterymode: source: switch @@ -136,7 +128,5 @@ render: | - content-type: application/json - Auth-Token: {{ .token }} {{- end }} - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sonnenbatterie_eco56.yaml b/templates/definition/meter/sonnenbatterie_eco56.yaml index fa4d7b85a..a3829cbfb 100644 --- a/templates/definition/meter/sonnenbatterie_eco56.yaml +++ b/templates/definition/meter/sonnenbatterie_eco56.yaml @@ -18,10 +18,7 @@ params: - name: host - name: port default: 7979 - - name: capacity - advanced: true - - name: maxchargepower - advanced: true + - preset: battery-params - name: cache advanced: true default: 5s @@ -119,5 +116,5 @@ render: | method: PUT uri: http://{{ .host }}:{{ .port }}/rest/devices/battery/C24 body: {{ if .maxchargepower }}{{ .maxchargepower }}{{ else }}99000{{ end }} - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/storaxe.yaml b/templates/definition/meter/storaxe.yaml index f70460967..1406431a7 100644 --- a/templates/definition/meter/storaxe.yaml +++ b/templates/definition/meter/storaxe.yaml @@ -9,8 +9,7 @@ params: - name: modbus choice: ["tcpip"] id: 2 - - name: capacity - advanced: true + - preset: battery-params render: | type: custom power: @@ -79,4 +78,4 @@ render: | address: 126 # SXSSOC type: input decode: int16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} diff --git a/templates/definition/meter/sungrow-hybrid.yaml b/templates/definition/meter/sungrow-hybrid.yaml index 02d8ec622..08a8798d4 100644 --- a/templates/definition/meter/sungrow-hybrid.yaml +++ b/templates/definition/meter/sungrow-hybrid.yaml @@ -16,27 +16,19 @@ params: - name: modbus choice: ["rs485", "tcpip"] baudrate: 9600 - - name: timeout - - name: capacity - name: maxacpower - - name: minsoc - advanced: true - - name: maxsoc - advanced: true + - preset: battery-params - name: maxchargepower default: 5000 - advanced: true required: true - name: maxdischargepower default: 5000 - advanced: true render: | type: custom {{- if eq .usage "grid" }} power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: type: input address: 13009 # Export power @@ -101,7 +93,6 @@ render: | power: source: modbus {{- include "modbus" . | indent 2 }} - timeout: {{ .timeout }} register: address: 5016 # Total DC power type: input @@ -280,9 +271,5 @@ render: | address: 13051 # Battery max forced (dis)charge power type: writesingle decode: uint16 - capacity: {{ .capacity }} # kWh - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sungrow-ihm.yaml b/templates/definition/meter/sungrow-ihm.yaml index 923a84151..06cb6d664 100644 --- a/templates/definition/meter/sungrow-ihm.yaml +++ b/templates/definition/meter/sungrow-ihm.yaml @@ -12,8 +12,7 @@ params: comset: "8N1" id: 247 port: 502 - - name: capacity - advanced: true + - preset: battery-params render: | {{- if eq .usage "grid" }} type: custom @@ -107,5 +106,5 @@ render: | type: input decode: uint16 scale: 0.1 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sunspec-battery-control.yaml b/templates/definition/meter/sunspec-battery-control.yaml index cca25111d..de836ad81 100644 --- a/templates/definition/meter/sunspec-battery-control.yaml +++ b/templates/definition/meter/sunspec-battery-control.yaml @@ -10,15 +10,7 @@ params: choice: ["battery"] - name: modbus choice: ["tcpip", "rs485"] - - name: capacity - advanced: true - # battery control (model 802) - - name: minsoc - type: int - advanced: true - - name: maxsoc - type: int - advanced: true + - preset: battery-params render: | {{- if eq .usage "battery" }} type: custom @@ -34,7 +26,5 @@ render: | source: sunspec {{- include "modbus" . | indent 2 }} value: 802:SoCRsvMin - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sunspec-hybrid.yaml b/templates/definition/meter/sunspec-hybrid.yaml index ab133be04..dd61ab64f 100644 --- a/templates/definition/meter/sunspec-hybrid.yaml +++ b/templates/definition/meter/sunspec-hybrid.yaml @@ -11,9 +11,8 @@ params: allinone: true - name: modbus choice: ["tcpip", "rs485"] - - name: capacity - advanced: true - name: maxacpower + - preset: battery-params render: | type: custom # sunspec model 203 (int+sf)/ 213 (float) meter @@ -125,5 +124,5 @@ render: | value: - 124:ChaState - 802:SoC - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sunspec-inverter-control.yaml b/templates/definition/meter/sunspec-inverter-control.yaml index 09668d612..a7d4f8717 100644 --- a/templates/definition/meter/sunspec-inverter-control.yaml +++ b/templates/definition/meter/sunspec-inverter-control.yaml @@ -12,8 +12,7 @@ params: choice: ["tcpip", "rs485"] - name: maxchargerate advanced: true - - name: capacity - advanced: true + - preset: battery-params render: | {{- if eq .usage "battery" }} type: custom @@ -105,5 +104,5 @@ render: | source: sunspec {{- include "modbus" . | indent 10 }} value: 124:0:InOutWRte_RvrtTms - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/sunspec-inverter.yaml b/templates/definition/meter/sunspec-inverter.yaml index 7e7cb12da..1f0bed786 100644 --- a/templates/definition/meter/sunspec-inverter.yaml +++ b/templates/definition/meter/sunspec-inverter.yaml @@ -9,8 +9,7 @@ params: choice: ["grid", "pv", "battery"] - name: modbus choice: ["tcpip", "rs485"] - - name: capacity - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -161,5 +160,5 @@ render: | value: - 124:ChaState - 802:SoC - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/varta.yaml b/templates/definition/meter/varta.yaml index 8e4c2a446..9f9ec44ad 100644 --- a/templates/definition/meter/varta.yaml +++ b/templates/definition/meter/varta.yaml @@ -24,15 +24,14 @@ params: - name: host - name: port default: 502 + - preset: battery-params + - name: maxdischargepower + default: 4000 - name: watchdog type: duration default: 120s usages: ["battery"] advanced: true - - name: maxdischargepower - default: 4000 - - name: capacity - advanced: true render: | type: custom power: @@ -107,5 +106,5 @@ render: | set: source: error error: ErrNotAvailable - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/victron-energy.yaml b/templates/definition/meter/victron-energy.yaml index 62b9eddac..93e1b99aa 100644 --- a/templates/definition/meter/victron-energy.yaml +++ b/templates/definition/meter/victron-energy.yaml @@ -15,8 +15,6 @@ params: - name: host - name: port default: 502 - - name: capacity - advanced: true - name: maxacpower - name: meterid # grid meter VRM instance description: @@ -27,13 +25,7 @@ params: help: de: "Kann im VRM Portal oder im RemoteUI ausgelesen werden." en: "Can be read out in VRM portal or via remoteUI." - # battery control - - name: minsoc - advanced: true - - name: maxsoc - advanced: true - - name: maxchargepower - - name: maxdischargepower + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -174,9 +166,5 @@ render: | type: writesingle decode: uint16 scale: 10 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % - maxchargepower: {{ .maxchargepower }} # W - maxdischargepower: {{ .maxdischargepower }} # W + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/wattsonic-gen3.yaml b/templates/definition/meter/wattsonic-gen3.yaml index 38bca7d72..9f6efb052 100644 --- a/templates/definition/meter/wattsonic-gen3.yaml +++ b/templates/definition/meter/wattsonic-gen3.yaml @@ -12,12 +12,7 @@ params: choice: ["rs485"] port: 502 id: 255 - - name: capacity - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true + - preset: battery-params render: | type: custom {{- if eq .usage "grid" }} @@ -107,7 +102,5 @@ render: | type: writeholding encoding: uint16 scale: 10 - capacity: {{ .capacity }} # kWh - minsoc: {{ .minsoc }} # % - maxsoc: {{ .maxsoc }} # % + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/wattsonic.yaml b/templates/definition/meter/wattsonic.yaml index dd393e5f6..9907a5a8d 100644 --- a/templates/definition/meter/wattsonic.yaml +++ b/templates/definition/meter/wattsonic.yaml @@ -14,12 +14,7 @@ params: choice: ["rs485"] port: 502 id: 247 - - name: capacity - advanced: true - - name: minsoc - advanced: true - - name: maxsoc - advanced: true + - preset: battery-params - name: delay default: 100ms advanced: true @@ -121,5 +116,5 @@ render: | address: 52503 # min soc type: writeholding encoding: uint16 - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/templates/definition/meter/zendure-solarflow-ac.yaml b/templates/definition/meter/zendure-solarflow-ac.yaml index f85266f72..e77289504 100644 --- a/templates/definition/meter/zendure-solarflow-ac.yaml +++ b/templates/definition/meter/zendure-solarflow-ac.yaml @@ -9,8 +9,7 @@ params: choice: ["battery"] - name: host required: true - - name: capacity - required: true + - preset: battery-params - name: cache advanced: true default: 1s @@ -26,4 +25,4 @@ render: | uri: http://{{ .host }}/properties/report jq: .properties.electricLevel cache: {{ .cache }} - capacity: {{ .capacity }} + {{- include "battery-params" . }} diff --git a/templates/definition/meter/zendure-solarflow-pro.yaml b/templates/definition/meter/zendure-solarflow-pro.yaml index 0c4e123db..ea63cf0c0 100644 --- a/templates/definition/meter/zendure-solarflow-pro.yaml +++ b/templates/definition/meter/zendure-solarflow-pro.yaml @@ -11,6 +11,7 @@ params: default: 1.92 # kWh - name: maxacpower default: 800 # W + - preset: battery-params - name: cache advanced: true default: 1s @@ -42,5 +43,5 @@ render: | uri: http://{{ .host }}/properties/report jq: .properties.electricLevel cache: {{ .cache }} - capacity: {{ .capacity }} # kWh + {{- include "battery-params" . }} {{- end }} diff --git a/util/templates/defaults.yaml b/util/templates/defaults.yaml index ecb56ee98..c67cafbf8 100644 --- a/util/templates/defaults.yaml +++ b/util/templates/defaults.yaml @@ -701,6 +701,13 @@ presets: de: Akzeptiere keine Daten die älter sind als dieser Wert en: Don't accept values older than this value + battery-params: + - name: capacity + - name: minsoc + - name: maxsoc + - name: maxchargepower + - name: maxdischargepower + modbus: interfaces: rs485: ["rs485serial", "rs485tcpip"] diff --git a/util/templates/includes/battery-params.tpl b/util/templates/includes/battery-params.tpl new file mode 100644 index 000000000..a7747d1e6 --- /dev/null +++ b/util/templates/includes/battery-params.tpl @@ -0,0 +1,7 @@ +{{ define "battery-params" }} +capacity: {{ .capacity }} # kWh +minsoc: {{ .minsoc }} # % +maxsoc: {{ .maxsoc }} # % +maxchargepower: {{ .maxchargepower }} # W +maxdischargepower: {{ .maxdischargepower }} # W +{{- end }} From 87346351d8c5efa51422cea9b81f2357390dcf02 Mon Sep 17 00:00:00 2001 From: Ingo <71161062+iseeberg79@users.noreply.github.com> Date: Sat, 3 Jan 2026 12:09:20 +0100 Subject: [PATCH 0022/1916] chore: speedup planner (#26385) --- core/planner/helper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/planner/helper.go b/core/planner/helper.go index 2f1840c93..de5a9238a 100644 --- a/core/planner/helper.go +++ b/core/planner/helper.go @@ -103,7 +103,7 @@ func clampRatesSeq(rates api.Rates, start, end time.Time) iter.Seq[api.Rate] { // slot after continuous plan if !r.Start.Before(end) { - continue + return } // calculate adjusted bounds From 3f632d9096aa84ba3b1749b83bd9849a2bc8b0df Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Sat, 3 Jan 2026 12:47:55 +0100 Subject: [PATCH 0023/1916] RCT: improve battery control (#26358) --- meter/rct.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meter/rct.go b/meter/rct.go index 88bbd69a8..f92336451 100644 --- a/meter/rct.go +++ b/meter/rct.go @@ -140,7 +140,7 @@ func NewRCT(ctx context.Context, uri, usage string, batterySocLimits batterySocL } // check for normal operating mode - if batStatus != 0 && batStatus != 1032 { + if batStatus != 0 && batStatus != 1032 && batStatus != 2048 { return fmt.Errorf("invalid battery operating mode: %d", batStatus) } } From 0c46b45fd4ad0307e820c9b5d9744b81689ea097 Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 3 Jan 2026 13:28:06 +0100 Subject: [PATCH 0024/1916] chore: support decorating multi-function interfaces (#26323) --- cmd/decorate/decorate.go | 120 +++++++++++++++++++++++++++++--------- cmd/decorate/decorate.tpl | 26 ++++++--- 2 files changed, 109 insertions(+), 37 deletions(-) diff --git a/cmd/decorate/decorate.go b/cmd/decorate/decorate.go index b0a39bda4..6af6da5ad 100644 --- a/cmd/decorate/decorate.go +++ b/cmd/decorate/decorate.go @@ -10,6 +10,7 @@ import ( "os" "reflect" "slices" + "strconv" "strings" "text/template" @@ -21,7 +22,6 @@ import ( "golang.org/x/tools/imports" ) -// go:generate go tool decorate -f decorateTest -b api.Charger -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseSwitcher,Phases1p3p,func(int) error" -t "api.PhaseGetter,GetPhases,func() (int, error)" //go:generate go tool decorate //evcc:function decorateTest //evcc:basetype api.Charger @@ -35,13 +35,23 @@ var srcTmpl string //go:embed header.tpl var header string +type function struct { + function, signature string +} + type dynamicType struct { - typ, function, signature string + typ string + functions []function +} + +type funcStruct struct { + Signature, Function, VarName, ReturnTypes string + Params []string } type typeStruct struct { - Type, ShortType, Signature, Function, VarName, ReturnTypes string - Params []string + Type, ShortType string + Functions []funcStruct } var a struct { @@ -95,11 +105,13 @@ func generate(out io.Writer, functionName, baseType string, dynamicTypes ...dyna tmpl, err := template.New("gen").Funcs(sprig.FuncMap()).Funcs(template.FuncMap{ // contains checks if slice contains string "contains": slices.Contains[[]string, string], - // ordered returns a slice of typeStructs ordered by dynamicType - "ordered": func() []typeStruct { - ordered := make([]typeStruct, 0) - for _, k := range dynamicTypes { - ordered = append(ordered, types[k.typ]) + // ordered returns a slice of funcStruct ordered by dynamicType + "ordered": func() []funcStruct { + ordered := make([]funcStruct, 0) + for _, dt := range dynamicTypes { + for _, fs := range types[dt.typ].Functions { + ordered = append(ordered, fs) + } } return ordered @@ -128,23 +140,40 @@ func generate(out io.Writer, functionName, baseType string, dynamicTypes ...dyna parts := strings.SplitN(dt.typ, ".", 2) lastPart := parts[len(parts)-1] - openingBrace := strings.Index(dt.signature, "(") - closingBrace := strings.Index(dt.signature, ")") - paramsStr := dt.signature[openingBrace+1 : closingBrace] + var funcs []funcStruct - var params []string - if paramsStr = strings.TrimSpace(paramsStr); len(paramsStr) > 0 { - params = strings.Split(paramsStr, ",") + for i, fun := range dt.functions { + function := fun.function + signature := fun.signature + + openingBrace := strings.Index(signature, "(") + closingBrace := strings.Index(signature, ")") + paramsStr := signature[openingBrace+1 : closingBrace] + returns := signature[closingBrace+1:] + + var params []string + if paramsStr = strings.TrimSpace(paramsStr); len(paramsStr) > 0 { + params = strings.Split(paramsStr, ",") + } + + varName := strings.ToLower(lastPart[:1]) + lastPart[1:] + if len(dt.functions) > 1 { + varName += strconv.Itoa(i) + } + + funcs = append(funcs, funcStruct{ + VarName: varName, + Signature: signature, + Function: function, + Params: params, + ReturnTypes: returns, + }) } types[dt.typ] = typeStruct{ - Type: dt.typ, - ShortType: lastPart, - VarName: strings.ToLower(lastPart[:1]) + lastPart[1:], - Signature: dt.signature, - Function: dt.function, - Params: params, - ReturnTypes: dt.signature[closingBrace+1:], + Type: dt.typ, + ShortType: lastPart, + Functions: funcs, } combos = append(combos, dt.typ) @@ -214,7 +243,7 @@ type decorationSet struct { var ( target = pflag.StringP("out", "o", "", "output file") pkg = pflag.StringP("package", "p", "", "package name") - function = pflag.StringP("function", "f", "", "function name") + funcname = pflag.StringP("function", "f", "", "function name") base = pflag.StringP("base", "b", "", "base type") ret = pflag.StringP("return", "r", "", "return type") types = pflag.StringArrayP("type", "t", nil, "comma-separated list of type definitions") @@ -276,6 +305,41 @@ func parseFile(file string) ([]decorationSet, error) { return res, scanner.Err() } +func splitTopLevel(s string) []string { + var res []string + brackets := 0 + start := 0 + + for i, r := range s { + switch r { + case '(': + brackets++ + case ')': + brackets-- + case ',': + if brackets == 0 { + res = append(res, strings.TrimSpace(s[start:i])) + start = i + 1 + } + } + } + res = append(res, strings.TrimSpace(s[start:])) + return res +} + +func parseFunctions(iface string) []function { + parts := splitTopLevel(iface) + + var res []function + for i := 0; i+1 < len(parts); i += 2 { + res = append(res, function{ + function: parts[i], + signature: parts[i+1], + }) + } + return res +} + func main() { pflag.Usage = Usage pflag.Parse() @@ -292,9 +356,9 @@ func main() { pkg = &gopkg } - sets := []decorationSet{{*function, *base, *ret, *types}} + sets := []decorationSet{{*funcname, *base, *ret, *types}} - if *function == "" { + if *funcname == "" { all, err := parseFile(gofile) if err != nil { fmt.Println(err) @@ -332,10 +396,10 @@ func main() { for _, set := range sets { var dynamicTypes []dynamicType + for _, v := range set.types { - split := strings.SplitN(v, ",", 3) - dt := dynamicType{split[0], split[1], split[2]} - dynamicTypes = append(dynamicTypes, dt) + split := strings.SplitN(v, ",", 2) // iface,... + dynamicTypes = append(dynamicTypes, dynamicType{split[0], parseFunctions(split[1])}) } var buf bytes.Buffer diff --git a/cmd/decorate/decorate.tpl b/cmd/decorate/decorate.tpl index b4d1aecdb..87271417e 100644 --- a/cmd/decorate/decorate.tpl +++ b/cmd/decorate/decorate.tpl @@ -5,7 +5,9 @@ {{- range $typ, $def := .Types}} {{- if requiredType $combo $typ}} - {{- if $and}} &&{{else}}{{$and = true}}{{end}} {{$def.VarName}} {{if contains $combo $typ}}!={{else}}=={{end}} nil + {{- range $def.Functions}} + {{- if $and}} &&{{else}}{{$and = true}}{{end}} {{.VarName}} {{if contains $combo $typ}}!={{else}}=={{end}} nil + {{- end}} {{- end}} {{- end}}: return &struct { @@ -20,7 +22,9 @@ {{- range $typ, $def := .Types}} {{- if contains $combo $typ}} {{$def.ShortType}}: &{{$prefix}}{{$def.ShortType}}Impl{ - {{$def.VarName}}: {{$def.VarName}}, + {{- range $def.Functions}} + {{.VarName}}: {{.VarName}}, + {{- end}} }, {{- end}} {{- end}} @@ -36,7 +40,9 @@ func {{.Function}}(base {{.BaseType}}{{range ordered}}, {{.VarName}} {{.Signatur switch { case {{- range $typ, $def := .Types}} {{- if requiredType empty $typ}} - {{- if $and}} &&{{else}}{{$and = true}}{{end}} {{$def.VarName}} == nil + {{- range $def.Functions}} + {{- if $and}} &&{{else}}{{$and = true}}{{end}} {{.VarName}} == nil + {{- end}} {{- end}} {{- end}}: return base @@ -47,12 +53,14 @@ func {{.Function}}(base {{.BaseType}}{{range ordered}}, {{.VarName}} {{.Signatur return nil } -{{range .Types -}} -type {{$prefix}}{{.ShortType}}Impl struct { +{{range $element := .Types -}} +type {{$prefix}}{{$element.ShortType}}Impl struct { + {{- range .Functions}} {{.VarName}} {{.Signature}} + {{- end}} } - -func (impl *{{$prefix}}{{.ShortType}}Impl) {{.Function}}( +{{range $element.Functions}} +func (impl *{{$prefix}}{{$element.ShortType}}Impl) {{.Function}}( {{- range $idx, $param := .Params -}} {{- if gt $idx 0}}, {{end -}} p{{$idx}} {{ $param -}} @@ -60,6 +68,6 @@ func (impl *{{$prefix}}{{.ShortType}}Impl) {{.Function}}( return impl.{{.VarName}}( {{- range $idx, $param := .Params -}} {{- if gt $idx 0}}, {{end}}p{{- $idx -}}{{end}}) - } - +} +{{end}} {{end}} From 0d609afa14645696038ed245d3ad06f5806d9eef Mon Sep 17 00:00:00 2001 From: lehmanju Date: Sat, 3 Jan 2026 13:31:38 +0100 Subject: [PATCH 0025/1916] chore: disable moby in devcontainer (#26335) --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bb8875353..0f5ab73d8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,7 +5,7 @@ "image": "mcr.microsoft.com/devcontainers/go", "features": { "ghcr.io/devcontainers/features/docker-outside-of-docker:1": { - "moby": true, + "moby": false, "installDockerBuildx": true, "installDockerComposeSwitch": true, "version": "latest", From 2d78403581d57a031ba6316f29d55f4c4bf1779a Mon Sep 17 00:00:00 2001 From: Andreas Linde <42185+DerAndereAndi@users.noreply.github.com> Date: Sat, 3 Jan 2026 18:02:00 +0100 Subject: [PATCH 0026/1916] EEBUS: properly setup entities (#26401) --- server/eebus/eebus.go | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/server/eebus/eebus.go b/server/eebus/eebus.go index 7d8382915..b54c0e6c8 100644 --- a/server/eebus/eebus.go +++ b/server/eebus/eebus.go @@ -31,6 +31,7 @@ import ( shiputil "github.com/enbility/ship-go/util" spineapi "github.com/enbility/spine-go/api" "github.com/enbility/spine-go/model" + "github.com/enbility/spine-go/spine" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/machine" ) @@ -123,7 +124,7 @@ func NewServer(other Config) (*EEBus, error) { configuration, err := eebusapi.NewConfiguration( BrandName, BrandName, Model, serial, model.DeviceTypeTypeEnergyManagementSystem, - []model.EntityTypeType{model.EntityTypeTypeCEM, model.EntityTypeTypeControllableSystem, model.EntityTypeTypeGridGuard}, + []model.EntityTypeType{model.EntityTypeTypeCEM}, port, certificate, time.Second*4, ) if err != nil { @@ -155,10 +156,13 @@ func NewServer(other Config) (*EEBus, error) { return nil, err } - { - localEntity := c.service.LocalDevice().EntityForType(model.EntityTypeTypeCEM) + localDevice := c.service.LocalDevice() - // evse + { + // CEM entity for for connected EVSE and Meters + localEntity := localDevice.Entity([]model.AddressEntityType{1}) + + // customer energy management to EVSE c.cem = CustomerEnergyManagement{ EvseCC: evsecc.NewEVSECC(localEntity, c.ucCallback), EvCC: evcc.NewEVCC(c.service, localEntity, c.ucCallback), @@ -167,10 +171,19 @@ func NewServer(other Config) (*EEBus, error) { OscEV: oscev.NewOSCEV(localEntity, c.ucCallback), EvSoc: evsoc.NewEVSOC(localEntity, c.ucCallback), } + + // monitoring appliance to meters + c.ma = MonitoringAppliance{ + MaMGCPInterface: mgcp.NewMGCP(localEntity, c.ucCallback), + MaMPCInterface: mpc.NewMPC(localEntity, c.ucCallback), + } } { - localEntity := c.service.LocalDevice().EntityForType(model.EntityTypeTypeControllableSystem) + // CEM entity for connected SMGW + // LPC/LPP use a 60s heartbeat timeout, but some EVSE devices have then issues when not set to 4s right now even though they should not connect to this one anyway + localEntity := spine.NewEntityLocal(localDevice, model.EntityTypeTypeCEM, []model.AddressEntityType{2}, time.Second*4) + localDevice.AddEntity(localEntity) // controllable system c.cs = ControllableSystem{ @@ -180,13 +193,10 @@ func NewServer(other Config) (*EEBus, error) { } { - localEntity := c.service.LocalDevice().EntityForType(model.EntityTypeTypeGridGuard) - - // monitoring appliance - c.ma = MonitoringAppliance{ - MaMGCPInterface: mgcp.NewMGCP(localEntity, c.ucCallback), - MaMPCInterface: mpc.NewMPC(localEntity, c.ucCallback), - } + // GridGuard entity for connected Controllable Systems + // LPC/LPP use a 60s heartbeat timeout, but some EVSE devices have then issues when not set to 4s right now + localEntity := spine.NewEntityLocal(localDevice, model.EntityTypeTypeGridGuard, []model.AddressEntityType{3}, time.Second*4) + localDevice.AddEntity(localEntity) // energy guard c.eg = EnergyGuard{ From 43321ac0958ba966288a9644d74223f4175977db Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Sat, 3 Jan 2026 18:19:29 +0100 Subject: [PATCH 0027/1916] RCT: add curtailment api (#26252) --- meter/rct.go | 22 +- meter/rct_decorators.go | 463 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 464 insertions(+), 21 deletions(-) diff --git a/meter/rct.go b/meter/rct.go index f92336451..9d670d22f 100644 --- a/meter/rct.go +++ b/meter/rct.go @@ -33,7 +33,7 @@ func init() { registry.AddCtx("rct", NewRCTFromConfig) } -//go:generate go tool decorate -f decorateRCT -b *RCT -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.BatteryCapacity,Capacity,func() float64" +//go:generate go tool decorate -f decorateRCT -b *RCT -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Curtailer,Curtail,func(bool) error,Curtailed,func() (bool, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.BatteryCapacity,Capacity,func() float64" // NewRCTFromConfig creates an RCT from generic config func NewRCTFromConfig(ctx context.Context, other map[string]any) (api.Meter, error) { @@ -100,6 +100,24 @@ func NewRCT(ctx context.Context, uri, usage string, batterySocLimits batterySocL totalEnergy = m.totalEnergy } + // decorate api.Curtailer + var curtail func(bool) error + var curtailed func() (bool, error) + if usage == "pv" { + curtail = func(b bool) error { + r := float32(1) + if b { + r = 0 + } + return m.conn.Write(rct.BufVControlPowerReduction, m.floatVal(r)) + } + + curtailed = func() (bool, error) { + r, err := m.queryFloat(rct.BufVControlPowerReduction) + return r != 1, err + } + } + // decorate api.Battery var batterySoc func() (float64, error) var batterySocLimiter func() (float64, float64) @@ -191,7 +209,7 @@ func NewRCT(ctx context.Context, uri, usage string, batterySocLimits batterySocL } } - return decorateRCT(m, totalEnergy, batterySoc, batterySocLimiter, batteryMode, batteryCapacity), nil + return decorateRCT(m, totalEnergy, curtail, curtailed, batterySoc, batterySocLimiter, batteryMode, batteryCapacity), nil } func (m *RCT) floatVal(f float32) []byte { diff --git a/meter/rct_decorators.go b/meter/rct_decorators.go index b012360b4..0836d0914 100644 --- a/meter/rct_decorators.go +++ b/meter/rct_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() (float64, error), batterySocLimiter func() (float64, float64), batteryController func(api.BatteryMode) error, batteryCapacity func() float64) api.Meter { +func decorateRCT(base *RCT, meterEnergy func() (float64, error), curtailer0 func(bool) error, curtailer1 func() (bool, error), battery func() (float64, error), batterySocLimiter func() (float64, float64), batteryController func(api.BatteryMode) error, batteryCapacity func() float64) api.Meter { switch { - case battery == nil && meterEnergy == nil: + case battery == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return base - case battery == nil && meterEnergy != nil: + case battery == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.MeterEnergy @@ -22,7 +22,35 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && meterEnergy == nil: + case battery == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Curtailer + }{ + RCT: base, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -33,7 +61,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -48,7 +76,43 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -63,7 +127,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -82,7 +146,51 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatterySocLimiter + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatterySocLimiter + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -97,7 +205,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -116,7 +224,51 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatteryController + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatteryController + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -135,7 +287,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -158,7 +310,59 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatteryController + api.BatterySocLimiter + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatteryController + api.BatterySocLimiter + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -173,7 +377,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -192,7 +396,51 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -211,7 +459,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -234,7 +482,59 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.BatterySocLimiter + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.BatterySocLimiter + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -253,7 +553,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -276,7 +576,59 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && meterEnergy == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.BatteryController + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter == nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.BatteryController + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy == nil: return &struct { *RCT api.Battery @@ -299,7 +651,7 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && meterEnergy != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && curtailer0 == nil && curtailer1 == nil && meterEnergy != nil: return &struct { *RCT api.Battery @@ -325,6 +677,66 @@ func decorateRCT(base *RCT, meterEnergy func() (float64, error), battery func() meterEnergy: meterEnergy, }, } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy == nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatterySocLimiter + api.Curtailer + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batterySocLimiter != nil && curtailer0 != nil && curtailer1 != nil && meterEnergy != nil: + return &struct { + *RCT + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatterySocLimiter + api.Curtailer + api.MeterEnergy + }{ + RCT: base, + Battery: &decorateRCTBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateRCTBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateRCTBatteryControllerImpl{ + batteryController: batteryController, + }, + BatterySocLimiter: &decorateRCTBatterySocLimiterImpl{ + batterySocLimiter: batterySocLimiter, + }, + Curtailer: &decorateRCTCurtailerImpl{ + curtailer0: curtailer0, + curtailer1: curtailer1, + }, + MeterEnergy: &decorateRCTMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } } return nil @@ -362,6 +774,19 @@ func (impl *decorateRCTBatterySocLimiterImpl) GetSocLimits() (float64, float64) return impl.batterySocLimiter() } +type decorateRCTCurtailerImpl struct { + curtailer0 func(bool) error + curtailer1 func() (bool, error) +} + +func (impl *decorateRCTCurtailerImpl) Curtail(p0 bool) error { + return impl.curtailer0(p0) +} + +func (impl *decorateRCTCurtailerImpl) Curtailed() (bool, error) { + return impl.curtailer1() +} + type decorateRCTMeterEnergyImpl struct { meterEnergy func() (float64, error) } From 478a055e9bd871df780e8d03a9f07e97fb23f595 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 4 Jan 2026 11:07:03 +0100 Subject: [PATCH 0028/1916] Templates: improve required and advanced handling (#26371) --- util/templates/template.go | 3 +- util/templates/types.go | 16 ++++++-- util/templates/types_test.go | 77 ++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 util/templates/types_test.go diff --git a/util/templates/template.go b/util/templates/template.go index 8a282e128..6c43ca441 100644 --- a/util/templates/template.go +++ b/util/templates/template.go @@ -366,8 +366,7 @@ func (t *Template) RenderResult(renderMode int, other map[string]any) ([]byte, m } // validate required fields from yaml - if s == "" && p.IsRequired() && !p.IsDeprecated() && (renderMode == RenderModeUnitTest || - renderMode == RenderModeInstance && !testing.Testing()) { + if s == "" && p.IsRequired() && (renderMode == RenderModeUnitTest || renderMode == RenderModeInstance && !testing.Testing()) { // validate required per usage if len(p.Usages) == 0 || slices.Contains(p.Usages, usage) { return nil, nil, fmt.Errorf("missing required `%s`", p.Name) diff --git a/util/templates/types.go b/util/templates/types.go index 50e26cbc7..5e55b4acf 100644 --- a/util/templates/types.go +++ b/util/templates/types.go @@ -137,7 +137,7 @@ func (t *TextLanguage) Update(new TextLanguage, always bool) { } // MarshalJSON implements the json.Marshaler interface -func (t *TextLanguage) MarshalJSON() (out []byte, err error) { +func (t TextLanguage) MarshalJSON() ([]byte, error) { mu.Lock() s := t.String(encoderLanguage) mu.Unlock() @@ -232,7 +232,7 @@ func (p *Param) OverwriteProperties(withParam Param) { } func (p *Param) IsAdvanced() bool { - return p.Advanced + return p.Advanced && !p.Required } func (p *Param) IsMasked() bool { @@ -244,7 +244,7 @@ func (p *Param) IsPrivate() bool { } func (p *Param) IsRequired() bool { - return p.Required + return p.Required && !p.Deprecated } func (p *Param) IsDeprecated() bool { @@ -264,6 +264,16 @@ func (p *Param) yamlQuote(value string) string { return yamlQuote(value) } +var _ json.Marshaler = (*Param)(nil) + +func (p Param) MarshalJSON() ([]byte, error) { + type param Param + pp := (param)(p) + pp.Required = p.IsRequired() + pp.Advanced = p.IsAdvanced() + return json.Marshal(pp) +} + // Product contains naming information about a product a template supports type Product struct { Brand string // product brand diff --git a/util/templates/types_test.go b/util/templates/types_test.go new file mode 100644 index 000000000..64afa69f0 --- /dev/null +++ b/util/templates/types_test.go @@ -0,0 +1,77 @@ +package templates + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestParamLogic(t *testing.T) { + { + p := Param{ + Advanced: true, // omitempty + Required: true, + } + require.False(t, p.IsAdvanced(), "can't be advanced when required") + + { + b, err := json.Marshal(p) + require.NoError(t, err) + assert.Equal(t, `{"Name":"","Description":"","Help":"","Required":true,"Type":"String"}`, string(b), "Marshal p advanced/required") + } + { + b, err := json.Marshal(&p) + require.NoError(t, err) + assert.Equal(t, `{"Name":"","Description":"","Help":"","Required":true,"Type":"String"}`, string(b), "Marshal *p advanced/required") + } + } + + { + p := Param{ + Deprecated: true, + Required: true, // omitempty + } + require.False(t, p.IsRequired(), "can't be required when deprecated") + + { + b, err := json.Marshal(p) + require.NoError(t, err) + assert.Equal(t, `{"Name":"","Description":"","Help":"","Deprecated":true,"Type":"String"}`, string(b), "Marshal p deprecated/required") + } + { + b, err := json.Marshal(&p) + require.NoError(t, err) + assert.Equal(t, `{"Name":"","Description":"","Help":"","Deprecated":true,"Type":"String"}`, string(b), "Marshal *p deprecated/required") + } + } + + b, err := json.Marshal(Param{ + Deprecated: true, + Advanced: true, // omitempty + Required: true, // omitempty + }) + require.NoError(t, err) + require.Equal(t, `{"Name":"","Description":"","Help":"","Deprecated":true,"Type":"String"}`, string(b)) +} + +func TestParamMarshal(t *testing.T) { + { + p := Param{ + Description: TextLanguage{Generic: "foo"}, + } + + { + b, err := json.Marshal(p) + require.NoError(t, err) + assert.Equal(t, `{"Name":"","Description":"foo","Help":"","Type":"String"}`, string(b)) + } + + { + b, err := json.Marshal(&p) + require.NoError(t, err) + assert.Equal(t, `{"Name":"","Description":"foo","Help":"","Type":"String"}`, string(b)) + } + } +} From ed9709e079f7b52bf48b93512ebb55b1869c0a31 Mon Sep 17 00:00:00 2001 From: Ingo <71161062+iseeberg79@users.noreply.github.com> Date: Sun, 4 Jan 2026 13:06:04 +0100 Subject: [PATCH 0029/1916] Planner: guard against incomplete rates (#26324) --- core/planner/planner.go | 24 ++++------------- core/planner/planner_continuous_test.go | 8 +++--- core/planner/planner_test.go | 34 +++++++++++++++++++------ 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/core/planner/planner.go b/core/planner/planner.go index c0bbe7ecb..fe34af7f7 100644 --- a/core/planner/planner.go +++ b/core/planner/planner.go @@ -154,6 +154,11 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime rates = clampRates(rates, now, targetTime) + // check if rate coverage is sufficient for planning + if len(rates) == 0 || rates[len(rates)-1].End.Sub(rates[0].Start) < requiredDuration { + return simplePlan + } + // don't precondition longer than charging duration precondition = min(precondition, requiredDuration) @@ -175,25 +180,6 @@ func (t *Planner) Plan(requiredDuration, precondition time.Duration, targetTime // create plan unless only precond slots remaining var plan api.Rates if continuous { - // check if available tariff slots span is sufficient for sliding window algorithm - // verify that actual tariff data covers enough duration (may have gaps or start late) - if len(rates) > 0 { - start := rates[0].Start - if start.Before(now) { - start = now - } - - end := rates[len(rates)-1].End - if end.After(targetTime) { - end = targetTime - } - - // available window too small for sliding window - charge continuously from now to target - if end.Sub(start) < requiredDuration { - return continuousPlan(append(rates, precond...), now, targetTime.Add(precondition)) - } - } - // find cheapest continuous window plan = findContinuousWindow(rates, requiredDuration, targetTime) } else { diff --git a/core/planner/planner_continuous_test.go b/core/planner/planner_continuous_test.go index ff383ea87..4f9c97fc2 100644 --- a/core/planner/planner_continuous_test.go +++ b/core/planner/planner_continuous_test.go @@ -548,8 +548,8 @@ func TestContinuous_StartBeforeRates(t *testing.T) { // TestContinuous_StartBeforeRatesInsufficientTime tests that when current time // is before the first available rate AND there's not enough time after rates -// start to complete charging before target, the planner starts charging as soon -// as rates become available (best effort approach) +// start to complete charging before target, the planner starts at the latest +// possible time to reach target (best effort approach) func TestContinuous_StartBeforeRatesInsufficientTime(t *testing.T) { now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) c := clock.NewMock() @@ -581,8 +581,8 @@ func TestContinuous_StartBeforeRatesInsufficientTime(t *testing.T) { require.NotEmpty(t, plan, "plan should not be empty") - // Best effort: start immediately to maximize charging time - assert.Equal(t, now, plan[0].Start, "should start immediately") + // Best effort: start at latest possible time to maximize charging time + assert.Equal(t, now.Add(1*time.Hour), plan[0].Start, "should start at latest possible time") assert.Equal(t, 0.0, plan[0].Value, "gap-filling slot before rates has no price") } diff --git a/core/planner/planner_test.go b/core/planner/planner_test.go index 011d7a473..e6db1640e 100644 --- a/core/planner/planner_test.go +++ b/core/planner/planner_test.go @@ -497,9 +497,8 @@ func TestStartBeforeRates(t *testing.T) { } // TestStartBeforeRatesInsufficientTime tests that when current time -// is before the first available rate AND there's not enough time after rates -// start to complete charging before target, the planner starts charging as soon -// as rates become available (best effort approach) +// is before the first available rate AND there's not enough rate coverage +// to complete charging, the planner falls back to simplePlan (ignoring rates) func TestStartBeforeRatesInsufficientTime(t *testing.T) { now := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC) c := clock.NewMock() @@ -525,13 +524,32 @@ func TestStartBeforeRatesInsufficientTime(t *testing.T) { } targetTime := now.Add(4 * time.Hour) - requiredDuration := 3 * time.Hour // Need 3h but only 2h available after rates start + requiredDuration := 3 * time.Hour // Need 3h but only 2h rate coverage plan := planner.Plan(requiredDuration, 0, targetTime, false) // dispersed mode - require.NotEmpty(t, plan, "plan should not be empty - starts when rates become available") + require.NotEmpty(t, plan, "plan should not be empty") - // Best effort: start as soon as rates are available - assert.Equal(t, now.Add(2*time.Hour), plan[0].Start, "should start at first available rate") - assert.Equal(t, 0.10, plan[0].Value, "should use first available rate price") + // Insufficient rate coverage: fall back to simplePlan starting at latestStart + assert.Equal(t, now.Add(1*time.Hour), plan[0].Start, "should start at latestStart (target - required)") + assert.Equal(t, 0.0, plan[0].Value, "simplePlan has no price info") +} + +// TestEmptyRatesAfterClamping tests fallback to simplePlan when no rates cover [now, targetTime] +func TestEmptyRatesAfterClamping(t *testing.T) { + c := clock.NewMock() + ctrl := gomock.NewController(t) + + trf := api.NewMockTariff(ctrl) + trf.EXPECT().Rates().AnyTimes().Return(rates([]float64{0.20}, c.Now().Add(3*time.Hour), time.Hour), nil) + + p := &Planner{ + log: util.NewLogger("test"), + clock: c, + tariff: trf, + } + + plan := p.Plan(time.Hour, 0, c.Now().Add(90*time.Minute), false) + require.Len(t, plan, 1) + assert.Equal(t, c.Now().Add(30*time.Minute), plan[0].Start) } From dc9ff1d6c317e1c52b029dca238bc5a9522d4b70 Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Sun, 4 Jan 2026 14:40:17 +0100 Subject: [PATCH 0030/1916] Loadpoint UI: improve title visibility (#26248) --- assets/js/components/Loadpoints/Loadpoint.vue | 16 +++++++- .../js/components/Loadpoints/Loadpoints.vue | 39 ++++++++++++------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/assets/js/components/Loadpoints/Loadpoint.vue b/assets/js/components/Loadpoints/Loadpoint.vue index 907136581..2106966a1 100644 --- a/assets/js/components/Loadpoints/Loadpoint.vue +++ b/assets/js/components/Loadpoints/Loadpoint.vue @@ -1,6 +1,9 @@