Template Updates (#2447)

This commit is contained in:
Andreas Linde 2022-02-17 18:16:20 +01:00 • committed by GitHub
parent fa3055ccad
commit 33e6bd8531
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
85 changed files with 1180 additions and 143 deletions

1
.gitignore vendored
View file

@ -6,6 +6,7 @@ __debug_bin
*.json
*.yaml
!templates/**/*.yaml
!templates/**/*-schema.json
!util/templates/**/*.yaml
!package*.json
!evcc.dist.yaml

View file

@ -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
}

View file

@ -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

View file

@ -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."

View file

@ -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."

View file

@ -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()

View file

@ -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))
}

View file

@ -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(

View file

@ -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`

View file

@ -1,5 +1,5 @@
template: heidelberg
products:
products:
- brand: Heidelberg
description:
generic: Energy Control (Modbus RTU)

View file

@ -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"
}
}
}

View file

@ -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"
}
}
}

View file

@ -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:

View file

@ -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"]
}
}
}

View file

@ -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 }}

View file

@ -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 -}}

View file

@ -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" ]

View file

@ -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 }}

View file

@ -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}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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 }}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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" .}}

View file

@ -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

View file

@ -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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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

View file

@ -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

View file

@ -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
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

View file

@ -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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -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
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

View file

@ -6,5 +6,25 @@ render:
- default: |
type: template
template: smart
: # Optional
capacity: 17.6 # Akku-Kapazität in kWh # Optional
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

View file

@ -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
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

View file

@ -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

View file

@ -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
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

View file

@ -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
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

View file

@ -1,6 +1,8 @@
package util
import "math/rand"
import (
"math/rand"
)
// RandomString creates random string of N integers
func RandomString(n int) string {

View file

@ -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
}

View file

@ -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 -}}

View file

@ -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
}

View file

@ -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...)
}

View file

@ -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