diff --git a/cmd/configure/helper.go b/cmd/configure/helper.go index 548346f3d..92e2c963a 100644 --- a/cmd/configure/helper.go +++ b/cmd/configure/helper.go @@ -263,10 +263,10 @@ func (c *CmdConfigure) configureMQTT(templateItem templates.Template) (map[strin for { fmt.Println() - _, paramHost := templateItem.ConfigDefaults.ParamByName("host") - _, paramPort := templateItem.ConfigDefaults.ParamByName("port") - _, paramUser := templateItem.ConfigDefaults.ParamByName("user") - _, paramPassword := templateItem.ConfigDefaults.ParamByName("password") + _, paramHost := templates.ConfigDefaults.ParamByName("host") + _, paramPort := templates.ConfigDefaults.ParamByName("port") + _, paramUser := templates.ConfigDefaults.ParamByName("user") + _, paramPassword := templates.ConfigDefaults.ParamByName("password") host := c.askParam(paramHost) port := c.askParam(paramPort) @@ -309,7 +309,6 @@ func (c *CmdConfigure) fetchElements(deviceCategory DeviceCategory) []templates. for _, t := range tmpl.Titles(c.lang) { titleTmpl := templates.Template{ TemplateDefinition: tmpl.TemplateDefinition, - ConfigDefaults: tmpl.ConfigDefaults, } title := t groupTitle := titleTmpl.GroupTitle(c.lang) @@ -500,7 +499,7 @@ func (c *CmdConfigure) processModbusConfig(templateItem *templates.Template, dev return } - config := templateItem.ConfigDefaults.Modbus + config := templates.ConfigDefaults.Modbus for _, choice := range modbusParam.Choice { if config.Interfaces[choice] == nil { diff --git a/templates/definition/charger/eebus.yaml b/templates/definition/charger/eebus.yaml index f3a0ceeb9..7b0ceb200 100644 --- a/templates/definition/charger/eebus.yaml +++ b/templates/definition/charger/eebus.yaml @@ -8,6 +8,6 @@ capabilities: ["mA"] requirements: evcc: ["eebus"] params: - - preset: eebusmeter + - preset: eebus-meter render: | {{ include "eebus-meter" . }} diff --git a/templates/definition/charger/elli-charger-connect.yaml b/templates/definition/charger/elli-charger-connect.yaml index ce1fdd6cd..85223a0aa 100644 --- a/templates/definition/charger/elli-charger-connect.yaml +++ b/templates/definition/charger/elli-charger-connect.yaml @@ -21,7 +21,7 @@ requirements: The support is in beta state and problems can occur! params: - - preset: eebusnometer + - preset: eebus-no-meter - name: ip required: true render: | diff --git a/templates/definition/charger/elli-charger-pro.yaml b/templates/definition/charger/elli-charger-pro.yaml index 23c5c0b6f..56f4382d5 100644 --- a/templates/definition/charger/elli-charger-pro.yaml +++ b/templates/definition/charger/elli-charger-pro.yaml @@ -21,7 +21,7 @@ requirements: The support is in beta state and problems can occur! params: - - preset: eebusmeter + - preset: eebus-meter - name: ip required: true render: | diff --git a/templates/definition/charger/porsche-pmcc.yaml b/templates/definition/charger/porsche-pmcc.yaml index d27525b39..c403fcfdc 100644 --- a/templates/definition/charger/porsche-pmcc.yaml +++ b/templates/definition/charger/porsche-pmcc.yaml @@ -7,6 +7,6 @@ capabilities: ["iso151182", "mA"] requirements: evcc: ["eebus"] params: - - preset: eebusmeter + - preset: eebus-meter render: | {{ include "eebus-meter" . }} diff --git a/templates/definition/charger/porsche-pmcp.yaml b/templates/definition/charger/porsche-pmcp.yaml index 46d3768b5..2e3f87ece 100644 --- a/templates/definition/charger/porsche-pmcp.yaml +++ b/templates/definition/charger/porsche-pmcp.yaml @@ -6,6 +6,6 @@ products: requirements: evcc: ["eebus"] params: - - preset: eebusmeter + - preset: eebus-meter render: | {{ include "eebus-meter" . }} diff --git a/templates/definition/embed.go b/templates/definition/embed.go index 883a45b5a..81e63c1e3 100644 --- a/templates/definition/embed.go +++ b/templates/definition/embed.go @@ -2,10 +2,5 @@ package definition import "embed" -var ( - //go:embed charger/*.yaml meter/*.yaml vehicle/*.yaml - YamlTemplates embed.FS - - //go:embed defaults.yaml - DefaultsContent string -) +//go:embed charger/*.yaml meter/*.yaml vehicle/*.yaml +var YamlTemplates embed.FS diff --git a/templates/definition/vehicle/aiways.yaml b/templates/definition/vehicle/aiways.yaml index 311a21e95..298c98bbf 100644 --- a/templates/definition/vehicle/aiways.yaml +++ b/templates/definition/vehicle/aiways.yaml @@ -2,8 +2,8 @@ template: aiways products: - brand: Aiways params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin required: true render: | diff --git a/templates/definition/vehicle/audi-etron.yaml b/templates/definition/vehicle/audi-etron.yaml index 3ac1c8afb..f4dc36b6c 100644 --- a/templates/definition/vehicle/audi-etron.yaml +++ b/templates/definition/vehicle/audi-etron.yaml @@ -4,8 +4,8 @@ products: description: generic: e-tron params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WAUZZZ... render: | diff --git a/templates/definition/vehicle/audi.yaml b/templates/definition/vehicle/audi.yaml index 8f03c3c69..f1b33ebd8 100644 --- a/templates/definition/vehicle/audi.yaml +++ b/templates/definition/vehicle/audi.yaml @@ -5,8 +5,8 @@ products: de: Andere en: Others params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WAUZZZ... render: | diff --git a/templates/definition/vehicle/bmw.yaml b/templates/definition/vehicle/bmw.yaml index 91eff5463..05efccb4c 100644 --- a/templates/definition/vehicle/bmw.yaml +++ b/templates/definition/vehicle/bmw.yaml @@ -2,8 +2,8 @@ template: bmw products: - brand: BMW params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WBMW... render: | diff --git a/templates/definition/vehicle/carwings.yaml b/templates/definition/vehicle/carwings.yaml index fca598890..e90db3192 100644 --- a/templates/definition/vehicle/carwings.yaml +++ b/templates/definition/vehicle/carwings.yaml @@ -4,8 +4,8 @@ products: description: generic: Leaf (pre 2019) params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: carwings {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/citroen.yaml b/templates/definition/vehicle/citroen.yaml index fc44e0cef..421456e8f 100644 --- a/templates/definition/vehicle/citroen.yaml +++ b/templates/definition/vehicle/citroen.yaml @@ -2,8 +2,8 @@ template: citroen products: - brand: Citroën params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: citroen {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/dacia.yaml b/templates/definition/vehicle/dacia.yaml index 6353a6a73..380661e06 100644 --- a/templates/definition/vehicle/dacia.yaml +++ b/templates/definition/vehicle/dacia.yaml @@ -2,8 +2,8 @@ template: dacia products: - brand: Dacia params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: capacity default: 27.4 render: | diff --git a/templates/definition/vehicle/ds.yaml b/templates/definition/vehicle/ds.yaml index 88112cb40..11982df4e 100644 --- a/templates/definition/vehicle/ds.yaml +++ b/templates/definition/vehicle/ds.yaml @@ -2,8 +2,8 @@ template: ds products: - brand: DS params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: ds {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/evnotify.yaml b/templates/definition/vehicle/evnotify.yaml index e731af8fe..edc3b087f 100644 --- a/templates/definition/vehicle/evnotify.yaml +++ b/templates/definition/vehicle/evnotify.yaml @@ -16,7 +16,7 @@ params: - name: icon default: car advanced: true - - preset: vehicleidentify + - preset: vehicle-identify render: | type: custom {{- if ne .title "" }} diff --git a/templates/definition/vehicle/fiat.yaml b/templates/definition/vehicle/fiat.yaml index ac3cc3470..4ec09e5a2 100644 --- a/templates/definition/vehicle/fiat.yaml +++ b/templates/definition/vehicle/fiat.yaml @@ -2,12 +2,12 @@ template: fiat products: - brand: Fiat params: - - preset: vehiclebase + - preset: vehicle-base - name: vin example: ZFAE... - name: pin mask: true - - preset: vehicleidentify + - preset: vehicle-identify render: | type: fiat {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/ford.yaml b/templates/definition/vehicle/ford.yaml index ab56ec9cb..d75000489 100644 --- a/templates/definition/vehicle/ford.yaml +++ b/templates/definition/vehicle/ford.yaml @@ -2,8 +2,8 @@ template: ford products: - brand: Ford params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WF0FXX... render: | diff --git a/templates/definition/vehicle/hyundai.yaml b/templates/definition/vehicle/hyundai.yaml index 3bb5ec708..2e2621b72 100644 --- a/templates/definition/vehicle/hyundai.yaml +++ b/templates/definition/vehicle/hyundai.yaml @@ -4,9 +4,9 @@ products: description: generic: Bluelink params: - - preset: vehiclebase - - preset: vehiclelanguage - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-language + - preset: vehicle-identify render: | type: hyundai {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/jaguar-landrover.yaml b/templates/definition/vehicle/jaguar-landrover.yaml index 8d4ca964a..872b0959d 100644 --- a/templates/definition/vehicle/jaguar-landrover.yaml +++ b/templates/definition/vehicle/jaguar-landrover.yaml @@ -3,8 +3,8 @@ products: - brand: Jaguar - brand: Land Rover params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: jaguar {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/kia.yaml b/templates/definition/vehicle/kia.yaml index 3affda713..a29dc9358 100644 --- a/templates/definition/vehicle/kia.yaml +++ b/templates/definition/vehicle/kia.yaml @@ -4,9 +4,9 @@ products: description: generic: Bluelink params: - - preset: vehiclebase - - preset: vehiclelanguage - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-language + - preset: vehicle-identify render: | type: kia {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/mini.yaml b/templates/definition/vehicle/mini.yaml index 043a6ae8d..fb1056633 100644 --- a/templates/definition/vehicle/mini.yaml +++ b/templates/definition/vehicle/mini.yaml @@ -2,8 +2,8 @@ template: mini products: - brand: Mini params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WBMW... render: | diff --git a/templates/definition/vehicle/nissan.yaml b/templates/definition/vehicle/nissan.yaml index 2960a420a..37ae48aaa 100644 --- a/templates/definition/vehicle/nissan.yaml +++ b/templates/definition/vehicle/nissan.yaml @@ -4,8 +4,8 @@ products: description: generic: Leaf params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: nissan {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/niu-e-scooter.yaml b/templates/definition/vehicle/niu-e-scooter.yaml index a82b5b834..8955256e3 100644 --- a/templates/definition/vehicle/niu-e-scooter.yaml +++ b/templates/definition/vehicle/niu-e-scooter.yaml @@ -20,7 +20,7 @@ params: default: 4 - name: icon default: scooter - - preset: vehicleidentify + - preset: vehicle-identify render: | type: niu {{- if ne .title "" }} diff --git a/templates/definition/vehicle/opel.yaml b/templates/definition/vehicle/opel.yaml index e8e1cead7..f7370cf4e 100644 --- a/templates/definition/vehicle/opel.yaml +++ b/templates/definition/vehicle/opel.yaml @@ -2,8 +2,8 @@ template: opel products: - brand: Opel params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WP0... render: | diff --git a/templates/definition/vehicle/ovms.yaml b/templates/definition/vehicle/ovms.yaml index b92a4a945..088a9cc35 100644 --- a/templates/definition/vehicle/ovms.yaml +++ b/templates/definition/vehicle/ovms.yaml @@ -23,7 +23,7 @@ params: - name: icon default: car advanced: true - - preset: vehicleidentify + - preset: vehicle-identify render: | type: ovms {{- if ne .title "" }} diff --git a/templates/definition/vehicle/peugeot.yaml b/templates/definition/vehicle/peugeot.yaml index 25f002afe..4bf8dfb89 100644 --- a/templates/definition/vehicle/peugeot.yaml +++ b/templates/definition/vehicle/peugeot.yaml @@ -2,8 +2,8 @@ template: peugeot products: - brand: Peugeot params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: peugeot {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/porsche.yaml b/templates/definition/vehicle/porsche.yaml index 74401802a..801b567ba 100644 --- a/templates/definition/vehicle/porsche.yaml +++ b/templates/definition/vehicle/porsche.yaml @@ -2,8 +2,8 @@ template: porsche products: - brand: Porsche params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: porsche {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/renault.yaml b/templates/definition/vehicle/renault.yaml index eb66ebac5..721f88895 100644 --- a/templates/definition/vehicle/renault.yaml +++ b/templates/definition/vehicle/renault.yaml @@ -2,8 +2,8 @@ template: renault products: - brand: Renault params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WREN... render: | diff --git a/templates/definition/vehicle/seat-cupra.yaml b/templates/definition/vehicle/seat-cupra.yaml index 309e585e7..4e747b76c 100644 --- a/templates/definition/vehicle/seat-cupra.yaml +++ b/templates/definition/vehicle/seat-cupra.yaml @@ -4,8 +4,8 @@ products: description: generic: Cupra Born, My Cupra params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: cupra {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/seat.yaml b/templates/definition/vehicle/seat.yaml index 03ebe848b..62b99403e 100644 --- a/templates/definition/vehicle/seat.yaml +++ b/templates/definition/vehicle/seat.yaml @@ -5,8 +5,8 @@ products: de: Andere en: Others params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: seat {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/silence.yaml b/templates/definition/vehicle/silence.yaml index 6c363e102..924d0af59 100644 --- a/templates/definition/vehicle/silence.yaml +++ b/templates/definition/vehicle/silence.yaml @@ -8,7 +8,7 @@ products: # generic: MÓ group: scooter params: - - preset: vehiclebase + - preset: vehicle-base - name: vin example: W... - name: icon diff --git a/templates/definition/vehicle/skoda-enyaq.yaml b/templates/definition/vehicle/skoda-enyaq.yaml index 95bf39d03..694ec41c2 100644 --- a/templates/definition/vehicle/skoda-enyaq.yaml +++ b/templates/definition/vehicle/skoda-enyaq.yaml @@ -4,8 +4,8 @@ products: description: generic: Enyaq params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: enyaq {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/skoda.yaml b/templates/definition/vehicle/skoda.yaml index 8dee82931..4cb08a984 100644 --- a/templates/definition/vehicle/skoda.yaml +++ b/templates/definition/vehicle/skoda.yaml @@ -5,8 +5,8 @@ products: de: Andere en: Others params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: skoda {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/smart.yaml b/templates/definition/vehicle/smart.yaml index 0dda9db45..b0b0577b2 100644 --- a/templates/definition/vehicle/smart.yaml +++ b/templates/definition/vehicle/smart.yaml @@ -4,8 +4,8 @@ products: description: generic: EQ params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: capacity default: 17.6 render: | diff --git a/templates/definition/vehicle/tesla.yaml b/templates/definition/vehicle/tesla.yaml index 477a43430..e14e5367e 100644 --- a/templates/definition/vehicle/tesla.yaml +++ b/templates/definition/vehicle/tesla.yaml @@ -37,7 +37,7 @@ params: - name: icon default: car advanced: true - - preset: vehicleidentify + - preset: vehicle-identify render: | type: tesla {{- if ne .title "" }} diff --git a/templates/definition/vehicle/tronity.yaml b/templates/definition/vehicle/tronity.yaml index baae94554..1a4fc1b7a 100644 --- a/templates/definition/vehicle/tronity.yaml +++ b/templates/definition/vehicle/tronity.yaml @@ -20,7 +20,7 @@ params: - name: icon default: car advanced: true - - preset: vehicleidentify + - preset: vehicle-identify render: | type: tronity {{- if ne .title "" }} diff --git a/templates/definition/vehicle/volvo-connected.yaml b/templates/definition/vehicle/volvo-connected.yaml index f32122eff..3caf2b93d 100644 --- a/templates/definition/vehicle/volvo-connected.yaml +++ b/templates/definition/vehicle/volvo-connected.yaml @@ -2,8 +2,8 @@ template: volvo-connected products: - brand: Volvo params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vccapikey required: true help: diff --git a/templates/definition/vehicle/volvo.yaml b/templates/definition/vehicle/volvo.yaml index a1f0c0fff..4e4abd75a 100644 --- a/templates/definition/vehicle/volvo.yaml +++ b/templates/definition/vehicle/volvo.yaml @@ -2,8 +2,8 @@ template: volvo products: - brand: Volvo (legacy) params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify render: | type: volvo {{ include "vehicle-base" . }} diff --git a/templates/definition/vehicle/vw-id.yaml b/templates/definition/vehicle/vw-id.yaml index 756c3786d..636d4f69c 100644 --- a/templates/definition/vehicle/vw-id.yaml +++ b/templates/definition/vehicle/vw-id.yaml @@ -8,8 +8,8 @@ requirements: de: ID.3, ID.4 (funktioniert auch für e-Golf, e-Up) en: ID.3, ID.4 (also works for e-Golf, e-Up) params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WVWZZZ... render: | diff --git a/templates/definition/vehicle/vw.yaml b/templates/definition/vehicle/vw.yaml index bbe6ae49c..6784cc346 100644 --- a/templates/definition/vehicle/vw.yaml +++ b/templates/definition/vehicle/vw.yaml @@ -8,8 +8,8 @@ requirements: de: ältere Modelle wie e-Up, e-Golf, etc. en: older Models like e-Up, e-Golf, etc. params: - - preset: vehiclebase - - preset: vehicleidentify + - preset: vehicle-base + - preset: vehicle-identify - name: vin example: WVWZZZ... render: | diff --git a/util/templates/config.go b/util/templates/defaults.go similarity index 84% rename from util/templates/config.go rename to util/templates/defaults.go index 0d8bb7b43..82f58579b 100644 --- a/util/templates/config.go +++ b/util/templates/defaults.go @@ -1,17 +1,19 @@ package templates import ( + _ "embed" "fmt" - "github.com/evcc-io/evcc/templates/definition" "gopkg.in/yaml.v3" ) -type ConfigDefaults struct { +//go:embed defaults.yaml +var defaults []byte + +type configDefaults struct { Params []Param // Default values for common parameters Presets map[string]struct { Params []Param - Render string } Modbus struct { // Details about possible ModbusInterfaces and ModbusConnectionTypes Interfaces map[string][]string // Information about physical modbus interface types (rs485, tcpip) @@ -24,13 +26,13 @@ type ConfigDefaults struct { } // read the actual config into the struct, but only once -func (c *ConfigDefaults) LoadDefaults() { +func (c *configDefaults) Load() { // if params are initialized, defaults have been loaded if c.Params != nil { return } - if err := yaml.Unmarshal([]byte(definition.DefaultsContent), &c); err != nil { + if err := yaml.Unmarshal(defaults, &c); err != nil { panic(fmt.Errorf("failed to parse deviceGroupListDefinition: %v", err)) } @@ -55,7 +57,7 @@ func (c *ConfigDefaults) LoadDefaults() { } // return the param with the given name -func (c *ConfigDefaults) ParamByName(name string) (int, Param) { +func (c *configDefaults) ParamByName(name string) (int, Param) { for i, param := range c.Params { if param.Name == name { return i, param diff --git a/templates/definition/defaults.yaml b/util/templates/defaults.yaml similarity index 85% rename from templates/definition/defaults.yaml rename to util/templates/defaults.yaml index 533dcd104..c23b3c715 100644 --- a/templates/definition/defaults.yaml +++ b/util/templates/defaults.yaml @@ -290,7 +290,7 @@ params: de: Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. Bei führenden Nullen bitte in doppelte Hochkommata setzen. presets: - vehiclebase: + vehicle-base: params: - name: title - name: user @@ -308,30 +308,7 @@ presets: default: 15m advanced: true type: duration - render: | - {{define "vehicle-base"}} - {{- if ne .title "" }} - title: {{ .title }} - {{- end }} - {{- if ne .icon "" }} - icon: {{ .icon }} - {{- end }} - user: {{ .user }} - password: {{ .password }} - {{- if ne .capacity "" }} - capacity: {{ .capacity }} - {{- end }} - {{- if ne .vin "" }} - vin: {{ .vin }} - {{- end }} - {{- if ne .phases "" }} - phases: {{ .phases }} - {{- end }} - {{- if ne .cache "" }} - cache: {{ .cache }} - {{- end }} - {{end}} - vehicleidentify: + vehicle-identify: params: - name: mode advanced: true @@ -348,64 +325,17 @@ presets: type: stringlist - name: priority advanced: true - render: | - {{define "vehicle-identify"}} - {{- if or (ne .mode "") (ne .minSoc "") (ne .targetSoc "") (ne .minCurrent "") (ne .maxCurrent "") (ne .priority "") }} - onIdentify: - {{- if (ne .mode "") }} - mode: {{ .mode }} - {{- end }} - {{- if (ne .minSoc "") }} - minSoc: {{ .minSoc }} - {{- end }} - {{- if (ne .targetSoc "") }} - targetSoc: {{ .targetSoc }} - {{- end }} - {{- if (ne .minCurrent "") }} - minCurrent: {{ .minCurrent }} - {{- end }} - {{- if (ne .maxCurrent "") }} - maxCurrent: {{ .maxCurrent }} - {{- end }} - {{- if (ne .priority "") }} - - priority: {{ .priority }} - {{- end }} - {{- end }} - {{- if ne (len .identifiers) 0 }} - identifiers: - {{- range .identifiers }} - - {{ . }} - {{- end }} - {{- end }} - {{end}} - vehiclelanguage: + vehicle-language: params: - name: language - render: | - {{define "vehicle-language"}} - language: {{ .language }} - {{end}} - eebusmeter: + eebus-meter: params: - name: ski - name: ip - render: | - {{define "eebus-meter"}} - type: eebus - ski: {{ .ski }} - {{ if ne .ip "" }}ip: {{ .ip }}{{ end }} - meter: true - {{end}} - eebusnometer: + eebus-no-meter: params: - name: ski - name: ip - render: | - {{define "eebus-no-meter"}} - type: eebus - ski: {{ .ski }} - {{ if ne .ip "" }}ip: {{ .ip }}{{ end }} - {{end}} switchsocket: params: - name: integrateddevice @@ -416,9 +346,6 @@ presets: en: Integrated device (no vehicle connection) - name: icon advanced: true - render: | - {{ if eq .integrateddevice "true" }}features: ["integrateddevice"]{{ end }} - {{ if ne .icon "" }}icon: {{ .icon }}{{ end }} modbus: interfaces: diff --git a/util/templates/template_documentation.go b/util/templates/documentation.go similarity index 97% rename from util/templates/template_documentation.go rename to util/templates/documentation.go index 050fd277f..0ff65dc9b 100644 --- a/util/templates/template_documentation.go +++ b/util/templates/documentation.go @@ -96,10 +96,9 @@ func (t *Template) RenderDocumentation(product Product, values map[string]interf } tmpl, err := template.New("yaml").Funcs(template.FuncMap(sprig.FuncMap())).Parse(documentationTmpl) - if err != nil { - panic(err) + if err == nil { + err = tmpl.Execute(out, data) } - err = tmpl.Execute(out, data) // trim empty lines with whitespace regex, _ := regexp.Compile("\n *\n") diff --git a/util/templates/includes/eebus-meter.tpl b/util/templates/includes/eebus-meter.tpl new file mode 100644 index 000000000..9584e9332 --- /dev/null +++ b/util/templates/includes/eebus-meter.tpl @@ -0,0 +1,6 @@ +{{define "eebus-meter"}} +type: eebus +ski: {{ .ski }} +{{ if ne .ip "" }}ip: {{ .ip }}{{ end }} +meter: true +{{end}} diff --git a/util/templates/includes/eebus-no-meter.tpl b/util/templates/includes/eebus-no-meter.tpl new file mode 100644 index 000000000..07482eddc --- /dev/null +++ b/util/templates/includes/eebus-no-meter.tpl @@ -0,0 +1,5 @@ +{{define "eebus-no-meter"}} +type: eebus +ski: {{ .ski }} +{{ if ne .ip "" }}ip: {{ .ip }}{{ end }} +{{end}} diff --git a/util/templates/includes/switchsocket.tpl b/util/templates/includes/switchsocket.tpl new file mode 100644 index 000000000..b30f61df1 --- /dev/null +++ b/util/templates/includes/switchsocket.tpl @@ -0,0 +1,4 @@ +{{define "switchsocket"}} +{{ if eq .integrateddevice "true" }}features: ["integrateddevice"]{{ end }} +{{ if ne .icon "" }}icon: {{ .icon }}{{ end }} +{{end}} diff --git a/util/templates/includes/vehicle-base.tpl b/util/templates/includes/vehicle-base.tpl new file mode 100644 index 000000000..7c3851323 --- /dev/null +++ b/util/templates/includes/vehicle-base.tpl @@ -0,0 +1,22 @@ +{{define "vehicle-base"}} +{{- if ne .title "" }} +title: {{ .title }} +{{- end }} +{{- if ne .icon "" }} +icon: {{ .icon }} +{{- end }} +user: {{ .user }} +password: {{ .password }} +{{- if ne .capacity "" }} +capacity: {{ .capacity }} +{{- end }} +{{- if ne .vin "" }} +vin: {{ .vin }} +{{- end }} +{{- if ne .phases "" }} +phases: {{ .phases }} +{{- end }} +{{- if ne .cache "" }} +cache: {{ .cache }} +{{- end }} +{{end}} diff --git a/util/templates/includes/vehicle-identify.tpl b/util/templates/includes/vehicle-identify.tpl new file mode 100644 index 000000000..ca54083eb --- /dev/null +++ b/util/templates/includes/vehicle-identify.tpl @@ -0,0 +1,29 @@ +{{define "vehicle-identify"}} +{{- if or (ne .mode "") (ne .minSoc "") (ne .targetSoc "") (ne .minCurrent "") (ne .maxCurrent "") (ne .priority "") }} +onIdentify: +{{- if (ne .mode "") }} + mode: {{ .mode }} +{{- end }} +{{- if (ne .minSoc "") }} + minSoc: {{ .minSoc }} +{{- end }} +{{- if (ne .targetSoc "") }} + targetSoc: {{ .targetSoc }} +{{- end }} +{{- if (ne .minCurrent "") }} + minCurrent: {{ .minCurrent }} +{{- end }} +{{- if (ne .maxCurrent "") }} + maxCurrent: {{ .maxCurrent }} +{{- end }} +{{- if (ne .priority "") }} +- priority: {{ .priority }} +{{- end }} +{{- end }} +{{- if ne (len .identifiers) 0 }} +identifiers: +{{- range .identifiers }} +- {{ . }} +{{- end }} +{{- end }} +{{end}} diff --git a/util/templates/includes/vehicle-language.tpl b/util/templates/includes/vehicle-language.tpl new file mode 100644 index 000000000..92b034cf6 --- /dev/null +++ b/util/templates/includes/vehicle-language.tpl @@ -0,0 +1,3 @@ +{{define "vehicle-language"}} +language: {{ .language }} +{{end}} diff --git a/util/templates/init.go b/util/templates/init.go index 57623b3c8..750f6a3b2 100644 --- a/util/templates/init.go +++ b/util/templates/init.go @@ -2,10 +2,12 @@ package templates import ( "bytes" + "embed" "fmt" "io/fs" "path" "sync" + "text/template" "github.com/evcc-io/evcc/templates/definition" "golang.org/x/exp/slices" @@ -13,15 +15,22 @@ import ( ) var ( - templates = make(map[Class][]Template) - configDefaults = ConfigDefaults{} + //go:embed includes/*.tpl + includeFS embed.FS + // baseTmpl holds all included template definitions + baseTmpl *template.Template + + templates = make(map[Class][]Template) + ConfigDefaults configDefaults mu sync.Mutex encoderLanguage string ) func init() { - configDefaults.LoadDefaults() + ConfigDefaults.Load() + + baseTmpl = template.Must(template.ParseFS(includeFS, "includes/*.tpl")) loadTemplates(Charger) loadTemplates(Meter) @@ -40,7 +49,6 @@ func FromBytes(b []byte) (Template, error) { tmpl := Template{ TemplateDefinition: definition, - ConfigDefaults: configDefaults, } err := tmpl.ResolvePresets() diff --git a/util/templates/template.go b/util/templates/template.go index e47b62c43..51d1c9a29 100644 --- a/util/templates/template.go +++ b/util/templates/template.go @@ -16,8 +16,6 @@ import ( type Template struct { TemplateDefinition - ConfigDefaults ConfigDefaults `json:"-"` - title string titles []string } @@ -31,7 +29,7 @@ func (t *Template) GuidedSetupEnabled() bool { // UpdateParamWithDefaults adds default values to specific param name entries func (t *Template) UpdateParamsWithDefaults() error { for i, p := range t.Params { - if index, resultMapItem := t.ConfigDefaults.ParamByName(strings.ToLower(p.Name)); index > -1 { + if index, resultMapItem := ConfigDefaults.ParamByName(strings.ToLower(p.Name)); index > -1 { t.Params[i].OverwriteProperties(resultMapItem) } } @@ -115,7 +113,7 @@ func (t *Template) ResolvePresets() error { t.Params = []Param{} for _, p := range currentParams { if p.Preset != "" { - base, ok := t.ConfigDefaults.Presets[p.Preset] + base, ok := ConfigDefaults.Presets[p.Preset] if !ok { return fmt.Errorf("could not find preset definition: %s", p.Preset) } @@ -142,7 +140,7 @@ func (t *Template) ResolveGroup() error { return nil } - _, ok := t.ConfigDefaults.DeviceGroups[t.Group] + _, ok := ConfigDefaults.DeviceGroups[t.Group] if !ok { return fmt.Errorf("could not find devicegroup definition: %s", t.Group) } @@ -152,7 +150,7 @@ func (t *Template) ResolveGroup() error { // return the language specific group title func (t *Template) GroupTitle(lang string) string { - tl := t.ConfigDefaults.DeviceGroups[t.Group] + tl := ConfigDefaults.DeviceGroups[t.Group] return tl.String(lang) } @@ -277,13 +275,6 @@ func (t *Template) RenderResult(renderMode string, other map[string]interface{}) t.ModbusValues(renderMode, values) - // add the common templates - for _, v := range t.ConfigDefaults.Presets { - if !strings.Contains(t.Render, v.Render) { - t.Render += "\n" + v.Render - } - } - res := make(map[string]interface{}) // TODO this is an utterly horrible hack @@ -350,7 +341,10 @@ func (t *Template) RenderResult(renderMode string, other map[string]interface{}) }, } - tmpl, err := tmpl.Funcs(template.FuncMap(sprig.FuncMap())).Funcs(funcMap).Parse(t.Render) + tmpl, err := baseTmpl.Clone() + if err == nil { + tmpl, err = tmpl.Funcs(sprig.FuncMap()).Funcs(funcMap).Parse(t.Render) + } if err != nil { return nil, res, err } diff --git a/util/templates/template_modbus.go b/util/templates/template_modbus.go index b4303c272..e505ced82 100644 --- a/util/templates/template_modbus.go +++ b/util/templates/template_modbus.go @@ -28,7 +28,7 @@ func (t *Template) ModbusParams(modbusType string, values map[string]interface{} return } - modbusParams := t.ConfigDefaults.Modbus.Types[values[ParamModbus].(string)].Params + modbusParams := ConfigDefaults.Modbus.Types[values[ParamModbus].(string)].Params // add the modbus params at the beginning t.Params = append(modbusParams, t.Params...) @@ -46,7 +46,7 @@ func (t *Template) ModbusValues(renderMode string, values map[string]interface{} t.Render = fmt.Sprintf("%s\n%s", t.Render, modbusTmpl) } - modbusConfig := t.ConfigDefaults.Modbus + modbusConfig := ConfigDefaults.Modbus _, modbusParam := t.ParamByName(ParamModbus) modbusInterfaces := []string{}