diff --git a/.gitignore b/.gitignore index 5c74f3cb4..4f8d1dbce 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ __debug_bin *.json *.yaml !templates/**/*.yaml +!util/templates/**/*.yaml !package*.json !evcc.dist.yaml evcc diff --git a/charger/template_test.go b/charger/template_test.go index 4cb60e106..1648d61b5 100644 --- a/charger/template_test.go +++ b/charger/template_test.go @@ -26,6 +26,7 @@ var acceptable = []string{ "sponsorship required, see https://github.com/evcc-io/evcc#sponsorship", "eebus not configured", "unexpected status: 400", // easee + "Get \"http://192.0.2.2/getParameters\": context deadline exceeded", // evsewifi } func TestChargerTemplates(t *testing.T) { @@ -45,9 +46,9 @@ func TestChargerTemplates(t *testing.T) { modbusChoices := tmpl.ModbusChoices() // we only test one modbus setup if funk.ContainsString(modbusChoices, templates.ModbusChoiceTCPIP) { - values[templates.ModbusTCPIP] = true + values[templates.ModbusKeyTCPIP] = true } else { - values[templates.ModbusRS485TCPIP] = true + values[templates.ModbusKeyRS485TCPIP] = true } } diff --git a/cmd/configure/configure.tpl b/cmd/configure/configure.tpl index 49d1be8f8..68c3e1401 100644 --- a/cmd/configure/configure.tpl +++ b/cmd/configure/configure.tpl @@ -30,8 +30,7 @@ loadpoints: - title: {{ .Title }} charger: {{ .Charger }} {{- if .ChargeMeter }} - meters: - charge: {{ .ChargeMeter }} + meter: {{ .ChargeMeter }} {{- end }} {{- if ne (len .Vehicles) 0 }} vehicles: diff --git a/cmd/configure/devicetest.go b/cmd/configure/devicetest.go index fb0a5f44f..fe5bd5b44 100644 --- a/cmd/configure/devicetest.go +++ b/cmd/configure/devicetest.go @@ -101,9 +101,16 @@ func (d *DeviceTest) testCharger(v interface{}) (DeviceTestResult, error) { // testMeter tests a meter device func (d *DeviceTest) testMeter(deviceCategory DeviceCategory, v interface{}) (DeviceTestResult, error) { if v, ok := v.(api.Meter); ok { - if _, err := v.CurrentPower(); err != nil { + power, err := v.CurrentPower() + if err != nil { return DeviceTestResultInvalid, err } + // check if the grid meter reports power 0, which should be impossible + // happens with Kostal Piko charger that do not have a grid meter attached + // but we can't determine this + if power == 0 && deviceCategory == DeviceCategoryGridMeter { + return DeviceTestResultInvalid, errors.New("grid meter reports power 0") + } if deviceCategory == DeviceCategoryBatteryMeter { if v, ok := v.(api.Battery); ok { diff --git a/cmd/configure/flow.go b/cmd/configure/flow.go index 6da9b4bd1..3b88f32e8 100644 --- a/cmd/configure/flow.go +++ b/cmd/configure/flow.go @@ -72,6 +72,7 @@ func (c *CmdConfigure) configureDeviceGuidedSetup() { } c.configuration.AddDevice(deviceItem, deviceCategory) + c.processDeviceCapabilities(templateItem.Capabilities) if len(supportedDeviceCategories) > 1 { for _, additionalCategory := range supportedDeviceCategories[1:] { @@ -86,7 +87,7 @@ func (c *CmdConfigure) configureDeviceGuidedSetup() { } fmt.Println() - fmt.Println(templateItem.Description.String(c.lang) + " " + c.localizedString("Device_Added", nil)) + fmt.Println(templateItem.Title() + " " + c.localizedString("Device_Added", nil)) c.configureLinkedTypes(templateItem) } @@ -118,11 +119,12 @@ func (c *CmdConfigure) configureLinkedTypes(templateItem templates.Template) { if len(linkedTemplateItem.Params) == 0 || linkedTemplate.Usage == "" { break } + linkedTemplateItem.SetCombinedTitle() category := DeviceCategory(linkedTemplate.Usage) localizeMap := localizeMap{ - "Linked": linkedTemplateItem.Description.String(c.lang), + "Linked": linkedTemplateItem.Title(), "Article": DeviceCategories[category].article, "Additional": DeviceCategories[category].additional, "Category": DeviceCategories[category].title, @@ -152,12 +154,12 @@ func (c *CmdConfigure) configureLinkedTypes(templateItem templates.Template) { // configureLinkedTemplate lets the user configure a device that is marked as being linked to a guided device // returns true if a device was added -func (c *CmdConfigure) configureLinkedTemplate(template templates.Template, category DeviceCategory) bool { +func (c *CmdConfigure) configureLinkedTemplate(templateItem templates.Template, category DeviceCategory) bool { for ok := true; ok; { deviceItem := device{} - values := c.processConfig(template, category) - deviceItem, err := c.processDeviceValues(values, template, deviceItem, category) + values := c.processConfig(templateItem, category) + deviceItem, err := c.processDeviceValues(values, templateItem, deviceItem, category) if err != nil { if !errors.Is(err, c.errDeviceNotValid) { fmt.Println() @@ -170,9 +172,10 @@ func (c *CmdConfigure) configureLinkedTemplate(template templates.Template, cate } else { c.configuration.AddDevice(deviceItem, category) + c.processDeviceCapabilities(templateItem.Capabilities) fmt.Println() - fmt.Println(template.Description.String(c.lang) + " " + c.localizedString("Device_Added", nil)) + fmt.Println(templateItem.Title() + " " + c.localizedString("Device_Added", nil)) return true } break @@ -181,7 +184,7 @@ func (c *CmdConfigure) configureLinkedTemplate(template templates.Template, cate } // configureDeviceCategory lets the user select and configure a device from a specific category -func (c *CmdConfigure) configureDeviceCategory(deviceCategory DeviceCategory) (device, templates.Capabilities, error) { +func (c *CmdConfigure) configureDeviceCategory(deviceCategory DeviceCategory) (device, []string, error) { fmt.Println() fmt.Printf("- %s %s\n", c.localizedString("Device_Configure", nil), DeviceCategories[deviceCategory].title) @@ -190,7 +193,7 @@ func (c *CmdConfigure) configureDeviceCategory(deviceCategory DeviceCategory) (d } var deviceDescription string - var capabilities templates.Capabilities + var capabilities []string // repeat until the device is added or the user chooses to continue without adding a device for ok := true; ok; { @@ -201,7 +204,7 @@ func (c *CmdConfigure) configureDeviceCategory(deviceCategory DeviceCategory) (d return device, capabilities, c.errItemNotPresent } - deviceDescription = templateItem.Description.String(c.lang) + deviceDescription = templateItem.Title() capabilities = templateItem.Capabilities values := c.processConfig(templateItem, deviceCategory) @@ -223,6 +226,7 @@ func (c *CmdConfigure) configureDeviceCategory(deviceCategory DeviceCategory) (d } c.configuration.AddDevice(device, deviceCategory) + c.processDeviceCapabilities(capabilities) var deviceTitle string if device.Title != "" { diff --git a/cmd/configure/helper.go b/cmd/configure/helper.go index fb5efe656..d487e09c7 100644 --- a/cmd/configure/helper.go +++ b/cmd/configure/helper.go @@ -10,6 +10,7 @@ import ( "github.com/evcc-io/evcc/util/sponsor" "github.com/evcc-io/evcc/util/templates" "github.com/thoas/go-funk" + stripmd "github.com/writeas/go-strip-markdown" "gopkg.in/yaml.v3" ) @@ -17,7 +18,7 @@ import ( func (c *CmdConfigure) processDeviceSelection(deviceCategory DeviceCategory) (templates.Template, error) { templateItem := c.selectItem(deviceCategory) - if templateItem.Description.String(c.lang) == c.localizedString("ItemNotPresent", nil) { + if templateItem.Title() == c.localizedString("ItemNotPresent", nil) { return templateItem, c.errItemNotPresent } @@ -33,7 +34,7 @@ func (c *CmdConfigure) processDeviceValues(values map[string]interface{}, templa c.addedDeviceIndex++ device.Name = fmt.Sprintf("%s%d", DeviceCategories[deviceCategory].defaultName, c.addedDeviceIndex) - device.Title = templateItem.Description.String(c.lang) + device.Title = templateItem.Title() for item, value := range values { if strings.ToLower(item) != "title" { continue @@ -47,9 +48,9 @@ func (c *CmdConfigure) processDeviceValues(values map[string]interface{}, templa fmt.Println() if categoryWithUsage { - fmt.Println(c.localizedString("TestingDevice_TitleUsage", localizeMap{"Device": templateItem.Description.String(c.lang), "Usage": deviceCategory.String()})) + fmt.Println(c.localizedString("TestingDevice_TitleUsage", localizeMap{"Device": templateItem.Title(), "Usage": deviceCategory.String()})) } else { - fmt.Println(c.localizedString("TestingDevice_Title", localizeMap{"Device": templateItem.Description.String(c.lang)})) + fmt.Println(c.localizedString("TestingDevice_Title", localizeMap{"Device": templateItem.Title()})) } deviceTest := DeviceTest{ @@ -63,9 +64,9 @@ func (c *CmdConfigure) processDeviceValues(values map[string]interface{}, templa fmt.Println(" ", c.localizedString("Error", localizeMap{"Error": err})) fmt.Println() - question := c.localizedString("TestingDevice_AddFailed", localizeMap{"Device": templateItem.Description.String(c.lang)}) + question := c.localizedString("TestingDevice_AddFailed", localizeMap{"Device": templateItem.Title()}) if categoryWithUsage { - question = c.localizedString("TestingDevice_AddFailedUsage", localizeMap{"Device": templateItem.Description.String(c.lang), "Usage": deviceCategory.String()}) + question = c.localizedString("TestingDevice_AddFailedUsage", localizeMap{"Device": templateItem.Title(), "Usage": deviceCategory.String()}) } if !c.askYesNo(question) { c.addedDeviceIndex-- @@ -79,7 +80,7 @@ func (c *CmdConfigure) processDeviceValues(values map[string]interface{}, templa templateItem.Params = append(templateItem.Params, templates.Param{Name: "name", Value: device.Name}) if !c.expandedMode { - b, err := templateItem.RenderProxyWithValues(values, c.lang, false) + b, err := templateItem.RenderProxyWithValues(values, c.lang) if err != nil { c.addedDeviceIndex-- return device, err @@ -105,33 +106,35 @@ func (c *CmdConfigure) processDeviceValues(values map[string]interface{}, templa return device, nil } +func (c *CmdConfigure) processDeviceCapabilities(capabilitites []string) { + if funk.ContainsString(capabilitites, templates.CapabilitySMAHems) { + c.capabilitySMAHems = true + } +} + // processDeviceRequirements handles device requirements func (c *CmdConfigure) processDeviceRequirements(templateItem templates.Template) error { - if len(templateItem.Requirements.Description.String(c.lang)) > 0 { + requirementDescription := stripmd.Strip(templateItem.Requirements.Description.String(c.lang)) + if len(requirementDescription) > 0 { + fmt.Println() + fmt.Println("-------------------------------------------------") fmt.Println(c.localizedString("Requirements_Title", nil)) - fmt.Println(" ", templateItem.Requirements.Description.String(c.lang)) + fmt.Println(requirementDescription) if len(templateItem.Requirements.URI) > 0 { fmt.Println(" " + c.localizedString("Requirements_More", nil) + " " + templateItem.Requirements.URI) } + fmt.Println("-------------------------------------------------") } // check if sponsorship is required - if templateItem.Requirements.Sponsorship && c.configuration.config.SponsorToken == "" { + if funk.ContainsString(templateItem.Requirements.EVCC, templates.RequirementSponsorship) && c.configuration.config.SponsorToken == "" { if err := c.askSponsortoken(true); err != nil { return err } } - // check if we need to setup a HEMS - if templateItem.Requirements.Hems != "" && funk.ContainsString(templates.HemsValueTypes, templateItem.Requirements.Hems) { - switch templateItem.Requirements.Hems { - case templates.HemsTypeSMA: - c.configuration.config.Hems = "type: sma\nAllowControl: false\n" - } - } - // check if we need to setup an MQTT broker - if templateItem.Requirements.Mqtt { + if funk.ContainsString(templateItem.Requirements.EVCC, templates.RequirementMQTT) { if c.configuration.config.MQTT == "" { mqttConfig, err := c.configureMQTT() if err != nil { @@ -148,7 +151,7 @@ func (c *CmdConfigure) processDeviceRequirements(templateItem templates.Template } // check if we need to setup an EEBUS HEMS - if templateItem.Requirements.Eebus { + if funk.ContainsString(templateItem.Requirements.EVCC, templates.RequirementEEBUS) { if c.configuration.config.EEBUS == "" { fmt.Println() fmt.Println("-- EEBUS -----------------------------------") @@ -185,6 +188,9 @@ func (c *CmdConfigure) askSponsortoken(required bool) error { if required { fmt.Println() 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)) { @@ -261,33 +267,49 @@ func (c *CmdConfigure) configureMQTT() (map[string]interface{}, error) { // fetchElements returns template items of a given class func (c *CmdConfigure) fetchElements(deviceCategory DeviceCategory) []templates.Template { var items []templates.Template - for _, tmpl := range templates.ByClass(DeviceCategories[deviceCategory].class.String()) { - if len(tmpl.Params) == 0 || len(tmpl.Description.String(c.lang)) == 0 { + if len(tmpl.Params) == 0 { continue } - if deviceCategory == DeviceCategoryGuidedSetup { - if tmpl.GuidedSetup.Enable { - items = append(items, tmpl) + for _, t := range tmpl.Titles(c.lang) { + titleTmpl := templates.Template{ + TemplateDefinition: tmpl.TemplateDefinition, + ConfigDefaults: tmpl.ConfigDefaults, + Lang: c.lang, } - } else { - if len(DeviceCategories[deviceCategory].categoryFilter) == 0 || - c.paramChoiceContains(tmpl.Params, templates.ParamUsage, DeviceCategories[deviceCategory].categoryFilter.String()) { - items = append(items, tmpl) + title := t + groupTitle := titleTmpl.GroupTitle() + if groupTitle != "" { + title += " [" + groupTitle + "]" + } + titleTmpl.SetTitle(title) + + if deviceCategory == DeviceCategoryGuidedSetup { + if tmpl.GuidedSetup.Enable { + items = append(items, titleTmpl) + } + } else { + if len(DeviceCategories[deviceCategory].categoryFilter) == 0 || + c.paramChoiceContains(tmpl.Params, templates.ParamUsage, DeviceCategories[deviceCategory].categoryFilter.String()) { + items = append(items, titleTmpl) + } } } } sort.Slice(items[:], func(i, j int) bool { // sort generic templates to the bottom - if items[i].Generic && !items[j].Generic { + if items[i].Group != "" && items[j].Group == "" { return false } - if !items[i].Generic && items[j].Generic { + if items[i].Group == "" && items[j].Group != "" { return true } - return strings.ToLower(items[i].Description.String(c.lang)) < strings.ToLower(items[j].Description.String(c.lang)) + if items[i].Group != items[j].Group { + return strings.ToLower(items[i].GroupTitle()) < strings.ToLower(items[j].GroupTitle()) + } + return strings.ToLower(items[i].Title()) < strings.ToLower(items[j].Title()) }) return items @@ -319,31 +341,50 @@ func (c *CmdConfigure) paramChoiceValues(params []templates.Param, name string) // Returns: // a map with param name and values func (c *CmdConfigure) processConfig(templateItem templates.Template, deviceCategory DeviceCategory) map[string]interface{} { - usageFilter := DeviceCategories[deviceCategory].categoryFilter - - additionalConfig := make(map[string]interface{}) - fmt.Println() fmt.Println(c.localizedString("Config_Title", nil)) fmt.Println() - for _, param := range templateItem.Params { + c.processModbusConfig(&templateItem, deviceCategory) + + return c.processParams(templateItem, templateItem.Params, deviceCategory) +} + +// process a list of params +func (c *CmdConfigure) processParams(templateItem templates.Template, params []templates.Param, deviceCategory DeviceCategory) map[string]interface{} { + usageFilter := DeviceCategories[deviceCategory].categoryFilter + + additionalConfig := make(map[string]interface{}) + + for _, param := range params { if param.Dependencies != nil { valid := true for _, dep := range param.Dependencies { - _, valueParam := templateItem.ParamByName(dep.Name) - if valueParam == nil { + i, valueParam := templateItem.ParamByName(dep.Name) + if i == -1 { break } value := valueParam.Value switch dep.Check { case templates.DependencyCheckEmpty: - valid = value == "" + if additionalConfig[dep.Name] != nil { + valid = additionalConfig[dep.Name] == "" + } else { + valid = value == "" + } case templates.DependencyCheckNotEmpty: - valid = value != "" + if additionalConfig[dep.Name] != nil { + valid = additionalConfig[dep.Name] != "" + } else { + valid = value != "" + } case templates.DependencyCheckEqual: - valid = value == dep.Value + if additionalConfig[dep.Name] != nil { + valid = additionalConfig[dep.Name] == dep.Value + } else { + valid = value == dep.Value + } } if !valid { break @@ -356,7 +397,8 @@ func (c *CmdConfigure) processConfig(templateItem templates.Template, deviceCate switch param.Name { case templates.ParamModbus: - c.processModbusConfig(param, deviceCategory, additionalConfig) + additionalConfig[param.Name] = param.Value + case templates.ParamUsage: if usageFilter != "" { additionalConfig[param.Name] = usageFilter.String() @@ -366,6 +408,11 @@ func (c *CmdConfigure) processConfig(templateItem templates.Template, deviceCate continue } + if param.Hidden && param.Default != "" { + additionalConfig[param.Name] = param.Default + continue + } + switch param.ValueType { case templates.ParamValueTypeStringList: additionalConfig[param.Name] = c.processListInputConfig(param) @@ -401,9 +448,7 @@ func (c *CmdConfigure) processListInputConfig(param templates.Param) []string { // handle user input for a simple one value input func (c *CmdConfigure) processInputConfig(param templates.Param) string { - userFriendly := c.userFriendlyTexts(param) - - label := userFriendly.Name + label := param.Name langLabel := param.Description.String(c.lang) if langLabel != "" { label = langLabel @@ -411,110 +456,52 @@ func (c *CmdConfigure) processInputConfig(param templates.Param) string { return c.askValue(question{ label: label, - defaultValue: userFriendly.Default, - exampleValue: userFriendly.Example, - help: userFriendly.Help.String(c.lang), - valueType: userFriendly.ValueType, - mask: userFriendly.Mask, - required: userFriendly.Required}) + defaultValue: param.Default, + exampleValue: param.Example, + help: param.Help.String(c.lang), + valueType: param.ValueType, + mask: param.Mask, + required: param.Required}) } // handle user input for a device modbus configuration -func (c *CmdConfigure) processModbusConfig(param templates.Param, deviceCategory DeviceCategory, additionalConfig map[string]interface{}) { - var selectedModbusKey string - - // baudrate and comset defaults can be overwritten, as they are device specific - deviceDefaultBaudrate := templates.ModbusParamValueBaudrate - deviceDefaultComset := templates.ModbusParamValueComset - deviceDefaultPort := templates.ModbusParamValuePort - deviceDefaultId := templates.ModbusParamValueId - - if param.Baudrate != 0 { - deviceDefaultBaudrate = param.Baudrate - } - if param.Comset != "" { - deviceDefaultComset = param.Comset - } - if param.Port != 0 { - deviceDefaultPort = param.Port - } - if param.ID != 0 { - deviceDefaultId = param.ID - } - +func (c *CmdConfigure) processModbusConfig(templateItem *templates.Template, deviceCategory DeviceCategory) { var choices []string - var choiceKeys []string + var choiceTypes []string - for _, choice := range param.Choice { - switch choice { - case templates.ModbusChoiceRS485: - choices = append(choices, "Serial (USB-RS485 Adapter)") - choiceKeys = append(choiceKeys, templates.ModbusKeyRS485Serial) - choices = append(choices, "Serial (Ethernet-RS485 Adapter)") - choiceKeys = append(choiceKeys, templates.ModbusKeyRS485TCPIP) - case templates.ModbusChoiceTCPIP: - choices = append(choices, "TCP/IP") - choiceKeys = append(choiceKeys, templates.ModbusKeyTCPIP) + modbusIndex, modbusParam := templateItem.ParamByName(templates.ParamModbus) + if modbusIndex == -1 { + return + } + + config := templateItem.ConfigDefaults.Config.Modbus + + for _, choice := range modbusParam.Choice { + if config.Interfaces[choice] == nil { + continue + } + + for _, itype := range config.Interfaces[choice] { + title := config.Types[itype].Description + choices = append(choices, title.String(c.lang)) + choiceTypes = append(choiceTypes, itype) } } - if len(choices) > 0 { - // ask for modbus address - id := c.askValue(question{ - label: "ID", - help: "Modbus ID", - defaultValue: deviceDefaultId, - valueType: templates.ParamValueTypeNumber, - required: true}) - additionalConfig[templates.ModbusParamNameId] = id - - // ask for modbus interface type - var index int - if len(choices) > 1 { - index, _ = c.askChoice(c.localizedString("Config_ModbusInterface", nil), choices) - } - selectedModbusKey = choiceKeys[index] - additionalConfig[templates.ParamModbus] = selectedModbusKey - - switch selectedModbusKey { - case templates.ModbusKeyRS485Serial: - device := c.askValue(question{ - label: c.localizedString("UserFriendly_Device_Name", nil), - help: c.localizedString("UserFriendly_Device_Help", nil), - exampleValue: templates.ModbusParamValueDevice, - required: true}) - additionalConfig[templates.ModbusParamNameDevice] = device - - baudrate := c.askValue(question{ - label: c.localizedString("UserFriendly_Baudrate_Name", nil), - help: c.localizedString("UserFriendly_Baudrate_Help", nil), - defaultValue: deviceDefaultBaudrate, - valueType: templates.ParamValueTypeNumber, - required: true}) - additionalConfig[templates.ModbusParamNameBaudrate] = baudrate - - comset := c.askValue(question{ - label: c.localizedString("UserFriendly_ComSet_Name", nil), - defaultValue: deviceDefaultComset, - required: true}) - additionalConfig[templates.ModbusParamNameComset] = comset - - case templates.ModbusKeyRS485TCPIP, templates.ModbusKeyTCPIP: - if selectedModbusKey == templates.ModbusKeyRS485TCPIP { - additionalConfig[templates.ModbusParamNameRTU] = "true" - } - host := c.askValue(question{ - label: c.localizedString("UserFriendly_Host_Name", nil), - exampleValue: templates.ModbusParamValueHost, - required: true}) - additionalConfig[templates.ModbusParamNameHost] = host - - port := c.askValue(question{ - label: c.localizedString("UserFriendly_Port_Name", nil), - defaultValue: deviceDefaultPort, - valueType: templates.ParamValueTypeNumber, - required: true}) - additionalConfig[templates.ModbusParamNamePort] = port - } + if len(choices) == 0 { + return } + + // ask for modbus interface type + var index int + if len(choices) > 1 { + index, _ = c.askChoice(c.localizedString("Config_ModbusInterface", nil), choices) + } + + values := make(map[string]interface{}) + templateItem.Params[modbusIndex].Value = choiceTypes[index] + // add the interface type specific modbus params + templateItem.ModbusParams(choiceTypes[index], values) + // Update the modbus default values + templateItem.ModbusValues(templates.TemplateRenderModeInstance, values) } diff --git a/cmd/configure/localization/de.toml b/cmd/configure/localization/de.toml index bc7e5dad5..2d1e099f0 100644 --- a/cmd/configure/localization/de.toml +++ b/cmd/configure/localization/de.toml @@ -15,6 +15,9 @@ Flow_SingleDevice_Setup = "- Ein Gerät konfigurieren" Flow_SingleDevice_Select = "Wähle eines der folgenden Gerätekategorien aus" Flow_SingleDevice_Config = "Die Konfiguration lautet:" +Flow_SMAHems_Setup = "- SMA HEMS konfigurieren" +Flow_SMAHems_Add = "Möchtest du die Wallboxen an den SMA Home Manager anbinden, damit diese z.B. für die Steuerung der Hausbatterie berücksichtigt werden können?" + ItemNotPresent = "Mein Gerät ist nicht in der Liste" AddDeviceInCategory = "Möchtest du {{ .Article }} {{ .Category }} hinzufügen?" @@ -37,35 +40,6 @@ File_SaveSuccess = "Die Konfiguration wurde erfolgreich in der Datei {{ .FileNam Choose = "Wähle" -UserFriendly_Title_Name = "Titel" -UserFriendly_Title_Help = "Wird in der Benutzeroberfläche angezeigt" -UserFriendly_Device_Name = "Geräteadresse" -UserFriendly_Device_Help = "USB-RS485 Adapter Adresse" -UserFriendly_Baudrate_Name = "Baudrate" -UserFriendly_Baudrate_Help = "Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200" -UserFriendly_ComSet_Name = "ComSet" -UserFriendly_Host_Name = "IP-Adresse oder Hostname" -UserFriendly_Port_Name = "Port" -UserFriendly_User_Name = "Benutzername" -UserFriendly_Password_Name = "Passwort" -UserFriendly_Capacity_Name = "Akku-Kapazität in kWh" -UserFriendly_Vin_Name = "Fahrzeugidentifikationsnummer" -UserFriendly_Vin_Help = "Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind" -UserFriendly_Cache_Name = "Cache" -UserFriendly_Cache_Help = "Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll" -UserFriendly_MinSoC_Name = "Minimaler Ladestand (SoC) in %" -UserFriendly_MinSoC_Help = "Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht" -UserFriendly_TargetSoC_Name = "Ziel-Ladestand (SoC) in %" -UserFriendly_TargetSoC_Help = "Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden" -UserFriendly_MinCurrent_Name = "Minimale Stromstärke in Ampere (A)" -UserFriendly_MinCurrent_Help = "Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll" -UserFriendly_MaxCurrent_Name = "Maximale Stromstärke in Ampere (A)" -UserFriendly_MaxCurrent_Help = "Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll" -UserFriendly_Identifier_Name = "Identifikationsnummer" -UserFriendly_Identifier_Help = "Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox" -UserFriendly_StandByPower_Name = "Standby-Leistung in W" -UserFriendly_StandByPower_Help = "Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet" - Category_ChargerTitle = "Wallbox" Category_ChargerArticle = "eine" Category_ChargerAdditional = "eine weitere" @@ -96,10 +70,11 @@ TestingDevice_AddFailedUsage = "Der Test der {{ .Usage }} Konfiguration von {{ . TestingMQTTFailed = "Der Test der MQTT Konfiguration ist fehlgeschlagen. Möchten Sie die Konfiguration wiederholen?" -Requirements_Title = "Das Gerät muss die folgenden Voraussetzungen erfüllen:" +Requirements_Title = "Das Gerät hat die folgenden Voraussetzungen:" 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_Token = "Bist du ein Sponsor?" Requirements_Sponsorship_Token_Input = "Bitte gib das Sponsortoken ein" diff --git a/cmd/configure/localization/en.toml b/cmd/configure/localization/en.toml index 9c63dc9e7..7023eba59 100644 --- a/cmd/configure/localization/en.toml +++ b/cmd/configure/localization/en.toml @@ -15,6 +15,9 @@ Flow_SingleDevice_Setup = "- Setup a device" Flow_SingleDevice_Select = "Choose one of the following device categories" Flow_SingleDevice_Config = "The configuration:" +Flow_SMAHems_Setup = "- Setup SMA HEMS" +Flow_SMAHems_Add = "Do you want to report your wallboxes to the SMA Home Manager anbinden, so that it can consider them e.g. for controlling the in-house battery?" + ItemNotPresent = "My device is not in this list" AddDeviceInCategory = "Do you want to add {{ .Article }} {{ .Category }}?" @@ -37,35 +40,6 @@ File_SaveSuccess = "The configuration was successfully saved in the file {{ .Fil Choose = "Choose" -UserFriendly_Title_Name = "Title" -UserFriendly_Title_Help = "Will be displayed in the user interface" -UserFriendly_Device_Name = "Device address" -UserFriendly_Device_Help = "USB-RS485 Adapter address" -UserFriendly_Baudrate_Name = "Baudrate" -UserFriendly_Baudrate_Help = "Check the device settings, typical values are 9600, 19200, 38400, 57600, 115200" -UserFriendly_ComSet_Name = "ComSet" -UserFriendly_Host_Name = "IP-Address or Hostname" -UserFriendly_Port_Name = "Port" -UserFriendly_User_Name = "Username" -UserFriendly_Password_Name = "Password" -UserFriendly_Capacity_Name = "Battery-Capacity in kWh" -UserFriendly_Vin_Name = "Vehicle Identification Number" -UserFriendly_Vin_Help = "Required if you own multiple vehicles of the same brand" -UserFriendly_Cache_Name = "Cache" -UserFriendly_Cache_Help = "Time interval with when data should be reloaded from the vehicle" -UserFriendly_MinSoC_Name = "Minimum state of charge (SoC) in %" -UserFriendly_MinSoC_Help = "Charge immediately with maximum power up to the defined state of charge, if the charge mode is not set to 'OFF'" -UserFriendly_TargetSoC_Name = "Target state of charge (SoC) in %" -UserFriendly_TargetSoC_Help = "Until which sate of charge (SoC) should the vehicle be charged" -UserFriendly_MinCurrent_Name = "Minimum amperage (A)" -UserFriendly_MinCurrent_Help = "The minimum amperage per connected phase with which the car should be charged" -UserFriendly_MaxCurrent_Name = "Maximum amperage (A)" -UserFriendly_MaxCurrent_Help = "The maximum amperage per connected phase with which the car shuold be charged" -UserFriendly_Identifier_Name = "Identification" -UserFriendly_Identifier_Help = "Mostly this can be added later, see: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox" -UserFriendly_StandByPower_Name = "Standby power in W" -UserFriendly_StandByPower_Help = "Power values above this value will be considered as charging power" - Category_ChargerTitle = "wallbox" Category_ChargerArticle = "a" Category_ChargerAdditional = "one more" @@ -96,10 +70,11 @@ TestingDevice_AddFailedUsage = "Testing of the {{ .Usage }} configuration of {{ TestingMQTTFailed = "Testing the MQTT configuration failed. Do you want to repeat its configuration?" -Requirements_Title = "The device needs to provide the following requirements:" +Requirements_Title = "The device has the following requirements:" 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_Token = "Are you already a sponsor?" Requirements_Sponsorship_Token_Input = "Please enter the sponsortoken" diff --git a/cmd/configure/main.go b/cmd/configure/main.go index 2910fe858..edd272f6a 100644 --- a/cmd/configure/main.go +++ b/cmd/configure/main.go @@ -11,10 +11,12 @@ import ( "github.com/BurntSushi/toml" "github.com/cloudfoundry/jibber_jabber" + "github.com/evcc-io/evcc/hems/semp" "github.com/evcc-io/evcc/server" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/templates" "github.com/nicksnyder/go-i18n/v2/i18n" + "github.com/thoas/go-funk" "golang.org/x/text/language" ) @@ -33,6 +35,8 @@ type CmdConfigure struct { advancedMode, expandedMode bool addedDeviceIndex int errItemNotPresent, errDeviceNotValid error + + capabilitySMAHems bool } // Run starts the interactive configuration @@ -152,11 +156,17 @@ func (c *CmdConfigure) flowNewConfigFile() { _ = c.configureDevices(DeviceCategoryPVMeter, true, true) _ = c.configureDevices(DeviceCategoryBatteryMeter, true, true) _ = c.configureDevices(DeviceCategoryVehicle, true, true) + c.configureLoadpoints() c.configureSite() + // check if SMA HEMS is available and ask the user if it should be added + if c.capabilitySMAHems { + c.configureSMAHems() + } + if c.advancedMode && c.configuration.config.SponsorToken == "" { - _ = c.askSponsortoken(true) + _ = c.askSponsortoken(false) } yaml, err := c.configuration.RenderConfiguration() @@ -223,12 +233,14 @@ func (c *CmdConfigure) configureDevices(deviceCategory DeviceCategory, askAdding } for ok := true; ok; { - device, _, err := c.configureDeviceCategory(deviceCategory) + device, capabilities, err := c.configureDeviceCategory(deviceCategory) if err != nil { break } devices = append(devices, device) + c.processDeviceCapabilities(capabilities) + if !askMultiple { break } @@ -242,6 +254,25 @@ func (c *CmdConfigure) configureDevices(deviceCategory DeviceCategory, askAdding return devices } +// configureSMAHems asks the user if he wants to add the SMA HEMS +func (c *CmdConfigure) configureSMAHems() { + // check if the system provides a machine-id + if _, err := semp.UniqueDeviceID(); err != nil { + return + } + + fmt.Println() + fmt.Println(c.localizedString("Flow_SMAHems_Setup", nil)) + + fmt.Println() + if !c.askYesNo(c.localizedString("Flow_SMAHems_Add", nil)) { + return + } + + // check if we need to setup a HEMS + c.configuration.config.Hems = "type: sma\nAllowControl: false\n" +} + // configureLoadpoints asks loadpoint specific questions func (c *CmdConfigure) configureLoadpoints() { fmt.Println() @@ -289,7 +320,7 @@ func (c *CmdConfigure) configureLoadpoints() { } var minValue int = 6 - if capabilities.ISO151182 { + if funk.ContainsString(capabilities, templates.CapabilityISO151182) { minValue = 2 } diff --git a/cmd/configure/survey.go b/cmd/configure/survey.go index 96aa8fe47..5aa8b392d 100644 --- a/cmd/configure/survey.go +++ b/cmd/configure/survey.go @@ -63,16 +63,16 @@ func (c *CmdConfigure) askSelection(message string, items []string) (error, stri // selectItem selects item from list func (c *CmdConfigure) selectItem(deviceCategory DeviceCategory) templates.Template { - var emptyItem templates.Template - emptyItem.Description.SetString(c.localizedString("ItemNotPresent", nil), c.lang) + emptyItem := templates.Template{Lang: c.lang} + emptyItem.SetTitle(c.localizedString("ItemNotPresent", nil)) elements := c.fetchElements(deviceCategory) elements = append(elements, emptyItem) var items []string for _, item := range elements { - if item.Description.String(c.lang) != "" { - items = append(items, item.Description.String(c.lang)) + if item.Title() != "" { + items = append(items, item.Title()) } } diff --git a/cmd/configure/texts.go b/cmd/configure/texts.go index 42102ebc3..66c1bff7d 100644 --- a/cmd/configure/texts.go +++ b/cmd/configure/texts.go @@ -2,11 +2,8 @@ package configure import ( "errors" - "strings" - "github.com/evcc-io/evcc/util/templates" "github.com/nicksnyder/go-i18n/v2/i18n" - "github.com/thoas/go-funk" ) // setDefaultTexts sets default language specific texts @@ -39,59 +36,3 @@ func (c *CmdConfigure) localizedString(key string, templateData localizeMap) str TemplateData: templateData, }) } - -// userFriendlyTexts sets user friendly texts for a set of known param names and -// returns them as a new set as we don't want to overwrite the template values -func (c *CmdConfigure) userFriendlyTexts(param templates.Param) templates.Param { - result := param - - if result.ValueType == "" || (result.ValueType != "" && !funk.ContainsString(templates.ParamValueTypes, result.ValueType)) { - result.ValueType = templates.ParamValueTypeString - } - - type replacements struct { - Name string - Help string - Example string - ValueType string - } - resultNameMap := map[string]replacements{ - "title": {Name: "UserFriendly_Title_Name", Help: "UserFriendly_Title_Help"}, - "device": {Name: "UserFriendly_Device_Name"}, - "baudrate": {Name: "UserFriendly_Baudrate_Name"}, - "comset": {Name: "UserFriendly_ComSet_Name"}, - "host": {Name: "UserFriendly_Host_Name"}, - "port": {Name: "UserFriendly_Port_Name", ValueType: templates.ParamValueTypeNumber}, - "user": {Name: "UserFriendly_User_Name"}, - "password": {Name: "UserFriendly_Password_Name"}, - "capacity": {Name: "UserFriendly_Capacity_Name", Example: "41.5", ValueType: templates.ParamValueTypeFloat}, - "vin": {Name: "UserFriendly_Vin_Name", Help: "UserFriendly_Vin_Help"}, - "cache": {Name: "UserFriendly_Cache_Name", Help: "UserFriendly_Cache_Help", Example: "5m"}, - "mode": {Name: "ChargeMode_Question", ValueType: templates.ParamValueTypeChargeModes}, - "minsoc": {Name: "UserFriendly_MinSoC_Name", Help: "UserFriendly_MinSoC_Help", Example: "25", ValueType: templates.ParamValueTypeNumber}, - "targetsoc": {Name: "UserFriendly_TargetSoC_Name", Help: "UserFriendly_TargetSoC_Help", Example: "80", ValueType: templates.ParamValueTypeNumber}, - "mincurrent": {Name: "UserFriendly_MinCurrent_Name", Help: "UserFriendly_MinCurrent_Help", Example: "6", ValueType: templates.ParamValueTypeNumber}, - "maxcurrent": {Name: "UserFriendly_MaxCurrent_Name", Help: "UserFriendly_MaxCurrent_Help", Example: "16", ValueType: templates.ParamValueTypeNumber}, - "identifiers": {Name: "UserFriendly_Identifier_Name", Help: "UserFriendly_Identifier_Help"}, - "standbypower": {Name: "UserFriendly_StandByPower_Name", Help: "UserFriendly_StandByPower_Help", ValueType: templates.ParamValueTypeNumber}, - } - - if resultMapItem := resultNameMap[strings.ToLower(result.Name)]; resultMapItem != (replacements{}) { - // always overwrite if defined - if resultMapItem.Name != "" { - result.Name = c.localizedString(resultMapItem.Name, nil) - } - if resultMapItem.ValueType != "" { - result.ValueType = resultMapItem.ValueType - } - // only set if empty - if result.Help.String(c.lang) == "" && resultMapItem.Help != "" { - result.Help.SetString(c.lang, c.localizedString(resultMapItem.Help, nil)) - } - if result.Example == "" && resultMapItem.Example != "" { - result.Example = resultMapItem.Example - } - } - - return result -} diff --git a/go.mod b/go.mod index 6d501531a..75d8f31e0 100644 --- a/go.mod +++ b/go.mod @@ -89,6 +89,7 @@ require ( github.com/thoas/go-funk v0.9.1 github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c github.com/volkszaehler/mbmd v0.0.0-20220108103619-de9b2cf95ebe + github.com/writeas/go-strip-markdown v2.0.1+incompatible gitlab.com/bboehmke/sunny v0.15.1-0.20211022160056-2fba1c86ade6 golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce // indirect golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d diff --git a/go.sum b/go.sum index 027fad641..1dd851113 100644 --- a/go.sum +++ b/go.sum @@ -800,6 +800,8 @@ github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAh github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/volkszaehler/mbmd v0.0.0-20220108103619-de9b2cf95ebe h1:pxQR+cX7Wl31hX1YRmYNMx3dWydSWhEk8Pzzv02WguM= github.com/volkszaehler/mbmd v0.0.0-20220108103619-de9b2cf95ebe/go.mod h1:Re4O+TyZ5p3Z4L0zODnzPyEZofTKF2kgLSmxG79h0Xs= +github.com/writeas/go-strip-markdown v2.0.1+incompatible h1:IIqxTM5Jr7RzhigcL6FkrCNfXkvbR+Nbu1ls48pXYcw= +github.com/writeas/go-strip-markdown v2.0.1+incompatible/go.mod h1:Rsyu10ZhbEK9pXdk8V6MVnZmTzRG0alMNLMwa0J01fE= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/hems/semp/semp.go b/hems/semp/semp.go index ea4e73fe5..d964b2ef4 100644 --- a/hems/semp/semp.go +++ b/hems/semp/semp.go @@ -77,7 +77,7 @@ func New(conf map[string]interface{}, site site.API, httpd *server.HTTPd) (*SEMP var did []byte if cc.DeviceID == "" { - if did, err = uniqueDeviceID(); err != nil { + if did, err = UniqueDeviceID(); err != nil { return nil, fmt.Errorf("creating device id: %w", err) } } else { @@ -338,7 +338,7 @@ func (s *SEMP) serialNumber(id int) string { } // uniqueDeviceID creates a 6-bytes base device id from machine id -func uniqueDeviceID() ([]byte, error) { +func UniqueDeviceID() ([]byte, error) { bytes := 6 mid, err := machineid.ProtectedID("evcc-semp") diff --git a/meter/template_test.go b/meter/template_test.go index 9d67de7fe..3a84edc5f 100644 --- a/meter/template_test.go +++ b/meter/template_test.go @@ -21,9 +21,10 @@ var acceptable = []string{ "no ping response for 192.0.2.2", // SMA "network is unreachable", "[1ESY1161052714 1ESY1161229249 1EMH0008842285 1ESY1161978584 1EMH0004864048 1ESY1161979033 7ELS8135823805]", // Discovergy - "can only have either uri or device", // modbus - "(Client.Timeout exceeded while awaiting headers)", // http - "cannot create meter 'discovergy': unexpected status: 401", //Discovergy Proxy + "can only have either uri or device", // modbus + "(Client.Timeout exceeded while awaiting headers)", // http + "cannot create meter 'discovergy': unexpected status: 401", // Discovergy Proxy + "login failed: Put \"https://192.0.2.2/v1/login\": context deadline exceeded", // LG ESS } func TestMeterTemplates(t *testing.T) { @@ -43,9 +44,9 @@ func TestMeterTemplates(t *testing.T) { modbusChoices := tmpl.ModbusChoices() // we only test one modbus setup if funk.ContainsString(modbusChoices, templates.ModbusChoiceTCPIP) { - values[templates.ModbusTCPIP] = true + values[templates.ModbusKeyTCPIP] = true } else { - values[templates.ModbusRS485TCPIP] = true + values[templates.ModbusKeyRS485TCPIP] = true } } diff --git a/templates/README.md b/templates/README.md index a47472787..f5805f324 100644 --- a/templates/README.md +++ b/templates/README.md @@ -16,13 +16,20 @@ The following describes each possible element in a yaml file `template` expects a unique template name for the current device class (charger, meter, vehicle are device classes) -## `description` +## `products` -`description` expects a human readable description of the device, best containing the name of the product. Values are language specific names via `de`, `en`, `generic` (if string is language independent) +`products` expects a list of products that work with this template. -## `generic` +Each product contains: -`generic: true` defines templates that are typically not a hardware product, but rather generic implementations that can be used by a variety of products (e.g. inverters with sunspec support) or for software components like vzlogger. +- `brand`: an optional brand description of the product +- `description`: an optional description e.g. of the product model. Expects `generic`, `de`, `en`: an optional description of the product + +Either `brand`, or `description` need to be set. + +## `group` + +`group` contains the reference to a `groups.yaml` entry. This is used to group switchable sockets and generic device support (e.g. SunSpec) templates. ## `guidedsetup` @@ -62,23 +69,36 @@ Example Use Case: With SMA Home Manager, there can be a SMA Energy Meter used fo ## `capabilities` -`capabilities` provides an option to define special capabilities of the devie +`capabilities` provides an option to define special capabilities of the device as a list of strings **Possible Values**: -- `iso151182: true`: If the charger supports communicating via ISO15118-2 +- `iso151182`: If the charger supports communicating via ISO15118-2 +- `rfid`: If the charger supports RFID +- `1p3p`: If the charger supports 1P/3P-phase switching +- `smahems`: If the device can be used as an SMA HEMS device, only used for the SMA Home Manager 2.0 right now ## `requirements` `requirements` provides an option to define various requirements / dependencies that need to be setup +### `evcc` + +`evcc` is a list of evcc specific system requirements + **Possible Values**: -- `sponsorshipt: true`: If the device requires a sponsorship token -- `eebus: true`: If the device is accessed via the eebus protocol and thus requires the corresponding setup -- `hems: sma`: If the device can be used as an SMA HEMS device, only used for the SMA Home Manager 2.0 right now -- `description`: expects language specific texts via `de`, `en` to provide specific things the user has to do, e.g. minimum firmware versions or specific hardware setup requirements -- `uri`: a link providing more help on the requirements +- `sponsorship`: If the device requires a sponsorship token +- `eebus`: If the device is accessed via the eebus protocol and thus requires the corresponding setup +- `mqtt`: If the device a MQTT setup + +### `description` + +`description` expects language specific texts via `de`, `en` to provide specific things the user has to do, e.g. minimum firmware versions or specific hardware setup requirements. The content can be multiline and Markdown + +### `uri` + +`uri` is a link providing more help on the requirements ## `loglevel` @@ -171,7 +191,7 @@ Example Use Case: With SMA Home Manager, there can be a SMA Energy Meter used fo ### `help` -`help` expects language specific help texts via `de`, `en` +`help` expects language specific help texts via `generic` (language independent), `de`, `en` ## `render` diff --git a/templates/definition/charger/abl.yaml b/templates/definition/charger/abl.yaml index eb3656faa..4195cc7ef 100644 --- a/templates/definition/charger/abl.yaml +++ b/templates/definition/charger/abl.yaml @@ -1,8 +1,13 @@ template: abl -description: - generic: ABL eMH / SENEC.Wallbox pro -requirements: - sponsorship: true +products: +- brand: ABL + description: + generic: eMH +- brand: SENEC + description: + generic: Wallbox pro +requirements: + evcc: ["sponsorship"] params: - name: modbus choice: ["rs485"] diff --git a/templates/definition/charger/alfen.yaml b/templates/definition/charger/alfen.yaml new file mode 100644 index 000000000..9ee0589ba --- /dev/null +++ b/templates/definition/charger/alfen.yaml @@ -0,0 +1,14 @@ +template: alfen +products: +- brand: Alfen + description: + generic: Eve +capabilities: ["1p3p"] +requirements: + evcc: ["sponsorship"] +params: +- name: modbus + choice: ["tcpip"] +render: | + type: alfen + {{include "modbus" .}} diff --git a/templates/definition/charger/alphatec.yaml b/templates/definition/charger/alphatec.yaml new file mode 100644 index 000000000..eec793c2c --- /dev/null +++ b/templates/definition/charger/alphatec.yaml @@ -0,0 +1,15 @@ +template: alphatec +products: +- brand: Alphatec + description: + generic: Wallbox Mini +requirements: + evcc: ["sponsorship"] +params: +- name: modbus + choice: ["rs485"] + baudrate: 9600 + comset: "8N1" +render: | + type: alphatec + {{include "modbus" .}} diff --git a/templates/definition/charger/cfos.yaml b/templates/definition/charger/cfos.yaml index 9486f9a6a..ab7185bc3 100644 --- a/templates/definition/charger/cfos.yaml +++ b/templates/definition/charger/cfos.yaml @@ -1,8 +1,10 @@ template: cfos -description: - generic: cFos PowerBrain -requirements: - sponsorship: true +products: +- brand: cFos + description: + generic: PowerBrain +requirements: + evcc: ["sponsorship"] params: - name: host required: true diff --git a/templates/definition/charger/daheimladen.yaml b/templates/definition/charger/daheimladen.yaml index a62c10a75..12a8eecf0 100644 --- a/templates/definition/charger/daheimladen.yaml +++ b/templates/definition/charger/daheimladen.yaml @@ -1,6 +1,8 @@ template: daheimladen -description: - generic: Daheimladen (Cloud API) +products: +- brand: DaheimLaden + description: + generic: Wallbox (Cloud API) params: - name: token help: diff --git a/templates/definition/charger/easee.yaml b/templates/definition/charger/easee.yaml index cdb322ea5..6c4744a02 100644 --- a/templates/definition/charger/easee.yaml +++ b/templates/definition/charger/easee.yaml @@ -1,8 +1,11 @@ template: easee -description: - generic: Easee Home (Cloud API) -requirements: - sponsorship: true +products: +- brand: Easee + description: + generic: Home (Cloud API) +capabilities: ["1p3p"] +requirements: + evcc: ["sponsorship"] params: - name: user required: true diff --git a/templates/definition/charger/eebus.yaml b/templates/definition/charger/eebus.yaml index cb41543ce..fe02caf04 100644 --- a/templates/definition/charger/eebus.yaml +++ b/templates/definition/charger/eebus.yaml @@ -1,12 +1,12 @@ template: eebus -description: - de: EEBUS kompatible Wallbox - en: EEBUS compatible Wallbox -generic: true -capabilities: - iso151182: true -requirements: - eebus: true +products: +- description: + de: EEBUS kompatible Wallbox + en: EEBUS compatible Wallbox +group: generic +capabilities: ["iso151182"] +requirements: + evcc: ["eebus"] params: - name: ski required: true diff --git a/templates/definition/charger/evsedin.yaml b/templates/definition/charger/evsedin.yaml index 9656c5a1b..816dc8eef 100644 --- a/templates/definition/charger/evsedin.yaml +++ b/templates/definition/charger/evsedin.yaml @@ -1,6 +1,7 @@ template: evse_din -description: - generic: EVSE DIN +products: +- description: + generic: EVSE DIN params: - name: modbus choice: ["rs485"] diff --git a/templates/definition/charger/evsewifi.yaml b/templates/definition/charger/evsewifi.yaml index e26cb0fb0..3a58148f1 100644 --- a/templates/definition/charger/evsewifi.yaml +++ b/templates/definition/charger/evsewifi.yaml @@ -1,6 +1,7 @@ template: evsewifi -description: - generic: EVSE-Wifi +products: +- description: + generic: EVSE-Wifi params: - name: host required: true diff --git a/templates/definition/charger/fritzdect.yaml b/templates/definition/charger/fritzdect.yaml index 817a439d4..c3ff1d882 100644 --- a/templates/definition/charger/fritzdect.yaml +++ b/templates/definition/charger/fritzdect.yaml @@ -1,6 +1,9 @@ template: fritzdect -description: - generic: FritzDECT +products: +- brand: AVM + description: + generic: FritzDECT +group: switchsockets params: - name: uri default: https://fritz.box diff --git a/templates/definition/charger/goe-v3.yaml b/templates/definition/charger/goe-v3.yaml new file mode 100644 index 000000000..0fc406ddc --- /dev/null +++ b/templates/definition/charger/goe-v3.yaml @@ -0,0 +1,27 @@ +template: go-e-v3 +products: +- brand: go-e + description: + generic: Charger HOME+ (V3) +- brand: go-e + description: + generic: Charger HOMEfix (V3) +capabilities: ["1p3p"] +requirements: + description: + de: | + Benötigt mindestens Firmware 052.1 oder neuer. + + Für 1P/3P-Phasenumschaltung muss die HTTP API v2 im Charger aktiviert sein. + en: | + Requires firmware 052.1 or later. + + For 1P/3P-Phase switching the HTTP API v2 in the charger setup needs to be activated. + uri: https://docs.evcc.io/docs/devices/chargers#go-echarger-homeprov3 +params: +- name: host + required: true + example: 192.0.2.2 +render: | + type: go-e + uri: http://{{ .host }} diff --git a/templates/definition/charger/goe.yaml b/templates/definition/charger/goe.yaml index aac2ae9bb..5287d7fc4 100644 --- a/templates/definition/charger/goe.yaml +++ b/templates/definition/charger/goe.yaml @@ -1,11 +1,18 @@ template: go-e -description: - generic: go-eCharger Home/Pro/V3 +products: +- brand: go-e + description: + generic: Charger HOME+ +- brand: go-e + description: + generic: Charger HOMEfix +- brand: go-e + description: + generic: Charger Pro requirements: description: - en: Home und PRO require firmware 040.0 or later, V3 requires firmware 052.1 or later. - de: Home und PRO benötigen mindestens Firmware 040.0 oder neuer, V3 benötigt mindestens Firmware 052.1 oder neuer. - uri: https://docs.evcc.io/docs/devices/chargers#go-echarger-homeprov3 + en: Require firmware 040.0 or later. + de: Benötigen mindestens Firmware 040.0 oder neuer. params: - name: host required: true diff --git a/templates/definition/charger/heidelberg.yaml b/templates/definition/charger/heidelberg.yaml index 75bfa5355..94c7c7282 100644 --- a/templates/definition/charger/heidelberg.yaml +++ b/templates/definition/charger/heidelberg.yaml @@ -1,8 +1,13 @@ template: heidelberg -description: - generic: Heidelberg Energy Control (Modbus RTU) -requirements: - sponsorship: true +products: +- brand: Heidelberg + description: + generic: Energy Control (Modbus RTU) +- brand: Wahlter Werke + description: + generic: Basic Evo Pro +requirements: + evcc: ["sponsorship"] params: - name: modbus choice: ["rs485"] diff --git a/templates/definition/charger/icharge-cion.yaml b/templates/definition/charger/icharge-cion.yaml index 2abfbdbea..29386ba91 100644 --- a/templates/definition/charger/icharge-cion.yaml +++ b/templates/definition/charger/icharge-cion.yaml @@ -1,6 +1,8 @@ template: ichargecion -description: - generic: i-CHARGE CION (Modbus RTU-over-TCP) +products: +- brand: i-CHARGE + description: + generic: CION params: - name: modbus choice: ["tcpip"] diff --git a/templates/definition/charger/innogy-ebox.yaml b/templates/definition/charger/innogy-ebox.yaml index a7d52acae..22b739a7a 100644 --- a/templates/definition/charger/innogy-ebox.yaml +++ b/templates/definition/charger/innogy-ebox.yaml @@ -1,8 +1,10 @@ template: innogy-ebox -description: - generic: Innogy eBox -requirements: - sponsorship: true +products: +- brand: Innogy + description: + generic: eBox +requirements: + evcc: ["sponsorship"] params: - name: modbus choice: ["tcpip"] diff --git a/templates/definition/charger/keba.yaml b/templates/definition/charger/keba.yaml index c9437a541..3ae48d7d7 100644 --- a/templates/definition/charger/keba.yaml +++ b/templates/definition/charger/keba.yaml @@ -1,16 +1,34 @@ template: keba -description: - generic: KEBA Connect +products: +- brand: KEBA + description: + generic: KeContact P20 +- brand: KEBA + description: + generic: KeContact P30 +- brand: BMW + description: + generic: i Wallbox +capabilities: ["rfid"] requirements: description: - en: This requires the UDP function to be enabled with DIP 1.3 = ON, see the installation manual. de: Es muss eine sogenannte UDP Funktion über den DIP Schalter 1.3 eingeschaltet (ON) werden. Die Installationsanleitung der Wallbox hilft hier weiter. - uri: https://docs.evcc.io/docs/devices/chargers#keba-connect + en: This requires the UDP function to be enabled with DIP 1.3 = ON, see the installation manual. params: - name: host required: true example: 192.0.2.2 - name: rfid + example: 765765348 + advanced: true + help: + de: Die Kennung eines RFID Tags um den Lademodus zu starten, selbst wenn die Wallbox gesperrt ist. + en: A RFID tag ID to enable charging even when the wallbox is locked. +- name: serial + advanced: true + help: + de: Die Seriennummer, ermöglicht es auch mit der Wallbox zu kommunizieren wenn evcc in Docker läuft. + en: The serial number, allows to communicate with the Wallbox when running evcc in docker render: | type: keba uri: {{ .host }} @@ -18,3 +36,6 @@ render: | rfid: tag: {{ .rfid }} {{ end }} + {{ if ne .serial "" }} + serial: {{ .serial }} + {{ end }} diff --git a/templates/definition/charger/nrgkick-bluetooth.yaml b/templates/definition/charger/nrgkick-bluetooth.yaml index b8e413d4d..d8c1de73e 100644 --- a/templates/definition/charger/nrgkick-bluetooth.yaml +++ b/templates/definition/charger/nrgkick-bluetooth.yaml @@ -1,6 +1,8 @@ template: nrgkick-bluetooth -description: - generic: NRGKick Bluetooth +products: +- brand: NRGKick + description: + generic: Bluetooth params: - name: mac required: true diff --git a/templates/definition/charger/nrgkick-connect.yaml b/templates/definition/charger/nrgkick-connect.yaml index 19d358a47..c40ef73ac 100644 --- a/templates/definition/charger/nrgkick-connect.yaml +++ b/templates/definition/charger/nrgkick-connect.yaml @@ -1,6 +1,8 @@ template: nrgkick-connect -description: - generic: NRGKick Connect +products: +- brand: NRGKick + description: + generic: Connect params: - name: host required: true diff --git a/templates/definition/charger/openwb.yaml b/templates/definition/charger/openwb.yaml index be2f62970..6a644c486 100644 --- a/templates/definition/charger/openwb.yaml +++ b/templates/definition/charger/openwb.yaml @@ -1,6 +1,7 @@ template: openwb -description: - generic: openWB (MQTT) +products: +- description: + generic: openWB (MQTT) requirements: description: en: The wallbox has to be configured running as a loadpoint. diff --git a/templates/definition/charger/pcelectric-garo.yaml b/templates/definition/charger/pcelectric-garo.yaml new file mode 100644 index 000000000..2e091afb9 --- /dev/null +++ b/templates/definition/charger/pcelectric-garo.yaml @@ -0,0 +1,17 @@ +template: pcelectric-garo +products: +- brand: PC Electric + description: + generic: Garo +requirements: + evcc: ["sponsorship"] + description: + de: Es können momentan nur als Master konfigurierte Geräte verwendet werden! + en: Only devices configured as master can be used right now! +params: +- name: host +- name: port + default: 8080 +render: | + type: garo + uri: http://{{ .host }}:{{ .port }}/servlet diff --git a/templates/definition/charger/phoenix-em-eth.yaml b/templates/definition/charger/phoenix-em-eth.yaml index dca253571..485dd1aea 100644 --- a/templates/definition/charger/phoenix-em-eth.yaml +++ b/templates/definition/charger/phoenix-em-eth.yaml @@ -1,7 +1,8 @@ template: phoenix-em-eth -description: - generic: Phoenix EM-CP-PP-ETH Controller (Modbus TCP) -generic: true +products: +- description: + generic: Phoenix EM-CP-PP-ETH Controller (Modbus TCP) +group: generic requirements: description: en: The Wallbe must be connected using Ethernet and the DIP switch 10 must be set to 'ON'. diff --git a/templates/definition/charger/phoenix-ev-eth.yaml b/templates/definition/charger/phoenix-ev-eth.yaml index f90dcc36a..e68281d6f 100644 --- a/templates/definition/charger/phoenix-ev-eth.yaml +++ b/templates/definition/charger/phoenix-ev-eth.yaml @@ -1,7 +1,8 @@ template: phoenix-ev-eth -description: - generic: Phoenix EV-ETH Controller (Modbus TCP) -generic: true +products: +- description: + generic: Phoenix EV-ETH Controller (Modbus TCP) +group: generic requirements: description: en: The Wallbe must be connected using Ethernet and the DIP switch 10 must be set to 'ON'. diff --git a/templates/definition/charger/phoenix-ev-ser.yaml b/templates/definition/charger/phoenix-ev-ser.yaml index e781685ed..049c96fb3 100644 --- a/templates/definition/charger/phoenix-ev-ser.yaml +++ b/templates/definition/charger/phoenix-ev-ser.yaml @@ -1,7 +1,8 @@ template: phoenix-ev-ser -description: - generic: Phoenix EV-SER Controller (Modbus RTU) -generic: true +products: +- description: + generic: Phoenix EV-SER Controller (Modbus RTU) +group: generic params: - name: modbus choice: ["rs485"] diff --git a/templates/definition/charger/porsche-pmcc.yaml b/templates/definition/charger/porsche-pmcc.yaml index 8ec9847cd..f5e86e0b0 100644 --- a/templates/definition/charger/porsche-pmcc.yaml +++ b/templates/definition/charger/porsche-pmcc.yaml @@ -1,10 +1,11 @@ template: pmcc -description: - generic: Porsche Mobile Charger Connect -capabilities: - iso151182: true -requirements: - eebus: true +products: +- brand: Porsche + description: + generic: Mobile Charger Connect +capabilities: ["iso151182"] +requirements: + evcc: ["eebus"] params: - name: ski required: true diff --git a/templates/definition/charger/porsche-pmcp.yaml b/templates/definition/charger/porsche-pmcp.yaml index a0b0801f7..9ecc65769 100644 --- a/templates/definition/charger/porsche-pmcp.yaml +++ b/templates/definition/charger/porsche-pmcp.yaml @@ -1,8 +1,10 @@ template: pmcp -description: - generic: Porsche Mobile Charger Plus -requirements: - eebus: true +products: +- brand: Porsche + description: + generic: Mobile Charger Plus +requirements: + evcc: ["eebus"] params: - name: ski required: true diff --git a/templates/definition/charger/shelly.yaml b/templates/definition/charger/shelly.yaml index 2ed5a4ce2..5318dcb3a 100644 --- a/templates/definition/charger/shelly.yaml +++ b/templates/definition/charger/shelly.yaml @@ -1,6 +1,8 @@ template: shelly -description: - generic: Shelly +products: +- description: + generic: Shelly +group: switchsockets params: - name: host required: true diff --git a/templates/definition/charger/tasmota.yaml b/templates/definition/charger/tasmota.yaml index 04a7707c4..195fa94e9 100644 --- a/templates/definition/charger/tasmota.yaml +++ b/templates/definition/charger/tasmota.yaml @@ -1,6 +1,8 @@ template: tasmota -description: - generic: Tasmota +products: +- description: + generic: Tasmota +group: switchsockets params: - name: host required: true diff --git a/templates/definition/charger/tinkerforge-warp-pro.yaml b/templates/definition/charger/tinkerforge-warp-pro.yaml index b53eca9ba..af522879d 100644 --- a/templates/definition/charger/tinkerforge-warp-pro.yaml +++ b/templates/definition/charger/tinkerforge-warp-pro.yaml @@ -1,6 +1,8 @@ template: tinkerforge-warp-pro -description: - generic: TinkerForge WARP Charger Pro +products: +- brand: TinkerForge + description: + generic: WARP Charger Pro requirements: description: en: A MQTT Broker software needs to be running on a computer. The MQTT connection also needs to be configured in the wallbox. diff --git a/templates/definition/charger/tinkerforge-warp.yaml b/templates/definition/charger/tinkerforge-warp.yaml index bdd918cb0..302163fac 100644 --- a/templates/definition/charger/tinkerforge-warp.yaml +++ b/templates/definition/charger/tinkerforge-warp.yaml @@ -1,6 +1,8 @@ template: tinkerforge-warp -description: - generic: TinkerForge WARP Charger +products: +- brand: TinkerForge + description: + generic: WARP Charger requirements: description: en: A MQTT Broker software needs to be running on a computer. The MQTT connection also needs to be configured in the wallbox. diff --git a/templates/definition/charger/tplink.yaml b/templates/definition/charger/tplink.yaml index d67d799d4..0a31e7bd9 100644 --- a/templates/definition/charger/tplink.yaml +++ b/templates/definition/charger/tplink.yaml @@ -1,6 +1,9 @@ template: tplink -description: - generic: TP-LINK Smart Plug +products: +- brand: TP-LINK + description: + generic: Smart Plug +group: switchsockets params: - name: host required: true diff --git a/templates/definition/charger/wallbe-meter.yaml b/templates/definition/charger/wallbe-meter.yaml index 33f369da6..960d636df 100644 --- a/templates/definition/charger/wallbe-meter.yaml +++ b/templates/definition/charger/wallbe-meter.yaml @@ -1,7 +1,13 @@ template: wallbe-meter -description: - de: Wallbe (Eco, Pro) mit Strommessgerät - en: Wallbe (Eco, Pro) with Meter +products: +- brand: Wallbe + description: + de: Eco (mit Strommessgerät) + en: Eco (with Meter) +- brand: Wallbe + description: + de: Pro (mit Strommessgerät) + en: Pro (with Meter) requirements: description: en: The Wallbe must be connected using Ethernet and the DIP switch 10 must be set to 'ON'. diff --git a/templates/definition/charger/wallbe-pre2019-meter.yaml b/templates/definition/charger/wallbe-pre2019-meter.yaml index 0489f492a..fc0de3635 100644 --- a/templates/definition/charger/wallbe-pre2019-meter.yaml +++ b/templates/definition/charger/wallbe-pre2019-meter.yaml @@ -1,7 +1,13 @@ template: wallbe-pre2019-meter -description: - de: Wallbe (Eco, Pro) (vor ~2019) mit Strommessgerät - en: Wallbe (Eco, Pro) (pre ~2019) with Meter +products: +- brand: Wallbe + description: + de: Eco (vor ~2019, mit Strommessgerät) + en: Eco (pre ~2019, with Meter) +- brand: Wallbe + description: + de: Pro (vor ~2019, mit Strommessgerät) + en: Pro (pre ~2019, with Meter) requirements: description: en: The Wallbe must be connected using Ethernet and the DIP switch 10 must be set to 'ON'. diff --git a/templates/definition/charger/wallbe-pre2019.yaml b/templates/definition/charger/wallbe-pre2019.yaml index 3171acefb..2d8237024 100644 --- a/templates/definition/charger/wallbe-pre2019.yaml +++ b/templates/definition/charger/wallbe-pre2019.yaml @@ -1,7 +1,13 @@ template: wallbe-pre2019 -description: - de: Wallbe (Eco, Pro) (vor ~2019) - en: Wallbe (Eco, Pro) (pre ~2019) +products: +- brand: Wallbe + description: + de: Eco (vor ~2019) + en: Eco (pre ~2019) +- brand: Wallbe + description: + de: Pro (vor ~2019) + en: Pro (pre ~2019) requirements: description: en: The Wallbe must be connected using Ethernet and the DIP switch 10 must be set to 'ON'. diff --git a/templates/definition/charger/wallbe.yaml b/templates/definition/charger/wallbe.yaml index 7d8fdfbd9..3d195b172 100644 --- a/templates/definition/charger/wallbe.yaml +++ b/templates/definition/charger/wallbe.yaml @@ -1,6 +1,11 @@ template: wallbe -description: - generic: Wallbe (Eco, Pro) +products: +- brand: Wallbe + description: + generic: Eco +- brand: Wallbe + description: + generic: Pro requirements: description: en: The Wallbe must be connected using Ethernet and the DIP switch 10 must be set to 'ON'. diff --git a/templates/definition/defaults.yaml b/templates/definition/defaults.yaml new file mode 100644 index 000000000..66c6fff72 --- /dev/null +++ b/templates/definition/defaults.yaml @@ -0,0 +1,286 @@ +params: +- name: title + description: + de: Titel + en: Title + help: + de: Wird in der Benutzeroberfläche angezeigt + en: Will be displayed in the user interface +- name: modbusid + description: + generic: Modbus ID + default: 1 + valuetype: number +- name: modbusdevice + description: + de: Geräteadresse + en: Device address + help: + de: USB-RS485 Adapter Adresse + en: USB-RS485 Adapter address + example: /dev/ttyUSB0 +- name: modbusbaudrate + description: + de: Baudrate + en: Baudrate + help: + de: Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + en: Check the device settings, typical values are 9600, 19200, 38400, 57600, 115200 + default: 9600 + valuetype: number +- name: modbuscomset + description: + de: ComSet + en: ComSet + help: + de: Kommunikationsparameter für den Adapter + en: Communication parameter for the adapter + default: "8N1" +- name: host + description: + de: IP-Adresse oder Hostname + en: IP-Address or Hostname + help: + de: IP-Adresse oder Hostname + en: IP-Address or Hostname + example: "192.0.2.2" +- name: port + description: + de: Port + en: Port + help: + de: Port + en: Port + valuetype: number +- name: user + description: + de: Benutzername + en: Username + help: + de: Benutzername um auf das Gerät zuzugreifen + en: Username to access the device +- name: password + description: + de: Passwort + en: Password + help: + de: Passwort des Benutzerkontos + en: Password of the account + mask: true +- name: capacity + description: + de: Akku-Kapazität in kWh + en: Battery-Capacity in kWh + help: + de: Akku-Kapazität in kWh + en: Battery-Capacity in kWh + example: '41.5' + valuetype: float +- name: vin + description: + de: Fahrzeugidentifikationsnummer + en: Vehicle Identification Number + help: + de: Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind + en: Required if you own multiple vehicles of the same brand + example: W... +- name: cache + description: + de: Cache + en: Cache + help: + 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: mode + description: + de: Standard-Lademodus, wenn ein Fahrzeug angeschlossen ist + en: Default charging mode when a vehicle is connected + help: + de: Möglich sind Off, Now, MinPV und PV, oder leer wenn keiner definiert werden soll + en: Possible values are Off, Now, MinPV and PV, or empty if none should be set + valuetype: chargemodes +- name: minsoc + description: + de: Minimaler Ladestand (SoC) in % + en: Minimum state of charge (SoC) in % + help: + de: Lade sofort mit maximaler Geschwindigkeit bis zu dem angegeben Ladestand, wenn der Lademodus nicht auf 'Aus' steht + en: Charge immediately with maximum power up to the defined state of charge, if the charge mode is not set to 'OFF' + example: 25 + valuetype: number +- name: targetsoc + description: + de: Ziel-Ladestand (SoC) in % + en: Target state of charge (SoC) in % + help: + de: Bis zu welchem Ladestand (SoC) soll das Fahrzeug geladen werden + en: Until which state of charge (SoC) should the vehicle be charged + example: 80 + valuetype: number +- name: mincurrent + description: + de: Minimale Stromstärke in Ampere (A) + en: Minimum amperage (A) + help: + de: Definiert die minimale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll + en: The minimum amperage per connected phase with which the car should be charged + example: 6 + valuetype: number +- name: maxcurrent + description: + de: Maximale Stromstärke in Ampere (A) + en: Maximum amperage (A) + help: + de: Definiert die maximale Stromstärke pro angeschlossener Phase mit welcher das Fahrzeug geladen werden soll + en: The maximum amperage per connected phase with which the car shuold be charged + example: 16 + valuetype: number +- name: identifiers + description: + de: Identifikationsnummer + en: Identification + help: + de: "Kann meist erst später eingetragen werden, siehe: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox" + en: "Mostly this can be added later, see: https://docs.evcc.io/docs/guides/vehicles/#erkennung-des-fahrzeugs-an-der-wallbox" + valuetype: stringlist +- name: standbypower + description: + de: Standby-Leistung in W" + en: Standby power in W + help: + de: Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet + en: Power values above this value will be considered as charging pow + valuetype: number + +presets: + vehiclebase: + params: + - name: title + - name: user + required: true + - name: password + required: true + - name: vin + - name: capacity + - name: cache + advanced: true + render: | + {{define "vehicle-base"}} + {{- if ne .title "" }} + title: {{ .title }} + {{- end }} + user: {{ .user }} + password: {{ .password }} + {{- if ne .capacity "" }} + capacity: {{ .capacity }} + {{- end }} + {{- if ne .vin "" }} + vin: {{ .vin }} + {{- end }} + {{- if ne .cache "" }} + cache: {{ .cache }} + {{- end }} + {{end}} + vehicleidentify: + params: + - name: mode + advanced: true + - name: minSoC + advanced: true + - name: targetSoC + advanced: true + - name: minCurrent + advanced: true + - name: maxCurrent + advanced: true + - name: identifiers + advanced: true + valueType: stringlist + render: | + {{define "vehicle-identify"}} + {{- if or (ne .mode "") (ne .minSoC "") (ne .targetSoC "") (ne .minCurrent "") (ne .maxCurrent "") }} + onIdentify: + {{- if (ne .mode "") }} + mode: {{ .mode }} + {{- end }} + {{- if (ne .minSoC "") }} + minSoC: {{ .minSoC }} + {{- end }} + {{- if (ne .targetSoC "") }} + targetSoC: {{ .targetSoC }} + {{- end }} + {{- if (ne .minCurrent "") }} + minCurrent: {{ .minCurrent }} + {{- end }} + {{- if (ne .maxCurrent "") }} + maxCurrent: {{ .maxCurrent }} + {{- end }} + {{- end }} + {{- if ne (len .identifiers) 0 }} + identifiers: + {{- range .identifiers }} + - {{ . }} + {{- end }} + {{- end }} + {{end}} + +modbus: + interfaces: + rs485: ["rs485serial", "rs485tcpip"] + tcpip: ["tcpip"] + types: + rs485serial: + description: + generic: Serial (USB-RS485 Adapter) + params: + - reference: true + referencename: modbusid + name: id + - reference: true + referencename: modbusdevice + name: device + - reference: true + referencename: modbusbaudrate + name: baudrate + - reference: true + referencename: modbuscomset + name: comset + rs485tcpip: + description: + generic: Serial (Ethernet-RS485 Adapter) + params: + - reference: true + referencename: modbusid + name: id + - reference: true + name: host + - reference: true + name: port + default: 502 + - name: rtu + default: true + hidden: true + tcpip: + description: + generic: TCP/IP + params: + - reference: true + referencename: modbusid + name: id + - reference: true + name: host + - reference: true + name: port + default: 502 + +devicegroups: + generic: + de: Generische Unterstützung + en: generic support + switchsockets: + de: Schaltbare Steckdosen + en: switchable sockets + sockets: + de: Steckdosen + en: power sockets diff --git a/templates/definition/embed.go b/templates/definition/embed.go index 248da7d75..883a45b5a 100644 --- a/templates/definition/embed.go +++ b/templates/definition/embed.go @@ -6,6 +6,6 @@ var ( //go:embed charger/*.yaml meter/*.yaml vehicle/*.yaml YamlTemplates embed.FS - //go:embed parambaselist.yaml - ParamBaseListDefinition string + //go:embed defaults.yaml + DefaultsContent string ) diff --git a/templates/definition/meter/cfos.yaml b/templates/definition/meter/cfos.yaml index 085550e58..40589d027 100644 --- a/templates/definition/meter/cfos.yaml +++ b/templates/definition/meter/cfos.yaml @@ -1,8 +1,10 @@ template: cfos -description: - generic: cFos PowerBrain Meter -requirements: - sponsorship: true +products: +- brand: cFos + description: + generic: PowerBrain Meter +requirements: + evcc: ["sponsorship"] params: - name: usage choice: [ "charge" ] diff --git a/templates/definition/meter/discovergy.yaml b/templates/definition/meter/discovergy.yaml index 137ffb40b..29ce4f98d 100644 --- a/templates/definition/meter/discovergy.yaml +++ b/templates/definition/meter/discovergy.yaml @@ -1,6 +1,7 @@ template: discovergy -description: - generic: Discovergy (Cloud) +products: +- description: + generic: Discovergy (Cloud) params: - name: usage choice: ["grid", "pv"] diff --git a/templates/definition/meter/e3dc.yaml b/templates/definition/meter/e3dc.yaml index 72464c258..43e3abb64 100644 --- a/templates/definition/meter/e3dc.yaml +++ b/templates/definition/meter/e3dc.yaml @@ -1,6 +1,7 @@ template: e3dc -description: - generic: E3DC +products: +- description: + generic: E3DC guidedsetup: enable: true params: diff --git a/templates/definition/meter/eastron.yaml b/templates/definition/meter/eastron.yaml index 3db56d451..2f5e42016 100644 --- a/templates/definition/meter/eastron.yaml +++ b/templates/definition/meter/eastron.yaml @@ -1,7 +1,9 @@ template: eastron -description: - de: Eastron SDM Modbus Strommessgeräte - en: Eastron SDM Modbus Meter +products: +- brand: Eastron + description: + de: SDM Modbus Strommessgeräte + en: SDM Modbus Meter params: - name: usage choice: ["grid", "pv", "battery", "charge"] diff --git a/templates/definition/meter/fritzdect.yaml b/templates/definition/meter/fritzdect.yaml index 755223caa..6c4f8e037 100644 --- a/templates/definition/meter/fritzdect.yaml +++ b/templates/definition/meter/fritzdect.yaml @@ -1,6 +1,9 @@ template: fritzdect -description: - generic: FritzDECT +products: +- brand: AVM + description: + generic: FritzDECT +group: sockets params: - name: usage choice: ["pv", "charge"] diff --git a/templates/definition/meter/fronius-gen24.yaml b/templates/definition/meter/fronius-gen24.yaml index 3e14b98f7..3209ecbd7 100644 --- a/templates/definition/meter/fronius-gen24.yaml +++ b/templates/definition/meter/fronius-gen24.yaml @@ -1,6 +1,8 @@ template: fronius-gen24 -description: - generic: Fronius Symo GEN24 Plus +products: +- brand: Fronius + description: + generic: Symo GEN24 Plus guidedsetup: enable: true params: diff --git a/templates/definition/meter/fronius-solarapi-v1.yaml b/templates/definition/meter/fronius-solarapi-v1.yaml index f7b6c4558..98504b6e8 100644 --- a/templates/definition/meter/fronius-solarapi-v1.yaml +++ b/templates/definition/meter/fronius-solarapi-v1.yaml @@ -1,6 +1,8 @@ template: fronius-solarapi-v1 -description: - generic: Fronius Solar API V1 +products: +- brand: Fronius + description: + generic: Solar API V1 guidedsetup: enable: true params: diff --git a/templates/definition/meter/huawei-dongle-powersensor.yaml b/templates/definition/meter/huawei-dongle-powersensor.yaml new file mode 100644 index 000000000..8b9c7b792 --- /dev/null +++ b/templates/definition/meter/huawei-dongle-powersensor.yaml @@ -0,0 +1,103 @@ +template: huawei-dongle-powersensor +products: +- brand: Huawei + description: + generic: SUN2000 with Sdongle & Power Sensor +guidedsetup: + enable: true +params: +- name: usage + choice: [ "grid", "pv", "battery" ] +- name: modbus + choice: ["tcpip"] +render: | + type: custom + {{- if eq .usage "grid" }} + power: + source: modbus + {{include "modbus" . | indent 2}} + model: huawei + timeout: 30s + connectdelay: 5 + delay: 2s + register: + address: 37113 # Grid import export power + type: holding + decode: int32 + scale: -1 + energy: + source: modbus + {{include "modbus" . | indent 2}} + model: huawei + timeout: 30s + connectdelay: 5 + delay: 2s + register: + address: 37121 # Grid active energy + type: holding + decode: int32 + scale: 0.01 + currents: + - source: modbus + {{include "modbus" . | indent 2}} + model: huawei + register: + address: 37107 # Huawei phase A grid current + type: holding + decode: int32 + scale: -0.01 + - source: modbus + {{include "modbus" . | indent 2}} + model: huawei + register: + address: 37109 # Huawei phase B grid current + type: holding + decode: int32 + scale: -0.01 + - source: modbus + {{include "modbus" . | indent 2}} + model: huawei + register: + address: 37111 # Huawei phase C grid current + type: holding + decode: int32 + scale: -0.01 + {{- end }} + {{- if eq .usage "pv" }} + power: + source: modbus + {{include "modbus" . | indent 2}} + model: huawei + timeout: 30s + connectdelay: 5 + delay: 2s + register: + address: 32080 # Active generation power + type: holding + decode: int32 + {{- end }} + {{- if eq .usage "battery" }} + power: + source: modbus + {{include "modbus" . | indent 2}} + model: huawei + timeout: 30s + connectdelay: 5 + delay: 2s + register: + address: 37001 + type: holding + decode: int32 + soc: + source: modbus + {{include "modbus" . | indent 2}} + model: huawei + timeout: 30s + connectdelay: 5 + delay: 2s + register: + address: 37004 + type: holding + decode: uint16 + scale: 0.1 + {{- end }} diff --git a/templates/definition/meter/huawei-dongle.yaml b/templates/definition/meter/huawei-dongle.yaml new file mode 100644 index 000000000..28ddc94cb --- /dev/null +++ b/templates/definition/meter/huawei-dongle.yaml @@ -0,0 +1,25 @@ +template: huawei-dongle +products: +- brand: Huawei + description: + generic: SUN2000 with Sdongle +guidedsetup: + enable: true +params: +- name: usage + choice: [ "pv" ] +- name: modbus + choice: ["tcpip"] +render: | + type: custom + power: + source: modbus + {{include "modbus" . | indent 2}} + model: huawei + timeout: 30s + connectdelay: 5s + delay: 2s + register: + address: 32080 # Active generation power + type: holding + decode: int32 diff --git a/templates/definition/meter/huawei-sun2000-8ktl.yaml b/templates/definition/meter/huawei-sun2000-8ktl.yaml index 23a79ee87..8e7019112 100644 --- a/templates/definition/meter/huawei-sun2000-8ktl.yaml +++ b/templates/definition/meter/huawei-sun2000-8ktl.yaml @@ -1,6 +1,8 @@ template: huawei-sun2000-8ktl -description: - generic: Huawei SUN2000-8KTL +products: +- brand: Huawei + description: + generic: SUN2000-8KTL params: - name: usage choice: [ "pv" ] diff --git a/templates/definition/meter/kostal-ksem-inverter.yaml b/templates/definition/meter/kostal-ksem-inverter.yaml index 67e4f245e..132c56723 100644 --- a/templates/definition/meter/kostal-ksem-inverter.yaml +++ b/templates/definition/meter/kostal-ksem-inverter.yaml @@ -1,7 +1,9 @@ template: kostal-ksem-inverter -description: - de: Kostal Smart Energy Meter über den Wechselrichter - en: Kostal Smart Energy Meter via inverter +products: +- brand: Kostal + description: + de: Smart Energy Meter (über den Wechselrichter) + en: Smart Energy Meter (via inverter) params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/kostal-ksem.yaml b/templates/definition/meter/kostal-ksem.yaml index 214415c26..e76ff0a32 100644 --- a/templates/definition/meter/kostal-ksem.yaml +++ b/templates/definition/meter/kostal-ksem.yaml @@ -1,6 +1,8 @@ template: kostal-ksem -description: - generic: Kostal Smart Energy Meter +products: +- brand: Kostal + description: + generic: Smart Energy Meter params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/kostal-piko-mp-plus.yaml b/templates/definition/meter/kostal-piko-mp-plus.yaml index 747e752bd..8c4db8981 100644 --- a/templates/definition/meter/kostal-piko-mp-plus.yaml +++ b/templates/definition/meter/kostal-piko-mp-plus.yaml @@ -1,6 +1,8 @@ template: kostal-piko-mp-plus -description: - generic: Kostal Piko MP Plus +products: +- brand: Kostal + description: + generic: Piko MP Plus guidedsetup: enable: true linked: diff --git a/templates/definition/meter/kostal-piko.yaml b/templates/definition/meter/kostal-piko.yaml index 13f707c6c..4a38281a4 100644 --- a/templates/definition/meter/kostal-piko.yaml +++ b/templates/definition/meter/kostal-piko.yaml @@ -1,6 +1,11 @@ template: kostal-piko -description: - generic: Kostal Piko + Piko BA +products: +- brand: Kostal + description: + generic: Piko +- brand: Kostal + description: + generic: Piko BA guidedsetup: enable: true params: diff --git a/templates/definition/meter/kostal-plenticore.yaml b/templates/definition/meter/kostal-plenticore.yaml index 35b055eb7..04e849527 100644 --- a/templates/definition/meter/kostal-plenticore.yaml +++ b/templates/definition/meter/kostal-plenticore.yaml @@ -1,6 +1,8 @@ template: kostal-plenticore -description: - generic: Kostal Plenticore Hybrid +products: +- brand: Kostal + description: + generic: Plenticore Hybrid guidedsetup: enable: true linked: diff --git a/templates/definition/meter/lg-ess-home-8-10.yaml b/templates/definition/meter/lg-ess-home-8-10.yaml index c9649f1f6..8b4f5eadd 100644 --- a/templates/definition/meter/lg-ess-home-8-10.yaml +++ b/templates/definition/meter/lg-ess-home-8-10.yaml @@ -1,6 +1,8 @@ template: lg-ess-home-8-10 -description: - generic: LG ESS Home 8/10 +products: +- brand: LG + description: + generic: ESS Home 8/10 guidedsetup: enable: true params: diff --git a/templates/definition/meter/mqtt-meter.yaml b/templates/definition/meter/mqtt-meter.yaml index edfa289cb..9fda4fd11 100644 --- a/templates/definition/meter/mqtt-meter.yaml +++ b/templates/definition/meter/mqtt-meter.yaml @@ -1,10 +1,11 @@ template: mqtt-meter -description: - de: MQTT Strommessgerät - en: MQTT Meter -generic: true -requirements: - mqtt: true +products: +- description: + de: MQTT Strommessgerät + en: MQTT Meter +group: generic +requirements: + evcc: ["mqtt"] params: - name: usage choice: [ "grid", "pv", "charge", "battery" ] diff --git a/templates/definition/meter/powerdog.yaml b/templates/definition/meter/powerdog.yaml index 358c762b5..154d728fb 100644 --- a/templates/definition/meter/powerdog.yaml +++ b/templates/definition/meter/powerdog.yaml @@ -1,6 +1,7 @@ template: powerdog -description: - generic: Powerdog +products: +- description: + generic: Powerdog guidedsetup: enable: true params: diff --git a/templates/definition/meter/powerfox-poweropti.yaml b/templates/definition/meter/powerfox-poweropti.yaml index 99087936e..0cc926912 100644 --- a/templates/definition/meter/powerfox-poweropti.yaml +++ b/templates/definition/meter/powerfox-poweropti.yaml @@ -1,6 +1,8 @@ template: powerfox-poweropti -description: - generic: Powerfox Poweropti (Cloud) +products: +- brand: Powerfox + description: + generic: Poweropti (Cloud) params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/rct-power.yaml b/templates/definition/meter/rct-power.yaml index afe5d0b3e..a45ecc1ce 100644 --- a/templates/definition/meter/rct-power.yaml +++ b/templates/definition/meter/rct-power.yaml @@ -1,6 +1,8 @@ template: rct-power -description: - generic: RCT Power +products: +- brand: RCT + description: + generic: Power guidedsetup: enable: true params: diff --git a/templates/definition/meter/senec-home.yaml b/templates/definition/meter/senec-home.yaml index f26ce2fde..d9287ceed 100644 --- a/templates/definition/meter/senec-home.yaml +++ b/templates/definition/meter/senec-home.yaml @@ -1,6 +1,8 @@ template: senec-home -description: - generic: SENEC.Home +products: +- brand: SENEC + description: + generic: .Home guidedsetup: enable: true params: diff --git a/templates/definition/meter/shelly-3em.yaml b/templates/definition/meter/shelly-3em.yaml index 720aeb44c..2b2fb186b 100644 --- a/templates/definition/meter/shelly-3em.yaml +++ b/templates/definition/meter/shelly-3em.yaml @@ -1,6 +1,9 @@ template: shelly-3em -description: - generic: Shelly 3EM +products: +- brand: Shelly + description: + generic: 3EM +group: sockets params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/sma-energymeter.yaml b/templates/definition/meter/sma-energymeter.yaml index d9a608202..3287181e8 100644 --- a/templates/definition/meter/sma-energymeter.yaml +++ b/templates/definition/meter/sma-energymeter.yaml @@ -1,6 +1,8 @@ template: sma-energy-meter -description: - generic: SMA Energy Meter (Produktname) +products: +- brand: SMA + description: + generic: Energy Meter params: - name: usage choice: ["grid", "pv", "battery"] diff --git a/templates/definition/meter/sma-homemanager.yaml b/templates/definition/meter/sma-homemanager.yaml index bc89825a1..5a49cf83f 100644 --- a/templates/definition/meter/sma-homemanager.yaml +++ b/templates/definition/meter/sma-homemanager.yaml @@ -1,8 +1,9 @@ template: sma-home-manager -description: - generic: SMA Sunny Home Manager 2.0 -requirements: - hems: sma +products: +- brand: SMA + description: + generic: Sunny Home Manager 2.0 +capabilities: ["smahems"] guidedsetup: enable: true linked: diff --git a/templates/definition/meter/sma-inverter.yaml b/templates/definition/meter/sma-inverter.yaml index 25d85b360..bf7f17bf9 100644 --- a/templates/definition/meter/sma-inverter.yaml +++ b/templates/definition/meter/sma-inverter.yaml @@ -1,7 +1,9 @@ template: sma-inverter -description: - de: SMA Wechselrichter - en: SMA Inverter +products: +- brand: SMA + description: + de: Wechselrichter + en: Inverter params: - name: usage choice: ["pv", "battery"] diff --git a/templates/definition/meter/solaredge-hybrid.yaml b/templates/definition/meter/solaredge-hybrid.yaml index ee504c9cf..77b444237 100644 --- a/templates/definition/meter/solaredge-hybrid.yaml +++ b/templates/definition/meter/solaredge-hybrid.yaml @@ -1,6 +1,8 @@ template: solaredge-hybrid -description: - generic: Solaredge Hybrid +products: +- brand: Solaredge + description: + generic: Hybrid guidedsetup: enable: true requirements: diff --git a/templates/definition/meter/solaredge-inverter.yaml b/templates/definition/meter/solaredge-inverter.yaml index 5dd77b6bd..c04d58351 100644 --- a/templates/definition/meter/solaredge-inverter.yaml +++ b/templates/definition/meter/solaredge-inverter.yaml @@ -1,17 +1,27 @@ template: solaredge-inverter -description: - de: Solaredge Wechselrichter - en: Solaredge Inverter +products: +- brand: Solaredge + description: + de: Wechselrichter + en: Inverter guidedsetup: enable: true params: - name: usage - choice: [ "pv" ] + choice: [ "grid", "pv" ] - name: modbus choice: [ "tcpip" ] id: 1 port: 1502 +- name: timeout + default: 3s render: | type: modbus model: sunspec {{ include "modbus" . }} + timeout: {{ .timeout }} + {{- if eq .usage "grid" }} + subdevice: 1 + power: 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 bf9c56012..02130727b 100644 --- a/templates/definition/meter/solarlog.yaml +++ b/templates/definition/meter/solarlog.yaml @@ -1,6 +1,7 @@ template: solarlog -description: - generic: Solarlog +products: +- description: + generic: Solarlog guidedsetup: enable: true params: diff --git a/templates/definition/meter/solarwatt-myreserve.yaml b/templates/definition/meter/solarwatt-myreserve.yaml index 1ad877eab..b455e0681 100644 --- a/templates/definition/meter/solarwatt-myreserve.yaml +++ b/templates/definition/meter/solarwatt-myreserve.yaml @@ -1,6 +1,8 @@ template: solarwatt-myreserve -description: - generic: Solarwatt MyReserve +products: +- brand: Solarwatt + description: + generic: MyReserve guidedsetup: enable: true params: diff --git a/templates/definition/meter/sonnenbatterie_eco10.yaml b/templates/definition/meter/sonnenbatterie_eco10.yaml index cd62979f4..de756970b 100644 --- a/templates/definition/meter/sonnenbatterie_eco10.yaml +++ b/templates/definition/meter/sonnenbatterie_eco10.yaml @@ -1,6 +1,8 @@ template: sonnenbatterie-eco10 -description: - generic: Sonnenbatterie Eco/10 +products: +- brand: Sonnenbatterie + description: + generic: Eco/10 guidedsetup: enable: true params: diff --git a/templates/definition/meter/sungrow.yaml b/templates/definition/meter/sungrow.yaml index ef0201478..bbffc50ae 100644 --- a/templates/definition/meter/sungrow.yaml +++ b/templates/definition/meter/sungrow.yaml @@ -1,6 +1,8 @@ template: sungrow -description: - generic: Sungrow (Beta) +products: +- brand: Sungrow + description: + generic: Inverter (Beta) guidedsetup: enable: true params: diff --git a/templates/definition/meter/sunspec.yaml b/templates/definition/meter/sunspec.yaml index 8f87ea803..fc0180798 100644 --- a/templates/definition/meter/sunspec.yaml +++ b/templates/definition/meter/sunspec.yaml @@ -1,8 +1,9 @@ template: sunspec -description: - de: Wechselrichter (SunSpec) - en: Inverter (SunSpec) -generic: true +products: +- description: + de: Wechselrichter (SunSpec) + en: Inverter (SunSpec) +group: generic params: - name: usage choice: [ "grid", "pv", "battery" ] @@ -13,6 +14,7 @@ render: | model: sunspec {{ include "modbus" .}} {{- if eq .usage "grid" }} + subdevice: 1 power: 203:W # sunspec 3-phase meter power reading {{- end -}} {{- if eq .usage "battery" }} diff --git a/templates/definition/meter/tasmota.yaml b/templates/definition/meter/tasmota.yaml new file mode 100644 index 000000000..5c430aded --- /dev/null +++ b/templates/definition/meter/tasmota.yaml @@ -0,0 +1,21 @@ +template: tasmota +products: +- description: + generic: Tasmota +group: sockets +params: +- name: usage + choice: [ "grid", "pv", "charge" ] +- name: host + required: true + example: 192.0.2.2 +render: | + type: custom + power: # power reading (W) + source: http + uri: http://{{ .host }}/cm?cmnd=Status%208 + jq: .StatusSNS.ENERGY.Power + energy: # energy reading (Wh) + source: http + uri: http://{{ .host }}/cm?cmnd=Status%208 + jq: .StatusSNS.ENERGY.Total * 1000 diff --git a/templates/definition/meter/tesla-powerwall.yaml b/templates/definition/meter/tesla-powerwall.yaml index f0b3a7804..112acfb41 100644 --- a/templates/definition/meter/tesla-powerwall.yaml +++ b/templates/definition/meter/tesla-powerwall.yaml @@ -1,6 +1,8 @@ template: tesla-powerwall -description: - generic: Tesla Powerwall +products: +- brand: Tesla + description: + generic: Powerwall guidedsetup: enable: true params: diff --git a/templates/definition/meter/varta-energiespeicher.yaml b/templates/definition/meter/varta-energiespeicher.yaml index 19cb3fe86..8274180c2 100644 --- a/templates/definition/meter/varta-energiespeicher.yaml +++ b/templates/definition/meter/varta-energiespeicher.yaml @@ -1,6 +1,8 @@ template: varta-energiespeicher -description: - generic: VARTA Energiespeicher +products: +- brand: VARTA + description: + generic: Energiespeicher guidedsetup: enable: true params: diff --git a/templates/definition/meter/victron-energy.yaml b/templates/definition/meter/victron-energy.yaml index d1e73c11d..4965fe4d6 100644 --- a/templates/definition/meter/victron-energy.yaml +++ b/templates/definition/meter/victron-energy.yaml @@ -1,6 +1,8 @@ template: victron-energy -description: - generic: Victron Energy +products: +- brand: Victron + description: + generic: Energy guidedsetup: enable: true params: diff --git a/templates/definition/meter/volkszaehler-http.yaml b/templates/definition/meter/volkszaehler-http.yaml index 7effafdd7..5b43c5fb8 100644 --- a/templates/definition/meter/volkszaehler-http.yaml +++ b/templates/definition/meter/volkszaehler-http.yaml @@ -1,7 +1,8 @@ template: volkszaehler-http -description: - generic: Volkszähler (HTTP API) -generic: true +products: +- description: + generic: Volkszähler (HTTP API) +group: generic params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/volkszaehler-importexport.yaml b/templates/definition/meter/volkszaehler-importexport.yaml index 33a53c233..1f940c1c0 100644 --- a/templates/definition/meter/volkszaehler-importexport.yaml +++ b/templates/definition/meter/volkszaehler-importexport.yaml @@ -1,7 +1,8 @@ template: volkszaehler-importexport -description: - generic: Volkszähler (HTTP API, Import & Export) -generic: true +products: +- description: + generic: Volkszähler (HTTP API, Import & Export) +group: generic params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/volkszaehler-ws.yaml b/templates/definition/meter/volkszaehler-ws.yaml index 83b46dcf5..073df9ec9 100644 --- a/templates/definition/meter/volkszaehler-ws.yaml +++ b/templates/definition/meter/volkszaehler-ws.yaml @@ -1,7 +1,8 @@ template: volkszaehler-ws -description: - generic: Volkszähler (WebSocket API) -generic: true +products: +- description: + generic: Volkszähler (WebSocket API) +group: generic params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/meter/vzlogger.yaml b/templates/definition/meter/vzlogger.yaml index 1a287531b..ae2fd3485 100644 --- a/templates/definition/meter/vzlogger.yaml +++ b/templates/definition/meter/vzlogger.yaml @@ -1,7 +1,8 @@ template: vzlogger -description: - generic: vzlogger -generic: true +products: +- description: + generic: vzlogger +group: generic params: - name: usage choice: [ "grid" ] diff --git a/templates/definition/parambaselist.yaml b/templates/definition/parambaselist.yaml deleted file mode 100644 index 95011d9a3..000000000 --- a/templates/definition/parambaselist.yaml +++ /dev/null @@ -1,73 +0,0 @@ -vehiclebase: - params: - - name: title - - name: user - required: true - - name: password - required: true - mask: true - - name: vin - example: W... - - name: capacity - default: '50' - - name: cache - advanced: true - render: | - {{define "vehicle-base"}} - {{- if ne .title "" }} - title: {{ .title }} - {{- end }} - user: {{ .user }} - password: {{ .password }} - {{- if ne .capacity "" }} - capacity: {{ .capacity }} - {{- end }} - {{- if ne .vin "" }} - vin: {{ .vin }} - {{- end }} - {{- if ne .cache "" }} - cache: {{ .cache }} - {{- end }} - {{end}} -vehicleidentify: - params: - - name: mode - advanced: true - - name: minSoC - advanced: true - - name: targetSoC - advanced: true - - name: minCurrent - advanced: true - - name: maxCurrent - advanced: true - - name: identifiers - advanced: true - valueType: stringlist - render: | - {{define "vehicle-identify"}} - {{- if or (ne .mode "") (ne .minSoC "") (ne .targetSoC "") (ne .minCurrent "") (ne .maxCurrent "") }} - onIdentify: - {{- if (ne .mode "") }} - mode: {{ .mode }} - {{- end }} - {{- if (ne .minSoC "") }} - minSoC: {{ .minSoC }} - {{- end }} - {{- if (ne .targetSoC "") }} - targetSoC: {{ .targetSoC }} - {{- end }} - {{- if (ne .minCurrent "") }} - minCurrent: {{ .minCurrent }} - {{- end }} - {{- if (ne .maxCurrent "") }} - maxCurrent: {{ .maxCurrent }} - {{- end }} - {{- end }} - {{- if ne (len .identifiers) 0 }} - identifiers: - {{- range .identifiers }} - - {{ . }} - {{- end }} - {{- end }} - {{end}} diff --git a/templates/definition/vehicle/audi.yaml b/templates/definition/vehicle/audi.yaml index 9deb03080..e78f354c1 100644 --- a/templates/definition/vehicle/audi.yaml +++ b/templates/definition/vehicle/audi.yaml @@ -1,9 +1,9 @@ template: audi -description: - generic: Audi +products: +- brand: Audi params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WAUZZZ... - name: capacity diff --git a/templates/definition/vehicle/bmw.yaml b/templates/definition/vehicle/bmw.yaml index ebc640478..f7bdf8a5a 100644 --- a/templates/definition/vehicle/bmw.yaml +++ b/templates/definition/vehicle/bmw.yaml @@ -1,9 +1,9 @@ template: bmw -description: - generic: BMW +products: +- brand: BMW params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WBMW... - name: capacity diff --git a/templates/definition/vehicle/carwings.yaml b/templates/definition/vehicle/carwings.yaml index 76b368d73..fa6de328a 100644 --- a/templates/definition/vehicle/carwings.yaml +++ b/templates/definition/vehicle/carwings.yaml @@ -1,9 +1,11 @@ template: carwings -description: - generic: Nissan Leaf (pre 2019) +products: +- brand: Nissan + description: + generic: Leaf (pre 2019) params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 50 render: | diff --git a/templates/definition/vehicle/citroen.yaml b/templates/definition/vehicle/citroen.yaml index 2077ee400..8e116ee85 100644 --- a/templates/definition/vehicle/citroen.yaml +++ b/templates/definition/vehicle/citroen.yaml @@ -1,9 +1,9 @@ template: citroen -description: - generic: Citroen +products: +- brand: Citroen params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 50 render: | diff --git a/templates/definition/vehicle/dacia.yaml b/templates/definition/vehicle/dacia.yaml index 182636786..6136592a5 100644 --- a/templates/definition/vehicle/dacia.yaml +++ b/templates/definition/vehicle/dacia.yaml @@ -1,9 +1,9 @@ template: dacia -description: - generic: Dacia +products: +- brand: Dacia params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 27.4 render: | diff --git a/templates/definition/vehicle/ds.yaml b/templates/definition/vehicle/ds.yaml index 81e81b699..fc50bb588 100644 --- a/templates/definition/vehicle/ds.yaml +++ b/templates/definition/vehicle/ds.yaml @@ -1,9 +1,9 @@ template: ds -description: - generic: DS +products: +- brand: DS params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 50 render: | diff --git a/templates/definition/vehicle/evnotify.yaml b/templates/definition/vehicle/evnotify.yaml index 290f143af..37917d11b 100644 --- a/templates/definition/vehicle/evnotify.yaml +++ b/templates/definition/vehicle/evnotify.yaml @@ -1,7 +1,8 @@ template: evnotify -description: - generic: evNotify -generic: true +products: +- description: + generic: evNotify +group: generic params: - name: title - name: akey @@ -11,7 +12,7 @@ params: - name: capacity default: 64 valuetype: float -- base: vehicleidentify +- preset: vehicleidentify render: | type: custom {{- if ne .title "" }} diff --git a/templates/definition/vehicle/fiat.yaml b/templates/definition/vehicle/fiat.yaml index 8fc58367e..93cadcc38 100644 --- a/templates/definition/vehicle/fiat.yaml +++ b/templates/definition/vehicle/fiat.yaml @@ -1,15 +1,15 @@ template: fiat -description: - generic: Fiat +products: +- brand: Fiat params: -- base: vehiclebase +- preset: vehiclebase - name: vin example: ZFAE... - name: capacity default: 42 - name: pin mask: true -- base: vehicleidentify +- preset: vehicleidentify render: | type: fiat {{include "vehicle-base" .}} diff --git a/templates/definition/vehicle/ford.yaml b/templates/definition/vehicle/ford.yaml index 0d2d0ae92..a8bca2e82 100644 --- a/templates/definition/vehicle/ford.yaml +++ b/templates/definition/vehicle/ford.yaml @@ -1,9 +1,9 @@ template: ford -description: - generic: Ford +products: +- brand: Ford params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WF0FXX... - name: capacity diff --git a/templates/definition/vehicle/hyundai.yaml b/templates/definition/vehicle/hyundai.yaml index de7daddc1..4381e09a1 100644 --- a/templates/definition/vehicle/hyundai.yaml +++ b/templates/definition/vehicle/hyundai.yaml @@ -1,9 +1,9 @@ template: hyundai -description: - generic: Hyundai +products: +- brand: Hyundai params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 64 render: | diff --git a/templates/definition/vehicle/kia.yaml b/templates/definition/vehicle/kia.yaml index 4e79d48f2..f9eada861 100644 --- a/templates/definition/vehicle/kia.yaml +++ b/templates/definition/vehicle/kia.yaml @@ -1,9 +1,9 @@ template: kia -description: - generic: Kia +products: +- brand: Kia params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 64 render: | diff --git a/templates/definition/vehicle/mercedes.yaml b/templates/definition/vehicle/mercedes.yaml index 0d68e89aa..712e7abbf 100644 --- a/templates/definition/vehicle/mercedes.yaml +++ b/templates/definition/vehicle/mercedes.yaml @@ -1,14 +1,16 @@ template: mercedes -description: - generic: Mercedes EQC +products: +- brand: Mercedes + description: + generic: EQC params: - base: vehiclebase -- base: vehicleidentify - name: clientId example: b8f717b3-f1b7-4169-a8ef-7ffd80c5327c - name: clientSecret mask: true example: QxSNLrIepEmcjGFdZpeUczqyqoOrhmxhASDasdvhizjhxHSEWFDfunfbeu +- base: vehicleidentify render: | type: mercedes {{include "vehicle-base" .}} diff --git a/templates/definition/vehicle/mini.yaml b/templates/definition/vehicle/mini.yaml index ba428a9c6..570995ad4 100644 --- a/templates/definition/vehicle/mini.yaml +++ b/templates/definition/vehicle/mini.yaml @@ -1,9 +1,9 @@ template: mini -description: - generic: Mini +products: +- brand: Mini params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WBMW... - name: capacity diff --git a/templates/definition/vehicle/nissan.yaml b/templates/definition/vehicle/nissan.yaml index 91fdfc105..0d21626c9 100644 --- a/templates/definition/vehicle/nissan.yaml +++ b/templates/definition/vehicle/nissan.yaml @@ -1,9 +1,11 @@ template: nissan -description: - generic: Nissan +products: +- brand: Nissan + description: + generic: Leaf params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 60 render: | diff --git a/templates/definition/vehicle/niu-e-scooter.yaml b/templates/definition/vehicle/niu-e-scooter.yaml index d97939e40..2a691c5a0 100644 --- a/templates/definition/vehicle/niu-e-scooter.yaml +++ b/templates/definition/vehicle/niu-e-scooter.yaml @@ -1,6 +1,8 @@ template: niu-e-scooter -description: - generic: NIU E-Scooter +products: +- brand: NIU + description: + generic: E-Scooter params: - name: title - name: user @@ -10,7 +12,7 @@ params: mask: true - name: serial required: true -- base: vehicleidentify +- preset: vehicleidentify render: | type: niu {{- if ne .title "" }} diff --git a/templates/definition/vehicle/opel.yaml b/templates/definition/vehicle/opel.yaml index 89ede3a24..089e1b028 100644 --- a/templates/definition/vehicle/opel.yaml +++ b/templates/definition/vehicle/opel.yaml @@ -1,9 +1,9 @@ template: opel -description: - generic: Opel +products: +- brand: Opel params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WP0... - name: capacity diff --git a/templates/definition/vehicle/ovms.yaml b/templates/definition/vehicle/ovms.yaml index ae81c0e51..dc379b4ce 100644 --- a/templates/definition/vehicle/ovms.yaml +++ b/templates/definition/vehicle/ovms.yaml @@ -1,7 +1,8 @@ template: ovms -description: - generic: Open Vehicle Monitoring System -generic: true +products: +- description: + generic: Open Vehicle Monitoring System +group: generic params: - name: title - name: user @@ -13,7 +14,7 @@ params: required: true - name: capacity default: 12 -- base: vehicleidentify +- preset: vehicleidentify render: | type: ovms {{- if ne .title "" }} diff --git a/templates/definition/vehicle/peugeot.yaml b/templates/definition/vehicle/peugeot.yaml index 06ddaf91d..0c10fff91 100644 --- a/templates/definition/vehicle/peugeot.yaml +++ b/templates/definition/vehicle/peugeot.yaml @@ -1,9 +1,9 @@ template: peugeot -description: - generic: Peugeot +products: +- brand: Peugeot params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 50 render: | diff --git a/templates/definition/vehicle/porsche.yaml b/templates/definition/vehicle/porsche.yaml index 8b49a0732..435e5ba1e 100644 --- a/templates/definition/vehicle/porsche.yaml +++ b/templates/definition/vehicle/porsche.yaml @@ -1,9 +1,9 @@ template: porsche -description: - generic: Porsche +products: +- brand: Porsche params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 83.4 render: | diff --git a/templates/definition/vehicle/renault.yaml b/templates/definition/vehicle/renault.yaml index 77e88551a..db2b5d85a 100644 --- a/templates/definition/vehicle/renault.yaml +++ b/templates/definition/vehicle/renault.yaml @@ -1,9 +1,9 @@ template: renault -description: - generic: Renault +products: +- brand: Renault params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WREN... - name: capacity diff --git a/templates/definition/vehicle/seat.yaml b/templates/definition/vehicle/seat.yaml index ea0b8da43..304f9d0e4 100644 --- a/templates/definition/vehicle/seat.yaml +++ b/templates/definition/vehicle/seat.yaml @@ -1,9 +1,14 @@ template: seat -description: - generic: Seat (Cupra, Mii) +products: +- brand: Seat + description: + generic: Cupra +- brand: Seat + description: + generic: Mii params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 10 render: | diff --git a/templates/definition/vehicle/skoda.yaml b/templates/definition/vehicle/skoda.yaml index ad05f2639..25d9bcdb3 100644 --- a/templates/definition/vehicle/skoda.yaml +++ b/templates/definition/vehicle/skoda.yaml @@ -1,9 +1,11 @@ template: skoda -description: - generic: Skoda (Citigo) +products: +- brand: Skoda + description: + generic: Citigo params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 10 render: | diff --git a/templates/definition/vehicle/skodaenyaq.yaml b/templates/definition/vehicle/skodaenyaq.yaml index 775d5c930..0552b985d 100644 --- a/templates/definition/vehicle/skodaenyaq.yaml +++ b/templates/definition/vehicle/skodaenyaq.yaml @@ -1,9 +1,11 @@ template: enyaq -description: - generic: Skoda (Enyaq) +products: +- brand: Skoda + description: + generic: Enyaq params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 50 render: | diff --git a/templates/definition/vehicle/smart.yaml b/templates/definition/vehicle/smart.yaml index a98f2dab1..4724d1434 100644 --- a/templates/definition/vehicle/smart.yaml +++ b/templates/definition/vehicle/smart.yaml @@ -1,6 +1,8 @@ template: smart -description: - generic: Smart EQ +products: +- brand: Smart + description: + generic: EQ params: - base: vehiclebase - base: vehicleidentify diff --git a/templates/definition/vehicle/tesla.yaml b/templates/definition/vehicle/tesla.yaml index 13b6d0a31..e1704bbd1 100644 --- a/templates/definition/vehicle/tesla.yaml +++ b/templates/definition/vehicle/tesla.yaml @@ -1,6 +1,22 @@ template: tesla -description: - generic: Tesla +products: +- brand: Tesla +requirements: + description: + de: | + Es wird ein `access` und ein `refresh` Token für die Kommunikation mit der Tesla API erstellt werden. + + Folgende Apps ermöglichen das Erstellen von den beiden Tokens: + - [Auth app for Tesla (iOS)](https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613#?platform=iphone) + - [Tesla Tokens (Android)](https://play.google.com/store/apps/details?id=net.leveugle.teslatokens) + - [Tesla Auth (macOS, Linux)](https://github.com/adriankumpf/tesla_auth) + en: | + You need to generate an `access` and a `refresh` token for communicating with the Tesla API. + + The following apps allow to create these tokens: + - [Auth app for Tesla (iOS)](https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613#?platform=iphone) + - [Tesla Tokens (Android)](https://play.google.com/store/apps/details?id=net.leveugle.teslatokens) + - [Tesla Auth (macOS, Linux)](https://github.com/adriankumpf/tesla_auth) params: - name: title - name: accessToken @@ -17,7 +33,7 @@ params: example: W... - name: capacity default: 90 -- base: vehicleidentify +- preset: vehicleidentify render: | type: tesla {{- if ne .title "" }} diff --git a/templates/definition/vehicle/tronity.yaml b/templates/definition/vehicle/tronity.yaml index 7c8e0d734..be6fc9885 100644 --- a/templates/definition/vehicle/tronity.yaml +++ b/templates/definition/vehicle/tronity.yaml @@ -1,9 +1,10 @@ template: tronity -description: - generic: Tronity -generic: true -requirements: - sponsorship: true +products: +- description: + generic: Tronity +group: generic +requirements: + evcc: ["sponsorship"] params: - name: title - name: userid @@ -18,7 +19,7 @@ params: example: W... - name: capacity default: 10 -- base: vehicleidentify +- preset: vehicleidentify render: | type: tronity {{- if ne .title "" }} diff --git a/templates/definition/vehicle/volvo.yaml b/templates/definition/vehicle/volvo.yaml index ffc41e446..de4124419 100644 --- a/templates/definition/vehicle/volvo.yaml +++ b/templates/definition/vehicle/volvo.yaml @@ -1,9 +1,9 @@ template: volvo -description: - generic: Volvo +products: +- brand: Volvo params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: capacity default: 50 render: | diff --git a/templates/definition/vehicle/vw.yaml b/templates/definition/vehicle/vw.yaml index 441a239f3..3d836d6dd 100644 --- a/templates/definition/vehicle/vw.yaml +++ b/templates/definition/vehicle/vw.yaml @@ -1,9 +1,11 @@ template: vw -description: - generic: Volkswagen (We Connect) +products: +- brand: Volkswagen + description: + generic: We Connect params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WVWZZZ... - name: capacity diff --git a/templates/definition/vehicle/vwid.yaml b/templates/definition/vehicle/vwid.yaml index 35dc0e41a..e05b09518 100644 --- a/templates/definition/vehicle/vwid.yaml +++ b/templates/definition/vehicle/vwid.yaml @@ -1,9 +1,11 @@ template: id -description: - generic: Volkswagen (We Connect ID) +products: +- brand: Volkswagen + description: + generic: We Connect ID params: -- base: vehiclebase -- base: vehicleidentify +- preset: vehiclebase +- preset: vehicleidentify - name: vin example: WVWZZZ... - name: capacity diff --git a/templates/docs/charger/abl.yaml b/templates/docs/charger/abl.yaml deleted file mode 100644 index 0865d4ea2..000000000 --- a/templates/docs/charger/abl.yaml +++ /dev/null @@ -1,3 +0,0 @@ -type: template -template: abl -description: ABL eMH / SENEC.Wallbox pro \ No newline at end of file diff --git a/templates/docs/charger/abl_0.yaml b/templates/docs/charger/abl_0.yaml new file mode 100644 index 000000000..716774f6c --- /dev/null +++ b/templates/docs/charger/abl_0.yaml @@ -0,0 +1,19 @@ +product: + brand: ABL + description: eMH +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: abl + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 38400 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8E1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/abl_1.yaml b/templates/docs/charger/abl_1.yaml new file mode 100644 index 000000000..fa2b2c3d7 --- /dev/null +++ b/templates/docs/charger/abl_1.yaml @@ -0,0 +1,19 @@ +product: + brand: SENEC + description: Wallbox pro +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: abl + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 38400 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8E1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/alfen_0.yaml b/templates/docs/charger/alfen_0.yaml new file mode 100644 index 000000000..f6c07a234 --- /dev/null +++ b/templates/docs/charger/alfen_0.yaml @@ -0,0 +1,15 @@ +product: + brand: Alfen + description: Eve +capabilities: ["1p3p"] +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: alfen + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/alphatec_0.yaml b/templates/docs/charger/alphatec_0.yaml new file mode 100644 index 000000000..5b17109e5 --- /dev/null +++ b/templates/docs/charger/alphatec_0.yaml @@ -0,0 +1,19 @@ +product: + brand: Alphatec + description: Wallbox Mini +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: alphatec + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/cfos.yaml b/templates/docs/charger/cfos.yaml deleted file mode 100644 index e9b8bd564..000000000 --- a/templates/docs/charger/cfos.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: cfos -description: cFos PowerBrain -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/charger/cfos_0.yaml b/templates/docs/charger/cfos_0.yaml new file mode 100644 index 000000000..bda65d20b --- /dev/null +++ b/templates/docs/charger/cfos_0.yaml @@ -0,0 +1,10 @@ +product: + brand: cFos + description: PowerBrain +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: cfos + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/daheimladen.yaml b/templates/docs/charger/daheimladen.yaml deleted file mode 100644 index d31039efc..000000000 --- a/templates/docs/charger/daheimladen.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: daheimladen -description: Daheimladen (Cloud API) -stationid: xxxxxxxxxxxx990 # Die Software Seriennummer, welche auf dem Bildschirm der Wallbox angezeigt wird \ No newline at end of file diff --git a/templates/docs/charger/daheimladen_0.yaml b/templates/docs/charger/daheimladen_0.yaml new file mode 100644 index 000000000..7b91b08bd --- /dev/null +++ b/templates/docs/charger/daheimladen_0.yaml @@ -0,0 +1,10 @@ +product: + brand: DaheimLaden + description: Wallbox (Cloud API) + +render: +- default: | + type: template + template: daheimladen + token: # Sie bekommen dieses Access Token vom Daheimladen Support: info@daheimladen.de # Optional + stationid: xxxxxxxxxxxx990 # Die Software Seriennummer, welche auf dem Bildschirm der Wallbox angezeigt wird # Optional \ No newline at end of file diff --git a/templates/docs/charger/easee.yaml b/templates/docs/charger/easee.yaml deleted file mode 100644 index ca929f51a..000000000 --- a/templates/docs/charger/easee.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: easee -description: Easee Home (Cloud API) -user: -password: -charger: EH______ \ No newline at end of file diff --git a/templates/docs/charger/easee_0.yaml b/templates/docs/charger/easee_0.yaml new file mode 100644 index 000000000..c40d66323 --- /dev/null +++ b/templates/docs/charger/easee_0.yaml @@ -0,0 +1,13 @@ +product: + brand: Easee + description: Home (Cloud API) +capabilities: ["1p3p"] +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: easee + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + charger: EH______ \ No newline at end of file diff --git a/templates/docs/charger/eebus.yaml b/templates/docs/charger/eebus.yaml deleted file mode 100644 index a11766683..000000000 --- a/templates/docs/charger/eebus.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: eebus -description: EEBUS kompatible Wallbox -ski: # Die SKI der Wallbox, ist üblicherweise im Web Interface der Wallbox zu finden -enforcePVLimits: true # Verwende PV Laden über eine Ladebegrenzung (wie herkömmliche Wallboxen) bei Fahrzeugen mit Unterstützung von ISO15118 \ No newline at end of file diff --git a/templates/docs/charger/eebus_0.yaml b/templates/docs/charger/eebus_0.yaml new file mode 100644 index 000000000..ac0a95266 --- /dev/null +++ b/templates/docs/charger/eebus_0.yaml @@ -0,0 +1,12 @@ +product: + description: EEBUS kompatible Wallbox + group: Generische Unterstützung +capabilities: ["iso151182"] +requirements: ["eebus"] + +render: +- default: | + type: template + template: eebus + ski: # Die SKI der Wallbox, ist üblicherweise im Web Interface der Wallbox zu finden + enforcePVLimits: true # Verwende PV Laden über eine Ladebegrenzung (wie herkömmliche Wallboxen) bei Fahrzeugen mit Unterstützung von ISO15118 # Optional \ No newline at end of file diff --git a/templates/docs/charger/evse_din.yaml b/templates/docs/charger/evse_din.yaml deleted file mode 100644 index 8854650a9..000000000 --- a/templates/docs/charger/evse_din.yaml +++ /dev/null @@ -1,3 +0,0 @@ -type: template -template: evse_din -description: EVSE DIN \ No newline at end of file diff --git a/templates/docs/charger/evse_din_0.yaml b/templates/docs/charger/evse_din_0.yaml new file mode 100644 index 000000000..049281a32 --- /dev/null +++ b/templates/docs/charger/evse_din_0.yaml @@ -0,0 +1,17 @@ +product: + description: EVSE DIN + +render: +- default: | + type: template + template: evse_din + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/evsewifi.yaml b/templates/docs/charger/evsewifi.yaml deleted file mode 100644 index 01bfb9d8e..000000000 --- a/templates/docs/charger/evsewifi.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: evsewifi -description: EVSE-Wifi -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/charger/evsewifi_0.yaml b/templates/docs/charger/evsewifi_0.yaml new file mode 100644 index 000000000..667592be0 --- /dev/null +++ b/templates/docs/charger/evsewifi_0.yaml @@ -0,0 +1,8 @@ +product: + description: EVSE-Wifi + +render: +- default: | + type: template + template: evsewifi + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/fritzdect.yaml b/templates/docs/charger/fritzdect.yaml deleted file mode 100644 index 6b2dc79a1..000000000 --- a/templates/docs/charger/fritzdect.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: fritzdect -description: FritzDECT -uri: https://fritz.box -user: -password: -ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. -standbypower: 15 \ No newline at end of file diff --git a/templates/docs/charger/fritzdect_0.yaml b/templates/docs/charger/fritzdect_0.yaml new file mode 100644 index 000000000..941defbb9 --- /dev/null +++ b/templates/docs/charger/fritzdect_0.yaml @@ -0,0 +1,14 @@ +product: + brand: AVM + description: FritzDECT + group: Schaltbare Steckdosen + +render: +- default: | + type: template + template: fritzdect + uri: https://fritz.box # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. + standbypower: 15 # Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet # Optional \ No newline at end of file diff --git a/templates/docs/charger/go-e-v3_0.yaml b/templates/docs/charger/go-e-v3_0.yaml new file mode 100644 index 000000000..3a082bf41 --- /dev/null +++ b/templates/docs/charger/go-e-v3_0.yaml @@ -0,0 +1,15 @@ +product: + brand: go-e + description: Charger HOME+ (V3) +capabilities: ["1p3p"] +description: | + Benötigt mindestens Firmware 052.1 oder neuer. + + Für 1P/3P-Phasenumschaltung muss die HTTP API v2 im Charger aktiviert sein. + + +render: +- default: | + type: template + template: go-e-v3 + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/go-e-v3_1.yaml b/templates/docs/charger/go-e-v3_1.yaml new file mode 100644 index 000000000..490d8b66b --- /dev/null +++ b/templates/docs/charger/go-e-v3_1.yaml @@ -0,0 +1,15 @@ +product: + brand: go-e + description: Charger HOMEfix (V3) +capabilities: ["1p3p"] +description: | + Benötigt mindestens Firmware 052.1 oder neuer. + + Für 1P/3P-Phasenumschaltung muss die HTTP API v2 im Charger aktiviert sein. + + +render: +- default: | + type: template + template: go-e-v3 + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/go-e.yaml b/templates/docs/charger/go-e.yaml deleted file mode 100644 index e640bceb6..000000000 --- a/templates/docs/charger/go-e.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: go-e -description: go-eCharger Home/Pro/V3 -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/charger/go-e_0.yaml b/templates/docs/charger/go-e_0.yaml new file mode 100644 index 000000000..468e4e17d --- /dev/null +++ b/templates/docs/charger/go-e_0.yaml @@ -0,0 +1,11 @@ +product: + brand: go-e + description: Charger HOME+ +description: | + Benötigen mindestens Firmware 040.0 oder neuer. + +render: +- default: | + type: template + template: go-e + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/go-e_1.yaml b/templates/docs/charger/go-e_1.yaml new file mode 100644 index 000000000..60b07377e --- /dev/null +++ b/templates/docs/charger/go-e_1.yaml @@ -0,0 +1,11 @@ +product: + brand: go-e + description: Charger HOMEfix +description: | + Benötigen mindestens Firmware 040.0 oder neuer. + +render: +- default: | + type: template + template: go-e + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/go-e_2.yaml b/templates/docs/charger/go-e_2.yaml new file mode 100644 index 000000000..cc83cf1df --- /dev/null +++ b/templates/docs/charger/go-e_2.yaml @@ -0,0 +1,11 @@ +product: + brand: go-e + description: Charger Pro +description: | + Benötigen mindestens Firmware 040.0 oder neuer. + +render: +- default: | + type: template + template: go-e + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/charger/heidelberg.yaml b/templates/docs/charger/heidelberg.yaml deleted file mode 100644 index d59b8ca97..000000000 --- a/templates/docs/charger/heidelberg.yaml +++ /dev/null @@ -1,3 +0,0 @@ -type: template -template: heidelberg -description: Heidelberg Energy Control (Modbus RTU) \ No newline at end of file diff --git a/templates/docs/charger/heidelberg_0.yaml b/templates/docs/charger/heidelberg_0.yaml new file mode 100644 index 000000000..2d0902e2a --- /dev/null +++ b/templates/docs/charger/heidelberg_0.yaml @@ -0,0 +1,19 @@ +product: + brand: Heidelberg + description: Energy Control (Modbus RTU) +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: heidelberg + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 19200 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8E1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/heidelberg_1.yaml b/templates/docs/charger/heidelberg_1.yaml new file mode 100644 index 000000000..618710192 --- /dev/null +++ b/templates/docs/charger/heidelberg_1.yaml @@ -0,0 +1,19 @@ +product: + brand: Wahlter Werke + description: Basic Evo Pro +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: heidelberg + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 19200 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8E1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/ichargecion.yaml b/templates/docs/charger/ichargecion.yaml deleted file mode 100644 index 14296d4ec..000000000 --- a/templates/docs/charger/ichargecion.yaml +++ /dev/null @@ -1,3 +0,0 @@ -type: template -template: ichargecion -description: i-CHARGE CION (Modbus RTU-over-TCP) \ No newline at end of file diff --git a/templates/docs/charger/ichargecion_0.yaml b/templates/docs/charger/ichargecion_0.yaml new file mode 100644 index 000000000..1930bc08c --- /dev/null +++ b/templates/docs/charger/ichargecion_0.yaml @@ -0,0 +1,13 @@ +product: + brand: i-CHARGE + description: CION + +render: +- default: | + type: template + template: ichargecion + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/innogy-ebox.yaml b/templates/docs/charger/innogy-ebox.yaml deleted file mode 100644 index 8feca73dd..000000000 --- a/templates/docs/charger/innogy-ebox.yaml +++ /dev/null @@ -1,3 +0,0 @@ -type: template -template: innogy-ebox -description: Innogy eBox \ No newline at end of file diff --git a/templates/docs/charger/innogy-ebox_0.yaml b/templates/docs/charger/innogy-ebox_0.yaml new file mode 100644 index 000000000..a76ed29d4 --- /dev/null +++ b/templates/docs/charger/innogy-ebox_0.yaml @@ -0,0 +1,14 @@ +product: + brand: Innogy + description: eBox +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: innogy-ebox + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/keba.yaml b/templates/docs/charger/keba.yaml deleted file mode 100644 index 055c687bc..000000000 --- a/templates/docs/charger/keba.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: keba -description: KEBA Connect -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/charger/keba_0.yaml b/templates/docs/charger/keba_0.yaml new file mode 100644 index 000000000..047276790 --- /dev/null +++ b/templates/docs/charger/keba_0.yaml @@ -0,0 +1,18 @@ +product: + brand: KEBA + description: KeContact P20 +capabilities: ["rfid"] +description: | + Es muss eine sogenannte UDP Funktion über den DIP Schalter 1.3 eingeschaltet (ON) werden. Die Installationsanleitung der Wallbox hilft hier weiter. + +render: +- default: | + type: template + template: keba + host: 192.0.2.2 # IP-Adresse oder Hostname + advanced: | + type: template + template: keba + host: 192.0.2.2 # IP-Adresse oder Hostname + rfid: 765765348 # Die Kennung eines RFID Tags um den Lademodus zu starten, selbst wenn die Wallbox gesperrt ist. # Optional + serial: # Die Seriennummer, ermöglicht es auch mit der Wallbox zu kommunizieren wenn evcc in Docker läuft. # Optional \ No newline at end of file diff --git a/templates/docs/charger/keba_1.yaml b/templates/docs/charger/keba_1.yaml new file mode 100644 index 000000000..e15c5857f --- /dev/null +++ b/templates/docs/charger/keba_1.yaml @@ -0,0 +1,18 @@ +product: + brand: KEBA + description: KeContact P30 +capabilities: ["rfid"] +description: | + Es muss eine sogenannte UDP Funktion über den DIP Schalter 1.3 eingeschaltet (ON) werden. Die Installationsanleitung der Wallbox hilft hier weiter. + +render: +- default: | + type: template + template: keba + host: 192.0.2.2 # IP-Adresse oder Hostname + advanced: | + type: template + template: keba + host: 192.0.2.2 # IP-Adresse oder Hostname + rfid: 765765348 # Die Kennung eines RFID Tags um den Lademodus zu starten, selbst wenn die Wallbox gesperrt ist. # Optional + serial: # Die Seriennummer, ermöglicht es auch mit der Wallbox zu kommunizieren wenn evcc in Docker läuft. # Optional \ No newline at end of file diff --git a/templates/docs/charger/keba_2.yaml b/templates/docs/charger/keba_2.yaml new file mode 100644 index 000000000..fa0fdc6fa --- /dev/null +++ b/templates/docs/charger/keba_2.yaml @@ -0,0 +1,18 @@ +product: + brand: BMW + description: i Wallbox +capabilities: ["rfid"] +description: | + Es muss eine sogenannte UDP Funktion über den DIP Schalter 1.3 eingeschaltet (ON) werden. Die Installationsanleitung der Wallbox hilft hier weiter. + +render: +- default: | + type: template + template: keba + host: 192.0.2.2 # IP-Adresse oder Hostname + advanced: | + type: template + template: keba + host: 192.0.2.2 # IP-Adresse oder Hostname + rfid: 765765348 # Die Kennung eines RFID Tags um den Lademodus zu starten, selbst wenn die Wallbox gesperrt ist. # Optional + serial: # Die Seriennummer, ermöglicht es auch mit der Wallbox zu kommunizieren wenn evcc in Docker läuft. # Optional \ No newline at end of file diff --git a/templates/docs/charger/nrgkick-bluetooth.yaml b/templates/docs/charger/nrgkick-bluetooth.yaml deleted file mode 100644 index bec446c57..000000000 --- a/templates/docs/charger/nrgkick-bluetooth.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: nrgkick-bluetooth -description: NRGKick Bluetooth -mac: -pin: \ No newline at end of file diff --git a/templates/docs/charger/nrgkick-bluetooth_0.yaml b/templates/docs/charger/nrgkick-bluetooth_0.yaml new file mode 100644 index 000000000..a638b942a --- /dev/null +++ b/templates/docs/charger/nrgkick-bluetooth_0.yaml @@ -0,0 +1,10 @@ +product: + brand: NRGKick + description: Bluetooth + +render: +- default: | + type: template + template: nrgkick-bluetooth + mac: + pin: \ No newline at end of file diff --git a/templates/docs/charger/nrgkick-connect.yaml b/templates/docs/charger/nrgkick-connect.yaml deleted file mode 100644 index 57946c87a..000000000 --- a/templates/docs/charger/nrgkick-connect.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: nrgkick-connect -description: NRGKick Connect -host: 192.0.2.2 -mac: -password: \ No newline at end of file diff --git a/templates/docs/charger/nrgkick-connect_0.yaml b/templates/docs/charger/nrgkick-connect_0.yaml new file mode 100644 index 000000000..99dfa514e --- /dev/null +++ b/templates/docs/charger/nrgkick-connect_0.yaml @@ -0,0 +1,11 @@ +product: + brand: NRGKick + description: Connect + +render: +- default: | + type: template + template: nrgkick-connect + host: 192.0.2.2 # IP-Adresse oder Hostname + mac: + password: # Passwort des Benutzerkontos \ No newline at end of file diff --git a/templates/docs/charger/openwb.yaml b/templates/docs/charger/openwb.yaml deleted file mode 100644 index e767d95a9..000000000 --- a/templates/docs/charger/openwb.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: openwb -description: openWB (MQTT) -host: 192.0.2.2 -loadpointid: 1 \ No newline at end of file diff --git a/templates/docs/charger/openwb_0.yaml b/templates/docs/charger/openwb_0.yaml new file mode 100644 index 000000000..c681ad999 --- /dev/null +++ b/templates/docs/charger/openwb_0.yaml @@ -0,0 +1,11 @@ +product: + description: openWB (MQTT) +description: | + Die Wallbox muss als Ladepunkt konfiguriert sein. + +render: +- default: | + type: template + template: openwb + host: 192.0.2.2 # IP-Adresse oder Hostname + loadpointid: 1 # Optional \ No newline at end of file diff --git a/templates/docs/charger/pcelectric-garo_0.yaml b/templates/docs/charger/pcelectric-garo_0.yaml new file mode 100644 index 000000000..ce7ab97fd --- /dev/null +++ b/templates/docs/charger/pcelectric-garo_0.yaml @@ -0,0 +1,13 @@ +product: + brand: PC Electric + description: Garo +requirements: ["sponsorship"] +description: | + Es können momentan nur als Master konfigurierte Geräte verwendet werden! + +render: +- default: | + type: template + template: pcelectric-garo + host: 192.0.2.2 # IP-Adresse oder Hostname # Optional + port: 8080 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/phoenix-em-eth.yaml b/templates/docs/charger/phoenix-em-eth.yaml deleted file mode 100644 index 57e4421f4..000000000 --- a/templates/docs/charger/phoenix-em-eth.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: phoenix-em-eth -description: Phoenix EM-CP-PP-ETH Controller (Modbus TCP) -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/charger/phoenix-em-eth_0.yaml b/templates/docs/charger/phoenix-em-eth_0.yaml new file mode 100644 index 000000000..8e4145e55 --- /dev/null +++ b/templates/docs/charger/phoenix-em-eth_0.yaml @@ -0,0 +1,12 @@ +product: + description: Phoenix EM-CP-PP-ETH Controller (Modbus TCP) + group: Generische Unterstützung +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: phoenix-em-eth + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/phoenix-ev-eth.yaml b/templates/docs/charger/phoenix-ev-eth.yaml deleted file mode 100644 index 99c4e1b2b..000000000 --- a/templates/docs/charger/phoenix-ev-eth.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: phoenix-ev-eth -description: Phoenix EV-ETH Controller (Modbus TCP) -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/charger/phoenix-ev-eth_0.yaml b/templates/docs/charger/phoenix-ev-eth_0.yaml new file mode 100644 index 000000000..5bb6266d6 --- /dev/null +++ b/templates/docs/charger/phoenix-ev-eth_0.yaml @@ -0,0 +1,12 @@ +product: + description: Phoenix EV-ETH Controller (Modbus TCP) + group: Generische Unterstützung +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: phoenix-ev-eth + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/phoenix-ev-ser.yaml b/templates/docs/charger/phoenix-ev-ser.yaml deleted file mode 100644 index 1e4dc2460..000000000 --- a/templates/docs/charger/phoenix-ev-ser.yaml +++ /dev/null @@ -1,3 +0,0 @@ -type: template -template: phoenix-ev-ser -description: Phoenix EV-SER Controller (Modbus RTU) \ No newline at end of file diff --git a/templates/docs/charger/phoenix-ev-ser_0.yaml b/templates/docs/charger/phoenix-ev-ser_0.yaml new file mode 100644 index 000000000..b56b020cc --- /dev/null +++ b/templates/docs/charger/phoenix-ev-ser_0.yaml @@ -0,0 +1,18 @@ +product: + description: Phoenix EV-SER Controller (Modbus RTU) + group: Generische Unterstützung + +render: +- default: | + type: template + template: phoenix-ev-ser + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/charger/pmcc.yaml b/templates/docs/charger/pmcc.yaml deleted file mode 100644 index 592c00422..000000000 --- a/templates/docs/charger/pmcc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: pmcc -description: Porsche Mobile Charger Connect -ski: # Die SKI der Wallbox, ist üblicherweise im Web Interface der Wallbox zu finden -enforcePVLimits: true # Verwende PV Laden über eine Ladebegrenzung (wie herkömmliche Wallboxen) bei Fahrzeugen mit Unterstützung von ISO15118 \ No newline at end of file diff --git a/templates/docs/charger/pmcc_0.yaml b/templates/docs/charger/pmcc_0.yaml new file mode 100644 index 000000000..88652cdbd --- /dev/null +++ b/templates/docs/charger/pmcc_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Porsche + description: Mobile Charger Connect +capabilities: ["iso151182"] +requirements: ["eebus"] + +render: +- default: | + type: template + template: pmcc + ski: # Die SKI der Wallbox, ist üblicherweise im Web Interface der Wallbox zu finden + enforcePVLimits: true # Verwende PV Laden über eine Ladebegrenzung (wie herkömmliche Wallboxen) bei Fahrzeugen mit Unterstützung von ISO15118 # Optional \ No newline at end of file diff --git a/templates/docs/charger/pmcp.yaml b/templates/docs/charger/pmcp.yaml deleted file mode 100644 index 57b894842..000000000 --- a/templates/docs/charger/pmcp.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: pmcp -description: Porsche Mobile Charger Plus -ski: # Die SKI der Wallbox, ist üblicherweise im Web Interface der Wallbox zu finden \ No newline at end of file diff --git a/templates/docs/charger/pmcp_0.yaml b/templates/docs/charger/pmcp_0.yaml new file mode 100644 index 000000000..e0d081d59 --- /dev/null +++ b/templates/docs/charger/pmcp_0.yaml @@ -0,0 +1,10 @@ +product: + brand: Porsche + description: Mobile Charger Plus +requirements: ["eebus"] + +render: +- default: | + type: template + template: pmcp + ski: # Die SKI der Wallbox, ist üblicherweise im Web Interface der Wallbox zu finden \ No newline at end of file diff --git a/templates/docs/charger/shelly.yaml b/templates/docs/charger/shelly.yaml deleted file mode 100644 index 5a9def8e9..000000000 --- a/templates/docs/charger/shelly.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: shelly -description: Shelly -host: 192.0.2.2 -standbypower: 15 \ No newline at end of file diff --git a/templates/docs/charger/shelly_0.yaml b/templates/docs/charger/shelly_0.yaml new file mode 100644 index 000000000..a6e22d751 --- /dev/null +++ b/templates/docs/charger/shelly_0.yaml @@ -0,0 +1,10 @@ +product: + description: Shelly + group: Schaltbare Steckdosen + +render: +- default: | + type: template + template: shelly + host: 192.0.2.2 # IP-Adresse oder Hostname + standbypower: 15 # Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet # Optional \ No newline at end of file diff --git a/templates/docs/charger/tasmota.yaml b/templates/docs/charger/tasmota.yaml deleted file mode 100644 index 251c28b4b..000000000 --- a/templates/docs/charger/tasmota.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: tasmota -description: Tasmota -host: 192.0.2.2 -standbypower: 15 \ No newline at end of file diff --git a/templates/docs/charger/tasmota_0.yaml b/templates/docs/charger/tasmota_0.yaml new file mode 100644 index 000000000..ae54070b8 --- /dev/null +++ b/templates/docs/charger/tasmota_0.yaml @@ -0,0 +1,12 @@ +product: + description: Tasmota + group: Schaltbare Steckdosen + +render: +- default: | + type: template + template: tasmota + host: 192.0.2.2 # IP-Adresse oder Hostname + user: # (optional) nur erforderlich falls diese Werte im Gerät gesetzt sind # Optional + password: # (optional) nur erforderlich falls diese Werte im Gerät gesetzt sind # Optional + standbypower: 15 # Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet # Optional \ No newline at end of file diff --git a/templates/docs/charger/tinkerforge-warp-pro.yaml b/templates/docs/charger/tinkerforge-warp-pro.yaml deleted file mode 100644 index 41e1e8d90..000000000 --- a/templates/docs/charger/tinkerforge-warp-pro.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: tinkerforge-warp-pro -description: TinkerForge WARP Charger Pro -host: 192.0.2.2 # Die IP Adresse oder der Hostname des MQTT Brokers -port: 1883 # Der Port des MQTT Brokers -topic: warp -timeout: 30s \ No newline at end of file diff --git a/templates/docs/charger/tinkerforge-warp-pro_0.yaml b/templates/docs/charger/tinkerforge-warp-pro_0.yaml new file mode 100644 index 000000000..b44572c82 --- /dev/null +++ b/templates/docs/charger/tinkerforge-warp-pro_0.yaml @@ -0,0 +1,14 @@ +product: + brand: TinkerForge + description: WARP Charger Pro +description: | + Es muss ein sogennanter MQTT Broker auf einem Computer installiert sein. Die MQTT Verbindung muss in der Wallbox eingerichtet sein. + +render: +- default: | + type: template + template: tinkerforge-warp-pro + host: 192.0.2.2 # Die IP Adresse oder der Hostname des MQTT Brokers + port: 1883 # Der Port des MQTT Brokers # Optional + topic: warp # Optional + timeout: 30s # Optional \ No newline at end of file diff --git a/templates/docs/charger/tinkerforge-warp.yaml b/templates/docs/charger/tinkerforge-warp.yaml deleted file mode 100644 index db4b2b403..000000000 --- a/templates/docs/charger/tinkerforge-warp.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: tinkerforge-warp -description: TinkerForge WARP Charger -host: 192.0.2.2 # Die IP Adresse oder der Hostname des MQTT Brokers -port: 1883 # Der Port des MQTT Brokers -topic: warp -timeout: 30s \ No newline at end of file diff --git a/templates/docs/charger/tinkerforge-warp_0.yaml b/templates/docs/charger/tinkerforge-warp_0.yaml new file mode 100644 index 000000000..a7fae7787 --- /dev/null +++ b/templates/docs/charger/tinkerforge-warp_0.yaml @@ -0,0 +1,14 @@ +product: + brand: TinkerForge + description: WARP Charger +description: | + Es muss ein sogennanter MQTT Broker auf einem Computer installiert sein. Die MQTT Verbindung muss in der Wallbox eingerichtet sein. + +render: +- default: | + type: template + template: tinkerforge-warp + host: 192.0.2.2 # Die IP Adresse oder der Hostname des MQTT Brokers + port: 1883 # Der Port des MQTT Brokers # Optional + topic: warp # Optional + timeout: 30s # Optional \ No newline at end of file diff --git a/templates/docs/charger/tplink.yaml b/templates/docs/charger/tplink.yaml deleted file mode 100644 index cd890766c..000000000 --- a/templates/docs/charger/tplink.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: tplink -description: TP-LINK Smart Plug -host: 192.0.2.2 -standbypower: 15 \ No newline at end of file diff --git a/templates/docs/charger/tplink_0.yaml b/templates/docs/charger/tplink_0.yaml new file mode 100644 index 000000000..299eed482 --- /dev/null +++ b/templates/docs/charger/tplink_0.yaml @@ -0,0 +1,11 @@ +product: + brand: TP-LINK + description: Smart Plug + group: Schaltbare Steckdosen + +render: +- default: | + type: template + template: tplink + host: 192.0.2.2 # IP-Adresse oder Hostname + standbypower: 15 # Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe-meter.yaml b/templates/docs/charger/wallbe-meter.yaml deleted file mode 100644 index 3436bb40f..000000000 --- a/templates/docs/charger/wallbe-meter.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: wallbe-meter -description: Wallbe (Eco, Pro) mit Strommessgerät -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/charger/wallbe-meter_0.yaml b/templates/docs/charger/wallbe-meter_0.yaml new file mode 100644 index 000000000..fcfabd2b6 --- /dev/null +++ b/templates/docs/charger/wallbe-meter_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Eco (mit Strommessgerät) +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe-meter + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe-meter_1.yaml b/templates/docs/charger/wallbe-meter_1.yaml new file mode 100644 index 000000000..341e29e0e --- /dev/null +++ b/templates/docs/charger/wallbe-meter_1.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Pro (mit Strommessgerät) +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe-meter + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe-pre2019-meter.yaml b/templates/docs/charger/wallbe-pre2019-meter.yaml deleted file mode 100644 index 52603fb04..000000000 --- a/templates/docs/charger/wallbe-pre2019-meter.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: wallbe-pre2019-meter -description: Wallbe (Eco, Pro) (vor ~2019) mit Strommessgerät -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/charger/wallbe-pre2019-meter_0.yaml b/templates/docs/charger/wallbe-pre2019-meter_0.yaml new file mode 100644 index 000000000..9d66f9e90 --- /dev/null +++ b/templates/docs/charger/wallbe-pre2019-meter_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Eco (vor ~2019, mit Strommessgerät) +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe-pre2019-meter + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe-pre2019-meter_1.yaml b/templates/docs/charger/wallbe-pre2019-meter_1.yaml new file mode 100644 index 000000000..ea342873d --- /dev/null +++ b/templates/docs/charger/wallbe-pre2019-meter_1.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Pro (vor ~2019, mit Strommessgerät) +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe-pre2019-meter + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe-pre2019.yaml b/templates/docs/charger/wallbe-pre2019.yaml deleted file mode 100644 index 49eadb4a3..000000000 --- a/templates/docs/charger/wallbe-pre2019.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: wallbe-pre2019 -description: Wallbe (Eco, Pro) (vor ~2019) -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/charger/wallbe-pre2019_0.yaml b/templates/docs/charger/wallbe-pre2019_0.yaml new file mode 100644 index 000000000..26b075f91 --- /dev/null +++ b/templates/docs/charger/wallbe-pre2019_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Eco (vor ~2019) +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe-pre2019 + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe-pre2019_1.yaml b/templates/docs/charger/wallbe-pre2019_1.yaml new file mode 100644 index 000000000..cc1b977d0 --- /dev/null +++ b/templates/docs/charger/wallbe-pre2019_1.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Pro (vor ~2019) +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe-pre2019 + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe.yaml b/templates/docs/charger/wallbe.yaml deleted file mode 100644 index 543e62f04..000000000 --- a/templates/docs/charger/wallbe.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: wallbe -description: Wallbe (Eco, Pro) -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/charger/wallbe_0.yaml b/templates/docs/charger/wallbe_0.yaml new file mode 100644 index 000000000..f7b6e65c0 --- /dev/null +++ b/templates/docs/charger/wallbe_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Eco +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/charger/wallbe_1.yaml b/templates/docs/charger/wallbe_1.yaml new file mode 100644 index 000000000..83f801256 --- /dev/null +++ b/templates/docs/charger/wallbe_1.yaml @@ -0,0 +1,12 @@ +product: + brand: Wallbe + description: Pro +description: | + Die Wallbox muss über ein Netzwerkkabel angebunden sein und im Gerät muss der DIP Schalter 10 auf 'ON' gestellt sein. + +render: +- default: | + type: template + template: wallbe + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/meter/cfos-charge.yaml b/templates/docs/meter/cfos-charge.yaml deleted file mode 100644 index c47b403a7..000000000 --- a/templates/docs/meter/cfos-charge.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: cfos -description: cFos PowerBrain Meter -usage: charge \ No newline at end of file diff --git a/templates/docs/meter/cfos_0.yaml b/templates/docs/meter/cfos_0.yaml new file mode 100644 index 000000000..c93fdbdab --- /dev/null +++ b/templates/docs/meter/cfos_0.yaml @@ -0,0 +1,16 @@ +product: + brand: cFos + description: PowerBrain Meter +requirements: ["sponsorship"] + +render: +- usage: charge + default: | + type: template + template: cfos + usage: charge + # Modbus Start + id: 2 + # TCPIP + uri: 192.0.2.2:4702 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/discovergy-grid.yaml b/templates/docs/meter/discovergy-grid.yaml deleted file mode 100644 index 267d2cebd..000000000 --- a/templates/docs/meter/discovergy-grid.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: discovergy -description: Discovergy (Cloud) -usage: grid -user: -password: -meter: 1ESY1161229886 \ No newline at end of file diff --git a/templates/docs/meter/discovergy-pv.yaml b/templates/docs/meter/discovergy-pv.yaml deleted file mode 100644 index 1d47e8a2f..000000000 --- a/templates/docs/meter/discovergy-pv.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: discovergy -description: Discovergy (Cloud) -usage: pv -user: -password: -meter: 1ESY1161229886 \ No newline at end of file diff --git a/templates/docs/meter/discovergy_0.yaml b/templates/docs/meter/discovergy_0.yaml new file mode 100644 index 000000000..2eda36e2a --- /dev/null +++ b/templates/docs/meter/discovergy_0.yaml @@ -0,0 +1,20 @@ +product: + description: Discovergy (Cloud) + +render: +- usage: grid + default: | + type: template + template: discovergy + usage: grid + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + meter: 1ESY1161229886 +- usage: pv + default: | + type: template + template: discovergy + usage: pv + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + meter: 1ESY1161229886 \ No newline at end of file diff --git a/templates/docs/meter/e3dc-battery.yaml b/templates/docs/meter/e3dc-battery.yaml deleted file mode 100644 index f63b89303..000000000 --- a/templates/docs/meter/e3dc-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: e3dc -description: E3DC -usage: battery -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/e3dc-grid.yaml b/templates/docs/meter/e3dc-grid.yaml deleted file mode 100644 index 8866bd7d9..000000000 --- a/templates/docs/meter/e3dc-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: e3dc -description: E3DC -usage: grid -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/e3dc-pv.yaml b/templates/docs/meter/e3dc-pv.yaml deleted file mode 100644 index 5b9e78568..000000000 --- a/templates/docs/meter/e3dc-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: e3dc -description: E3DC -usage: pv -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/e3dc_0.yaml b/templates/docs/meter/e3dc_0.yaml new file mode 100644 index 000000000..188e8a9c9 --- /dev/null +++ b/templates/docs/meter/e3dc_0.yaml @@ -0,0 +1,25 @@ +product: + description: E3DC + +render: +- usage: grid + default: | + type: template + template: e3dc + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: pv + default: | + type: template + template: e3dc + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: battery + default: | + type: template + template: e3dc + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/meter/eastron-battery.yaml b/templates/docs/meter/eastron-battery.yaml deleted file mode 100644 index da4f1e7dd..000000000 --- a/templates/docs/meter/eastron-battery.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: eastron -description: Eastron SDM Modbus Strommessgeräte -usage: battery \ No newline at end of file diff --git a/templates/docs/meter/eastron-charge.yaml b/templates/docs/meter/eastron-charge.yaml deleted file mode 100644 index d08b9b75c..000000000 --- a/templates/docs/meter/eastron-charge.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: eastron -description: Eastron SDM Modbus Strommessgeräte -usage: charge \ No newline at end of file diff --git a/templates/docs/meter/eastron-grid.yaml b/templates/docs/meter/eastron-grid.yaml deleted file mode 100644 index 08168f2f0..000000000 --- a/templates/docs/meter/eastron-grid.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: eastron -description: Eastron SDM Modbus Strommessgeräte -usage: grid \ No newline at end of file diff --git a/templates/docs/meter/eastron-pv.yaml b/templates/docs/meter/eastron-pv.yaml deleted file mode 100644 index 190e2574f..000000000 --- a/templates/docs/meter/eastron-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: eastron -description: Eastron SDM Modbus Strommessgeräte -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/eastron_0.yaml b/templates/docs/meter/eastron_0.yaml new file mode 100644 index 000000000..cecf64b64 --- /dev/null +++ b/templates/docs/meter/eastron_0.yaml @@ -0,0 +1,65 @@ +product: + brand: Eastron + description: SDM Modbus Strommessgeräte + +render: +- usage: grid + default: | + type: template + template: eastron + usage: grid + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End +- usage: pv + default: | + type: template + template: eastron + usage: pv + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End +- usage: battery + default: | + type: template + template: eastron + usage: battery + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End +- usage: charge + default: | + type: template + template: eastron + usage: charge + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/fritzdect-charge.yaml b/templates/docs/meter/fritzdect-charge.yaml deleted file mode 100644 index 4ec8ce1b6..000000000 --- a/templates/docs/meter/fritzdect-charge.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: fritzdect -description: FritzDECT -usage: charge -uri: https://fritz.box -user: -password: -ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. \ No newline at end of file diff --git a/templates/docs/meter/fritzdect-pv.yaml b/templates/docs/meter/fritzdect-pv.yaml deleted file mode 100644 index 45700aa03..000000000 --- a/templates/docs/meter/fritzdect-pv.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: fritzdect -description: FritzDECT -usage: pv -uri: https://fritz.box -user: -password: -ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. \ No newline at end of file diff --git a/templates/docs/meter/fritzdect_0.yaml b/templates/docs/meter/fritzdect_0.yaml new file mode 100644 index 000000000..325c1df4e --- /dev/null +++ b/templates/docs/meter/fritzdect_0.yaml @@ -0,0 +1,24 @@ +product: + brand: AVM + description: FritzDECT + group: Steckdosen + +render: +- usage: pv + default: | + type: template + template: fritzdect + usage: pv + uri: https://fritz.box # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. +- usage: charge + default: | + type: template + template: fritzdect + usage: charge + uri: https://fritz.box # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. \ No newline at end of file diff --git a/templates/docs/meter/fronius-gen24-battery.yaml b/templates/docs/meter/fronius-gen24-battery.yaml deleted file mode 100644 index daa4c6883..000000000 --- a/templates/docs/meter/fronius-gen24-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: fronius-gen24 -description: Fronius Symo GEN24 Plus -usage: battery -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/fronius-gen24-grid.yaml b/templates/docs/meter/fronius-gen24-grid.yaml deleted file mode 100644 index 54aa8b36e..000000000 --- a/templates/docs/meter/fronius-gen24-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: fronius-gen24 -description: Fronius Symo GEN24 Plus -usage: grid -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/fronius-gen24-pv.yaml b/templates/docs/meter/fronius-gen24-pv.yaml deleted file mode 100644 index ed6b39cce..000000000 --- a/templates/docs/meter/fronius-gen24-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: fronius-gen24 -description: Fronius Symo GEN24 Plus -usage: pv -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/fronius-gen24_0.yaml b/templates/docs/meter/fronius-gen24_0.yaml new file mode 100644 index 000000000..ee4968973 --- /dev/null +++ b/templates/docs/meter/fronius-gen24_0.yaml @@ -0,0 +1,26 @@ +product: + brand: Fronius + description: Symo GEN24 Plus + +render: +- usage: grid + default: | + type: template + template: fronius-gen24 + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: pv + default: | + type: template + template: fronius-gen24 + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: battery + default: | + type: template + template: fronius-gen24 + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/meter/fronius-solarapi-v1-battery.yaml b/templates/docs/meter/fronius-solarapi-v1-battery.yaml deleted file mode 100644 index c49ea3fc1..000000000 --- a/templates/docs/meter/fronius-solarapi-v1-battery.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: fronius-solarapi-v1 -description: Fronius Solar API V1 -usage: battery -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/fronius-solarapi-v1-grid.yaml b/templates/docs/meter/fronius-solarapi-v1-grid.yaml deleted file mode 100644 index 990fbe52e..000000000 --- a/templates/docs/meter/fronius-solarapi-v1-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: fronius-solarapi-v1 -description: Fronius Solar API V1 -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/fronius-solarapi-v1-pv.yaml b/templates/docs/meter/fronius-solarapi-v1-pv.yaml deleted file mode 100644 index f744dc61d..000000000 --- a/templates/docs/meter/fronius-solarapi-v1-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: fronius-solarapi-v1 -description: Fronius Solar API V1 -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/fronius-solarapi-v1_0.yaml b/templates/docs/meter/fronius-solarapi-v1_0.yaml new file mode 100644 index 000000000..9b80211d7 --- /dev/null +++ b/templates/docs/meter/fronius-solarapi-v1_0.yaml @@ -0,0 +1,23 @@ +product: + brand: Fronius + description: Solar API V1 + +render: +- usage: grid + default: | + type: template + template: fronius-solarapi-v1 + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: fronius-solarapi-v1 + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: battery + default: | + type: template + template: fronius-solarapi-v1 + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/huawei-dongle-powersensor_0.yaml b/templates/docs/meter/huawei-dongle-powersensor_0.yaml new file mode 100644 index 000000000..0e58fcca0 --- /dev/null +++ b/templates/docs/meter/huawei-dongle-powersensor_0.yaml @@ -0,0 +1,35 @@ +product: + brand: Huawei + description: SUN2000 with Sdongle & Power Sensor + +render: +- usage: grid + default: | + type: template + template: huawei-dongle-powersensor + usage: grid + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: pv + default: | + type: template + template: huawei-dongle-powersensor + usage: pv + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: battery + default: | + type: template + template: huawei-dongle-powersensor + usage: battery + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/huawei-dongle_0.yaml b/templates/docs/meter/huawei-dongle_0.yaml new file mode 100644 index 000000000..a1b95ed7f --- /dev/null +++ b/templates/docs/meter/huawei-dongle_0.yaml @@ -0,0 +1,15 @@ +product: + brand: Huawei + description: SUN2000 with Sdongle + +render: +- usage: pv + default: | + type: template + template: huawei-dongle + usage: pv + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/huawei-sun2000-8ktl-pv.yaml b/templates/docs/meter/huawei-sun2000-8ktl-pv.yaml deleted file mode 100644 index 96aba7cc5..000000000 --- a/templates/docs/meter/huawei-sun2000-8ktl-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: huawei-sun2000-8ktl -description: Huawei SUN2000-8KTL -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/huawei-sun2000-8ktl_0.yaml b/templates/docs/meter/huawei-sun2000-8ktl_0.yaml new file mode 100644 index 000000000..fcc35d24b --- /dev/null +++ b/templates/docs/meter/huawei-sun2000-8ktl_0.yaml @@ -0,0 +1,20 @@ +product: + brand: Huawei + description: SUN2000-8KTL + +render: +- usage: pv + default: | + type: template + template: huawei-sun2000-8ktl + usage: pv + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 19200 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/kostal-ksem-grid.yaml b/templates/docs/meter/kostal-ksem-grid.yaml deleted file mode 100644 index 9202237ff..000000000 --- a/templates/docs/meter/kostal-ksem-grid.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: kostal-ksem -description: Kostal Smart Energy Meter -usage: grid \ No newline at end of file diff --git a/templates/docs/meter/kostal-ksem-inverter-grid.yaml b/templates/docs/meter/kostal-ksem-inverter-grid.yaml deleted file mode 100644 index c24333d39..000000000 --- a/templates/docs/meter/kostal-ksem-inverter-grid.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: kostal-ksem-inverter -description: Kostal Smart Energy Meter über den Wechselrichter -usage: grid \ No newline at end of file diff --git a/templates/docs/meter/kostal-ksem-inverter_0.yaml b/templates/docs/meter/kostal-ksem-inverter_0.yaml new file mode 100644 index 000000000..a652d0554 --- /dev/null +++ b/templates/docs/meter/kostal-ksem-inverter_0.yaml @@ -0,0 +1,15 @@ +product: + brand: Kostal + description: Smart Energy Meter (über den Wechselrichter) + +render: +- usage: grid + default: | + type: template + template: kostal-ksem-inverter + usage: grid + # Modbus Start + id: 71 + # TCPIP + uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/kostal-ksem_0.yaml b/templates/docs/meter/kostal-ksem_0.yaml new file mode 100644 index 000000000..52a260280 --- /dev/null +++ b/templates/docs/meter/kostal-ksem_0.yaml @@ -0,0 +1,15 @@ +product: + brand: Kostal + description: Smart Energy Meter + +render: +- usage: grid + default: | + type: template + template: kostal-ksem + usage: grid + # Modbus Start + id: 71 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/kostal-piko-grid.yaml b/templates/docs/meter/kostal-piko-grid.yaml deleted file mode 100644 index b489ef9fa..000000000 --- a/templates/docs/meter/kostal-piko-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: kostal-piko -description: Kostal Piko + Piko BA -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/kostal-piko-mp-plus-pv.yaml b/templates/docs/meter/kostal-piko-mp-plus-pv.yaml deleted file mode 100644 index 723cc0931..000000000 --- a/templates/docs/meter/kostal-piko-mp-plus-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: kostal-piko-mp-plus -description: Kostal Piko MP Plus -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/kostal-piko-mp-plus_0.yaml b/templates/docs/meter/kostal-piko-mp-plus_0.yaml new file mode 100644 index 000000000..bdc9cb92c --- /dev/null +++ b/templates/docs/meter/kostal-piko-mp-plus_0.yaml @@ -0,0 +1,11 @@ +product: + brand: Kostal + description: Piko MP Plus + +render: +- usage: pv + default: | + type: template + template: kostal-piko-mp-plus + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/kostal-piko-pv.yaml b/templates/docs/meter/kostal-piko-pv.yaml deleted file mode 100644 index ddb2ee1d6..000000000 --- a/templates/docs/meter/kostal-piko-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: kostal-piko -description: Kostal Piko + Piko BA -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/kostal-piko_0.yaml b/templates/docs/meter/kostal-piko_0.yaml new file mode 100644 index 000000000..7bd75fe89 --- /dev/null +++ b/templates/docs/meter/kostal-piko_0.yaml @@ -0,0 +1,17 @@ +product: + brand: Kostal + description: Piko + +render: +- usage: grid + default: | + type: template + template: kostal-piko + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: kostal-piko + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/kostal-piko_1.yaml b/templates/docs/meter/kostal-piko_1.yaml new file mode 100644 index 000000000..b459731f2 --- /dev/null +++ b/templates/docs/meter/kostal-piko_1.yaml @@ -0,0 +1,17 @@ +product: + brand: Kostal + description: Piko BA + +render: +- usage: grid + default: | + type: template + template: kostal-piko + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: kostal-piko + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/kostal-plenticore-battery.yaml b/templates/docs/meter/kostal-plenticore-battery.yaml deleted file mode 100644 index 4cd830c69..000000000 --- a/templates/docs/meter/kostal-plenticore-battery.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: kostal-plenticore -description: Kostal Plenticore Hybrid -usage: battery \ No newline at end of file diff --git a/templates/docs/meter/kostal-plenticore-pv.yaml b/templates/docs/meter/kostal-plenticore-pv.yaml deleted file mode 100644 index 6f481e562..000000000 --- a/templates/docs/meter/kostal-plenticore-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: kostal-plenticore -description: Kostal Plenticore Hybrid -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/kostal-plenticore_0.yaml b/templates/docs/meter/kostal-plenticore_0.yaml new file mode 100644 index 000000000..d004a2500 --- /dev/null +++ b/templates/docs/meter/kostal-plenticore_0.yaml @@ -0,0 +1,25 @@ +product: + brand: Kostal + description: Plenticore Hybrid + +render: +- usage: pv + default: | + type: template + template: kostal-plenticore + usage: pv + # Modbus Start + id: 71 + # TCPIP + uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: battery + default: | + type: template + template: kostal-plenticore + usage: battery + # Modbus Start + id: 71 + # TCPIP + uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/lg-ess-home-8-10-battery.yaml b/templates/docs/meter/lg-ess-home-8-10-battery.yaml deleted file mode 100644 index 3d4d0b67d..000000000 --- a/templates/docs/meter/lg-ess-home-8-10-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: lg-ess-home-8-10 -description: LG ESS Home 8/10 -usage: battery -host: 192.0.2.2 -registration: DE200... # Registriernummer des LG ESS HOME Wechselrichters. \ No newline at end of file diff --git a/templates/docs/meter/lg-ess-home-8-10-grid.yaml b/templates/docs/meter/lg-ess-home-8-10-grid.yaml deleted file mode 100644 index 3cdabfdb3..000000000 --- a/templates/docs/meter/lg-ess-home-8-10-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: lg-ess-home-8-10 -description: LG ESS Home 8/10 -usage: grid -host: 192.0.2.2 -registration: DE200... # Registriernummer des LG ESS HOME Wechselrichters. \ No newline at end of file diff --git a/templates/docs/meter/lg-ess-home-8-10-pv.yaml b/templates/docs/meter/lg-ess-home-8-10-pv.yaml deleted file mode 100644 index 1de0eea8b..000000000 --- a/templates/docs/meter/lg-ess-home-8-10-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: lg-ess-home-8-10 -description: LG ESS Home 8/10 -usage: pv -host: 192.0.2.2 -registration: DE200... # Registriernummer des LG ESS HOME Wechselrichters. \ No newline at end of file diff --git a/templates/docs/meter/lg-ess-home-8-10_0.yaml b/templates/docs/meter/lg-ess-home-8-10_0.yaml new file mode 100644 index 000000000..4b010f325 --- /dev/null +++ b/templates/docs/meter/lg-ess-home-8-10_0.yaml @@ -0,0 +1,26 @@ +product: + brand: LG + description: ESS Home 8/10 + +render: +- usage: grid + default: | + type: template + template: lg-ess-home-8-10 + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + registration: DE200... # Registriernummer des LG ESS HOME Wechselrichters. +- usage: pv + default: | + type: template + template: lg-ess-home-8-10 + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + registration: DE200... # Registriernummer des LG ESS HOME Wechselrichters. +- usage: battery + default: | + type: template + template: lg-ess-home-8-10 + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + registration: DE200... # Registriernummer des LG ESS HOME Wechselrichters. \ No newline at end of file diff --git a/templates/docs/meter/mqtt-meter-battery.yaml b/templates/docs/meter/mqtt-meter-battery.yaml deleted file mode 100644 index 35b9ba7ed..000000000 --- a/templates/docs/meter/mqtt-meter-battery.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: mqtt-meter -description: MQTT Strommessgerät -usage: battery -power: -scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden -scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden -timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist \ No newline at end of file diff --git a/templates/docs/meter/mqtt-meter-charge.yaml b/templates/docs/meter/mqtt-meter-charge.yaml deleted file mode 100644 index 71ba2f291..000000000 --- a/templates/docs/meter/mqtt-meter-charge.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: mqtt-meter -description: MQTT Strommessgerät -usage: charge -power: -scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden -scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden -timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist \ No newline at end of file diff --git a/templates/docs/meter/mqtt-meter-grid.yaml b/templates/docs/meter/mqtt-meter-grid.yaml deleted file mode 100644 index 081edad49..000000000 --- a/templates/docs/meter/mqtt-meter-grid.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: mqtt-meter -description: MQTT Strommessgerät -usage: grid -power: -scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden -scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden -timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist \ No newline at end of file diff --git a/templates/docs/meter/mqtt-meter-pv.yaml b/templates/docs/meter/mqtt-meter-pv.yaml deleted file mode 100644 index e56759c40..000000000 --- a/templates/docs/meter/mqtt-meter-pv.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: mqtt-meter -description: MQTT Strommessgerät -usage: pv -power: -scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden -scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden -timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist \ No newline at end of file diff --git a/templates/docs/meter/mqtt-meter_0.yaml b/templates/docs/meter/mqtt-meter_0.yaml new file mode 100644 index 000000000..b0b64c6e2 --- /dev/null +++ b/templates/docs/meter/mqtt-meter_0.yaml @@ -0,0 +1,62 @@ +product: + description: MQTT Strommessgerät + group: Generische Unterstützung +requirements: ["mqtt"] + +render: +- usage: grid + default: | + type: template + template: mqtt-meter + usage: grid + power: + scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden # Optional + energy: # Optional + scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden # Optional + soc: # Optional + currentp1: # Optional + currentp2: # Optional + currentp3: # Optional + timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist # Optional +- usage: pv + default: | + type: template + template: mqtt-meter + usage: pv + power: + scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden # Optional + energy: # Optional + scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden # Optional + soc: # Optional + currentp1: # Optional + currentp2: # Optional + currentp3: # Optional + timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist # Optional +- usage: charge + default: | + type: template + template: mqtt-meter + usage: charge + power: + scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden # Optional + energy: # Optional + scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden # Optional + soc: # Optional + currentp1: # Optional + currentp2: # Optional + currentp3: # Optional + timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist # Optional +- usage: battery + default: | + type: template + template: mqtt-meter + usage: battery + power: + scalepower: 1 # Die Leistung wird in Watt erwartet. Falls z.b. kW geliefert wird, kann dies hier mit dem Wert 1000 angepasst werden # Optional + energy: # Optional + scaleenergy: 1 # Die Energiemenge wird in kWh erwartet. Falls z.b. Wh geliefert wird, kann dies hier mit dem Wert 0.001 angepasst werden # Optional + soc: # Optional + currentp1: # Optional + currentp2: # Optional + currentp3: # Optional + timeout: 30 # Akzeptiere keine Daten die älter als dieser Wert in Sekunden ist # Optional \ No newline at end of file diff --git a/templates/docs/meter/powerdog-grid.yaml b/templates/docs/meter/powerdog-grid.yaml deleted file mode 100644 index ea4be2cc4..000000000 --- a/templates/docs/meter/powerdog-grid.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: powerdog -description: Powerdog -usage: grid \ No newline at end of file diff --git a/templates/docs/meter/powerdog-pv.yaml b/templates/docs/meter/powerdog-pv.yaml deleted file mode 100644 index fa665bfc0..000000000 --- a/templates/docs/meter/powerdog-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: powerdog -description: Powerdog -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/powerdog_0.yaml b/templates/docs/meter/powerdog_0.yaml new file mode 100644 index 000000000..df67aa729 --- /dev/null +++ b/templates/docs/meter/powerdog_0.yaml @@ -0,0 +1,24 @@ +product: + description: Powerdog + +render: +- usage: grid + default: | + type: template + template: powerdog + usage: grid + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: pv + default: | + type: template + template: powerdog + usage: pv + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/powerfox-poweropti-grid.yaml b/templates/docs/meter/powerfox-poweropti-grid.yaml deleted file mode 100644 index de46500f3..000000000 --- a/templates/docs/meter/powerfox-poweropti-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: powerfox-poweropti -description: Powerfox Poweropti (Cloud) -usage: grid -user: -password: \ No newline at end of file diff --git a/templates/docs/meter/powerfox-poweropti_0.yaml b/templates/docs/meter/powerfox-poweropti_0.yaml new file mode 100644 index 000000000..1c4a62fac --- /dev/null +++ b/templates/docs/meter/powerfox-poweropti_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Powerfox + description: Poweropti (Cloud) + +render: +- usage: grid + default: | + type: template + template: powerfox-poweropti + usage: grid + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos \ No newline at end of file diff --git a/templates/docs/meter/rct-power-battery.yaml b/templates/docs/meter/rct-power-battery.yaml deleted file mode 100644 index 1e09edd76..000000000 --- a/templates/docs/meter/rct-power-battery.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: rct-power -description: RCT Power -usage: battery -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/rct-power-grid.yaml b/templates/docs/meter/rct-power-grid.yaml deleted file mode 100644 index f6a300a35..000000000 --- a/templates/docs/meter/rct-power-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: rct-power -description: RCT Power -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/rct-power-pv.yaml b/templates/docs/meter/rct-power-pv.yaml deleted file mode 100644 index 02eab064c..000000000 --- a/templates/docs/meter/rct-power-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: rct-power -description: RCT Power -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/rct-power_0.yaml b/templates/docs/meter/rct-power_0.yaml new file mode 100644 index 000000000..cef24f343 --- /dev/null +++ b/templates/docs/meter/rct-power_0.yaml @@ -0,0 +1,23 @@ +product: + brand: RCT + description: Power + +render: +- usage: grid + default: | + type: template + template: rct-power + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: rct-power + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: battery + default: | + type: template + template: rct-power + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/senec-home-battery.yaml b/templates/docs/meter/senec-home-battery.yaml deleted file mode 100644 index 64d74e264..000000000 --- a/templates/docs/meter/senec-home-battery.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: senec-home -description: SENEC.Home -usage: battery -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/senec-home-grid.yaml b/templates/docs/meter/senec-home-grid.yaml deleted file mode 100644 index e548032ce..000000000 --- a/templates/docs/meter/senec-home-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: senec-home -description: SENEC.Home -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/senec-home-pv.yaml b/templates/docs/meter/senec-home-pv.yaml deleted file mode 100644 index df87a6f8f..000000000 --- a/templates/docs/meter/senec-home-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: senec-home -description: SENEC.Home -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/senec-home_0.yaml b/templates/docs/meter/senec-home_0.yaml new file mode 100644 index 000000000..f1679a1a7 --- /dev/null +++ b/templates/docs/meter/senec-home_0.yaml @@ -0,0 +1,23 @@ +product: + brand: SENEC + description: .Home + +render: +- usage: grid + default: | + type: template + template: senec-home + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: senec-home + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: battery + default: | + type: template + template: senec-home + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/shelly-3em-grid.yaml b/templates/docs/meter/shelly-3em-grid.yaml deleted file mode 100644 index 8e761323c..000000000 --- a/templates/docs/meter/shelly-3em-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: shelly-3em -description: Shelly 3EM -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/shelly-3em_0.yaml b/templates/docs/meter/shelly-3em_0.yaml new file mode 100644 index 000000000..9e5b13dba --- /dev/null +++ b/templates/docs/meter/shelly-3em_0.yaml @@ -0,0 +1,12 @@ +product: + brand: Shelly + description: 3EM + group: Steckdosen + +render: +- usage: grid + default: | + type: template + template: shelly-3em + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/sma-energy-meter-battery.yaml b/templates/docs/meter/sma-energy-meter-battery.yaml deleted file mode 100644 index f16464a0b..000000000 --- a/templates/docs/meter/sma-energy-meter-battery.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: sma-energy-meter -description: SMA Energy Meter (Produktname) -usage: battery -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/sma-energy-meter-grid.yaml b/templates/docs/meter/sma-energy-meter-grid.yaml deleted file mode 100644 index e7a2c7569..000000000 --- a/templates/docs/meter/sma-energy-meter-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: sma-energy-meter -description: SMA Energy Meter (Produktname) -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/sma-energy-meter-pv.yaml b/templates/docs/meter/sma-energy-meter-pv.yaml deleted file mode 100644 index 390b4fae9..000000000 --- a/templates/docs/meter/sma-energy-meter-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: sma-energy-meter -description: SMA Energy Meter (Produktname) -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/sma-energy-meter_0.yaml b/templates/docs/meter/sma-energy-meter_0.yaml new file mode 100644 index 000000000..54202276b --- /dev/null +++ b/templates/docs/meter/sma-energy-meter_0.yaml @@ -0,0 +1,23 @@ +product: + brand: SMA + description: Energy Meter + +render: +- usage: grid + default: | + type: template + template: sma-energy-meter + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: sma-energy-meter + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: battery + default: | + type: template + template: sma-energy-meter + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/sma-home-manager-grid.yaml b/templates/docs/meter/sma-home-manager-grid.yaml deleted file mode 100644 index 4401c3de5..000000000 --- a/templates/docs/meter/sma-home-manager-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: sma-home-manager -description: SMA Sunny Home Manager 2.0 -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/sma-home-manager_0.yaml b/templates/docs/meter/sma-home-manager_0.yaml new file mode 100644 index 000000000..2864e8854 --- /dev/null +++ b/templates/docs/meter/sma-home-manager_0.yaml @@ -0,0 +1,12 @@ +product: + brand: SMA + description: Sunny Home Manager 2.0 +capabilities: ["smahems"] + +render: +- usage: grid + default: | + type: template + template: sma-home-manager + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/sma-inverter-battery.yaml b/templates/docs/meter/sma-inverter-battery.yaml deleted file mode 100644 index 322a3f4d8..000000000 --- a/templates/docs/meter/sma-inverter-battery.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: sma-inverter -description: SMA Wechselrichter -usage: battery -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/sma-inverter-pv.yaml b/templates/docs/meter/sma-inverter-pv.yaml deleted file mode 100644 index 73a3640cc..000000000 --- a/templates/docs/meter/sma-inverter-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: sma-inverter -description: SMA Wechselrichter -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/sma-inverter_0.yaml b/templates/docs/meter/sma-inverter_0.yaml new file mode 100644 index 000000000..1c06f8f79 --- /dev/null +++ b/templates/docs/meter/sma-inverter_0.yaml @@ -0,0 +1,19 @@ +product: + brand: SMA + description: Wechselrichter + +render: +- usage: pv + default: | + type: template + template: sma-inverter + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + password: # Wird nur benötigt, wenn das Standardpasswort geändert wurde # Optional +- usage: battery + default: | + type: template + template: sma-inverter + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + password: # Wird nur benötigt, wenn das Standardpasswort geändert wurde # Optional \ No newline at end of file diff --git a/templates/docs/meter/solaredge-hybrid-battery.yaml b/templates/docs/meter/solaredge-hybrid-battery.yaml deleted file mode 100644 index 2618d4fd1..000000000 --- a/templates/docs/meter/solaredge-hybrid-battery.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: solaredge-hybrid -description: Solaredge Hybrid -usage: battery -host: 192.0.2.2 -port: 502 # Port 502 (SetApp) oder 1502 (LCD) -timeout: 3s \ No newline at end of file diff --git a/templates/docs/meter/solaredge-hybrid-grid.yaml b/templates/docs/meter/solaredge-hybrid-grid.yaml deleted file mode 100644 index a0134dd6a..000000000 --- a/templates/docs/meter/solaredge-hybrid-grid.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: solaredge-hybrid -description: Solaredge Hybrid -usage: grid -host: 192.0.2.2 -port: 502 # Port 502 (SetApp) oder 1502 (LCD) -timeout: 3s \ No newline at end of file diff --git a/templates/docs/meter/solaredge-hybrid-pv.yaml b/templates/docs/meter/solaredge-hybrid-pv.yaml deleted file mode 100644 index ee84e9346..000000000 --- a/templates/docs/meter/solaredge-hybrid-pv.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: solaredge-hybrid -description: Solaredge Hybrid -usage: pv -host: 192.0.2.2 -port: 502 # Port 502 (SetApp) oder 1502 (LCD) -timeout: 3s \ No newline at end of file diff --git a/templates/docs/meter/solaredge-hybrid_0.yaml b/templates/docs/meter/solaredge-hybrid_0.yaml new file mode 100644 index 000000000..7bc34cc51 --- /dev/null +++ b/templates/docs/meter/solaredge-hybrid_0.yaml @@ -0,0 +1,31 @@ +product: + brand: Solaredge + description: Hybrid +description: | + Nur ein System kann auf den Wechselrichter zugreifen! + +render: +- usage: grid + default: | + type: template + template: solaredge-hybrid + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port 502 (SetApp) oder 1502 (LCD) # Optional + timeout: 3s # Optional +- usage: pv + default: | + type: template + template: solaredge-hybrid + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port 502 (SetApp) oder 1502 (LCD) # Optional + timeout: 3s # Optional +- usage: battery + default: | + type: template + template: solaredge-hybrid + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port 502 (SetApp) oder 1502 (LCD) # Optional + timeout: 3s # Optional \ No newline at end of file diff --git a/templates/docs/meter/solaredge-inverter-pv.yaml b/templates/docs/meter/solaredge-inverter-pv.yaml deleted file mode 100644 index ebc5e557a..000000000 --- a/templates/docs/meter/solaredge-inverter-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: solaredge-inverter -description: Solaredge Wechselrichter -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/solaredge-inverter_0.yaml b/templates/docs/meter/solaredge-inverter_0.yaml new file mode 100644 index 000000000..1a1a6c58d --- /dev/null +++ b/templates/docs/meter/solaredge-inverter_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Solaredge + description: Wechselrichter + +render: +- usage: grid + default: | + type: template + template: solaredge-inverter + usage: grid + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port + # Modbus End + timeout: 3s # Optional +- usage: pv + default: | + type: template + template: solaredge-inverter + usage: pv + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port + # Modbus End + timeout: 3s # Optional \ No newline at end of file diff --git a/templates/docs/meter/solarlog-grid.yaml b/templates/docs/meter/solarlog-grid.yaml deleted file mode 100644 index 08e500352..000000000 --- a/templates/docs/meter/solarlog-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: solarlog -description: Solarlog -usage: grid -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/solarlog-pv.yaml b/templates/docs/meter/solarlog-pv.yaml deleted file mode 100644 index f64c0fe16..000000000 --- a/templates/docs/meter/solarlog-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: solarlog -description: Solarlog -usage: pv -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/solarlog_0.yaml b/templates/docs/meter/solarlog_0.yaml new file mode 100644 index 000000000..08c98d161 --- /dev/null +++ b/templates/docs/meter/solarlog_0.yaml @@ -0,0 +1,18 @@ +product: + description: Solarlog + +render: +- usage: grid + default: | + type: template + template: solarlog + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: pv + default: | + type: template + template: solarlog + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/meter/solarwatt-myreserve-battery.yaml b/templates/docs/meter/solarwatt-myreserve-battery.yaml deleted file mode 100644 index 156e4bba8..000000000 --- a/templates/docs/meter/solarwatt-myreserve-battery.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: solarwatt-myreserve -description: Solarwatt MyReserve -usage: battery -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/solarwatt-myreserve-grid.yaml b/templates/docs/meter/solarwatt-myreserve-grid.yaml deleted file mode 100644 index 5573e0983..000000000 --- a/templates/docs/meter/solarwatt-myreserve-grid.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: solarwatt-myreserve -description: Solarwatt MyReserve -usage: grid -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/solarwatt-myreserve-pv.yaml b/templates/docs/meter/solarwatt-myreserve-pv.yaml deleted file mode 100644 index b224d62cf..000000000 --- a/templates/docs/meter/solarwatt-myreserve-pv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: template -template: solarwatt-myreserve -description: Solarwatt MyReserve -usage: pv -host: 192.0.2.2 \ No newline at end of file diff --git a/templates/docs/meter/solarwatt-myreserve_0.yaml b/templates/docs/meter/solarwatt-myreserve_0.yaml new file mode 100644 index 000000000..179d9a82d --- /dev/null +++ b/templates/docs/meter/solarwatt-myreserve_0.yaml @@ -0,0 +1,23 @@ +product: + brand: Solarwatt + description: MyReserve + +render: +- usage: grid + default: | + type: template + template: solarwatt-myreserve + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: solarwatt-myreserve + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: battery + default: | + type: template + template: solarwatt-myreserve + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/sonnenbatterie-eco10-battery.yaml b/templates/docs/meter/sonnenbatterie-eco10-battery.yaml deleted file mode 100644 index 01e5608bc..000000000 --- a/templates/docs/meter/sonnenbatterie-eco10-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: sonnenbatterie-eco10 -description: Sonnenbatterie Eco/10 -usage: battery -host: 192.0.2.2 -port: 8080 \ No newline at end of file diff --git a/templates/docs/meter/sonnenbatterie-eco10-grid.yaml b/templates/docs/meter/sonnenbatterie-eco10-grid.yaml deleted file mode 100644 index ad2ef1be3..000000000 --- a/templates/docs/meter/sonnenbatterie-eco10-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: sonnenbatterie-eco10 -description: Sonnenbatterie Eco/10 -usage: grid -host: 192.0.2.2 -port: 8080 \ No newline at end of file diff --git a/templates/docs/meter/sonnenbatterie-eco10-pv.yaml b/templates/docs/meter/sonnenbatterie-eco10-pv.yaml deleted file mode 100644 index b197beb27..000000000 --- a/templates/docs/meter/sonnenbatterie-eco10-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: sonnenbatterie-eco10 -description: Sonnenbatterie Eco/10 -usage: pv -host: 192.0.2.2 -port: 8080 \ No newline at end of file diff --git a/templates/docs/meter/sonnenbatterie-eco10_0.yaml b/templates/docs/meter/sonnenbatterie-eco10_0.yaml new file mode 100644 index 000000000..d4a032db3 --- /dev/null +++ b/templates/docs/meter/sonnenbatterie-eco10_0.yaml @@ -0,0 +1,26 @@ +product: + brand: Sonnenbatterie + description: Eco/10 + +render: +- usage: grid + default: | + type: template + template: sonnenbatterie-eco10 + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8080 # Port # Optional +- usage: pv + default: | + type: template + template: sonnenbatterie-eco10 + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8080 # Port # Optional +- usage: battery + default: | + type: template + template: sonnenbatterie-eco10 + 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/meter/sungrow-battery.yaml b/templates/docs/meter/sungrow-battery.yaml deleted file mode 100644 index b8797fed2..000000000 --- a/templates/docs/meter/sungrow-battery.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: sungrow -description: Sungrow (Beta) -usage: battery \ No newline at end of file diff --git a/templates/docs/meter/sungrow-grid.yaml b/templates/docs/meter/sungrow-grid.yaml deleted file mode 100644 index 3e06f823f..000000000 --- a/templates/docs/meter/sungrow-grid.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: sungrow -description: Sungrow (Beta) -usage: grid \ No newline at end of file diff --git a/templates/docs/meter/sungrow-pv.yaml b/templates/docs/meter/sungrow-pv.yaml deleted file mode 100644 index cba151278..000000000 --- a/templates/docs/meter/sungrow-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: sungrow -description: Sungrow (Beta) -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/sungrow_0.yaml b/templates/docs/meter/sungrow_0.yaml new file mode 100644 index 000000000..4071d2c16 --- /dev/null +++ b/templates/docs/meter/sungrow_0.yaml @@ -0,0 +1,56 @@ +product: + brand: Sungrow + description: Inverter (Beta) + +render: +- usage: grid + default: | + type: template + template: sungrow + usage: grid + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: pv + default: | + type: template + template: sungrow + usage: pv + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: battery + default: | + type: template + template: sungrow + usage: battery + # Modbus Start + id: 1 + # RS485 via adapter: + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 9600 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8N1" # Kommunikationsparameter für den Adapter + # RS485 via TCPIP: + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + rtu: true + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/sunspec-battery.yaml b/templates/docs/meter/sunspec-battery.yaml deleted file mode 100644 index 4e1a23ec2..000000000 --- a/templates/docs/meter/sunspec-battery.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: sunspec -description: Wechselrichter (SunSpec) -usage: battery \ No newline at end of file diff --git a/templates/docs/meter/sunspec-grid.yaml b/templates/docs/meter/sunspec-grid.yaml deleted file mode 100644 index cc3da840e..000000000 --- a/templates/docs/meter/sunspec-grid.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: sunspec -description: Wechselrichter (SunSpec) -usage: grid \ No newline at end of file diff --git a/templates/docs/meter/sunspec-pv.yaml b/templates/docs/meter/sunspec-pv.yaml deleted file mode 100644 index 095a838c7..000000000 --- a/templates/docs/meter/sunspec-pv.yaml +++ /dev/null @@ -1,4 +0,0 @@ -type: template -template: sunspec -description: Wechselrichter (SunSpec) -usage: pv \ No newline at end of file diff --git a/templates/docs/meter/sunspec_0.yaml b/templates/docs/meter/sunspec_0.yaml new file mode 100644 index 000000000..78a0eacbd --- /dev/null +++ b/templates/docs/meter/sunspec_0.yaml @@ -0,0 +1,35 @@ +product: + description: Wechselrichter (SunSpec) + group: Generische Unterstützung + +render: +- usage: grid + default: | + type: template + template: sunspec + usage: grid + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: pv + default: | + type: template + template: sunspec + usage: pv + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End +- usage: battery + default: | + type: template + template: sunspec + usage: battery + # Modbus Start + id: 1 + # TCPIP + uri: 192.0.2.2:502 # IP-Adresse oder Hostname: Port + # Modbus End \ No newline at end of file diff --git a/templates/docs/meter/tasmota_0.yaml b/templates/docs/meter/tasmota_0.yaml new file mode 100644 index 000000000..ec46432a2 --- /dev/null +++ b/templates/docs/meter/tasmota_0.yaml @@ -0,0 +1,23 @@ +product: + description: Tasmota + group: Steckdosen + +render: +- usage: grid + default: | + type: template + template: tasmota + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: pv + default: | + type: template + template: tasmota + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname +- usage: charge + default: | + type: template + template: tasmota + usage: charge + host: 192.0.2.2 # IP-Adresse oder Hostname \ No newline at end of file diff --git a/templates/docs/meter/tesla-powerwall-battery.yaml b/templates/docs/meter/tesla-powerwall-battery.yaml deleted file mode 100644 index ff3144d7a..000000000 --- a/templates/docs/meter/tesla-powerwall-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: tesla-powerwall -description: Tesla Powerwall -usage: battery -host: 192.0.2.2 -password: # Passwort des Benutzers Kunde \ No newline at end of file diff --git a/templates/docs/meter/tesla-powerwall-grid.yaml b/templates/docs/meter/tesla-powerwall-grid.yaml deleted file mode 100644 index 6df8f16a5..000000000 --- a/templates/docs/meter/tesla-powerwall-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: tesla-powerwall -description: Tesla Powerwall -usage: grid -host: 192.0.2.2 -password: # Passwort des Benutzers Kunde \ No newline at end of file diff --git a/templates/docs/meter/tesla-powerwall-pv.yaml b/templates/docs/meter/tesla-powerwall-pv.yaml deleted file mode 100644 index 8cde7ca0e..000000000 --- a/templates/docs/meter/tesla-powerwall-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: tesla-powerwall -description: Tesla Powerwall -usage: pv -host: 192.0.2.2 -password: # Passwort des Benutzers Kunde \ No newline at end of file diff --git a/templates/docs/meter/tesla-powerwall_0.yaml b/templates/docs/meter/tesla-powerwall_0.yaml new file mode 100644 index 000000000..96e9be442 --- /dev/null +++ b/templates/docs/meter/tesla-powerwall_0.yaml @@ -0,0 +1,26 @@ +product: + brand: Tesla + description: Powerwall + +render: +- usage: grid + default: | + type: template + template: tesla-powerwall + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + password: # Passwort des Benutzers Kunde +- usage: pv + default: | + type: template + template: tesla-powerwall + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + password: # Passwort des Benutzers Kunde +- usage: battery + default: | + type: template + template: tesla-powerwall + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + password: # Passwort des Benutzers Kunde \ No newline at end of file diff --git a/templates/docs/meter/varta-energiespeicher-battery.yaml b/templates/docs/meter/varta-energiespeicher-battery.yaml deleted file mode 100644 index 5b72b81b7..000000000 --- a/templates/docs/meter/varta-energiespeicher-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: varta-energiespeicher -description: VARTA Energiespeicher -usage: battery -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/varta-energiespeicher-grid.yaml b/templates/docs/meter/varta-energiespeicher-grid.yaml deleted file mode 100644 index 6297e134d..000000000 --- a/templates/docs/meter/varta-energiespeicher-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: varta-energiespeicher -description: VARTA Energiespeicher -usage: grid -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/varta-energiespeicher-pv.yaml b/templates/docs/meter/varta-energiespeicher-pv.yaml deleted file mode 100644 index 7c72a7653..000000000 --- a/templates/docs/meter/varta-energiespeicher-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: varta-energiespeicher -description: VARTA Energiespeicher -usage: pv -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/varta-energiespeicher_0.yaml b/templates/docs/meter/varta-energiespeicher_0.yaml new file mode 100644 index 000000000..80f8b2a21 --- /dev/null +++ b/templates/docs/meter/varta-energiespeicher_0.yaml @@ -0,0 +1,26 @@ +product: + brand: VARTA + description: Energiespeicher + +render: +- usage: grid + default: | + type: template + template: varta-energiespeicher + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: pv + default: | + type: template + template: varta-energiespeicher + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: battery + default: | + type: template + template: varta-energiespeicher + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/meter/victron-energy-battery.yaml b/templates/docs/meter/victron-energy-battery.yaml deleted file mode 100644 index c31f8f5dd..000000000 --- a/templates/docs/meter/victron-energy-battery.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: victron-energy -description: Victron Energy -usage: battery -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/victron-energy-grid.yaml b/templates/docs/meter/victron-energy-grid.yaml deleted file mode 100644 index ed71e1b29..000000000 --- a/templates/docs/meter/victron-energy-grid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: victron-energy -description: Victron Energy -usage: grid -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/victron-energy-pv.yaml b/templates/docs/meter/victron-energy-pv.yaml deleted file mode 100644 index a86b3e0e6..000000000 --- a/templates/docs/meter/victron-energy-pv.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: victron-energy -description: Victron Energy -usage: pv -host: 192.0.2.2 -port: 502 \ No newline at end of file diff --git a/templates/docs/meter/victron-energy_0.yaml b/templates/docs/meter/victron-energy_0.yaml new file mode 100644 index 000000000..655fa242f --- /dev/null +++ b/templates/docs/meter/victron-energy_0.yaml @@ -0,0 +1,26 @@ +product: + brand: Victron + description: Energy + +render: +- usage: grid + default: | + type: template + template: victron-energy + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: pv + default: | + type: template + template: victron-energy + usage: pv + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional +- usage: battery + default: | + type: template + template: victron-energy + usage: battery + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 502 # Port # Optional \ No newline at end of file diff --git a/templates/docs/meter/volkszaehler-http-grid.yaml b/templates/docs/meter/volkszaehler-http-grid.yaml deleted file mode 100644 index 6d53f3104..000000000 --- a/templates/docs/meter/volkszaehler-http-grid.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: volkszaehler-http -description: Volkszähler (HTTP API) -usage: grid -host: 192.0.2.2 -port: 80 -uuid: \ No newline at end of file diff --git a/templates/docs/meter/volkszaehler-http_0.yaml b/templates/docs/meter/volkszaehler-http_0.yaml new file mode 100644 index 000000000..41f1d16d1 --- /dev/null +++ b/templates/docs/meter/volkszaehler-http_0.yaml @@ -0,0 +1,13 @@ +product: + description: Volkszähler (HTTP API) + group: Generische Unterstützung + +render: +- usage: grid + default: | + type: template + template: volkszaehler-http + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 80 # Port # Optional + uuid: \ No newline at end of file diff --git a/templates/docs/meter/volkszaehler-importexport-grid.yaml b/templates/docs/meter/volkszaehler-importexport-grid.yaml deleted file mode 100644 index f62cd0d38..000000000 --- a/templates/docs/meter/volkszaehler-importexport-grid.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: template -template: volkszaehler-importexport -description: Volkszähler (HTTP API, Import & Export) -usage: grid -host: 192.0.2.2 -port: 80 -importuuid: -exportuuid: \ No newline at end of file diff --git a/templates/docs/meter/volkszaehler-importexport_0.yaml b/templates/docs/meter/volkszaehler-importexport_0.yaml new file mode 100644 index 000000000..23e142462 --- /dev/null +++ b/templates/docs/meter/volkszaehler-importexport_0.yaml @@ -0,0 +1,14 @@ +product: + description: Volkszähler (HTTP API, Import & Export) + group: Generische Unterstützung + +render: +- usage: grid + default: | + type: template + template: volkszaehler-importexport + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 80 # Port # Optional + importuuid: + exportuuid: \ No newline at end of file diff --git a/templates/docs/meter/volkszaehler-ws-grid.yaml b/templates/docs/meter/volkszaehler-ws-grid.yaml deleted file mode 100644 index 0ef01bc37..000000000 --- a/templates/docs/meter/volkszaehler-ws-grid.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: volkszaehler-ws -description: Volkszähler (WebSocket API) -usage: grid -host: 192.0.2.2 -port: 8082 -uuid: \ No newline at end of file diff --git a/templates/docs/meter/volkszaehler-ws_0.yaml b/templates/docs/meter/volkszaehler-ws_0.yaml new file mode 100644 index 000000000..211b61abb --- /dev/null +++ b/templates/docs/meter/volkszaehler-ws_0.yaml @@ -0,0 +1,13 @@ +product: + description: Volkszähler (WebSocket API) + group: Generische Unterstützung + +render: +- usage: grid + default: | + type: template + template: volkszaehler-ws + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8082 # Port # Optional + uuid: \ No newline at end of file diff --git a/templates/docs/meter/vzlogger-grid.yaml b/templates/docs/meter/vzlogger-grid.yaml deleted file mode 100644 index bd50a91a4..000000000 --- a/templates/docs/meter/vzlogger-grid.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: vzlogger -description: vzlogger -usage: grid -host: 192.0.2.2 -port: 8081 -uuid: \ No newline at end of file diff --git a/templates/docs/meter/vzlogger_0.yaml b/templates/docs/meter/vzlogger_0.yaml new file mode 100644 index 000000000..18c38aa6e --- /dev/null +++ b/templates/docs/meter/vzlogger_0.yaml @@ -0,0 +1,13 @@ +product: + description: vzlogger + group: Generische Unterstützung + +render: +- usage: grid + default: | + type: template + template: vzlogger + usage: grid + host: 192.0.2.2 # IP-Adresse oder Hostname + port: 8081 # Port # Optional + uuid: \ No newline at end of file diff --git a/templates/docs/vehicle/audi.yaml b/templates/docs/vehicle/audi.yaml deleted file mode 100644 index 5e36c2568..000000000 --- a/templates/docs/vehicle/audi.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: audi -description: Audi -user: -password: -vin: WAUZZZ... -capacity: 60 \ No newline at end of file diff --git a/templates/docs/vehicle/audi_0.yaml b/templates/docs/vehicle/audi_0.yaml new file mode 100644 index 000000000..a78a66c32 --- /dev/null +++ b/templates/docs/vehicle/audi_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Audi + +render: +- default: | + type: template + template: audi + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WAUZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 60 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: audi + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WAUZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 60 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/bmw.yaml b/templates/docs/vehicle/bmw.yaml deleted file mode 100644 index 19153f72a..000000000 --- a/templates/docs/vehicle/bmw.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: bmw -description: BMW -user: -password: -vin: WBMW... -capacity: 65 \ No newline at end of file diff --git a/templates/docs/vehicle/bmw_0.yaml b/templates/docs/vehicle/bmw_0.yaml new file mode 100644 index 000000000..2769873f8 --- /dev/null +++ b/templates/docs/vehicle/bmw_0.yaml @@ -0,0 +1,27 @@ +product: + brand: BMW + +render: +- default: | + type: template + template: bmw + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WBMW... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 65 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: bmw + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WBMW... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 65 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/carwings.yaml b/templates/docs/vehicle/carwings.yaml deleted file mode 100644 index bfe2b82e5..000000000 --- a/templates/docs/vehicle/carwings.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: carwings -description: Nissan Leaf (pre 2019) -user: -password: -vin: W... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/carwings_0.yaml b/templates/docs/vehicle/carwings_0.yaml new file mode 100644 index 000000000..9d83dba85 --- /dev/null +++ b/templates/docs/vehicle/carwings_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Nissan + description: Leaf (pre 2019) + +render: +- default: | + type: template + template: carwings + 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: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: carwings + 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: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/citroen.yaml b/templates/docs/vehicle/citroen.yaml deleted file mode 100644 index 966af171f..000000000 --- a/templates/docs/vehicle/citroen.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: citroen -description: Citroen -user: -password: -vin: W... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/citroen_0.yaml b/templates/docs/vehicle/citroen_0.yaml new file mode 100644 index 000000000..8b12fd642 --- /dev/null +++ b/templates/docs/vehicle/citroen_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Citroen + +render: +- default: | + type: template + template: citroen + 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: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: citroen + 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: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/dacia.yaml b/templates/docs/vehicle/dacia.yaml deleted file mode 100644 index b317fde2b..000000000 --- a/templates/docs/vehicle/dacia.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: dacia -description: Dacia -user: -password: -vin: W... -capacity: 27.4 \ No newline at end of file diff --git a/templates/docs/vehicle/dacia_0.yaml b/templates/docs/vehicle/dacia_0.yaml new file mode 100644 index 000000000..e42851769 --- /dev/null +++ b/templates/docs/vehicle/dacia_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Dacia + +render: +- default: | + type: template + template: dacia + 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: 27.4 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: dacia + 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: 27.4 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/ds.yaml b/templates/docs/vehicle/ds.yaml deleted file mode 100644 index 541f92def..000000000 --- a/templates/docs/vehicle/ds.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: ds -description: DS -user: -password: -vin: W... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/ds_0.yaml b/templates/docs/vehicle/ds_0.yaml new file mode 100644 index 000000000..0d335b4dc --- /dev/null +++ b/templates/docs/vehicle/ds_0.yaml @@ -0,0 +1,27 @@ +product: + brand: DS + +render: +- default: | + type: template + template: ds + 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: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: ds + 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: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/enyaq.yaml b/templates/docs/vehicle/enyaq.yaml deleted file mode 100644 index 51d99a053..000000000 --- a/templates/docs/vehicle/enyaq.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: enyaq -description: Skoda (Enyaq) -user: -password: -vin: W... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/enyaq_0.yaml b/templates/docs/vehicle/enyaq_0.yaml new file mode 100644 index 000000000..20274b9bc --- /dev/null +++ b/templates/docs/vehicle/enyaq_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Skoda + description: Enyaq + +render: +- default: | + type: template + template: enyaq + 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: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: enyaq + 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: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/evnotify.yaml b/templates/docs/vehicle/evnotify.yaml deleted file mode 100644 index a27485017..000000000 --- a/templates/docs/vehicle/evnotify.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: evnotify -description: evNotify -akey: -token: -capacity: 64 \ No newline at end of file diff --git a/templates/docs/vehicle/evnotify_0.yaml b/templates/docs/vehicle/evnotify_0.yaml new file mode 100644 index 000000000..6158ec212 --- /dev/null +++ b/templates/docs/vehicle/evnotify_0.yaml @@ -0,0 +1,25 @@ +product: + description: evNotify + group: Generische Unterstützung + +render: +- default: | + type: template + template: evnotify + title: # Wird in der Benutzeroberfläche angezeigt # Optional + akey: + token: + capacity: 64 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: evnotify + title: # Wird in der Benutzeroberfläche angezeigt # Optional + akey: + token: + capacity: 64 # Akku-Kapazität in kWh # 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 diff --git a/templates/docs/vehicle/fiat.yaml b/templates/docs/vehicle/fiat.yaml deleted file mode 100644 index 89204a2d3..000000000 --- a/templates/docs/vehicle/fiat.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: fiat -description: Fiat -user: -password: -vin: ZFAE... -capacity: 42 \ No newline at end of file diff --git a/templates/docs/vehicle/fiat_0.yaml b/templates/docs/vehicle/fiat_0.yaml new file mode 100644 index 000000000..5db6225cd --- /dev/null +++ b/templates/docs/vehicle/fiat_0.yaml @@ -0,0 +1,29 @@ +product: + brand: Fiat + +render: +- default: | + type: template + template: fiat + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: ZFAE... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 42 # Akku-Kapazität in kWh # Optional + pin: # Optional + advanced: | + type: template + template: fiat + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: ZFAE... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 42 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # Optional + pin: # 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 diff --git a/templates/docs/vehicle/ford.yaml b/templates/docs/vehicle/ford.yaml deleted file mode 100644 index 1dba79ea4..000000000 --- a/templates/docs/vehicle/ford.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: ford -description: Ford -user: -password: -vin: WF0FXX... -capacity: 10 \ No newline at end of file diff --git a/templates/docs/vehicle/ford_0.yaml b/templates/docs/vehicle/ford_0.yaml new file mode 100644 index 000000000..b6545a6ce --- /dev/null +++ b/templates/docs/vehicle/ford_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Ford + +render: +- default: | + type: template + template: ford + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WF0FXX... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 10 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: ford + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WF0FXX... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 10 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/hyundai.yaml b/templates/docs/vehicle/hyundai.yaml deleted file mode 100644 index 6519541be..000000000 --- a/templates/docs/vehicle/hyundai.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: hyundai -description: Hyundai -user: -password: -vin: W... -capacity: 64 \ No newline at end of file diff --git a/templates/docs/vehicle/hyundai_0.yaml b/templates/docs/vehicle/hyundai_0.yaml new file mode 100644 index 000000000..d1b86d015 --- /dev/null +++ b/templates/docs/vehicle/hyundai_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Hyundai + +render: +- default: | + type: template + template: hyundai + 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: 64 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: hyundai + 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: 64 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/id.yaml b/templates/docs/vehicle/id.yaml deleted file mode 100644 index d64aa0a41..000000000 --- a/templates/docs/vehicle/id.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: id -description: Volkswagen (We Connect ID) -user: -password: -vin: WVWZZZ... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/id_0.yaml b/templates/docs/vehicle/id_0.yaml new file mode 100644 index 000000000..76cc354f2 --- /dev/null +++ b/templates/docs/vehicle/id_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Volkswagen + description: We Connect ID + +render: +- default: | + type: template + template: id + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WVWZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: id + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WVWZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/kia.yaml b/templates/docs/vehicle/kia.yaml deleted file mode 100644 index 368529815..000000000 --- a/templates/docs/vehicle/kia.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: kia -description: Kia -user: -password: -vin: W... -capacity: 64 \ No newline at end of file diff --git a/templates/docs/vehicle/kia_0.yaml b/templates/docs/vehicle/kia_0.yaml new file mode 100644 index 000000000..1e37062e3 --- /dev/null +++ b/templates/docs/vehicle/kia_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Kia + +render: +- default: | + type: template + template: kia + 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: 64 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: kia + 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: 64 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/mercedes.yaml b/templates/docs/vehicle/mercedes.yaml deleted file mode 100644 index 574422f9b..000000000 --- a/templates/docs/vehicle/mercedes.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: template -template: mercedes -description: Mercedes EQC -user: -password: -vin: W... -capacity: 50 -clientId: b8f717b3-f1b7-4169-a8ef-7ffd80c5327c -clientSecret: QxSNLrIepEmcjGFdZpeUczqyqoOrhmxhASDasdvhizjhxHSEWFDfunfbeu \ No newline at end of file diff --git a/templates/docs/vehicle/mercedes_0.yaml b/templates/docs/vehicle/mercedes_0.yaml new file mode 100644 index 000000000..cef44fcb6 --- /dev/null +++ b/templates/docs/vehicle/mercedes_0.yaml @@ -0,0 +1,11 @@ +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.yaml b/templates/docs/vehicle/mini.yaml deleted file mode 100644 index bce12e9d7..000000000 --- a/templates/docs/vehicle/mini.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: mini -description: Mini -user: -password: -vin: WBMW... -capacity: 32 \ No newline at end of file diff --git a/templates/docs/vehicle/mini_0.yaml b/templates/docs/vehicle/mini_0.yaml new file mode 100644 index 000000000..f1083d475 --- /dev/null +++ b/templates/docs/vehicle/mini_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Mini + +render: +- default: | + type: template + template: mini + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WBMW... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 32 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: mini + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WBMW... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 32 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/nissan.yaml b/templates/docs/vehicle/nissan.yaml deleted file mode 100644 index 4992e4cfb..000000000 --- a/templates/docs/vehicle/nissan.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: nissan -description: Nissan -user: -password: -vin: W... -capacity: 60 \ No newline at end of file diff --git a/templates/docs/vehicle/nissan_0.yaml b/templates/docs/vehicle/nissan_0.yaml new file mode 100644 index 000000000..d1fd70c2e --- /dev/null +++ b/templates/docs/vehicle/nissan_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Nissan + description: Leaf + +render: +- default: | + type: template + template: nissan + 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: 60 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: nissan + 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: 60 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/niu-e-scooter.yaml b/templates/docs/vehicle/niu-e-scooter.yaml deleted file mode 100644 index badbaefa0..000000000 --- a/templates/docs/vehicle/niu-e-scooter.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: template -template: niu-e-scooter -description: NIU E-Scooter -user: -password: -serial: \ No newline at end of file diff --git a/templates/docs/vehicle/niu-e-scooter_0.yaml b/templates/docs/vehicle/niu-e-scooter_0.yaml new file mode 100644 index 000000000..6a41ca407 --- /dev/null +++ b/templates/docs/vehicle/niu-e-scooter_0.yaml @@ -0,0 +1,25 @@ +product: + brand: NIU + description: E-Scooter + +render: +- default: | + type: template + template: niu-e-scooter + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + serial: + advanced: | + type: template + template: niu-e-scooter + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + serial: + 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 diff --git a/templates/docs/vehicle/opel.yaml b/templates/docs/vehicle/opel.yaml deleted file mode 100644 index 422cfc6fb..000000000 --- a/templates/docs/vehicle/opel.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: opel -description: Opel -user: -password: -vin: WP0... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/opel_0.yaml b/templates/docs/vehicle/opel_0.yaml new file mode 100644 index 000000000..d1ab4e23f --- /dev/null +++ b/templates/docs/vehicle/opel_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Opel + +render: +- default: | + type: template + template: opel + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WP0... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: opel + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WP0... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/ovms.yaml b/templates/docs/vehicle/ovms.yaml deleted file mode 100644 index 96540c3e9..000000000 --- a/templates/docs/vehicle/ovms.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: ovms -description: Open Vehicle Monitoring System -user: -password: -vehicleid: -capacity: 12 \ No newline at end of file diff --git a/templates/docs/vehicle/ovms_0.yaml b/templates/docs/vehicle/ovms_0.yaml new file mode 100644 index 000000000..28c514a7c --- /dev/null +++ b/templates/docs/vehicle/ovms_0.yaml @@ -0,0 +1,27 @@ +product: + description: Open Vehicle Monitoring System + group: Generische Unterstützung + +render: +- default: | + type: template + template: ovms + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vehicleid: + capacity: 12 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: ovms + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vehicleid: + capacity: 12 # Akku-Kapazität in kWh # 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 diff --git a/templates/docs/vehicle/peugeot.yaml b/templates/docs/vehicle/peugeot.yaml deleted file mode 100644 index c0884da94..000000000 --- a/templates/docs/vehicle/peugeot.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: peugeot -description: Peugeot -user: -password: -vin: W... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/peugeot_0.yaml b/templates/docs/vehicle/peugeot_0.yaml new file mode 100644 index 000000000..7b940ea40 --- /dev/null +++ b/templates/docs/vehicle/peugeot_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Peugeot + +render: +- default: | + type: template + template: peugeot + 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: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: peugeot + 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: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/porsche.yaml b/templates/docs/vehicle/porsche.yaml deleted file mode 100644 index f8a15b316..000000000 --- a/templates/docs/vehicle/porsche.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: porsche -description: Porsche -user: -password: -vin: W... -capacity: 83.4 \ No newline at end of file diff --git a/templates/docs/vehicle/porsche_0.yaml b/templates/docs/vehicle/porsche_0.yaml new file mode 100644 index 000000000..4b545151e --- /dev/null +++ b/templates/docs/vehicle/porsche_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Porsche + +render: +- default: | + type: template + template: porsche + 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: 83.4 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: porsche + 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: 83.4 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/renault.yaml b/templates/docs/vehicle/renault.yaml deleted file mode 100644 index 4d56fdbd5..000000000 --- a/templates/docs/vehicle/renault.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: renault -description: Renault -user: -password: -vin: WREN... -capacity: 60 \ No newline at end of file diff --git a/templates/docs/vehicle/renault_0.yaml b/templates/docs/vehicle/renault_0.yaml new file mode 100644 index 000000000..2b8da2fcb --- /dev/null +++ b/templates/docs/vehicle/renault_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Renault + +render: +- default: | + type: template + template: renault + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WREN... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 60 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: renault + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WREN... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 60 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/seat.yaml b/templates/docs/vehicle/seat.yaml deleted file mode 100644 index 4122512b8..000000000 --- a/templates/docs/vehicle/seat.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: seat -description: Seat (Cupra, Mii) -user: -password: -vin: W... -capacity: 10 \ No newline at end of file diff --git a/templates/docs/vehicle/seat_0.yaml b/templates/docs/vehicle/seat_0.yaml new file mode 100644 index 000000000..59e9b3dbb --- /dev/null +++ b/templates/docs/vehicle/seat_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Seat + description: Cupra + +render: +- default: | + type: template + template: seat + 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: 10 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: seat + 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: 10 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/seat_1.yaml b/templates/docs/vehicle/seat_1.yaml new file mode 100644 index 000000000..f001851aa --- /dev/null +++ b/templates/docs/vehicle/seat_1.yaml @@ -0,0 +1,28 @@ +product: + brand: Seat + description: Mii + +render: +- default: | + type: template + template: seat + 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: 10 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: seat + 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: 10 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/skoda.yaml b/templates/docs/vehicle/skoda.yaml deleted file mode 100644 index 09f442d5a..000000000 --- a/templates/docs/vehicle/skoda.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: skoda -description: Skoda (Citigo) -user: -password: -vin: W... -capacity: 10 \ No newline at end of file diff --git a/templates/docs/vehicle/skoda_0.yaml b/templates/docs/vehicle/skoda_0.yaml new file mode 100644 index 000000000..4b8d7b672 --- /dev/null +++ b/templates/docs/vehicle/skoda_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Skoda + description: Citigo + +render: +- default: | + type: template + template: skoda + 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: 10 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: skoda + 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: 10 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/smart.yaml b/templates/docs/vehicle/smart.yaml deleted file mode 100644 index a69215cb3..000000000 --- a/templates/docs/vehicle/smart.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: smart -description: Smart EQ -user: -password: -vin: W... -capacity: 17.6 \ No newline at end of file diff --git a/templates/docs/vehicle/smart_0.yaml b/templates/docs/vehicle/smart_0.yaml new file mode 100644 index 000000000..08060deba --- /dev/null +++ b/templates/docs/vehicle/smart_0.yaml @@ -0,0 +1,10 @@ +product: + brand: Smart + description: EQ + +render: +- default: | + type: template + template: smart + : # Optional + capacity: 17.6 # Akku-Kapazität in kWh # Optional \ No newline at end of file diff --git a/templates/docs/vehicle/tesla.yaml b/templates/docs/vehicle/tesla.yaml deleted file mode 100644 index 0d42b7508..000000000 --- a/templates/docs/vehicle/tesla.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: tesla -description: Tesla -accessToken: # Siehe https://docs.evcc.io/docs/devices/vehicles#tesla -refreshToken: # Siehe https://docs.evcc.io/docs/devices/vehicles#tesla -vin: W... -capacity: 90 \ No newline at end of file diff --git a/templates/docs/vehicle/tesla_0.yaml b/templates/docs/vehicle/tesla_0.yaml new file mode 100644 index 000000000..ab3d58013 --- /dev/null +++ b/templates/docs/vehicle/tesla_0.yaml @@ -0,0 +1,34 @@ +product: + brand: Tesla +description: | + Es wird ein `access` und ein `refresh` Token für die Kommunikation mit der Tesla API erstellt werden. + + Folgende Apps ermöglichen das Erstellen von den beiden Tokens: + - [Auth app for Tesla (iOS)](https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613#?platform=iphone) + - [Tesla Tokens (Android)](https://play.google.com/store/apps/details?id=net.leveugle.teslatokens) + - [Tesla Auth (macOS, Linux)](https://github.com/adriankumpf/tesla_auth) + + +render: +- default: | + type: template + template: tesla + title: # Wird in der Benutzeroberfläche angezeigt # Optional + accessToken: # Siehe https://docs.evcc.io/docs/devices/vehicles#tesla + 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 + advanced: | + type: template + template: tesla + title: # Wird in der Benutzeroberfläche angezeigt # Optional + accessToken: # Siehe https://docs.evcc.io/docs/devices/vehicles#tesla + 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 + 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 diff --git a/templates/docs/vehicle/tronity.yaml b/templates/docs/vehicle/tronity.yaml deleted file mode 100644 index 295a34b56..000000000 --- a/templates/docs/vehicle/tronity.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: template -template: tronity -description: Tronity -userid: -secret: -accessToken: -refreshToken: -vin: W... -capacity: 10 \ No newline at end of file diff --git a/templates/docs/vehicle/tronity_0.yaml b/templates/docs/vehicle/tronity_0.yaml new file mode 100644 index 000000000..b9b8ec9b8 --- /dev/null +++ b/templates/docs/vehicle/tronity_0.yaml @@ -0,0 +1,32 @@ +product: + description: Tronity + group: Generische Unterstützung +requirements: ["sponsorship"] + +render: +- default: | + type: template + template: tronity + 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: | + type: template + template: tronity + 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 + 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 diff --git a/templates/docs/vehicle/volvo.yaml b/templates/docs/vehicle/volvo.yaml deleted file mode 100644 index dd2cb2024..000000000 --- a/templates/docs/vehicle/volvo.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: volvo -description: Volvo -user: -password: -vin: W... -capacity: 50 \ No newline at end of file diff --git a/templates/docs/vehicle/volvo_0.yaml b/templates/docs/vehicle/volvo_0.yaml new file mode 100644 index 000000000..795f32a5c --- /dev/null +++ b/templates/docs/vehicle/volvo_0.yaml @@ -0,0 +1,27 @@ +product: + brand: Volvo + +render: +- default: | + type: template + template: volvo + 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: 50 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: volvo + 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: 50 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/templates/docs/vehicle/vw.yaml b/templates/docs/vehicle/vw.yaml deleted file mode 100644 index 74f2011bc..000000000 --- a/templates/docs/vehicle/vw.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: template -template: vw -description: Volkswagen (We Connect) -user: -password: -vin: WVWZZZ... -capacity: 10 \ No newline at end of file diff --git a/templates/docs/vehicle/vw_0.yaml b/templates/docs/vehicle/vw_0.yaml new file mode 100644 index 000000000..fbd6fd8c8 --- /dev/null +++ b/templates/docs/vehicle/vw_0.yaml @@ -0,0 +1,28 @@ +product: + brand: Volkswagen + description: We Connect + +render: +- default: | + type: template + template: vw + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WVWZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 10 # Akku-Kapazität in kWh # Optional + advanced: | + type: template + template: vw + title: # Wird in der Benutzeroberfläche angezeigt # Optional + user: # Benutzername um auf das Gerät zuzugreifen + password: # Passwort des Benutzerkontos + vin: WVWZZZ... # Erforderlich, wenn mehrere Fahrzeuge des Herstellers vorhanden sind # Optional + capacity: 10 # Akku-Kapazität in kWh # Optional + cache: 5m # Das zeitliche Interval, in welchem Daten vom Fahrzeug neu geladen werden soll # 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 diff --git a/util/templates/config.go b/util/templates/config.go new file mode 100644 index 000000000..d2746ccea --- /dev/null +++ b/util/templates/config.go @@ -0,0 +1,72 @@ +package templates + +import ( + "fmt" + + "github.com/evcc-io/evcc/templates/definition" + "gopkg.in/yaml.v3" +) + +type ConfigDefaultsDefinition struct { + Params []Param // Default values for common parameters + Presets map[string]struct { + Params []Param + Render string + } + Modbus struct { // Details about possible ModbusInterfaces and ModbusConnectionTypes + Interfaces map[string][]string // Information about physical modbus interface types (rs485, tcpip) + Types map[string]struct { // Details about different ways to connect to a ModbusInterface and its defaults + Description TextLanguage + Params []Param + } + } + DeviceGroups map[string]TextLanguage // Default device groups +} + +type ConfigDefaults struct { + read bool + + Config ConfigDefaultsDefinition +} + +// read the actual config into the struct, but only once +func (c *ConfigDefaults) LoadDefaults() { + if c.read { + return + } + + if err := yaml.Unmarshal([]byte(definition.DefaultsContent), &c.Config); err != nil { + panic(fmt.Errorf("Error: failed to parse deviceGroupListDefinition: %v\n", err)) + } + + c.read = true + + // resolve modbus param references + for k := range c.Config.Modbus.Types { + for i, p := range c.Config.Modbus.Types[k].Params { + // if this is a reference, get the referenced values and then overwrite it with the values defined here + if p.Reference { + finalName := p.Name + referencedItemName := p.Name + if p.Referencename != "" { + referencedItemName = p.Referencename + } + _, referencedParam := c.ParamByName(referencedItemName) + referencedParam.OverwriteProperties(p) + referencedParam.Name = finalName + p = referencedParam + c.Config.Modbus.Types[k].Params[i] = p + } + } + } +} + +// return the param with the given name +func (c *ConfigDefaults) ParamByName(name string) (int, Param) { + for i, param := range c.Config.Params { + if param.Name == name { + return i, param + } + } + return -1, Param{} +} diff --git a/util/templates/documentation.tpl b/util/templates/documentation.tpl new file mode 100644 index 000000000..02e0d23d4 --- /dev/null +++ b/util/templates/documentation.tpl @@ -0,0 +1,107 @@ +product: +{{- if .ProductBrand }} + brand: {{ .ProductBrand }} +{{- end }} +{{- if .ProductDescription }} + description: {{ .ProductDescription }} +{{- end }} +{{- if .ProductGroup }} + group: {{ .ProductGroup }} +{{- end }} +{{- if .Capabilities }} +capabilities: [{{ range .Capabilities -}}"{{ . }}"{{- end }}] +{{- end }} +{{- if .Requirements }} +requirements: [{{ range .Requirements -}}"{{ . }}"{{- end }}] +{{- end }} +{{- if .RequirementDescription }} +description: | +{{ .RequirementDescription | indent 2 }} +{{- end }} + +render: +{{ if .Usages }}{{ range .Usages -}} +- usage: {{ . }} + default: | + type: template + template: {{ $.Template }} + usage: {{ . }} + {{- range $.Params }} + {{- if eq .Name "modbus" }} + # Modbus Start +{{ $.Modbus | indent 4 -}} + # Modbus End + {{- else if ne .Advanced true }} + {{ .Name }}: + {{- if len .Value }} {{ .Value }} {{ end }} + {{- if ne (len .Values) 0 }} + {{ range .Values }} + - {{ . }} + {{ end }} + {{- end }} + {{- if .Help.DE }} # {{ .Help.DE }} {{ end }}{{ if ne .Required true }} # Optional {{ end -}} + {{- end -}} + {{ end }} +{{- if $.AdvancedParams }} + advanced: | + type: template + template: {{ $.Template }} + usage: {{ . }} + {{- range $.Params }} + {{- if eq .Name "modbus" }} + # Modbus Start +{{ $.Modbus | indent 4 -}} + # Modbus End + {{- else }} + {{ .Name }}: + {{- if len .Value }} {{ .Value }} {{ end }} + {{- if ne (len .Values) 0 }} + {{ range .Values }} + - {{ . }} + {{ end }} + {{- end }} + {{- if .Help.DE }} # {{ .Help.DE }} {{ end }}{{ if ne .Required true }} # Optional {{ end -}} + {{- end -}} + {{ end }} +{{ end }} +{{ end }}{{ else -}} +- default: | + type: template + template: {{ $.Template }} + {{- range $.Params }} + {{- if eq .Name "modbus" }} + # Modbus Start +{{ $.Modbus | indent 4 -}} + # Modbus End + {{- else if ne .Advanced true }} + {{ .Name }}: + {{- if len .Value }} {{ .Value }} {{ end }} + {{- if ne (len .Values) 0 }} + {{ range .Values }} + - {{ . }} + {{ end }} + {{- end }} + {{- if .Help.DE }} # {{ .Help.DE }} {{ end }}{{ if ne .Required true }} # Optional {{ end -}} + {{- end -}} + {{ end }} +{{- if $.AdvancedParams }} + advanced: | + type: template + template: {{ $.Template }} + {{- range $.Params }} + {{- if eq .Name "modbus" }} + # Modbus Start +{{ $.Modbus | indent 4 -}} + # Modbus End + {{- else }} + {{ .Name }}: + {{- if len .Value }} {{ .Value }} {{ end }} + {{- if ne (len .Values) 0 }} + {{ range .Values }} + - {{ . }} + {{ end }} + {{- end }} + {{- if .Help.DE }} # {{ .Help.DE }} {{ end }}{{ if ne .Required true }} # Optional {{ end -}} + {{- end -}} + {{ end }} +{{ end }}{{ end }} diff --git a/util/templates/documentation_modbus.tpl b/util/templates/documentation_modbus.tpl new file mode 100644 index 000000000..13a737379 --- /dev/null +++ b/util/templates/documentation_modbus.tpl @@ -0,0 +1,16 @@ +id: {{ .id }} +{{- if .rs485serial }} +# RS485 via adapter: +device: {{ .device }} # USB-RS485 Adapter Adresse +baudrate: {{ .baudrate }} # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 +comset: "{{ .comset }}" # Kommunikationsparameter für den Adapter +{{- end }} +{{- if .rs485tcpip }} +# RS485 via TCPIP: +uri: {{ .host }}:{{ .port }} # IP-Adresse oder Hostname: Port +rtu: true +{{- end }} +{{- if .tcpip }} +# TCPIP +uri: {{ .host }}:{{ .port }} # IP-Adresse oder Hostname: Port +{{- end }} diff --git a/util/templates/generate/generate.go b/util/templates/generate/generate.go index 3a3bccf37..78f0b0a59 100644 --- a/util/templates/generate/generate.go +++ b/util/templates/generate/generate.go @@ -37,20 +37,11 @@ func generateClass(class string) error { if err := tmpl.Validate(); err != nil { return err } - usages := tmpl.Usages() - fmt.Println(tmpl.Template) + for index, product := range tmpl.Products { + fmt.Println(tmpl.Template + ": " + tmpl.ProductTitle(product)) - if len(usages) == 0 { - err := writeTemplate(class, tmpl, "") - if err != nil { - return err - } - } - - // render all usages - for _, usage := range usages { - err := writeTemplate(class, tmpl, usage) + err := writeTemplate(class, index, product, tmpl) if err != nil { return err } @@ -60,39 +51,18 @@ func generateClass(class string) error { return nil } -func writeTemplate(class string, tmpl templates.Template, usage string) error { +func writeTemplate(class string, index int, product templates.Product, tmpl templates.Template) error { values := tmpl.Defaults(templates.TemplateRenderModeDocs) - if usage != "" { - values["usage"] = usage - } - - modbusChoices := tmpl.ModbusChoices() - - for _, modbusChoice := range modbusChoices { - switch modbusChoice { - case templates.ModbusChoiceRS485: - values[templates.ModbusRS485Serial] = true - values[templates.ModbusRS485TCPIP] = true - case templates.ModbusChoiceTCPIP: - values[templates.ModbusTCPIP] = true - } - } - b, err := tmpl.RenderProxyWithValues(values, "de", true) - + b, err := tmpl.RenderDocumentation(product, values, "de") if err != nil { - println(string(b)) return err } - filename := fmt.Sprintf("%s/%s/%s.yaml", basePath, class, tmpl.Template) - if usage != "" { - filename = fmt.Sprintf("%s/%s/%s-%s.yaml", basePath, class, tmpl.Template, usage) - } + filename := fmt.Sprintf("%s/%s/%s_%d.yaml", basePath, class, tmpl.Template, index) if err := os.WriteFile(filename, b, 0644); err != nil { return err } - return nil } diff --git a/util/templates/init.go b/util/templates/init.go index 5a921d575..2951ef2c9 100644 --- a/util/templates/init.go +++ b/util/templates/init.go @@ -10,7 +10,8 @@ import ( ) var ( - templates = make(map[string][]Template) + templates = make(map[string][]Template) + configDefaults = ConfigDefaults{} ) const ( @@ -20,6 +21,8 @@ const ( ) func loadTemplates(class string) { + configDefaults.LoadDefaults() + if templates[class] != nil { return } @@ -37,11 +40,22 @@ func loadTemplates(class string) { return err } - var tmpl Template - if err = yaml.Unmarshal(b, &tmpl); err != nil { + var definition TemplateDefinition + if err = yaml.Unmarshal(b, &definition); err != nil { return fmt.Errorf("reading template '%s' failed: %w", filepath, err) } - if err = tmpl.ResolveParamBases(); err != nil { + + tmpl := Template{ + TemplateDefinition: definition, + ConfigDefaults: configDefaults, + } + if err = tmpl.ResolvePresets(); err != nil { + return err + } + if err = tmpl.ResolveGroup(); err != nil { + return err + } + if err = tmpl.UpdateParamsWithDefaults(); err != nil { return err } if err = tmpl.Validate(); err != nil { diff --git a/util/templates/modbus.tpl b/util/templates/modbus.tpl index aac91cdba..522d95dc9 100644 --- a/util/templates/modbus.tpl +++ b/util/templates/modbus.tpl @@ -1,17 +1,17 @@ {{- define "modbus"}} id: {{ .id }} -{{- if or (eq .modbus "rs485serial") .modbusrs485serial }} +{{- if or (eq .modbus "rs485serial") .rs485serial }} # RS485 via adapter: device: {{ .device }} baudrate: {{ .baudrate }} comset: "{{ .comset }}" {{- end }} -{{- if or (eq .modbus "rs485tcpip") .modbusrs485tcpip }} +{{- if or (eq .modbus "rs485tcpip") .rs485tcpip }} # RS485 via TCPIP: uri: {{ .host }}:{{ .port }} rtu: true # serial modbus rtu (rs485) device connected using simple ethernet adapter {{- end }} -{{- if or (eq .modbus "tcpip") .modbustcpip }} +{{- if or (eq .modbus "tcpip") .tcpip }} # TCPIP uri: {{ .host }}:{{ .port }} {{- end }} diff --git a/util/templates/proxy.tpl b/util/templates/proxy.tpl index 62ddc1227..8beb106f3 100644 --- a/util/templates/proxy.tpl +++ b/util/templates/proxy.tpl @@ -1,8 +1,5 @@ type: template template: {{ .Template }} -{{- if .Description }} -description: {{ .Description }} -{{- end }} {{ range .Params -}} {{ .Name }}: {{- if len .Value }} {{ .Value }} {{ end }} diff --git a/util/templates/template.go b/util/templates/template.go index c068b5a7f..d724c214a 100644 --- a/util/templates/template.go +++ b/util/templates/template.go @@ -8,191 +8,51 @@ import ( "text/template" "github.com/Masterminds/sprig/v3" - "github.com/evcc-io/evcc/templates/definition" "github.com/evcc-io/evcc/util" "github.com/thoas/go-funk" - "gopkg.in/yaml.v3" ) -const ( - ParamUsage = "usage" - ParamModbus = "modbus" - - UsageChoiceGrid = "grid" - UsageChoicePV = "pv" - UsageChoiceBattery = "battery" - UsageChoiceCharge = "charge" - - HemsTypeSMA = "sma" - - ModbusChoiceRS485 = "rs485" - ModbusChoiceTCPIP = "tcpip" - ModbusKeyRS485Serial = "rs485serial" - ModbusKeyRS485TCPIP = "rs485tcpip" - ModbusKeyTCPIP = "tcpip" - - ModbusRS485Serial = "modbusrs485serial" - ModbusRS485TCPIP = "modbusrs485tcpip" - ModbusTCPIP = "modbustcpip" - - ModbusParamNameId = "id" - ModbusParamValueId = 1 - ModbusParamNameDevice = "device" - ModbusParamValueDevice = "/dev/ttyUSB0" - ModbusParamNameBaudrate = "baudrate" - ModbusParamValueBaudrate = 9600 - ModbusParamNameComset = "comset" - ModbusParamValueComset = "8N1" - ModbusParamNameURI = "uri" - ModbusParamNameHost = "host" - ModbusParamValueHost = "192.0.2.2" - ModbusParamNamePort = "port" - ModbusParamValuePort = 502 - ModbusParamNameRTU = "rtu" - - TemplateRenderModeDocs = "docs" - TemplateRenderModeUnitTest = "unittest" - TemplateRenderModeInstance = "instance" -) - -var HemsValueTypes = []string{HemsTypeSMA} - -const ( - ParamValueTypeString = "string" - ParamValueTypeNumber = "number" - ParamValueTypeFloat = "float" - ParamValueTypeBool = "bool" - ParamValueTypeStringList = "stringlist" - ParamValueTypeChargeModes = "chargemodes" -) - -const ( - DependencyCheckEmpty = "empty" - DependencyCheckNotEmpty = "notempty" - DependencyCheckEqual = "equal" -) - -var ParamValueTypes = []string{ParamValueTypeString, ParamValueTypeNumber, ParamValueTypeFloat, ParamValueTypeBool, ParamValueTypeStringList, ParamValueTypeChargeModes} - -var ValidModbusChoices = []string{ModbusChoiceRS485, ModbusChoiceTCPIP} -var ValidUsageChoices = []string{UsageChoiceGrid, UsageChoicePV, UsageChoiceBattery, UsageChoiceCharge} - -var predefinedTemplateProperties = []string{"type", "template", "name", - ModbusParamNameId, ModbusParamNameDevice, ModbusParamNameBaudrate, ModbusParamNameComset, - ModbusParamNameURI, ModbusParamNameHost, ModbusParamNamePort, ModbusParamNameRTU, - ModbusRS485Serial, ModbusRS485TCPIP, ModbusTCPIP, - ModbusKeyTCPIP, ModbusKeyRS485Serial, ModbusKeyRS485TCPIP, -} - -// language specific texts -type TextLanguage struct { - Generic string // language independent - DE string // german text - EN string // english text -} - -func (t *TextLanguage) String(lang string) string { - if t.Generic != "" { - return t.Generic - } - switch lang { - case "de": - return t.DE - case "en": - return t.EN - } - return t.DE -} - -func (t *TextLanguage) SetString(lang, value string) { - switch lang { - case "de": - t.DE = value - case "en": - t.EN = value - default: - t.DE = value - } -} - -// Capabilities -type Capabilities struct { - ISO151182 bool // ISO 15118-2 support -} - -// Requirements -type Requirements struct { - Hems string // HEMS Type - Eebus bool // EEBUS Setup is required - Mqtt bool // MQTT Setup is required - Sponsorship bool // Sponsorship is required - 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 -} - -type GuidedSetup struct { - Enable bool // if true, guided setup is possible - Linked []LinkedTemplate // a list of templates that should be processed as part of the guided setup -} - -// Linked Template -type LinkedTemplate struct { - Template string - Usage string // usage: "grid", "pv", "battery" - Multiple bool // if true, multiple instances of this template can be added - ExcludeTemplate string // only consider this if no device of the named linked template was added -} - -type Dependency struct { - Name string // the Param name value this depends on - Check string // the check to perform, valid values see const DependencyCheck... - Value string // the string value to check against -} - -// Param is a proxy template parameter -type Param struct { - Base string // Reference a predefined se of params - Name string // Param name which is used for assigning defaults properties and referencing in render - Description TextLanguage // language specific titles (presented in UI instead of Name) - Dependencies []Dependency // List of dependencies, when this param should be presented - Required bool // cli if the user has to provide a non empty value - Mask bool // cli if the value should be masked, e.g. for passwords - Advanced bool // cli if the user does not need to be asked. Requires a "Default" to be defined. - Default string // default value if no user value is provided in the configuration - Example string // cli example value - 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 - ValueType string // string representation of the value type, "string" is default - Choice []string // defines which usage choices this config supports, valid elemtents are "grid", "pv", "battery", "charge" - Usages []string - Baudrate int // device specific default for modbus RS485 baudrate - Comset string // device specific default for modbus RS485 comset - Port int // device specific default for modbus TCPIP port - ID int // device specific default for modbus ID -} - -type ParamBase struct { - Params []Param - Render string -} - -var paramBaseList map[string]ParamBase - // Template describes is a proxy device for use with cli and automated testing type Template struct { - Template string - Description TextLanguage // user friendly description of the device this template describes - Capabilities Capabilities - Requirements Requirements - GuidedSetup GuidedSetup - Generic bool // if this describes a generic device type rather than a product - Params []Param - Render string // rendering template + TemplateDefinition + + ConfigDefaults ConfigDefaults + + Lang string + + title string + titles []string } +// UpdateParamWithDefaults adds default values to specific param name entries +func (t *Template) UpdateParamsWithDefaults() error { + for i, p := range t.Params { + if p.ValueType == "" || (p.ValueType != "" && !funk.ContainsString(ValidParamValueTypes, p.ValueType)) { + t.Params[i].ValueType = ParamValueTypeString + } + + if index, resultMapItem := t.ConfigDefaults.ParamByName(strings.ToLower(p.Name)); index > -1 { + t.Params[i].OverwriteProperties(resultMapItem) + } + } + + return nil +} + +// validate the template (only rudimentary for now) func (t *Template) Validate() error { + for _, c := range t.Capabilities { + if !funk.ContainsString(ValidCapabilities, c) { + return fmt.Errorf("invalid capability '%s' in template %s", c, t.Template) + } + } + + for _, r := range t.Requirements.EVCC { + if !funk.ContainsString(ValidRequirements, r) { + return fmt.Errorf("invalid requirement '%s' in template %s", r, t.Template) + } + } + for _, p := range t.Params { switch p.Name { case ParamUsage: @@ -208,42 +68,106 @@ func (t *Template) Validate() error { } } } + + if p.ValueType != "" && !funk.ContainsString(ValidParamValueTypes, p.ValueType) { + return fmt.Errorf("invalid value type '%s' in template %s", p.ValueType, t.Template) + } + + for _, d := range p.Dependencies { + if !funk.ContainsString(ValidDependencies, d.Check) { + return fmt.Errorf("invalid dependency check '%s' in template %s", d.Check, t.Template) + } + } } return nil } -// add the referenced base Params and overwrite existing ones -func (t *Template) ResolveParamBases() error { - if paramBaseList == nil { - err := yaml.Unmarshal([]byte(definition.ParamBaseListDefinition), ¶mBaseList) - if err != nil { - return fmt.Errorf("Error: failed to parse paramBasesDefinition: %v\n", err) - } +// set the language title by combining all product titles +func (t *Template) SetCombinedTitle() { + if len(t.titles) == 0 { + t.resolveTitles() } + title := "" + for _, t := range t.titles { + if title != "" { + title += "/" + } + title += t + } + t.title = title +} + +// set the title for this templates +func (t *Template) SetTitle(title string) { + t.title = title +} + +// return the title for this template +func (t *Template) Title() string { + return t.title +} + +// return a language specific product title +func (t *Template) ProductTitle(p Product) string { + title := "" + + if p.Brand != "" { + title += p.Brand + } + + description := p.Description.String(t.Lang) + if description != "" { + if title != "" { + title += " " + } + title += description + } + + return title +} + +// return the language specific product titles +func (t *Template) Titles(lang string) []string { + t.Lang = lang + + if len(t.titles) == 0 { + t.resolveTitles() + } + + return t.titles +} + +// set the language specific product titles +func (t *Template) resolveTitles() { + var titles []string + + for _, p := range t.Products { + titles = append(titles, t.ProductTitle(p)) + } + + t.titles = titles +} + +// add the referenced base Params and overwrite existing ones +func (t *Template) ResolvePresets() error { currentParams := make([]Param, len(t.Params)) copy(currentParams, t.Params) t.Params = []Param{} for _, p := range currentParams { - if p.Base != "" { - base, ok := paramBaseList[p.Base] + if p.Preset != "" { + base, ok := t.ConfigDefaults.Config.Presets[p.Preset] if !ok { - return fmt.Errorf("Error: Could not find parambase definition: %s\n", p.Base) + return fmt.Errorf("Error: Could not find preset definition: %s\n", p.Preset) } t.Params = append(t.Params, base.Params...) continue } - if i, item := t.ParamByName(p.Name); item != nil { - // we only allow overwriting a few fields - if p.Default != "" { - t.Params[i].Default = p.Default - } - if p.Example != "" { - t.Params[i].Example = p.Example - } + if i, _ := t.ParamByName(p.Name); i > -1 { + t.Params[i].OverwriteProperties(p) } else { t.Params = append(t.Params, p) } @@ -252,50 +176,70 @@ func (t *Template) ResolveParamBases() error { return nil } +// check if the provided group exists +func (t *Template) ResolveGroup() error { + if t.Group == "" { + return nil + } + + _, ok := t.ConfigDefaults.Config.DeviceGroups[t.Group] + if !ok { + return fmt.Errorf("Error: Could not find devicegroup definition: %s\n", t.Group) + } + + return nil +} + +// return the language specific group title +func (t *Template) GroupTitle() string { + tl := t.ConfigDefaults.Config.DeviceGroups[t.Group] + return tl.String(t.Lang) +} + // Defaults returns a map of default values for the template func (t *Template) Defaults(renderMode string) map[string]interface{} { values := make(map[string]interface{}) for _, p := range t.Params { - switch p.ValueType { - case ParamValueTypeStringList: - values[p.Name] = []string{} - case ParamValueTypeChargeModes: - values[p.Name] = "" - default: - if p.Test != "" { - values[p.Name] = p.Test - } else if p.Example != "" && funk.ContainsString([]string{TemplateRenderModeDocs, TemplateRenderModeUnitTest}, renderMode) { - values[p.Name] = p.Example - } else { - values[p.Name] = p.Default // may be empty - } - } + values[p.Name] = p.DefaultValue(renderMode) } return values } -// return the param with the given name -func (t *Template) ParamByName(name string) (int, *Param) { +// Update the default value of a param +// +// Used for modbus params, which are dynamically added after selecting the interface +func (t *Template) SetParamDefault(name string, value string) { for i, p := range t.Params { if p.Name == name { - return i, &p + t.Params[i].Default = value + return } } - return 0, nil +} + +// return the param with the given name +func (t *Template) ParamByName(name string) (int, Param) { + for i, p := range t.Params { + if p.Name == name { + return i, p + } + } + return -1, Param{} } // Usages returns the list of supported usages func (t *Template) Usages() []string { - if _, p := t.ParamByName(ParamUsage); p != nil { + if i, p := t.ParamByName(ParamUsage); i > -1 { return p.Choice } return nil } +// return all modbus choices defined in the template func (t *Template) ModbusChoices() []string { - if _, p := t.ParamByName(ParamModbus); p != nil { + if i, p := t.ParamByName(ParamModbus); i > -1 { return p.Choice } @@ -306,13 +250,13 @@ func (t *Template) ModbusChoices() []string { var proxyTmpl string // RenderProxy renders the proxy template -func (t *Template) RenderProxyWithValues(values map[string]interface{}, lang string, includeDescription bool) ([]byte, error) { +func (t *Template) RenderProxyWithValues(values map[string]interface{}, lang string) ([]byte, error) { tmpl, err := template.New("yaml").Funcs(template.FuncMap(sprig.FuncMap())).Parse(proxyTmpl) if err != nil { panic(err) } - t.ModbusParams(values) + t.ModbusParams("", values) for index, p := range t.Params { for k, v := range values { @@ -361,9 +305,6 @@ func (t *Template) RenderProxyWithValues(values map[string]interface{}, lang str "Template": t.Template, "Params": t.Params, } - if includeDescription { - data["Description"] = t.Description.String(lang) - } err = tmpl.Execute(out, data) return bytes.TrimSpace(out.Bytes()), err @@ -379,15 +320,15 @@ func (t *Template) RenderResult(renderMode string, other map[string]interface{}) t.ModbusValues(renderMode, values) // add the common templates - for _, v := range paramBaseList { + for _, v := range t.ConfigDefaults.Config.Presets { if !strings.Contains(t.Render, v.Render) { t.Render = fmt.Sprintf("%s\n%s", t.Render, v.Render) } } for item, p := range values { - _, param := t.ParamByName(item) - if param == nil && !funk.ContainsString(predefinedTemplateProperties, item) { + i, _ := t.ParamByName(item) + if i == -1 && !funk.ContainsString(predefinedTemplateProperties, item) { return nil, values, fmt.Errorf("invalid element 'name: %s'", item) } diff --git a/util/templates/template_documentation.go b/util/templates/template_documentation.go new file mode 100644 index 000000000..06dbdfddb --- /dev/null +++ b/util/templates/template_documentation.go @@ -0,0 +1,102 @@ +package templates + +import ( + "bytes" + _ "embed" + "fmt" + "text/template" + + "github.com/Masterminds/sprig/v3" +) + +//go:embed documentation.tpl +var documentationTmpl string + +//go:embed documentation_modbus.tpl +var documentationModbusTmpl string + +// RenderProxy renders the proxy template +func (t *Template) RenderDocumentation(product Product, values map[string]interface{}, lang string) ([]byte, error) { + for index, p := range t.Params { + for k, v := range values { + if p.Name != k { + continue + } + + switch p.ValueType { + case ParamValueTypeStringList: + for _, e := range v.([]string) { + t.Params[index].Values = append(p.Values, yamlQuote(e)) + } + default: + switch v := v.(type) { + case string: + t.Params[index].Value = yamlQuote(v) + case int: + t.Params[index].Value = fmt.Sprintf("%d", v) + } + } + } + } + + usages := t.Usages() + modbusChoices := t.ModbusChoices() + modbusRender := "" + if len(modbusChoices) > 0 { + if i, _ := t.ParamByName(ParamModbus); i > -1 { + modbusTmpl, err := template.New("yaml").Funcs(template.FuncMap(sprig.FuncMap())).Parse(documentationModbusTmpl) + if err != nil { + panic(err) + } + + modbusData := map[string]interface{}{} + t.ModbusValues(TemplateRenderModeDocs, modbusData) + + modbusOut := new(bytes.Buffer) + + err = modbusTmpl.Execute(modbusOut, modbusData) + if err != nil { + panic(err) + } + + modbusRender = modbusOut.String() + } + } + + // remove usage from params and check if there are advanced params + var hasAdvancedParam bool + var newParams []Param + for _, param := range t.Params { + if param.Name == ParamUsage { + continue + } + if param.Advanced { + hasAdvancedParam = true + } + newParams = append(newParams, param) + } + t.Params = newParams + + out := new(bytes.Buffer) + data := map[string]interface{}{ + "Template": t.Template, + "ProductBrand": product.Brand, + "ProductDescription": product.Description.String(lang), + "ProductGroup": t.GroupTitle(), + "Capabilities": t.Capabilities, + "Requirements": t.Requirements.EVCC, + "RequirementDescription": t.Requirements.Description.String(lang), + "Params": t.Params, + "AdvancedParams": hasAdvancedParam, + "Usages": usages, + "Modbus": modbusRender, + } + + tmpl, err := template.New("yaml").Funcs(template.FuncMap(sprig.FuncMap())).Parse(documentationTmpl) + if err != nil { + panic(err) + } + err = tmpl.Execute(out, data) + + return bytes.TrimSpace(out.Bytes()), err +} diff --git a/util/templates/template_modbus.go b/util/templates/template_modbus.go index 45a30b13f..7afa0bc00 100644 --- a/util/templates/template_modbus.go +++ b/util/templates/template_modbus.go @@ -2,118 +2,98 @@ package templates import ( _ "embed" - "errors" "fmt" "strings" - - "github.com/thoas/go-funk" ) //go:embed modbus.tpl var modbusTmpl string // add the modbus params to the template -func (t *Template) ModbusParams(values map[string]interface{}) { +func (t *Template) ModbusParams(modbusType string, values map[string]interface{}) { if len(t.ModbusChoices()) == 0 { return } - if values[ParamModbus] == nil { + if modbusType != "" { + values[ParamModbus] = modbusType + } + + if values[ParamModbus] == nil || values[ParamModbus] == "" { return } - for k := range values { - if k == ModbusParamNameId { - t.Params = append(t.Params, Param{Name: ModbusParamNameId, ValueType: ParamValueTypeNumber}) - continue - } - - type modbusData struct { - modbusKeys []string - valueType string - } - paramMap := map[string]modbusData{ - ModbusParamNameId: {modbusKeys: []string{ModbusKeyTCPIP, ModbusKeyRS485TCPIP, ModbusKeyRS485Serial}, valueType: ParamValueTypeNumber}, - ModbusParamNameHost: {modbusKeys: []string{ModbusKeyTCPIP, ModbusKeyRS485TCPIP}, valueType: ParamValueTypeString}, - ModbusParamNamePort: {modbusKeys: []string{ModbusKeyTCPIP, ModbusKeyRS485TCPIP}, valueType: ParamValueTypeNumber}, - ModbusParamNameDevice: {modbusKeys: []string{ModbusKeyRS485Serial}, valueType: ParamValueTypeString}, - ModbusParamNameBaudrate: {modbusKeys: []string{ModbusKeyRS485Serial}, valueType: ParamValueTypeNumber}, - ModbusParamNameComset: {modbusKeys: []string{ModbusKeyRS485Serial}, valueType: ParamValueTypeString}, - } - - if funk.ContainsString(paramMap[k].modbusKeys, values[ParamModbus].(string)) { - t.Params = append(t.Params, Param{Name: k, ValueType: paramMap[k].valueType}) - } - } + modbusParams := t.ConfigDefaults.Config.Modbus.Types[values[ParamModbus].(string)].Params + // add the modbus params at the beginning + t.Params = append(modbusParams, t.Params...) } // set the modbus values required from modbus.tpl and and the template to the render func (t *Template) ModbusValues(renderMode string, values map[string]interface{}) { - if len(t.ModbusChoices()) == 0 { + choices := t.ModbusChoices() + if len(choices) == 0 { return } - // either modbus param is defined or defaults for all modbus choices need to be set - hasModbusValues := false - if values[ModbusRS485Serial] == nil && values[ModbusRS485TCPIP] == nil && values[ModbusTCPIP] == nil { - for k, v := range values { - if k != ParamModbus { - continue - } - - switch s := v.(string); s { - case ModbusKeyRS485Serial, ModbusKeyRS485TCPIP, ModbusKeyTCPIP: - hasModbusValues = true - values[s] = true - default: - // this happens during tests - } - - break - } - } - // only add the template once, when testing multiple usages, it might already be present if !strings.Contains(t.Render, modbusTmpl) { t.Render = fmt.Sprintf("%s\n%s", t.Render, modbusTmpl) } - if hasModbusValues { + // either modbus param is defined, which means it ran through configuration + // or defaults for all modbus choices need to be set for rendering all cases for documentation + if modbusValue := values[ParamModbus]; renderMode != TemplateRenderModeInstance && modbusValue != nil && modbusValue != "" { + values[fmt.Sprintf("%s", modbusValue)] = true return } - // modbus defaults - for k, v := range map[string]interface{}{ - ModbusParamNameId: ModbusParamValueId, - ModbusParamNameHost: ModbusParamValueHost, - ModbusParamNamePort: ModbusParamValuePort, - ModbusParamNameDevice: ModbusParamValueDevice, - ModbusParamNameBaudrate: ModbusParamValueBaudrate, - ModbusParamNameComset: ModbusParamValueComset, - } { - values[k] = v + modbusConfig := t.ConfigDefaults.Config.Modbus + _, modbusParam := t.ParamByName(ParamModbus) + + modbusInterfaces := []string{} + for _, choice := range choices { + modbusInterfaces = append(modbusInterfaces, modbusConfig.Interfaces[choice]...) } - for _, p := range t.Params { - if p.Name != ParamModbus { - continue - } + for _, iface := range modbusInterfaces { + typeParams := modbusConfig.Types[iface].Params + for _, p := range typeParams { + values[p.Name] = p.DefaultValue(renderMode) - for _, choice := range p.Choice { - if !funk.ContainsString([]string{ModbusChoiceRS485, ModbusChoiceTCPIP}, choice) { - panic(errors.New("Invalid modbus choice: " + choice)) + var defaultValue interface{} + + switch p.Name { + case ModbusParamNameId: + if modbusParam.ID != 0 { + defaultValue = modbusParam.ID + } + case ModbusParamNamePort: + if modbusParam.Port != 0 { + defaultValue = modbusParam.Port + } + case ModbusParamNameBaudrate: + if modbusParam.Baudrate != 0 { + defaultValue = modbusParam.Baudrate + } + case ModbusParamNameComset: + if modbusParam.Comset != "" { + defaultValue = modbusParam.Comset + } } - } + if defaultValue == nil { + continue + } + + if renderMode == TemplateRenderModeInstance { + t.SetParamDefault(p.Name, fmt.Sprintf("%d", defaultValue)) + } else { + values[p.Name] = defaultValue + } + + } if renderMode == TemplateRenderModeDocs { - if funk.ContainsString(p.Choice, ModbusChoiceRS485) { - values[ModbusRS485Serial] = true - values[ModbusRS485TCPIP] = true - } - - if funk.ContainsString(p.Choice, ModbusChoiceTCPIP) { - values[ModbusTCPIP] = true - } + values[iface] = true } } } diff --git a/util/templates/template_types.go b/util/templates/template_types.go new file mode 100644 index 000000000..f3d536c0a --- /dev/null +++ b/util/templates/template_types.go @@ -0,0 +1,251 @@ +package templates + +const ( + ParamUsage = "usage" + ParamModbus = "modbus" + + UsageChoiceGrid = "grid" + UsageChoicePV = "pv" + UsageChoiceBattery = "battery" + UsageChoiceCharge = "charge" + + HemsTypeSMA = "sma" + + ModbusChoiceRS485 = "rs485" + ModbusChoiceTCPIP = "tcpip" + ModbusKeyRS485Serial = "rs485serial" + ModbusKeyRS485TCPIP = "rs485tcpip" + ModbusKeyTCPIP = "tcpip" + + ModbusParamNameId = "id" + ModbusParamNameDevice = "device" + ModbusParamNameBaudrate = "baudrate" + ModbusParamNameComset = "comset" + ModbusParamNameURI = "uri" + ModbusParamNameHost = "host" + ModbusParamNamePort = "port" + ModbusParamNameRTU = "rtu" + + TemplateRenderModeDocs = "docs" + TemplateRenderModeUnitTest = "unittest" + TemplateRenderModeInstance = "instance" +) + +const ( + ParamValueTypeString = "string" + ParamValueTypeNumber = "number" + ParamValueTypeFloat = "float" + ParamValueTypeBool = "bool" + ParamValueTypeStringList = "stringlist" + ParamValueTypeChargeModes = "chargemodes" +) + +var ValidParamValueTypes = []string{ParamValueTypeString, ParamValueTypeNumber, ParamValueTypeFloat, ParamValueTypeBool, ParamValueTypeStringList, ParamValueTypeChargeModes} + +var ValidModbusChoices = []string{ModbusChoiceRS485, ModbusChoiceTCPIP} +var ValidUsageChoices = []string{UsageChoiceGrid, UsageChoicePV, UsageChoiceBattery, UsageChoiceCharge} + +const ( + DependencyCheckEmpty = "empty" + DependencyCheckNotEmpty = "notempty" + DependencyCheckEqual = "equal" +) + +var ValidDependencies = []string{DependencyCheckEmpty, DependencyCheckNotEmpty, DependencyCheckEqual} + +const ( + CapabilityISO151182 = "iso151182" // ISO 15118-2 support + CapabilityRFID = "rfid" // RFID support + Capability1p3p = "1p3p" // 1P/3P phase switching support + CapabilitySMAHems = "smahems" // SMA HEMS Support +) + +var ValidCapabilities = []string{CapabilityISO151182, CapabilityRFID, Capability1p3p, CapabilitySMAHems} + +const ( + RequirementEEBUS = "eebus" // EEBUS Setup is required + RequirementMQTT = "mqtt" // MQTT Setup is required + RequirementSponsorship = "sponsorship" // Sponsorship is required +) + +var ValidRequirements = []string{RequirementEEBUS, RequirementMQTT, RequirementSponsorship} + +var predefinedTemplateProperties = []string{"type", "template", "name", + ModbusParamNameId, ModbusParamNameDevice, ModbusParamNameBaudrate, ModbusParamNameComset, + ModbusParamNameURI, ModbusParamNameHost, ModbusParamNamePort, ModbusParamNameRTU, + ModbusKeyTCPIP, ModbusKeyRS485Serial, ModbusKeyRS485TCPIP, +} + +// language specific texts +type TextLanguage struct { + Generic string // language independent + DE string // german text + EN string // english text +} + +func (t *TextLanguage) String(lang string) string { + if t.Generic != "" { + return t.Generic + } + switch lang { + case "de": + return t.DE + case "en": + return t.EN + } + return t.DE +} + +func (t *TextLanguage) SetString(lang, value string) { + switch lang { + case "de": + t.DE = value + case "en": + t.EN = value + default: + t.DE = value + } +} + +// Update the language specific texts +// +// always true to always update if the new value is not empty +// +// always false to update only if the old value is empty and the new value is not empty +func (t *TextLanguage) Update(new TextLanguage, always bool) { + if (new.Generic != "" && always) || (!always && t.Generic == "" && new.Generic != "") { + t.Generic = new.Generic + } + if (new.DE != "" && always) || (!always && t.DE == "" && new.DE != "") { + t.DE = new.DE + } + if (new.EN != "" && always) || (!always && t.EN == "" && new.EN != "") { + t.EN = new.EN + } +} + +// Requirements +type Requirements struct { + EVCC []string + 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 +} + +type GuidedSetup struct { + Enable bool // if true, guided setup is possible + Linked []LinkedTemplate // a list of templates that should be processed as part of the guided setup +} + +// Linked Template +type LinkedTemplate struct { + Template string + Usage string // usage: "grid", "pv", "battery" + Multiple bool // if true, multiple instances of this template can be added + ExcludeTemplate string // only consider this if no device of the named linked template was added +} + +type Dependency struct { + Name string // the Param name value this depends on + Check string // the check to perform, valid values see const DependencyCheck... + Value string // the string value to check against +} + +// Param is a proxy template parameter +// Params can be defined: +// 1. in the template: uses entries in 4. for default properties and values, can be overwritten here +// 2. in defaults.yaml presets: can ne referenced in 1 and some values set here can be overwritten in 1. See OverwriteProperties method +// 3. in defaults.yaml modbus section: are referenced in 1 by a `name:modbus` param entry. Some values here can be overwritten in 1. +// 4. in defaults.yaml param section: defaults for some params +// Generelle Reihenfolge der Werte (außer Description, Default, ValueType): +// 1. defaults.yaml param section +// 2. defaults.yaml presets +// 3. defaults.yaml modbus section +// 4. template +type Param struct { + Reference bool // if this is references another param definition + Referencename string // name of the referenced param if it is not identical to the defined name + Preset string // Reference a predefined se of params + Name string // Param name which is used for assigning defaults properties and referencing in render + Description TextLanguage // language specific titles (presented in UI instead of Name) + Dependencies []Dependency // List of dependencies, when this param should be presented + Required bool // cli if the user has to provide a non empty value + Mask bool // cli if the value should be masked, e.g. for passwords + Advanced bool // cli if the user does not need to be asked. Requires a "Default" to be defined. + Hidden bool // cli if the parameter should not be presented in the cli, the default value be assigned + Default string // default value if no user value is provided in the configuration + Example string // cli example value + 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 + ValueType string // string representation of the value type, "string" is default + Choice []string // defines a set of choices, e.g. "grid", "pv", "battery", "charge" for "usage" + + Baudrate int // device specific default for modbus RS485 baudrate + Comset string // device specific default for modbus RS485 comset + Port int // device specific default for modbus TCPIP port + ID int // device specific default for modbus ID +} + +// return a default value or example value depending on the renderMode +func (p *Param) DefaultValue(renderMode string) interface{} { + switch p.ValueType { + case ParamValueTypeStringList: + return []string{} + case ParamValueTypeChargeModes: + return "" + default: + if p.Test != "" { + return p.Test + } else if p.Example != "" && renderMode == TemplateRenderModeUnitTest { + return p.Example + } else if p.Example != "" && p.Default == "" && renderMode == TemplateRenderModeDocs { + return p.Example + } else { + return p.Default // may be empty + } + } +} + +// overwrite specific properties by using values from another param +// +// always overwrites if not provided empty: description, valuetype, default +// +// only overwrite if not provided empty and empty in param: help, example +func (p *Param) OverwriteProperties(withParam Param) { + // always overwrite if defined + p.Description.Update(withParam.Description, true) + + if withParam.ValueType != "" { + p.ValueType = withParam.ValueType + } + + if withParam.Default != "" { + p.Default = withParam.Default + } + + // only set if empty + p.Help.Update(withParam.Help, false) + + if p.Example == "" && withParam.Example != "" { + p.Example = withParam.Example + } +} + +// Product contains naming information about a product a template supports +type Product struct { + Brand string // product brand + Description TextLanguage // product name +} + +// TemplateDefinition contains properties of a device template +type TemplateDefinition struct { + Template string + Products []Product // list of products this template is compatible with + Capabilities []string + Requirements Requirements + GuidedSetup GuidedSetup + Group string // the group this template belongs to, references groupList entries + Params []Param + Render string // rendering template +}