diff --git a/templates/README.md b/templates/README.md index 2429c9bfc..31bd45df4 100644 --- a/templates/README.md +++ b/templates/README.md @@ -119,6 +119,10 @@ Example Use Case: With SMA Home Manager, there can be a SMA Energy Meter used fo - `usage`: specifies a list of meter classes, the device can be used for. Possible values are `grid`, `pv`, `battery`, and `charger` - `modbus`: specifies that this device is accessed via modbus. It requires the `choice` property to have a list of possible interface values the device provides. These values can be `rs485` and `tcpip`. The command will use either to ask the appropriate questions and settings. The `render` section needs to include the string `{{include "modbus" .}}` in all places where the configuration needs modbus settings. +#### Usage Options + +- `allineone`: Defines if the different usages are all available in a single device. Enables `guidedsetup` mode. + #### Modbus Options - `id`: Device specific default for modbus ID diff --git a/templates/definition/common-schema.json b/templates/definition/common-schema.json index e60102423..2fda18120 100644 --- a/templates/definition/common-schema.json +++ b/templates/definition/common-schema.json @@ -68,6 +68,9 @@ "type": "string", "enum": ["charge", "grid", "pv", "battery"] } + }, + "allinone": { + "type": "boolean" } }, "required": [ diff --git a/templates/definition/meter/e3dc.yaml b/templates/definition/meter/e3dc.yaml index 20e8f7f1c..aa0c13658 100644 --- a/templates/definition/meter/e3dc.yaml +++ b/templates/definition/meter/e3dc.yaml @@ -4,6 +4,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/fronius-gen24.yaml b/templates/definition/meter/fronius-gen24.yaml index 62e680ed6..5992110fb 100644 --- a/templates/definition/meter/fronius-gen24.yaml +++ b/templates/definition/meter/fronius-gen24.yaml @@ -9,6 +9,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/fronius-solarapi-v1.yaml b/templates/definition/meter/fronius-solarapi-v1.yaml index 26ba24514..168edfad3 100644 --- a/templates/definition/meter/fronius-solarapi-v1.yaml +++ b/templates/definition/meter/fronius-solarapi-v1.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host render: | type: custom diff --git a/templates/definition/meter/huawei-sun2000-dongle-powersensor.yaml b/templates/definition/meter/huawei-sun2000-dongle-powersensor.yaml index 1787df026..cfc6fd986 100644 --- a/templates/definition/meter/huawei-sun2000-dongle-powersensor.yaml +++ b/templates/definition/meter/huawei-sun2000-dongle-powersensor.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: modbus choice: ["tcpip"] render: | diff --git a/templates/definition/meter/kostal-piko.yaml b/templates/definition/meter/kostal-piko.yaml index 28c3b2c2c..6363826e6 100644 --- a/templates/definition/meter/kostal-piko.yaml +++ b/templates/definition/meter/kostal-piko.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host render: | type: custom diff --git a/templates/definition/meter/kostal-plenticore.yaml b/templates/definition/meter/kostal-plenticore.yaml index 349eb74a6..ff933c225 100644 --- a/templates/definition/meter/kostal-plenticore.yaml +++ b/templates/definition/meter/kostal-plenticore.yaml @@ -12,6 +12,7 @@ linked: params: - name: usage choice: ["pv", "battery"] + allinone: true - name: modbus choice: ["tcpip"] id: 71 diff --git a/templates/definition/meter/lg-ess-home-8-10.yaml b/templates/definition/meter/lg-ess-home-8-10.yaml index c62582a60..3fdbbec15 100644 --- a/templates/definition/meter/lg-ess-home-8-10.yaml +++ b/templates/definition/meter/lg-ess-home-8-10.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: registration required: true diff --git a/templates/definition/meter/openems.yaml b/templates/definition/meter/openems.yaml index e05ce7754..c0810357e 100644 --- a/templates/definition/meter/openems.yaml +++ b/templates/definition/meter/openems.yaml @@ -5,6 +5,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: password mask: true diff --git a/templates/definition/meter/powerdog.yaml b/templates/definition/meter/powerdog.yaml index f40d2b482..78a707912 100644 --- a/templates/definition/meter/powerdog.yaml +++ b/templates/definition/meter/powerdog.yaml @@ -5,6 +5,7 @@ products: params: - name: usage choice: ["grid", "pv"] + allinone: true - name: modbus choice: ["tcpip"] render: | diff --git a/templates/definition/meter/rct-power.yaml b/templates/definition/meter/rct-power.yaml index f0db112de..a8cee6930 100644 --- a/templates/definition/meter/rct-power.yaml +++ b/templates/definition/meter/rct-power.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host render: | type: rct diff --git a/templates/definition/meter/senec-home.yaml b/templates/definition/meter/senec-home.yaml index 10c047e9b..a3f432410 100644 --- a/templates/definition/meter/senec-home.yaml +++ b/templates/definition/meter/senec-home.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host render: | type: custom diff --git a/templates/definition/meter/sma-datamanager.yaml b/templates/definition/meter/sma-datamanager.yaml index 86f2a2ecb..9cb71fa0f 100644 --- a/templates/definition/meter/sma-datamanager.yaml +++ b/templates/definition/meter/sma-datamanager.yaml @@ -12,6 +12,7 @@ requirements: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/sma-hybrid.yaml b/templates/definition/meter/sma-hybrid.yaml index 6b1cb91e5..bfabe2236 100644 --- a/templates/definition/meter/sma-hybrid.yaml +++ b/templates/definition/meter/sma-hybrid.yaml @@ -7,6 +7,7 @@ products: params: - name: usage choice: ["pv", "battery"] + allinone: true - name: modbus choice: ["tcpip"] port: 502 diff --git a/templates/definition/meter/solaredge-hybrid.yaml b/templates/definition/meter/solaredge-hybrid.yaml index ef87f228e..1da029919 100644 --- a/templates/definition/meter/solaredge-hybrid.yaml +++ b/templates/definition/meter/solaredge-hybrid.yaml @@ -10,6 +10,7 @@ requirements: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/solaredge-inverter.yaml b/templates/definition/meter/solaredge-inverter.yaml index b6a5abb1f..fe3d2e029 100644 --- a/templates/definition/meter/solaredge-inverter.yaml +++ b/templates/definition/meter/solaredge-inverter.yaml @@ -7,6 +7,7 @@ products: params: - name: usage choice: ["grid", "pv"] + allinone: true - name: modbus choice: ["tcpip"] id: 1 diff --git a/templates/definition/meter/solarlog.yaml b/templates/definition/meter/solarlog.yaml index 7b7e1b640..637ced699 100644 --- a/templates/definition/meter/solarlog.yaml +++ b/templates/definition/meter/solarlog.yaml @@ -13,6 +13,7 @@ requirements: params: - name: usage choice: ["grid", "pv"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/solarmax-maxstorage.yaml b/templates/definition/meter/solarmax-maxstorage.yaml index 7a4fad208..3dec07085 100644 --- a/templates/definition/meter/solarmax-maxstorage.yaml +++ b/templates/definition/meter/solarmax-maxstorage.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: modbus choice: ["tcpip"] id: 1 diff --git a/templates/definition/meter/solarwatt-myreserve-matrix.yaml b/templates/definition/meter/solarwatt-myreserve-matrix.yaml index e813fb965..c442f249f 100644 --- a/templates/definition/meter/solarwatt-myreserve-matrix.yaml +++ b/templates/definition/meter/solarwatt-myreserve-matrix.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 8080 diff --git a/templates/definition/meter/solarwatt.yaml b/templates/definition/meter/solarwatt.yaml index 2a43594c7..77b7322d3 100644 --- a/templates/definition/meter/solarwatt.yaml +++ b/templates/definition/meter/solarwatt.yaml @@ -10,6 +10,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host render: | type: custom diff --git a/templates/definition/meter/solax-hybrid-cloud.yaml b/templates/definition/meter/solax-hybrid-cloud.yaml index 0bfac10f3..a7fc758d8 100644 --- a/templates/definition/meter/solax-hybrid-cloud.yaml +++ b/templates/definition/meter/solax-hybrid-cloud.yaml @@ -17,6 +17,7 @@ requirements: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: tokenid required: true description: diff --git a/templates/definition/meter/solax.yaml b/templates/definition/meter/solax.yaml index aeb9e97f6..03e22fcca 100644 --- a/templates/definition/meter/solax.yaml +++ b/templates/definition/meter/solax.yaml @@ -10,6 +10,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: modbus choice: ["rs485", "tcpip"] baudrate: 19200 diff --git a/templates/definition/meter/sonnenbatterie.yaml b/templates/definition/meter/sonnenbatterie.yaml index db34b95f1..abacf87d0 100644 --- a/templates/definition/meter/sonnenbatterie.yaml +++ b/templates/definition/meter/sonnenbatterie.yaml @@ -7,6 +7,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 8080 diff --git a/templates/definition/meter/sungrow-hybrid.yaml b/templates/definition/meter/sungrow-hybrid.yaml index dbbf46600..16e04c1a1 100644 --- a/templates/definition/meter/sungrow-hybrid.yaml +++ b/templates/definition/meter/sungrow-hybrid.yaml @@ -11,6 +11,7 @@ requirements: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: modbus choice: ["rs485", "tcpip"] baudrate: 9600 diff --git a/templates/definition/meter/sungrow-inverter.yaml b/templates/definition/meter/sungrow-inverter.yaml index 9f846fe28..4f9f0d954 100644 --- a/templates/definition/meter/sungrow-inverter.yaml +++ b/templates/definition/meter/sungrow-inverter.yaml @@ -10,6 +10,7 @@ requirements: params: - name: usage choice: ["grid", "pv"] + allinone: true - name: modbus choice: ["rs485", "tcpip"] baudrate: 9600 diff --git a/templates/definition/meter/sunspec-hybrid.yaml b/templates/definition/meter/sunspec-hybrid.yaml index a10a1231e..43bb7705b 100644 --- a/templates/definition/meter/sunspec-hybrid.yaml +++ b/templates/definition/meter/sunspec-hybrid.yaml @@ -8,6 +8,7 @@ group: generic params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: modbus choice: ["tcpip"] - name: integer diff --git a/templates/definition/meter/sunspec-inverter.yaml b/templates/definition/meter/sunspec-inverter.yaml index ae682ff8d..16064a8a9 100644 --- a/templates/definition/meter/sunspec-inverter.yaml +++ b/templates/definition/meter/sunspec-inverter.yaml @@ -7,6 +7,7 @@ group: generic params: - name: usage choice: ["grid", "pv"] + allinone: true - name: modbus choice: ["tcpip"] - name: integer diff --git a/templates/definition/meter/tesla-powerwall.yaml b/templates/definition/meter/tesla-powerwall.yaml index 04d637fd1..a54f9006c 100644 --- a/templates/definition/meter/tesla-powerwall.yaml +++ b/templates/definition/meter/tesla-powerwall.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: password required: true diff --git a/templates/definition/meter/varta-energiespeicher-battery-only.yaml b/templates/definition/meter/varta-energiespeicher-battery-only.yaml index 5840b5de2..262657118 100644 --- a/templates/definition/meter/varta-energiespeicher-battery-only.yaml +++ b/templates/definition/meter/varta-energiespeicher-battery-only.yaml @@ -7,6 +7,7 @@ products: params: - name: usage choice: ["grid", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/varta-energiespeicher.yaml b/templates/definition/meter/varta-energiespeicher.yaml index de652f84e..5d8b3cfe3 100644 --- a/templates/definition/meter/varta-energiespeicher.yaml +++ b/templates/definition/meter/varta-energiespeicher.yaml @@ -7,6 +7,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/templates/definition/meter/victron-energy.yaml b/templates/definition/meter/victron-energy.yaml index d0b4cd890..b87f62b7f 100644 --- a/templates/definition/meter/victron-energy.yaml +++ b/templates/definition/meter/victron-energy.yaml @@ -6,6 +6,7 @@ products: params: - name: usage choice: ["grid", "pv", "battery"] + allinone: true - name: host - name: port default: 502 diff --git a/util/templates/template.go b/util/templates/template.go index 1c1177929..2d47fa64e 100644 --- a/util/templates/template.go +++ b/util/templates/template.go @@ -27,7 +27,7 @@ type Template struct { // GuidedSetupEnabled returns true if there are linked templates or >1 usage func (t *Template) GuidedSetupEnabled() bool { _, p := t.ParamByName(ParamUsage) - return len(t.Linked) > 0 || len(p.Choice) > 1 + return len(t.Linked) > 0 || (len(p.Choice) > 1 && p.AllInOne) } // UpdateParamWithDefaults adds default values to specific param name entries diff --git a/util/templates/template_types.go b/util/templates/template_types.go index a4715eb1d..03bd03b86 100644 --- a/util/templates/template_types.go +++ b/util/templates/template_types.go @@ -189,6 +189,7 @@ type Param struct { ValueType string // string representation of the value type, "string" is default ValidValues []string // list of valid values the user can provide Choice []string // defines a set of choices, e.g. "grid", "pv", "battery", "charge" for "usage" + AllInOne bool // defines if the defined usages can all be present in a single device Requirements Requirements // requirements for this param to be usable, only supported via ValueType "bool" Baudrate int // device specific default for modbus RS485 baudrate