Templates: render template-specific modbus defaults in instance mode (#29852)
This commit is contained in:
parent
e63196e4ba
commit
14b422da85
2 changed files with 78 additions and 5 deletions
|
|
@ -93,13 +93,13 @@ func (t *Template) ModbusValues(renderMode int, values map[string]any) {
|
|||
}
|
||||
|
||||
if defaultValue != "" {
|
||||
// for modbus params the default value is carried
|
||||
// using the parameter default, not the value
|
||||
// TODO figure out why that's necessary
|
||||
// apply the template-specific default to both the render values
|
||||
// (so RenderModeInstance YAML reflects it) and the param definition
|
||||
// (so the Config UI surfaces it as default). The earlier guard above
|
||||
// ensures user-supplied values are not overwritten.
|
||||
values[p.Name] = defaultValue
|
||||
if renderMode == RenderModeInstance {
|
||||
t.SetParamDefault(p.Name, defaultValue)
|
||||
} else {
|
||||
values[p.Name] = defaultValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
73
util/templates/template_modbus_test.go
Normal file
73
util/templates/template_modbus_test.go
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
package templates
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
var renderModeNames = map[int]string{
|
||||
RenderModeInstance: "instance",
|
||||
RenderModeDocs: "docs",
|
||||
RenderModeUnitTest: "unittest",
|
||||
}
|
||||
|
||||
// TestModbusTemplateDefaultID verifies that a template-specific modbus id
|
||||
// (e.g. Wallbe/Phoenix controllers using id 255) is rendered into the resulting
|
||||
// instance config when the user did not supply an explicit id. See #29804.
|
||||
func TestModbusTemplateDefaultID(t *testing.T) {
|
||||
for _, mode := range []int{RenderModeInstance, RenderModeDocs, RenderModeUnitTest} {
|
||||
t.Run(renderModeNames[mode], func(t *testing.T) {
|
||||
tmpl, err := ByName(Charger, "phoenix-ev-eth")
|
||||
require.NoError(t, err)
|
||||
|
||||
_, values, err := tmpl.RenderResult(mode, map[string]any{
|
||||
"host": "192.168.0.8",
|
||||
"port": 502,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "255", values["id"], "template-specific modbus id must be applied")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestModbusTemplateUserIDOverridesTemplate ensures a user-supplied id wins
|
||||
// over the template default in all render modes.
|
||||
func TestModbusTemplateUserIDOverridesTemplate(t *testing.T) {
|
||||
for _, mode := range []int{RenderModeInstance, RenderModeDocs, RenderModeUnitTest} {
|
||||
t.Run(renderModeNames[mode], func(t *testing.T) {
|
||||
tmpl, err := ByName(Charger, "phoenix-ev-eth")
|
||||
require.NoError(t, err)
|
||||
|
||||
_, values, err := tmpl.RenderResult(mode, map[string]any{
|
||||
"host": "192.168.0.8",
|
||||
"port": 502,
|
||||
"id": 42,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "42", values["id"], "user-supplied modbus id must not be overwritten")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestWallbeTemplateCoveredByPhoenix verifies the BC migration: a config that
|
||||
// still references the removed `wallbe` templates is transparently routed to
|
||||
// the phoenix-ev-eth template via the `covers:` directive, while still
|
||||
// producing the Wallbe controller's modbus slave id 255.
|
||||
func TestWallbeTemplateCoveredByPhoenix(t *testing.T) {
|
||||
for _, name := range []string{"wallbe", "wallbe-meter", "wallbe-pre2019", "wallbe-pre2019-meter"} {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
tmpl, err := ByName(Charger, name)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "phoenix-ev-eth", tmpl.Template)
|
||||
|
||||
_, values, err := tmpl.RenderResult(RenderModeInstance, map[string]any{
|
||||
"host": "192.168.0.8",
|
||||
"port": 502,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "255", values["id"])
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue