diff --git a/.gitignore b/.gitignore index 4f8d1dbce..b0806936c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ __debug_bin *.json *.yaml !templates/**/*.yaml +!templates/**/*-schema.json !util/templates/**/*.yaml !package*.json !evcc.dist.yaml diff --git a/charger/template_test.go b/charger/template_test.go index aba9f5bb1..70df77c28 100644 --- a/charger/template_test.go +++ b/charger/template_test.go @@ -25,7 +25,8 @@ var acceptable = []string{ "can only have either uri or device", // modbus "sponsorship required, see https://github.com/evcc-io/evcc#sponsorship", "eebus not configured", - "unexpected status: 400", // easee + "Get \"http://192.0.2.2/shelly\": context deadline exceeded", // shelly + "unexpected status: 400", // easee "Get \"http://192.0.2.2/getParameters\": context deadline exceeded", // evsewifi } diff --git a/cmd/configure/helper.go b/cmd/configure/helper.go index d3dafdd5c..df7699d81 100644 --- a/cmd/configure/helper.go +++ b/cmd/configure/helper.go @@ -1,6 +1,7 @@ package configure import ( + "bufio" "fmt" "sort" "strings" @@ -80,6 +81,26 @@ func (c *CmdConfigure) processDeviceValues(values map[string]interface{}, templa templateItem.Params = append(templateItem.Params, templates.Param{Name: "name", Value: device.Name}) if !c.expandedMode { + for index, param := range templateItem.Params { + // reduce help texts to one line and add ... + help := param.Help.String(c.lang) + if help != "" { + scanner := bufio.NewScanner(strings.NewReader(help)) + line := 0 + for scanner.Scan() { + if line == 0 { + help = scanner.Text() + } else { + help += "..." + break + } + } + if help != param.Help.String(c.lang) { + templateItem.Params[index].Help.SetString(c.lang, help) + } + } + } + b, err := templateItem.RenderProxyWithValues(values, c.lang) if err != nil { c.addedDeviceIndex-- @@ -128,7 +149,7 @@ func (c *CmdConfigure) processDeviceRequirements(templateItem templates.Template // check if sponsorship is required if funk.ContainsString(templateItem.Requirements.EVCC, templates.RequirementSponsorship) && c.configuration.config.SponsorToken == "" { - if err := c.askSponsortoken(true); err != nil { + if err := c.askSponsortoken(true, false); err != nil { return err } } @@ -183,17 +204,47 @@ func (c *CmdConfigure) processDeviceRequirements(templateItem templates.Template return nil } -func (c *CmdConfigure) askSponsortoken(required bool) error { +// processParamRequirements handles param requirements +func (c *CmdConfigure) processParamRequirements(param templates.Param) error { + requirementDescription := stripmd.Strip(param.Requirements.Description.String(c.lang)) + if len(requirementDescription) > 0 { + fmt.Println() + fmt.Println("-------------------------------------------------") + fmt.Println(c.localizedString("Requirements_Title", nil)) + fmt.Println(requirementDescription) + if len(param.Requirements.URI) > 0 { + fmt.Println(" " + c.localizedString("Requirements_More", nil) + " " + param.Requirements.URI) + } + fmt.Println("-------------------------------------------------") + } + + // check if sponsorship is required + if funk.ContainsString(param.Requirements.EVCC, templates.RequirementSponsorship) && c.configuration.config.SponsorToken == "" { + if err := c.askSponsortoken(true, true); err != nil { + return err + } + } + + return nil +} + +func (c *CmdConfigure) askSponsortoken(required bool, feature bool) error { fmt.Println("-- Sponsorship -----------------------------") if required { fmt.Println() - fmt.Println(c.localizedString("Requirements_Sponsorship_Title", nil)) + if feature { + fmt.Println(c.localizedString("Requirements_Sponsorship_Feature_Title", nil)) + } else { + fmt.Println(c.localizedString("Requirements_Sponsorship_Title", nil)) + } } else { fmt.Println() fmt.Println(c.localizedString("Requirements_Sponsorship_Optional_Title", nil)) } fmt.Println() if !c.askYesNo(c.localizedString("Requirements_Sponsorship_Token", nil)) { + fmt.Println() + fmt.Println("--------------------------------------------") return c.errItemNotPresent } @@ -201,12 +252,16 @@ func (c *CmdConfigure) askSponsortoken(required bool) error { label: c.localizedString("Requirements_Sponsorship_Token_Input", nil), mask: true, required: true}) - c.configuration.config.SponsorToken = sponsortoken - sponsor.Subject = sponsortoken + + err := sponsor.ConfigureSponsorship(sponsortoken) + if err != nil { + c.configuration.config.SponsorToken = sponsortoken + } + fmt.Println() fmt.Println("--------------------------------------------") - return nil + return err } func (c *CmdConfigure) configureMQTT(templateItem templates.Template) (map[string]interface{}, error) { @@ -423,9 +478,18 @@ func (c *CmdConfigure) processParams(templateItem *templates.Template, deviceCat switch param.ValueType { case templates.ParamValueTypeStringList: - additionalConfig[param.Name] = c.processListInputConfig(param) + values := c.processListInputConfig(param) + var nonEmptyValues []string + for _, value := range values { + if value != "" { + nonEmptyValues = append(nonEmptyValues, value) + } + } + additionalConfig[param.Name] = nonEmptyValues default: - additionalConfig[param.Name] = c.processInputConfig(param) + if value := c.processInputConfig(param); value != "" { + additionalConfig[param.Name] = value + } } } } @@ -462,14 +526,28 @@ func (c *CmdConfigure) processInputConfig(param templates.Param) string { label = langLabel } - return c.askValue(question{ + help := param.Help.String(c.lang) + if funk.ContainsString(param.Requirements.EVCC, templates.RequirementSponsorship) { + help = fmt.Sprintf("%s\n\n%s", help, c.localizedString("Requirements_Sponsorship_Feature_Title", nil)) + } + + value := c.askValue(question{ label: label, defaultValue: param.Default, exampleValue: param.Example, - help: param.Help.String(c.lang), + help: help, valueType: param.ValueType, + validValues: param.ValidValues, mask: param.Mask, required: param.Required}) + + if param.ValueType == templates.ParamValueTypeBool && value == "true" { + if err := c.processParamRequirements(param); err != nil { + return "false" + } + } + + return value } // handle user input for a device modbus configuration diff --git a/cmd/configure/localization/de.toml b/cmd/configure/localization/de.toml index cf71e2712..b63e47a74 100644 --- a/cmd/configure/localization/de.toml +++ b/cmd/configure/localization/de.toml @@ -75,6 +75,7 @@ Requirements_More = "Weitere Informationen:" Requirements_Sponsorship_Title = "Dieses Gerät benötigt ein Sponsorship von evcc. Wie das funktioniert und was ist, findest du hier: https://docs.evcc.io/docs/sponsorship" Requirements_Sponsorship_Optional_Title = "Die Entwicklung von evcc kann über Sponsoring unterstützt werden. Wie das funktioniert und was ist, findest du hier: https://docs.evcc.io/docs/sponsorship" +Requirements_Sponsorship_Feature_Title = "Dies Verwendung dieser Funktionalität benötigt ein Sponsorship von evcc. Wie das funktioniert und was ist, findest du hier: https://docs.evcc.io/docs/sponsorship" Requirements_Sponsorship_Token = "Bist du ein Sponsor?" Requirements_Sponsorship_Token_Input = "Bitte gib das Sponsortoken ein" @@ -90,9 +91,11 @@ Config_No = "Nein" Cancel = "Die Konfiguration wurde abgebrochen.\n\nFalls diese geführte Konfiguration für dich noch nicht funktioniert, versuche es doch mal mit der manuellen Konfiguration. Details findest du auf der folgenden Webseite: https://docs.evcc.io/docs/\n" InputError = "Bei der Eingabe ist ein Fehler aufgetreten:" +Value_Help = "Hilfe:" Value_Required = "erforderlich" Value_Optional = "optional" Value_Sample = "Beispiel" +ValueError_Invalid = "Ungültiger Wert" ValueError_Used = "Dieser Wert wird bereits verwendet." ValueError_Empty = "Der Wert darf nicht leer sein." ValueError_Float = "Der Wert muss eine Zahl sein. Nachkommastellen mit . anstatt mit , trennen." diff --git a/cmd/configure/localization/en.toml b/cmd/configure/localization/en.toml index cf77e9ef1..a23c07a25 100644 --- a/cmd/configure/localization/en.toml +++ b/cmd/configure/localization/en.toml @@ -75,6 +75,7 @@ Requirements_More = "Additional information:" Requirements_Sponsorship_Title = "This device requires an evcc sponsorship. Check the following link for what this is and how it works: https://docs.evcc.io/docs/sponsorship" Requirements_Sponsorship_Optional_Title = "The development of evcc can be supported via sponsoring. Check the following link for what this is and how it works: https://docs.evcc.io/docs/sponsorship" +Requirements_Sponsorship_Feature_Title = "To use this feature a evcc sponsorship is required. Check the following link for what this is and how it works: https://docs.evcc.io/docs/sponsorship" Requirements_Sponsorship_Token = "Are you already a sponsor?" Requirements_Sponsorship_Token_Input = "Please enter the sponsortoken" @@ -90,9 +91,11 @@ Config_No = "No" Cancel = "The configuration was cancelled.\n\nIf this guided configuration process doesn't work for you yet, please try the manual configuration. You can find more details about that on our website: https://docs.evcc.io/docs/\n" InputError = "An input error occurred:" +Value_Help = "Help:" Value_Required = "required" Value_Optional = "optional" Value_Sample = "Example" +ValueError_Invalid = "This value is invalid" ValueError_Used = "This value is aready in use." ValueError_Empty = "The value may not be empty." ValueError_Float = "The value has to be a number." diff --git a/cmd/configure/main.go b/cmd/configure/main.go index edd272f6a..a6d91ef15 100644 --- a/cmd/configure/main.go +++ b/cmd/configure/main.go @@ -166,7 +166,7 @@ func (c *CmdConfigure) flowNewConfigFile() { } if c.advancedMode && c.configuration.config.SponsorToken == "" { - _ = c.askSponsortoken(false) + _ = c.askSponsortoken(false, false) } yaml, err := c.configuration.RenderConfiguration() diff --git a/cmd/configure/survey.go b/cmd/configure/survey.go index ce1b5193e..941a6d362 100644 --- a/cmd/configure/survey.go +++ b/cmd/configure/survey.go @@ -12,6 +12,7 @@ import ( "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util/templates" "github.com/thoas/go-funk" + stripmd "github.com/writeas/go-strip-markdown" ) // surveyAskOne asks the user for input @@ -107,6 +108,7 @@ type question struct { label, help string defaultValue, exampleValue string invalidValues []string + validValues []string valueType string minNumberValue, maxNumberValue int64 mask, required bool @@ -127,7 +129,11 @@ func (c *CmdConfigure) askValue(q question) string { if q.valueType == templates.ParamValueTypeBool { label := q.label if q.help != "" { - label = q.help + helpDescription := stripmd.Strip(q.help) + fmt.Println("-------------------------------------------------") + fmt.Println(c.localizedString("Value_Help", nil)) + fmt.Println(helpDescription) + fmt.Println("-------------------------------------------------") } return c.askBoolValue(label) @@ -159,6 +165,10 @@ func (c *CmdConfigure) askValue(q question) string { return errors.New(c.localizedString("ValueError_Used", nil)) } + if q.validValues != nil && !funk.ContainsString(q.validValues, value) { + return errors.New(c.localizedString("ValueError_Invalid", nil)) + } + if q.required && len(value) == 0 { return errors.New(c.localizedString("ValueError_Empty", nil)) } diff --git a/cmd/setup.go b/cmd/setup.go index 068c89dcd..02f3b22c4 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -1,7 +1,6 @@ package cmd import ( - "context" "errors" "fmt" "math/rand" @@ -10,7 +9,6 @@ import ( paho "github.com/eclipse/paho.mqtt.golang" "github.com/evcc-io/evcc/api" - "github.com/evcc-io/evcc/api/proto/pb" "github.com/evcc-io/evcc/cmd/shutdown" "github.com/evcc-io/evcc/core" "github.com/evcc-io/evcc/core/loadpoint" @@ -21,13 +19,10 @@ import ( "github.com/evcc-io/evcc/server" "github.com/evcc-io/evcc/tariff" "github.com/evcc-io/evcc/util" - "github.com/evcc-io/evcc/util/cloud" "github.com/evcc-io/evcc/util/pipe" "github.com/evcc-io/evcc/util/sponsor" "github.com/spf13/viper" "golang.org/x/text/currency" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) func init() { @@ -52,7 +47,7 @@ func loadConfigFile(cfgFile string) (conf config, err error) { func configureEnvironment(conf config) (err error) { // setup sponsorship if conf.SponsorToken != "" { - err = configureSponsorship(conf.SponsorToken) + err = sponsor.ConfigureSponsorship(conf.SponsorToken) } // setup mqtt client listener @@ -73,36 +68,6 @@ func configureEnvironment(conf config) (err error) { return } -func configureSponsorship(token string) error { - host := util.Getenv("GRPC_URI", cloud.Host) - conn, err := cloud.Connection(host) - if err != nil { - return err - } - - client := pb.NewAuthClient(conn) - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - res, err := client.IsAuthorized(ctx, &pb.AuthRequest{Token: token}) - if err == nil && res.Authorized { - sponsor.Subject = res.Subject - sponsor.Token = token - } - - if err != nil { - if s, ok := status.FromError(err); ok && s.Code() != codes.Unknown { - sponsor.Subject = "sponsorship unavailable" - err = nil - } else { - err = fmt.Errorf("sponsortoken: %w", err) - } - } - - return err -} - // setup influx database func configureDatabase(conf server.InfluxConfig, loadPoints []loadpoint.API, in <-chan util.Param) { influx := server.NewInfluxClient( diff --git a/templates/README.md b/templates/README.md index f5805f324..f6df4d1d9 100644 --- a/templates/README.md +++ b/templates/README.md @@ -108,9 +108,9 @@ Example Use Case: With SMA Home Manager, there can be a SMA Energy Meter used fo `params` describes the set of parameters the user needs to provide a value for. -## `base` +## `preset` -`base` reference value of a predefined params set defined in `parambaselist.yaml`, so these params don't need to be redefined in each template. The `example` and `default` values for each predefined value can be overwritten. +`preset` reference value of a predefined params set defined in `parambaselist.yaml`, so these params don't need to be redefined in each template. The `example` and `default` values for each predefined value can be overwritten. ### `name` diff --git a/templates/definition/charger/heidelberg.yaml b/templates/definition/charger/heidelberg.yaml index 93b11e4ec..8eab6e04f 100644 --- a/templates/definition/charger/heidelberg.yaml +++ b/templates/definition/charger/heidelberg.yaml @@ -1,5 +1,5 @@ template: heidelberg -products: +products: - brand: Heidelberg description: generic: Energy Control (Modbus RTU) diff --git a/templates/definition/common-schema.json b/templates/definition/common-schema.json new file mode 100644 index 000000000..e60102423 --- /dev/null +++ b/templates/definition/common-schema.json @@ -0,0 +1,284 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "title": "EVCC common templates schema", + "definitions": { + "LanguageText": { + "type": "object", + "additionalProperties": false, + "properties": { + "generic": { + "type": "string" + }, + "de": { + "type": "string" + }, + "en": { + "type": "string" + } + }, + "oneOf": [ + {"required": ["generic"]}, + {"required": ["de", "en"]} + ], + "title": "LanguageText" + }, + "Requirements": { + "type": "object", + "additionalProperties": false, + "properties": { + "evcc": { + "type": "array", + "items": { + "type": "string", + "enum": ["sponsorship", "eebus", "mqtt"] + } + }, + "description": { + "$ref": "#/definitions/LanguageText" + }, + "uri": { + "type": "string", + "format": "uri" + } + }, + "anyOf":[ + {"required": ["evcc"]}, + {"required": ["description"]} + ], + "title": "Requirements" + }, + "ParamDevice": { + "anyOf": [ + {"$ref": "#/definitions/ParamTemplate"}, + {"$ref": "#/definitions/ParamUsage"}, + {"$ref": "#/definitions/ParamModbus"} + ] + }, + "ParamUsage": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "value": "usage" + }, + "choice": { + "type": "array", + "items": { + "type": "string", + "enum": ["charge", "grid", "pv", "battery"] + } + } + }, + "required": [ + "name", + "choice" + ], + "title": "ParamUsage" + }, + "ParamModbus": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "value": "modbus" + }, + "choice": { + "type": "array", + "items": { + "type": "string", + "enum": ["tcpip", "rs485"] + } + }, + "id": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "baudrate": { + "type": "integer", + "enum": [9600, 19200, 38400, 57600, 115200] + }, + "comset": { + "enum": [8E1, "8N1"] + }, + "help": { + "$ref": "#/definitions/LanguageText" + } + }, + "required": [ + "name", + "choice" + ], + "title": "ParamModbus" + }, + "ParamTemplate": { + "type": "object", + "additionalProperties": false, + "properties": { + "preset": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "mask": { + "type": "boolean" + }, + "required": { + "type": "boolean" + }, + "advanced": { + "type": "boolean" + }, + "hidden": { + "type": "boolean" + }, + "example": { + "minLength": 1 + }, + "default": { + "minLength": 1 + }, + "deprecated": { + "type": "boolean" + }, + "valuetype": { + "type": "string", + "enum": ["string", "bool", "number", "float", "stringlist", "chargemodes", "duration"] + }, + "validvalues": { + "type": "array", + "items": { + "type": "string" + } + }, + "choice": { + "type": "array", + "items": { + "type": "string" + } + }, + "dependencies": { + "type": "array", + "items": { + "$ref": "#/definitions/ParamDependency" + } + }, + "description": { + "$ref": "#/definitions/LanguageText" + }, + "help": { + "$ref": "#/definitions/LanguageText" + }, + "requirements": { + "$ref": "#/definitions/Requirements" + } + }, + "oneOf": [ + {"required": ["name"]}, + {"required": ["preset"]} + ], + "title": "ParamTemplate" + }, + "ParamDefaults": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "reference": { + "type": "boolean" + }, + "referencename": { + "type": "string", + "minLength": 1 + }, + "mask": { + "type": "boolean" + }, + "required": { + "type": "boolean" + }, + "advanced": { + "type": "boolean" + }, + "hidden": { + "type": "boolean" + }, + "example": { + "minLength": 1 + }, + "default": { + "minLength": 1 + }, + "valuetype": { + "type": "string", + "enum": ["string", "bool", "number", "float", "stringlist", "chargemodes", "duration"] + }, + "validvalues": { + "type": "array", + "items": { + "type": "string" + } + }, + "dependencies": { + "type": "array", + "items": { + "$ref": "#/definitions/ParamDependency" + } + }, + "description": { + "$ref": "#/definitions/LanguageText" + }, + "help": { + "$ref": "#/definitions/LanguageText" + }, + "requirements": { + "$ref": "#/definitions/Requirements" + } + }, + "required": ["name"], + "title": "ParamDefaults" + }, + "ParamDependency": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "check": { + "type": "string", + "enum": ["empty", "notempty", "equal"] + }, + "value": { + "minLength": 1 + } + }, + "required": [ + "name", + "check" + ], + "anyOf": [ + { + "properties": { + "check": { + "value": "equal" + } + }, + "required": ["value"] + }, + {"required": ["check"]} + ], + "title": "ParamDependency" + } + } +} diff --git a/templates/definition/defaults-schema.json b/templates/definition/defaults-schema.json new file mode 100644 index 000000000..acd82e9b4 --- /dev/null +++ b/templates/definition/defaults-schema.json @@ -0,0 +1,147 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "title": "EVCC defaults configuration schema", + "$ref": "#/definitions/root", + "definitions": { + "root": { + "type": "object", + "additionalProperties": false, + "properties": { + "params": { + "type": "array", + "items": { + "$ref": "common-schema.json#/definitions/ParamDefaults" + } + }, + "presets": { + "$ref": "#/definitions/Presets" + }, + "modbus": { + "$ref": "#/definitions/Modbus" + }, + "devicegroups": { + "$ref": "#/definitions/Devicegroups" + } + }, + "required": [ + "devicegroups", + "modbus", + "params", + "presets" + ], + "title": "Defaults" + }, + "Devicegroups": { + "type": "object", + "additionalProperties": false, + "properties": { + "generic": { + "$ref": "#/definitions/Generic" + }, + "switchsockets": { + "$ref": "#/definitions/Generic" + }, + "sockets": { + "$ref": "#/definitions/Generic" + } + }, + "required": [ + "generic", + "sockets", + "switchsockets" + ], + "title": "Devicegroups" + }, + "Generic": { + "type": "object", + "additionalProperties": false, + "properties": { + "de": { + "type": "string" + }, + "en": { + "type": "string" + } + }, + "required": [ + "de", + "en" + ], + "title": "Generic" + }, + "Modbus": { + "type": "object", + "additionalProperties": false, + "properties": { + "interfaces": { + "$ref": "#/definitions/Interfaces" + }, + "types": { + "$ref": "#/definitions/Types" + } + }, + "required": [ + "interfaces", + "types" + ], + "title": "Modbus" + }, + "Interfaces": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-z]": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "title": "Interfaces" + }, + "Types": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-z]": { + "type": "object", + "$ref": "#/definitions/TypeElement" + } + }, + "title": "Types" + }, + "TypeElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "description": { + "$ref": "common-schema.json#/definitions/LanguageText" + }, + "params": { + "type": "array", + "items": { + "$ref": "common-schema.json#/definitions/ParamDefaults" + } + } + } + }, + "Presets": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-z]": { + "type": "object", + "properties": { + "params": { + "type": "array", + "items": { + "$ref": "common-schema.json#/definitions/ParamTemplate" + } + } + } + } + }, + "title": "Presets" + } + } +} \ No newline at end of file diff --git a/templates/definition/defaults.yaml b/templates/definition/defaults.yaml index 9e7601734..cc63c6e5a 100644 --- a/templates/definition/defaults.yaml +++ b/templates/definition/defaults.yaml @@ -101,6 +101,30 @@ params: de: Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll en: Time interval with when data should be reloaded from the vehicle example: 5m +- name: cloud + description: + de: evcc Cloud + en: evcc Cloud + help: + de: | + Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen, + wird dies über die evcc Cloud gemacht. Die Zugangsdaten und VIN werden sicher und verschlüsselt + übertragen und in der Cloud nicht gespeichert. + + Die Vorteile sind: + - Falls sich etwas an der Online API des Fahrzeugherstellers ändert, können Updates für alle Benutzer viel schneller zur Verfügung gestellt werden + - Man muss nicht auf eine neue Version von evcc warten und dann ein lokales Update von evcc durchführen + en: | + Instead of connecting to the vehicle manufacturers online API from your local installation, + this will use the evcc Cloud instead. Your credentials and VIN will be transfered encrypted and + securely and won't be stored in the cloud. + + The benefits are: + - If the vehicles online API changes, we can update this for all users more quickly + - No waiting for a new evcc version in this case and then requiring an update + requirements: + evcc: ["sponsorship"] + valuetype: bool - name: timeout description: de: Zeitüberschreitung @@ -170,6 +194,15 @@ params: de: Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet en: Power values above this value will be considered as charging pow valuetype: number +- name: language + description: + de: Sprache + en: Language + help: + de: "'de' für Deutsch und 'en' für Englisch" + en: "'en' for English and 'de' for German" + default: en + validvalues: ["de", "en"] presets: vehiclebase: @@ -220,7 +253,7 @@ presets: advanced: true - name: identifiers advanced: true - valueType: stringlist + valuetype: stringlist render: | {{define "vehicle-identify"}} {{- if or (ne .mode "") (ne .minSoC "") (ne .targetSoC "") (ne .minCurrent "") (ne .maxCurrent "") }} @@ -248,6 +281,21 @@ presets: {{- end }} {{- end }} {{end}} + vehiclelanguage: + params: + - name: language + render: | + {{define "vehicle-language"}} + language: {{ .language }} + {{end}} + + vehiclecloud: + params: + - name: cloud + render: | + {{define "vehicle-cloud"}} + cloud: {{ .cloud }} + {{end}} modbus: interfaces: diff --git a/templates/definition/devices-schema.json b/templates/definition/devices-schema.json new file mode 100644 index 000000000..b0c5193e6 --- /dev/null +++ b/templates/definition/devices-schema.json @@ -0,0 +1,126 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "title": "EVCC device templates schema", + "$ref": "#/definitions/root", + "definitions": { + "root": { + "type": "object", + "additionalProperties": false, + "properties": { + "template": { + "$": "#/definitions/Template" + }, + "products": { + "type": "array", + "items": { + "$ref": "#/definitions/Product" + } + }, + "group": { + "$ref": "#/definitions/Groups" + }, + "guidedsetup": { + "$ref": "#/definitions/GuidedSetup" + }, + "capabilities": { + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + "requirements": { + "$ref": "common-schema.json#/definitions/Requirements" + }, + "params": { + "type": "array", + "items": { + "$ref": "common-schema.json#/definitions/ParamDevice" + } + }, + "render": { + "type": "string" + } + }, + "required": [ + "template", + "products", + "params", + "render" + ] + }, + "Template": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "title": "Template" + }, + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "brand": { + "type": "string" + }, + "description": { + "$ref": "common-schema.json#/definitions/LanguageText" + } + }, + "anyOf": [ + {"required": ["brand"]}, + {"required": ["description"]} + ], + "title": "Product" + }, + "Groups": { + "type": "string", + "enum": ["generic", "switchsockets", "sockets"] + }, + "GuidedSetup": { + "type": "object", + "additionalProperties": false, + "properties": { + "enable": { + "type": "boolean" + }, + "linked": { + "type": "array", + "items": { + "$ref": "#/definitions/Linked" + } + } + }, + "required": ["enable"] + }, + "Linked": { + "type": "object", + "additionalProperties": false, + "properties": { + "template": { + "type": "string", + "minLength": 1 + }, + "usage": { + "type": "string", + "enum": ["grid", "pv", "battery"] + }, + "multiple": { + "type": "boolean" + }, + "excludetemplate": { + "type": "string", + "minLength": 1 + } + }, + "required": ["template", "usage"] + }, + "Capability": { + "type": "string", + "enum": ["1p3p", "iso151182", "rfid", "smahems"] + } + } +} \ No newline at end of file diff --git a/templates/definition/meter/kostal-plenticore.yaml b/templates/definition/meter/kostal-plenticore.yaml index 04e849527..ca83f20ac 100644 --- a/templates/definition/meter/kostal-plenticore.yaml +++ b/templates/definition/meter/kostal-plenticore.yaml @@ -19,10 +19,24 @@ params: id: 71 port: 1502 render: | - type: modbus - model: sunspec - {{ include "modbus" . }} + {{- if eq .usage "pv" }} + type: custom + power: + type: calc + add: # The add plugin sums up both string values + - type: modbus + model: sunspec + {{ include "modbus" . | indent 4 }} + value: 160:1:DCW # string 1 + - type: modbus + model: sunspec + {{ include "modbus" . | indent 4 }} + value: 160:2:DCW # string 2 + {{- end }} {{- if eq .usage "battery" }} + type: modbus + {{ include "modbus" . }} + model: sunspec power: 802:W # sunspec model 802 battery soc: 802:SoC # sunspec model 802 battery {{- end }} diff --git a/templates/definition/meter/solaredge-inverter.yaml b/templates/definition/meter/solaredge-inverter.yaml index c04d58351..d25f381d2 100644 --- a/templates/definition/meter/solaredge-inverter.yaml +++ b/templates/definition/meter/solaredge-inverter.yaml @@ -16,12 +16,14 @@ params: - name: timeout default: 3s render: | - type: modbus - model: sunspec - {{ include "modbus" . }} - timeout: {{ .timeout }} + type: custom + power: + source: modbus + model: sunspec + {{ include "modbus" . | indent 2 }} + timeout: {{ .timeout }} {{- if eq .usage "grid" }} - subdevice: 1 - power: 203:W # sunspec 3-phase meter power reading - scale: -1 + subdevice: 1 + value: 203:W # sunspec 3-phase meter power reading + scale: -1 {{- end -}} diff --git a/templates/definition/meter/solarlog.yaml b/templates/definition/meter/solarlog.yaml index 02130727b..bb661f00f 100644 --- a/templates/definition/meter/solarlog.yaml +++ b/templates/definition/meter/solarlog.yaml @@ -4,6 +4,14 @@ products: generic: Solarlog guidedsetup: enable: true +requirements: + description: + de: | + Wir empfehlen dieses Gerät für den Netzbezug/Einspeisewerte nur zu verwenden, wenn kein anderes Gerät diese Daten liefert. + Falls eine Hausbatterie angeschlossen ist sollte dieses Gerät auf keinen Fall für die erwähnten Werte verwendet werden! + en: | + We recommend to use this device for grid power values only, if no other device is available providing this data. + If you have a home battery installed, please do not use this device at all for grid power values. params: - name: usage choice: [ "grid", "pv" ] diff --git a/templates/definition/meter/solarwatt-myreserve-matrix.yaml b/templates/definition/meter/solarwatt-myreserve-matrix.yaml new file mode 100644 index 000000000..9081ad40a --- /dev/null +++ b/templates/definition/meter/solarwatt-myreserve-matrix.yaml @@ -0,0 +1,33 @@ +template: solarwatt-myreserve-matrix +products: +- brand: Solarwatt + description: + generic: MyReserve Matrix (LAN oder PowerGateway) +guidedsetup: + enable: true +params: +- name: usage + choice: [ "grid", "pv", "battery" ] +- name: host + required: true + example: 192.0.2.2 +- name: port + default: 8080 +render: | + type: custom + power: + source: http + uri: http://{{ .host }}:{{ .port }}/ + {{- if eq .usage "grid" }} + jq: .FData.PGrid + {{- end }} + {{- if eq .usage "pv" }} + jq: .FData.IBat * .FData.VBa * -1 + {{- end }} + {{- if eq .usage "battery" }} + jq: .FData.IBat * .FData.VBat + soc: + source: http + uri: http://{{ .host }}:{{ .port }}/ + jq: .SData.SoC + {{- end }} diff --git a/templates/definition/meter/sungrow.yaml b/templates/definition/meter/sungrow.yaml index bbffc50ae..4429f552c 100644 --- a/templates/definition/meter/sungrow.yaml +++ b/templates/definition/meter/sungrow.yaml @@ -13,23 +13,49 @@ params: render: | type: custom power: + {{- if eq .usage "grid" }} source: modbus {{include "modbus" . | indent 2}} register: type: input - {{- if eq .usage "grid" }} address: 13009 # Export power decode: int32s scale: -1 {{- end }} {{- if eq .usage "pv" }} + source: modbus + {{include "modbus" . | indent 2}} + register: + type: input address: 5016 # Total DC power decode: uint32s {{- end }} {{- if eq .usage "battery" }} - address: 13021 # Battery power - decode: int16 - #scale: -1 # charging sign form 13000 & 0x2 + source: calc + mul: + - source: modbus + {{include "modbus" . | indent 4}} + register: + type: holding + address: 13022 # Battery power + decode: int16 + - source: calc + add: + - source: modbus + {{include "modbus" . | indent 6}} + register: + type: holding + address: 13001 # Battery running state + decode: bool16 + bitmask: 2 # Charging + scale: -1 + - source: modbus + {{include "modbus" . | indent 6}} + register: + type: holding + address: 13001 # Battery running state + decode: bool16 + bitmask: 4 # Discharging soc: source: modbus {{include "modbus" . | indent 2}} diff --git a/templates/definition/vehicle/audi.yaml b/templates/definition/vehicle/audi.yaml index e78f354c1..98ed31fbd 100644 --- a/templates/definition/vehicle/audi.yaml +++ b/templates/definition/vehicle/audi.yaml @@ -8,7 +8,9 @@ params: example: WAUZZZ... - name: capacity default: 60 +- preset: vehiclecloud render: | type: audi {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/bmw.yaml b/templates/definition/vehicle/bmw.yaml index f7bdf8a5a..c226135bc 100644 --- a/templates/definition/vehicle/bmw.yaml +++ b/templates/definition/vehicle/bmw.yaml @@ -8,7 +8,9 @@ params: example: WBMW... - name: capacity default: 65 +- preset: vehiclecloud render: | type: bmw {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/carwings.yaml b/templates/definition/vehicle/carwings.yaml index fa6de328a..6d5d01e63 100644 --- a/templates/definition/vehicle/carwings.yaml +++ b/templates/definition/vehicle/carwings.yaml @@ -8,7 +8,9 @@ params: - preset: vehicleidentify - name: capacity default: 50 +- preset: vehiclecloud render: | type: carwings {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/citroen.yaml b/templates/definition/vehicle/citroen.yaml index 8e116ee85..ca9714136 100644 --- a/templates/definition/vehicle/citroen.yaml +++ b/templates/definition/vehicle/citroen.yaml @@ -6,7 +6,9 @@ params: - preset: vehicleidentify - name: capacity default: 50 +- preset: vehiclecloud render: | type: citroen {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/dacia.yaml b/templates/definition/vehicle/dacia.yaml index 6136592a5..ffad13f7d 100644 --- a/templates/definition/vehicle/dacia.yaml +++ b/templates/definition/vehicle/dacia.yaml @@ -6,7 +6,9 @@ params: - preset: vehicleidentify - name: capacity default: 27.4 +- preset: vehiclecloud render: | type: renault {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/ds.yaml b/templates/definition/vehicle/ds.yaml index fc50bb588..fba669770 100644 --- a/templates/definition/vehicle/ds.yaml +++ b/templates/definition/vehicle/ds.yaml @@ -6,7 +6,9 @@ params: - preset: vehicleidentify - name: capacity default: 50 +- preset: vehiclecloud render: | type: ds {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/evnotify.yaml b/templates/definition/vehicle/evnotify.yaml index dfce0aa96..825d33be9 100644 --- a/templates/definition/vehicle/evnotify.yaml +++ b/templates/definition/vehicle/evnotify.yaml @@ -15,6 +15,7 @@ params: - name: phases advanced: true - preset: vehicleidentify +- preset: vehiclecloud render: | type: custom {{- if ne .title "" }} @@ -29,3 +30,4 @@ render: | uri: https://app.evnotify.de/soc?akey={{ .akey }}&token={{ .token }} # evNotify Server + AKEY method: GET jq: .soc_display + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/fiat.yaml b/templates/definition/vehicle/fiat.yaml index 93cadcc38..abddf11e7 100644 --- a/templates/definition/vehicle/fiat.yaml +++ b/templates/definition/vehicle/fiat.yaml @@ -10,6 +10,7 @@ params: - name: pin mask: true - preset: vehicleidentify +- preset: vehiclecloud render: | type: fiat {{include "vehicle-base" .}} @@ -17,3 +18,4 @@ render: | pin: {{ .pin }} #mandatory to deep refresh SoC {{- end }} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/ford.yaml b/templates/definition/vehicle/ford.yaml index a8bca2e82..8f8e2916c 100644 --- a/templates/definition/vehicle/ford.yaml +++ b/templates/definition/vehicle/ford.yaml @@ -8,7 +8,9 @@ params: example: WF0FXX... - name: capacity default: 10 +- preset: vehiclecloud render: | type: ford {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/hyundai.yaml b/templates/definition/vehicle/hyundai.yaml index 4381e09a1..4d81d4164 100644 --- a/templates/definition/vehicle/hyundai.yaml +++ b/templates/definition/vehicle/hyundai.yaml @@ -1,12 +1,18 @@ template: hyundai products: - brand: Hyundai + description: + generic: Bluelink params: - preset: vehiclebase +- preset: vehiclelanguage - preset: vehicleidentify - name: capacity default: 64 +- preset: vehiclecloud render: | type: hyundai {{include "vehicle-base" .}} + {{include "vehicle-language" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/jaguar-landrover.yaml b/templates/definition/vehicle/jaguar-landrover.yaml new file mode 100644 index 000000000..df674f70c --- /dev/null +++ b/templates/definition/vehicle/jaguar-landrover.yaml @@ -0,0 +1,17 @@ +template: jaguar-landrover +products: +- brand: Jaguar +- brand: Land Rover +params: +- preset: vehiclebase +- preset: vehicleidentify +- name: vin + example: W... +- name: capacity +- preset: vehiclecloud + default: 60 +render: | + type: jaguar + {{include "vehicle-base" .}} + {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/kia.yaml b/templates/definition/vehicle/kia.yaml index f9eada861..3585ed67c 100644 --- a/templates/definition/vehicle/kia.yaml +++ b/templates/definition/vehicle/kia.yaml @@ -1,12 +1,18 @@ template: kia products: - brand: Kia + description: + generic: Bluelink params: - preset: vehiclebase +- preset: vehiclelanguage - preset: vehicleidentify - name: capacity default: 64 +- preset: vehiclecloud render: | type: kia {{include "vehicle-base" .}} + {{include "vehicle-language" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/mercedes.yaml b/templates/definition/vehicle/mercedes.yaml deleted file mode 100644 index 712e7abbf..000000000 --- a/templates/definition/vehicle/mercedes.yaml +++ /dev/null @@ -1,18 +0,0 @@ -template: mercedes -products: -- brand: Mercedes - description: - generic: EQC -params: -- base: vehiclebase -- name: clientId - example: b8f717b3-f1b7-4169-a8ef-7ffd80c5327c -- name: clientSecret - mask: true - example: QxSNLrIepEmcjGFdZpeUczqyqoOrhmxhASDasdvhizjhxHSEWFDfunfbeu -- base: vehicleidentify -render: | - type: mercedes - {{include "vehicle-base" .}} - {{include "vehicle-identify" .}} - diff --git a/templates/definition/vehicle/mini.yaml b/templates/definition/vehicle/mini.yaml index 570995ad4..386e51e26 100644 --- a/templates/definition/vehicle/mini.yaml +++ b/templates/definition/vehicle/mini.yaml @@ -8,7 +8,9 @@ params: example: WBMW... - name: capacity default: 32 +- preset: vehiclecloud render: | type: mini {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/nissan.yaml b/templates/definition/vehicle/nissan.yaml index 0d21626c9..6ff49608f 100644 --- a/templates/definition/vehicle/nissan.yaml +++ b/templates/definition/vehicle/nissan.yaml @@ -8,7 +8,9 @@ params: - preset: vehicleidentify - name: capacity default: 60 +- preset: vehiclecloud render: | type: nissan {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/opel.yaml b/templates/definition/vehicle/opel.yaml index 089e1b028..b2a30319e 100644 --- a/templates/definition/vehicle/opel.yaml +++ b/templates/definition/vehicle/opel.yaml @@ -8,7 +8,9 @@ params: example: WP0... - name: capacity default: 50 +- preset: vehiclecloud render: | type: opel {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/peugeot.yaml b/templates/definition/vehicle/peugeot.yaml index 0c10fff91..ffdc3ace9 100644 --- a/templates/definition/vehicle/peugeot.yaml +++ b/templates/definition/vehicle/peugeot.yaml @@ -6,7 +6,9 @@ params: - preset: vehicleidentify - name: capacity default: 50 +- preset: vehiclecloud render: | type: peugeot {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/porsche.yaml b/templates/definition/vehicle/porsche.yaml index 435e5ba1e..3d0045ee9 100644 --- a/templates/definition/vehicle/porsche.yaml +++ b/templates/definition/vehicle/porsche.yaml @@ -6,7 +6,9 @@ params: - preset: vehicleidentify - name: capacity default: 83.4 +- preset: vehiclecloud render: | type: porsche {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/renault.yaml b/templates/definition/vehicle/renault.yaml index db2b5d85a..95c2fdc87 100644 --- a/templates/definition/vehicle/renault.yaml +++ b/templates/definition/vehicle/renault.yaml @@ -8,7 +8,9 @@ params: example: WREN... - name: capacity default: 60 +- preset: vehiclecloud render: | type: renault {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/seat.yaml b/templates/definition/vehicle/seat.yaml index 304f9d0e4..dc58d9479 100644 --- a/templates/definition/vehicle/seat.yaml +++ b/templates/definition/vehicle/seat.yaml @@ -11,7 +11,9 @@ params: - preset: vehicleidentify - name: capacity default: 10 +- preset: vehiclecloud render: | type: seat {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/skoda.yaml b/templates/definition/vehicle/skoda.yaml index 25d9bcdb3..cc075444b 100644 --- a/templates/definition/vehicle/skoda.yaml +++ b/templates/definition/vehicle/skoda.yaml @@ -8,7 +8,9 @@ params: - preset: vehicleidentify - name: capacity default: 10 +- preset: vehiclecloud render: | type: skoda {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/skodaenyaq.yaml b/templates/definition/vehicle/skodaenyaq.yaml index 0552b985d..eac00afc5 100644 --- a/templates/definition/vehicle/skodaenyaq.yaml +++ b/templates/definition/vehicle/skodaenyaq.yaml @@ -8,7 +8,9 @@ params: - preset: vehicleidentify - name: capacity default: 50 +- preset: vehiclecloud render: | type: enyaq {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/smart.yaml b/templates/definition/vehicle/smart.yaml index 4724d1434..3efaef839 100644 --- a/templates/definition/vehicle/smart.yaml +++ b/templates/definition/vehicle/smart.yaml @@ -4,11 +4,13 @@ products: description: generic: EQ params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 17.6 +- preset: vehiclecloud render: | type: smart {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/tesla.yaml b/templates/definition/vehicle/tesla.yaml index 85a582761..a34ca8f13 100644 --- a/templates/definition/vehicle/tesla.yaml +++ b/templates/definition/vehicle/tesla.yaml @@ -36,6 +36,7 @@ params: - name: phases advanced: true - preset: vehicleidentify +- preset: vehiclecloud render: | type: tesla {{- if ne .title "" }} @@ -52,3 +53,4 @@ render: | vin: {{ .vin }} {{- end }} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/tronity.yaml b/templates/definition/vehicle/tronity.yaml index 380a58e76..232ba0bef 100644 --- a/templates/definition/vehicle/tronity.yaml +++ b/templates/definition/vehicle/tronity.yaml @@ -11,10 +11,6 @@ params: required: true - name: secret required: true -- name: accessToken - required: true -- name: refreshToken - required: true - name: vin example: W... - name: capacity @@ -30,9 +26,6 @@ render: | credentials: id: {{ .userid }} secret: {{ .secret }} - tokens: - access: {{ .accessToken }} - refresh: {{ .refreshToken }} capacity: {{ .capacity }} {{- if ne .phases "" }} phases: {{ .phases }} diff --git a/templates/definition/vehicle/volvo.yaml b/templates/definition/vehicle/volvo.yaml index de4124419..a668f3e95 100644 --- a/templates/definition/vehicle/volvo.yaml +++ b/templates/definition/vehicle/volvo.yaml @@ -6,7 +6,9 @@ params: - preset: vehicleidentify - name: capacity default: 50 +- preset: vehiclecloud render: | type: volvo {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/vw.yaml b/templates/definition/vehicle/vw.yaml index 3d836d6dd..b398f5eb3 100644 --- a/templates/definition/vehicle/vw.yaml +++ b/templates/definition/vehicle/vw.yaml @@ -10,7 +10,9 @@ params: example: WVWZZZ... - name: capacity default: 10 +- preset: vehiclecloud render: | type: vw {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/definition/vehicle/vwid.yaml b/templates/definition/vehicle/vwid.yaml index e05b09518..790041b35 100644 --- a/templates/definition/vehicle/vwid.yaml +++ b/templates/definition/vehicle/vwid.yaml @@ -10,7 +10,9 @@ params: example: WVWZZZ... - name: capacity default: 50 +- preset: vehiclecloud render: | type: id {{include "vehicle-base" .}} {{include "vehicle-identify" .}} + {{include "vehicle-cloud" .}} diff --git a/templates/docs/meter/solarlog_0.yaml b/templates/docs/meter/solarlog_0.yaml index 08c98d161..484356c6b 100644 --- a/templates/docs/meter/solarlog_0.yaml +++ b/templates/docs/meter/solarlog_0.yaml @@ -1,5 +1,9 @@ product: description: Solarlog +description: | + Wir empfehlen dieses Gerät für den Netzbezug/Einspeisewerte nur zu verwenden, wenn kein anderes Gerät diese Daten liefert. + Falls eine Hausbatterie angeschlossen ist sollte dieses Gerät auf keinen Fall für die erwähnten Werte verwendet werden! + render: - usage: grid diff --git a/templates/docs/meter/solarwatt-myreserve-matrix_0.yaml b/templates/docs/meter/solarwatt-myreserve-matrix_0.yaml new file mode 100644 index 000000000..05b3cba06 --- /dev/null +++ b/templates/docs/meter/solarwatt-myreserve-matrix_0.yaml @@ -0,0 +1,26 @@ +product: + brand: Solarwatt + description: MyReserve Matrix (LAN oder PowerGateway) + +render: +- usage: grid + default: | + type: template + template: solarwatt-myreserve-matrix + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8080 # Port # Optional +- usage: pv + default: | + type: template + template: solarwatt-myreserve-matrix + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8080 # Port # Optional +- usage: battery + default: | + type: template + template: solarwatt-myreserve-matrix + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8080 # Port # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/audi_0.yaml b/templates/docs/vehicle/audi_0.yaml index 88eb9b197..80c6fe864 100644 --- a/templates/docs/vehicle/audi_0.yaml +++ b/templates/docs/vehicle/audi_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: WAUZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 60 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: audi @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/bmw_0.yaml b/templates/docs/vehicle/bmw_0.yaml index e80955c02..61e39da06 100644 --- a/templates/docs/vehicle/bmw_0.yaml +++ b/templates/docs/vehicle/bmw_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: WBMW... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 65 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: bmw @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/carwings_0.yaml b/templates/docs/vehicle/carwings_0.yaml index b479d3222..0864d87c4 100644 --- a/templates/docs/vehicle/carwings_0.yaml +++ b/templates/docs/vehicle/carwings_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: carwings @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/citroen_0.yaml b/templates/docs/vehicle/citroen_0.yaml index 85706713c..9287ae581 100644 --- a/templates/docs/vehicle/citroen_0.yaml +++ b/templates/docs/vehicle/citroen_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: citroen @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/dacia_0.yaml b/templates/docs/vehicle/dacia_0.yaml index 09521e953..2e82a4e7e 100644 --- a/templates/docs/vehicle/dacia_0.yaml +++ b/templates/docs/vehicle/dacia_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 27.4 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: dacia @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/ds_0.yaml b/templates/docs/vehicle/ds_0.yaml index 4e654bb2a..0a2352d65 100644 --- a/templates/docs/vehicle/ds_0.yaml +++ b/templates/docs/vehicle/ds_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: ds @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/enyaq_0.yaml b/templates/docs/vehicle/enyaq_0.yaml index 6d1e3fa4e..8f6f5d281 100644 --- a/templates/docs/vehicle/enyaq_0.yaml +++ b/templates/docs/vehicle/enyaq_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: enyaq @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/evnotify_0.yaml b/templates/docs/vehicle/evnotify_0.yaml index 118566fd4..c43e85040 100644 --- a/templates/docs/vehicle/evnotify_0.yaml +++ b/templates/docs/vehicle/evnotify_0.yaml @@ -10,6 +10,7 @@ render: akey: token: capacity: 64 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: evnotify @@ -23,4 +24,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/fiat_0.yaml b/templates/docs/vehicle/fiat_0.yaml index e2b89e3b9..1d477ea16 100644 --- a/templates/docs/vehicle/fiat_0.yaml +++ b/templates/docs/vehicle/fiat_0.yaml @@ -11,6 +11,7 @@ render: vin: ZFAE... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 42 # Akku-Kapazität in kWh # Optional pin: # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: fiat @@ -26,4 +27,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/ford_0.yaml b/templates/docs/vehicle/ford_0.yaml index 9abe31fff..290a681da 100644 --- a/templates/docs/vehicle/ford_0.yaml +++ b/templates/docs/vehicle/ford_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: WF0FXX... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: ford @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/hyundai_0.yaml b/templates/docs/vehicle/hyundai_0.yaml index de0c0ba49..8e486e18b 100644 --- a/templates/docs/vehicle/hyundai_0.yaml +++ b/templates/docs/vehicle/hyundai_0.yaml @@ -1,5 +1,6 @@ product: brand: Hyundai + description: Bluelink render: - default: | @@ -10,6 +11,8 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 64 # Akku-Kapazität in kWh # Optional + language: en # 'de' für Deutsch und 'en' für Englisch # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: hyundai @@ -19,9 +22,11 @@ render: vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 64 # Akku-Kapazität in kWh # Optional phases: 3 # Die maximale Anzahl der Phasen welche genutzt werden können # Optional + language: en # 'de' für Deutsch und 'en' für Englisch # Optional mode: # Möglich sind Off, Now, MinPV und PV, oder leer wenn keiner definiert werden soll # Optional minSoC: 25 # Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht # Optional targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/id_0.yaml b/templates/docs/vehicle/id_0.yaml index 4458b23b4..0660ea068 100644 --- a/templates/docs/vehicle/id_0.yaml +++ b/templates/docs/vehicle/id_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: WVWZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: id @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/jaguar-landrover_0.yaml b/templates/docs/vehicle/jaguar-landrover_0.yaml new file mode 100644 index 000000000..c9c74ab0f --- /dev/null +++ b/templates/docs/vehicle/jaguar-landrover_0.yaml @@ -0,0 +1,29 @@ +product: + brand: Jaguar + +render: +- default: | + type: template + template: jaguar-landrover + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 41.5 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional + advanced: | + type: template + template: jaguar-landrover + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 41.5 # Akku-Kapazität in kWh # Optional + phases: 3 # Die maximale Anzahl der Phasen welche genutzt werden können # Optional + mode: # Möglich sind Off, Now, MinPV und PV, oder leer wenn keiner definiert werden soll # Optional + minSoC: 25 # Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht # Optional + targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional + minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional + maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/jaguar-landrover_1.yaml b/templates/docs/vehicle/jaguar-landrover_1.yaml new file mode 100644 index 000000000..637c5e468 --- /dev/null +++ b/templates/docs/vehicle/jaguar-landrover_1.yaml @@ -0,0 +1,29 @@ +product: + brand: Land Rover + +render: +- default: | + type: template + template: jaguar-landrover + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 41.5 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional + advanced: | + type: template + template: jaguar-landrover + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 41.5 # Akku-Kapazität in kWh # Optional + phases: 3 # Die maximale Anzahl der Phasen welche genutzt werden können # Optional + mode: # Möglich sind Off, Now, MinPV und PV, oder leer wenn keiner definiert werden soll # Optional + minSoC: 25 # Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht # Optional + targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional + minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional + maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/kia_0.yaml b/templates/docs/vehicle/kia_0.yaml index 32b418c77..33eef988e 100644 --- a/templates/docs/vehicle/kia_0.yaml +++ b/templates/docs/vehicle/kia_0.yaml @@ -1,5 +1,6 @@ product: brand: Kia + description: Bluelink render: - default: | @@ -10,6 +11,8 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 64 # Akku-Kapazität in kWh # Optional + language: en # 'de' für Deutsch und 'en' für Englisch # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: kia @@ -19,9 +22,11 @@ render: vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 64 # Akku-Kapazität in kWh # Optional phases: 3 # Die maximale Anzahl der Phasen welche genutzt werden können # Optional + language: en # 'de' für Deutsch und 'en' für Englisch # Optional mode: # Möglich sind Off, Now, MinPV und PV, oder leer wenn keiner definiert werden soll # Optional minSoC: 25 # Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht # Optional targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/mercedes_0.yaml b/templates/docs/vehicle/mercedes_0.yaml deleted file mode 100644 index cef44fcb6..000000000 --- a/templates/docs/vehicle/mercedes_0.yaml +++ /dev/null @@ -1,11 +0,0 @@ -product: - brand: Mercedes - description: EQC - -render: -- default: | - type: template - template: mercedes - : # Optional - clientId: b8f717b3-f1b7-4169-a8ef-7ffd80c5327c # Optional - clientSecret: QxSNLrIepEmcjGFdZpeUczqyqoOrhmxhASDasdvhizjhxHSEWFDfunfbeu # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/mini_0.yaml b/templates/docs/vehicle/mini_0.yaml index 705177280..92d041649 100644 --- a/templates/docs/vehicle/mini_0.yaml +++ b/templates/docs/vehicle/mini_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: WBMW... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 32 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: mini @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/nissan_0.yaml b/templates/docs/vehicle/nissan_0.yaml index 56ebd6d7e..76c573836 100644 --- a/templates/docs/vehicle/nissan_0.yaml +++ b/templates/docs/vehicle/nissan_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 60 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: nissan @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/opel_0.yaml b/templates/docs/vehicle/opel_0.yaml index eee6cf4f8..c70828984 100644 --- a/templates/docs/vehicle/opel_0.yaml +++ b/templates/docs/vehicle/opel_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: WP0... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: opel @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/peugeot_0.yaml b/templates/docs/vehicle/peugeot_0.yaml index b8e60a8f8..f43123218 100644 --- a/templates/docs/vehicle/peugeot_0.yaml +++ b/templates/docs/vehicle/peugeot_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: peugeot @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/porsche_0.yaml b/templates/docs/vehicle/porsche_0.yaml index 8e7c85166..cc22b7201 100644 --- a/templates/docs/vehicle/porsche_0.yaml +++ b/templates/docs/vehicle/porsche_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 83.4 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: porsche @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/renault_0.yaml b/templates/docs/vehicle/renault_0.yaml index 6196c23da..f432111c6 100644 --- a/templates/docs/vehicle/renault_0.yaml +++ b/templates/docs/vehicle/renault_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: WREN... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 60 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: renault @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/seat_0.yaml b/templates/docs/vehicle/seat_0.yaml index 95709edf4..c931ecc71 100644 --- a/templates/docs/vehicle/seat_0.yaml +++ b/templates/docs/vehicle/seat_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: seat @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/seat_1.yaml b/templates/docs/vehicle/seat_1.yaml index cf97cb125..94387ab39 100644 --- a/templates/docs/vehicle/seat_1.yaml +++ b/templates/docs/vehicle/seat_1.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: seat @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/skoda_0.yaml b/templates/docs/vehicle/skoda_0.yaml index f40aeaff5..8ffcfd207 100644 --- a/templates/docs/vehicle/skoda_0.yaml +++ b/templates/docs/vehicle/skoda_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: skoda @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/smart_0.yaml b/templates/docs/vehicle/smart_0.yaml index 08060deba..8aac3888c 100644 --- a/templates/docs/vehicle/smart_0.yaml +++ b/templates/docs/vehicle/smart_0.yaml @@ -6,5 +6,25 @@ render: - default: | type: template template: smart - : # Optional - capacity: 17.6 # Akku-Kapazität in kWh # Optional \ No newline at end of file + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 17.6 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional + advanced: | + type: template + template: smart + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 17.6 # Akku-Kapazität in kWh # Optional + phases: 3 # Die maximale Anzahl der Phasen welche genutzt werden können # Optional + mode: # Möglich sind Off, Now, MinPV und PV, oder leer wenn keiner definiert werden soll # Optional + minSoC: 25 # Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht # Optional + targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional + minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional + maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/tesla_0.yaml b/templates/docs/vehicle/tesla_0.yaml index 278abff4e..316160fc9 100644 --- a/templates/docs/vehicle/tesla_0.yaml +++ b/templates/docs/vehicle/tesla_0.yaml @@ -18,6 +18,7 @@ render: refreshToken: # Siehe https://docs.evcc.io/docs/devices/vehicles#tesla vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 90 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: tesla @@ -32,4 +33,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/tronity_0.yaml b/templates/docs/vehicle/tronity_0.yaml index ffac5aaa5..acf6a05c0 100644 --- a/templates/docs/vehicle/tronity_0.yaml +++ b/templates/docs/vehicle/tronity_0.yaml @@ -10,8 +10,6 @@ render: title: # Wird in der Benutzeroberfläche angezeigt # Optional userid: secret: - accessToken: - refreshToken: vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional advanced: | @@ -20,8 +18,6 @@ render: title: # Wird in der Benutzeroberfläche angezeigt # Optional userid: secret: - accessToken: - refreshToken: vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional phases: 3 # Die maximale Anzahl der Phasen welche genutzt werden können # Optional diff --git a/templates/docs/vehicle/volvo_0.yaml b/templates/docs/vehicle/volvo_0.yaml index 7317180df..b5ed20fe7 100644 --- a/templates/docs/vehicle/volvo_0.yaml +++ b/templates/docs/vehicle/volvo_0.yaml @@ -10,6 +10,7 @@ render: password: # Passwort des Benutzerkontos vin: W... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 50 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: volvo @@ -24,4 +25,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/vw_0.yaml b/templates/docs/vehicle/vw_0.yaml index a263f88d6..b20ddbe4c 100644 --- a/templates/docs/vehicle/vw_0.yaml +++ b/templates/docs/vehicle/vw_0.yaml @@ -11,6 +11,7 @@ render: password: # Passwort des Benutzerkontos vin: WVWZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional capacity: 10 # Akku-Kapazität in kWh # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional advanced: | type: template template: vw @@ -25,4 +26,5 @@ render: targetSoC: 80 # Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden # Optional minCurrent: 6 # Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional maxCurrent: 16 # Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll # Optional - identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional \ No newline at end of file + identifiers: # Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox # Optional + cloud: # Anstatt auf die Online API des Fahrzeugherstellers von der lokalen Installation zuzugreifen,... # Optional \ No newline at end of file diff --git a/util/helper.go b/util/helper.go index 1fcf0b54e..b8b9dc0a2 100644 --- a/util/helper.go +++ b/util/helper.go @@ -1,6 +1,8 @@ package util -import "math/rand" +import ( + "math/rand" +) // RandomString creates random string of N integers func RandomString(n int) string { diff --git a/util/sponsor/auth.go b/util/sponsor/auth.go index 487373b4a..927360533 100644 --- a/util/sponsor/auth.go +++ b/util/sponsor/auth.go @@ -1,7 +1,50 @@ package sponsor +import ( + "context" + "fmt" + "time" + + "github.com/evcc-io/evcc/api/proto/pb" + "github.com/evcc-io/evcc/util" + "github.com/evcc-io/evcc/util/cloud" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + var Subject, Token string func IsAuthorized() bool { return len(Subject) > 0 } + +// check and set sponsorship token +func ConfigureSponsorship(token string) error { + host := util.Getenv("GRPC_URI", cloud.Host) + conn, err := cloud.Connection(host) + if err != nil { + return err + } + + client := pb.NewAuthClient(conn) + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + res, err := client.IsAuthorized(ctx, &pb.AuthRequest{Token: token}) + if err == nil && res.Authorized { + Subject = res.Subject + Token = token + } + + if err != nil { + if s, ok := status.FromError(err); ok && s.Code() != codes.Unknown { + Subject = "sponsorship unavailable" + err = nil + } else { + err = fmt.Errorf("sponsortoken: %w", err) + } + } + + return err +} diff --git a/util/templates/proxy.tpl b/util/templates/proxy.tpl index 8beb106f3..c98363c0f 100644 --- a/util/templates/proxy.tpl +++ b/util/templates/proxy.tpl @@ -1,12 +1,13 @@ type: template template: {{ .Template }} -{{ range .Params -}} +{{- range .Params }} +{{- if or (ne (len .Value) 0) (ne (len .Values) 0) }} {{ .Name }}: {{- if len .Value }} {{ .Value }} {{ end }} - {{- if .Help.DE }} # {{ .Help.DE }} {{- end }} {{- if ne (len .Values) 0 }} {{- range .Values }} - {{ . }} {{- end }} {{- end }} +{{- end -}} {{ end -}} diff --git a/util/templates/template_documentation.go b/util/templates/template_documentation.go index 75f022847..5852f32ff 100644 --- a/util/templates/template_documentation.go +++ b/util/templates/template_documentation.go @@ -1,9 +1,11 @@ package templates import ( + "bufio" "bytes" _ "embed" "fmt" + "strings" "text/template" "github.com/Masterminds/sprig/v3" @@ -67,6 +69,25 @@ func (t *Template) RenderDocumentation(product Product, values map[string]interf var hasAdvancedParam bool var newParams []Param for _, param := range t.Params { + // reduce help texts to one line and add ... + help := param.Help.String(lang) + if help != "" { + scanner := bufio.NewScanner(strings.NewReader(help)) + line := 0 + for scanner.Scan() { + line++ + if line == 1 { + help = scanner.Text() + } else { + help += "..." + break + } + } + if help != param.Help.String(lang) { + param.Help.SetString(lang, help) + } + } + if param.Deprecated || param.Name == ParamUsage { continue } diff --git a/util/templates/template_modbus.go b/util/templates/template_modbus.go index b35ce8161..e0755f090 100644 --- a/util/templates/template_modbus.go +++ b/util/templates/template_modbus.go @@ -23,7 +23,13 @@ func (t *Template) ModbusParams(modbusType string, values map[string]interface{} return } + // check if the modbus params are already added + if index, _ := t.ParamByName("id"); index >= 0 { + return + } + modbusParams := t.ConfigDefaults.Config.Modbus.Types[values[ParamModbus].(string)].Params + // add the modbus params at the beginning t.Params = append(modbusParams, t.Params...) } diff --git a/util/templates/template_types.go b/util/templates/template_types.go index 9ddabf2b0..49a04f42b 100644 --- a/util/templates/template_types.go +++ b/util/templates/template_types.go @@ -1,5 +1,7 @@ package templates +import "reflect" + const ( ParamUsage = "usage" ParamModbus = "modbus" @@ -127,7 +129,7 @@ func (t *TextLanguage) Update(new TextLanguage, always bool) { // Requirements type Requirements struct { - EVCC []string + EVCC []string // EVCC requirements, e.g. sponsorship Description TextLanguage // Description of requirements, e.g. how the device needs to be prepared URI string // URI to a webpage with more details about the preparation requirements } @@ -179,9 +181,11 @@ type Param struct { Help TextLanguage // cli configuration help Test string // testing default value Value string // user provided value via cli configuration - Values []string // user provided list of values + Values []string // user provided list of values e.g. for ValueType "stringlist" ValueType string // string representation of the value type, "string" is default + ValidValues []string // list of valid values the user can provide Choice []string // defines a set of choices, e.g. "grid", "pv", "battery", "charge" for "usage" + Requirements Requirements // requirements for this param to be usable, only supported via ValueType "bool" Baudrate int // device specific default for modbus RS485 baudrate Comset string // device specific default for modbus RS485 comset @@ -211,9 +215,9 @@ func (p *Param) DefaultValue(renderMode string) interface{} { // overwrite specific properties by using values from another param // -// always overwrites if not provided empty: description, valuetype, default +// always overwrites if not provided empty: description, valuetype, default, mask // -// only overwrite if not provided empty and empty in param: help, example +// only overwrite if not provided empty and empty in param: help, example, requirements func (p *Param) OverwriteProperties(withParam Param) { // always overwrite if defined p.Description.Update(withParam.Description, true) @@ -226,12 +230,24 @@ func (p *Param) OverwriteProperties(withParam Param) { p.Default = withParam.Default } + if withParam.Mask { + p.Mask = withParam.Mask + } + // only set if empty p.Help.Update(withParam.Help, false) if p.Example == "" && withParam.Example != "" { p.Example = withParam.Example } + + if p.ValidValues == nil && withParam.ValidValues != nil { + p.ValidValues = withParam.ValidValues + } + + if reflect.DeepEqual(p.Requirements, Requirements{}) { + p.Requirements = withParam.Requirements + } } // Product contains naming information about a product a template supports