Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion assets/js/components/Config/DeviceModal/DeviceModalBase.vue
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,13 @@
/>

<PropertyCollapsible>
<template v-if="advancedParams.length" #advanced>
<template v-if="advancedParams.length || modbus" #advanced>
<ModbusAdvanced
v-if="modbus"
v-model:delay="values['delay']"
v-model:timeout="values['timeout']"
component-id="device"
/>
<PropertyEntry
v-for="param in advancedParams"
:id="`${deviceType}Param${param.Name}`"
Expand Down Expand Up @@ -208,6 +214,7 @@ import ErrorMessage from "../../Helper/ErrorMessage.vue";
import PropertyEntry from "../PropertyEntry.vue";
import PropertyCollapsible from "../PropertyCollapsible.vue";
import Modbus from "./Modbus.vue";
import ModbusAdvanced from "./ModbusAdvanced.vue";
import DeviceModalActions from "./Actions.vue";
import Markdown from "../Markdown.vue";
import SponsorTokenRequired from "./SponsorTokenRequired.vue";
Expand Down Expand Up @@ -250,6 +257,7 @@ export default defineComponent({
PropertyEntry,
PropertyCollapsible,
Modbus,
ModbusAdvanced,
DeviceModalActions,
Markdown,
SponsorTokenRequired,
Expand Down
52 changes: 52 additions & 0 deletions assets/js/components/Config/DeviceModal/ModbusAdvanced.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<template>
<FormRow
:id="formId('modbusTimeout')"
:label="$t('config.modbus.timeout')"
:help="$t('config.modbus.timeoutHint')"
>
<PropertyField
:id="formId('modbusTimeout')"
property="timeout"
type="Duration"
class="me-2"
:model-value="timeout"
@update:model-value="(v) => $emit('update:timeout', v)"
/>
</FormRow>
<FormRow
:id="formId('modbusDelay')"
:label="$t('config.modbus.delay')"
:help="$t('config.modbus.delayHint')"
>
<PropertyField
:id="formId('modbusDelay')"
property="delay"
type="Duration"
class="me-2"
:model-value="delay"
@update:model-value="(v) => $emit('update:delay', v)"
/>
</FormRow>
</template>

<script lang="ts">
import { defineComponent } from "vue";
import FormRow from "../FormRow.vue";
import PropertyField from "../PropertyField.vue";

export default defineComponent({
name: "ModbusAdvanced",
components: { FormRow, PropertyField },
props: {
componentId: { type: String, required: true },
delay: [Number, String],
timeout: [Number, String],
},
emits: ["update:delay", "update:timeout"],
methods: {
formId(name: string): string {
return `${name}-${this.componentId}`;
},
},
});
</script>
6 changes: 3 additions & 3 deletions charger/abb.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ func NewABBFromConfig(ctx context.Context, other map[string]any) (api.Charger, e
return nil, err
}

return NewABB(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewABB(ctx, cc)
}

// NewABB creates ABB charger
func NewABB(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewABB(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions charger/abl-em4.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ func NewAblEm4FromConfig(ctx context.Context, other map[string]any) (api.Charger
return nil, err
}

return NewAblEm4(ctx, cc.URI, cc.ID, cc.Connector)
return NewAblEm4(ctx, cc.TcpSettings, cc.Connector)
}

// NewAblEm4 creates an ABL eM4 charger
func NewAblEm4(ctx context.Context, uri string, id uint8, connector uint16) (*AblEm4, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewAblEm4(ctx context.Context, settings modbus.TcpSettings, connector uint16) (*AblEm4, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
19 changes: 5 additions & 14 deletions charger/abl.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,33 +82,24 @@ func init() {

// NewABLeMHFromConfig creates a ABLeMH charger from generic config
func NewABLeMHFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := struct {
modbus.Settings `mapstructure:",squash"`
Timeout time.Duration
}{
Settings: modbus.Settings{
ID: 1,
},
cc := modbus.Settings{
ID: 1,
}

if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}

return NewABLeMH(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID, cc.Timeout)
return NewABLeMH(ctx, cc)
}

// NewABLeMH creates ABLeMH charger
func NewABLeMH(ctx context.Context, uri, device, comset string, baudrate int, slaveID uint8, timeout time.Duration) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, modbus.Ascii, slaveID)
func NewABLeMH(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx, modbus.Ascii)
if err != nil {
return nil, err
}

if timeout > 0 {
conn.Timeout(timeout)
}

if !sponsor.IsAuthorized() {
return nil, api.ErrSponsorRequired
}
Expand Down
6 changes: 3 additions & 3 deletions charger/alfen.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ func NewAlfenFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}

return NewAlfen(ctx, cc.URI, cc.ID)
return NewAlfen(ctx, cc)
}

// NewAlfen creates Alfen charger
func NewAlfen(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewAlfen(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
11 changes: 5 additions & 6 deletions charger/alphatec.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,25 +49,24 @@ func init() {
// NewAlphatecFromConfig creates a Alphatec charger from generic config
func NewAlphatecFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := modbus.Settings{
ID: 1,
ID: 1,
Delay: 20 * time.Millisecond,
}

if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}

return NewAlphatec(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewAlphatec(ctx, cc)
}

// NewAlphatec creates Alphatec charger
func NewAlphatec(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewAlphatec(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

conn.Delay(20 * time.Millisecond)

if !sponsor.IsAuthorized() {
return nil, api.ErrSponsorRequired
}
Expand Down
6 changes: 3 additions & 3 deletions charger/alpitronic.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,12 @@ func NewAlpitronicHYCFromConfig(ctx context.Context, other map[string]any) (api.
return nil, err
}

return NewAlpitronicHYC(ctx, cc.URI, cc.ID, cc.Connector)
return NewAlpitronicHYC(ctx, cc.TcpSettings, cc.Connector)
}

// NewAlpitronicHYC creates Alpitronic charger
func NewAlpitronicHYC(ctx context.Context, uri string, id uint8, connector uint16) (*AlpitronicHYC, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewAlpitronicHYC(ctx context.Context, settings modbus.TcpSettings, connector uint16) (*AlpitronicHYC, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions charger/ambibox.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,12 @@ func NewAmbiboxFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, api.ErrSponsorRequired
}

return NewAmbibox(ctx, cc.URI, cc.ID, cc.Connector)
return NewAmbibox(ctx, cc.TcpSettings, cc.Connector)
}

// NewAmbibox creates an Ambibox charger
func NewAmbibox(ctx context.Context, uri string, id uint8, connector int) (*Ambibox, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewAmbibox(ctx context.Context, settings modbus.TcpSettings, connector int) (*Ambibox, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions charger/amperfied.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,12 @@ func NewAmperfiedFromConfig(ctx context.Context, other map[string]any) (api.Char
return nil, err
}

return NewAmperfied(ctx, cc.URI, cc.ID, cc.Phases1p3p)
return NewAmperfied(ctx, cc.TcpSettings, cc.Phases1p3p)
}

// NewAmperfied creates Amperfied charger
func NewAmperfied(ctx context.Context, uri string, slaveID uint8, phases bool) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewAmperfied(ctx context.Context, settings modbus.TcpSettings, phases bool) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
8 changes: 4 additions & 4 deletions charger/bender.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,12 @@ func NewBenderCCFromConfig(ctx context.Context, other map[string]any) (api.Charg
return nil, err
}

return NewBenderCC(ctx, cc.URI, cc.ID, cc.Cache)
return NewBenderCC(ctx, cc.TcpSettings, cc.Cache)
}

// NewBenderCC creates BenderCC charger
func NewBenderCC(ctx context.Context, uri string, id uint8, cache time.Duration) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewBenderCC(ctx context.Context, settings modbus.TcpSettings, cache time.Duration) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -174,7 +174,7 @@ func NewBenderCC(ctx context.Context, uri string, id uint8, cache time.Duration)
implement.Has(wb, implement.PhaseGetter(wb.getPhasesMennekes))
} else {
// check feature semp phase switching
if wb.supportsSEMPPhaseSwitching(uri, cache) {
if wb.supportsSEMPPhaseSwitching(settings.URI, cache) {
// set initial SEMP power limit to max so modbus control from 6 to 16 A is possible
if err := wb.semp.conn.SendDeviceControl(wb.semp.deviceID, 0xffff); err == nil {
implement.Has(wb, implement.PhaseSwitcher(wb.phases1p3pSEMP))
Expand Down
8 changes: 4 additions & 4 deletions charger/cfos.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ func NewCfosPowerBrainFromConfig(ctx context.Context, other map[string]any) (api
return nil, err
}

return NewCfosPowerBrain(ctx, cc.URI, cc.ID)
return NewCfosPowerBrain(ctx, cc)
}

// NewCfosPowerBrain creates a cFos charger
func NewCfosPowerBrain(ctx context.Context, uri string, id uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 4701)
func NewCfosPowerBrain(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
settings.URI = util.DefaultPort(settings.URI, 4701)

conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions charger/chargex.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ func NewChargeXFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}

return NewChargeX(ctx, cc.URI, cc.ID, cc.Connector)
return NewChargeX(ctx, cc.TcpSettings, cc.Connector)
}

// NewChargeX creates ChargeX charger
func NewChargeX(ctx context.Context, uri string, id uint8, connector uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewChargeX(ctx context.Context, settings modbus.TcpSettings, connector uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions charger/compleo.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,12 @@ func NewCompleoFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}

return NewCompleo(ctx, cc.URI, cc.ID, cc.Connector)
return NewCompleo(ctx, cc.TcpSettings, cc.Connector)
}

// NewCompleo creates Compleo charger
func NewCompleo(ctx context.Context, uri string, slaveID uint8, connector uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewCompleo(ctx context.Context, settings modbus.TcpSettings, connector uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
10 changes: 5 additions & 5 deletions charger/dadapower.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ func NewDadapowerFromConfig(ctx context.Context, other map[string]any) (api.Char
return nil, err
}

return NewDadapower(ctx, cc.URI, cc.ID)
return NewDadapower(ctx, cc)
}

// NewDadapower creates a Dadapower charger
func NewDadapower(ctx context.Context, uri string, id uint8) (*Dadapower, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewDadapower(ctx context.Context, settings modbus.TcpSettings) (*Dadapower, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand All @@ -94,8 +94,8 @@ func NewDadapower(ctx context.Context, uri string, id uint8) (*Dadapower, error)
}

// The charging station may have multiple charging ports - use offset for register addresses for each port
if id > 1 {
wb.regOffset = (uint16(id) - 1) * 1000
if settings.ID > 1 {
wb.regOffset = (uint16(settings.ID) - 1) * 1000
}

go wb.heartbeat(ctx)
Expand Down
6 changes: 3 additions & 3 deletions charger/daheimladen.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,12 @@ func NewDaheimLadenFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}

return NewDaheimLaden(ctx, cc.URI, cc.ID, cc.Phases1p3p)
return NewDaheimLaden(ctx, cc.TcpSettings, cc.Phases1p3p)
}

// NewDaheimLaden creates DaheimLaden charger
func NewDaheimLaden(ctx context.Context, uri string, id uint8, phases bool) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewDaheimLaden(ctx context.Context, settings modbus.TcpSettings, phases bool) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions charger/delta.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,12 @@ func NewDeltaFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}

return NewDelta(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Settings.Protocol(), cc.ID, cc.Connector)
return NewDelta(ctx, cc.Settings, cc.Connector)
}

// NewDelta creates Delta charger
func NewDelta(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8, connector uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewDelta(ctx context.Context, settings modbus.Settings, connector uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
Expand Down
Loading
Loading