diff --git a/api/globalconfig/types.go b/api/globalconfig/types.go index 4b9579414..ed4f3c575 100644 --- a/api/globalconfig/types.go +++ b/api/globalconfig/types.go @@ -56,9 +56,9 @@ type Go struct { } type ModbusProxy struct { - Port int - ReadOnly string `yaml:",omitempty" json:",omitempty"` - modbus.Settings `mapstructure:",squash" yaml:",inline,omitempty" json:",omitempty"` + Port int `json:"port"` + ReadOnly string `yaml:",omitempty" json:"readonly,omitempty"` + modbus.Settings `mapstructure:",squash" yaml:",inline,omitempty" json:"settings,omitempty"` } var _ api.Redactor = (*Hems)(nil) diff --git a/assets/js/components/Config/DeviceModal/Modbus.vue b/assets/js/components/Config/DeviceModal/Modbus.vue index d4c4eb6c5..9afc4d0b8 100644 --- a/assets/js/components/Config/DeviceModal/Modbus.vue +++ b/assets/js/components/Config/DeviceModal/Modbus.vue @@ -4,41 +4,41 @@ id="modbusTcpIp" :label="$t('config.modbus.connection')" :help=" - connection === 'tcpip' + connection === MODBUS_CONNECTION.TCPIP ? $t('config.modbus.connectionHintTcpip') : $t('config.modbus.connectionHintSerial') " >
-
- + -
+
- + -
@@ -118,12 +118,12 @@
- + - + , default: () => [], }, - modbus: String as PropType, + modbus: String as PropType, host: String, port: [Number, String], id: [Number, String], @@ -188,6 +192,7 @@ export default defineComponent({ defaultId: Number, defaultComset: String, defaultBaudrate: Number, + hideModbusId: Boolean, }, emits: [ "update:modbus", @@ -198,45 +203,53 @@ export default defineComponent({ "update:baudrate", "update:comset", ], - data(): { connection: ConnectionOption; protocol: ProtocolOption } { + data() { return { - connection: "tcpip", - protocol: "tcp", + connection: MODBUS_CONNECTION.TCPIP as MODBUS_CONNECTION, + protocol: MODBUS_PROTOCOL.TCP as MODBUS_PROTOCOL, + MODBUS_PROTOCOL, + MODBUS_CONNECTION, }; }, computed: { - selectedModbus(): Modbus { - if (this.connection === "serial") { - return "rs485serial"; + selectedModbus(): MODBUS_TYPE { + if (this.connection === MODBUS_CONNECTION.SERIAL) { + return MODBUS_TYPE.RS485_SERIAL; } - return this.protocol === "rtu" ? "rs485tcpip" : "tcpip"; + return this.protocol === MODBUS_PROTOCOL.RTU + ? MODBUS_TYPE.RS485_TCPIP + : MODBUS_TYPE.TCPIP; }, showConnectionOptions() { return this.capabilities.includes("rs485"); }, showProtocolOptions() { - return this.connection === "tcpip" && this.capabilities.includes("rs485"); + return ( + this.connection === MODBUS_CONNECTION.TCPIP && this.capabilities.includes("rs485") + ); }, comsetOptions() { - return ["8N1", "8E1", "8N2"].map((v) => { + return Object.values(MODBUS_COMSET).map((v) => { return { key: v, name: v }; }); }, baudrateOptions() { - return [1200, 9600, 19200, 38400, 57600, 115200].map((v) => { - return { key: v, name: `${v}` }; - }); + return Object.values(MODBUS_BAUDRATE) + .filter((v) => typeof v === "number") + .map((v) => { + return { key: v, name: `${v}` }; + }); }, }, watch: { - selectedModbus(newValue: Modbus) { + selectedModbus(newValue: MODBUS_TYPE) { this.$emit("update:modbus", newValue); }, options(newValue: ModbusCapability[]) { this.setProtocolByCapabilities(newValue); this.$emit("update:modbus", this.selectedModbus); }, - modbus(newValue: Modbus) { + modbus(newValue: MODBUS_TYPE) { if (newValue) { this.setConnectionAndProtocolByModbus(newValue); } @@ -248,24 +261,29 @@ export default defineComponent({ }, methods: { setProtocolByCapabilities(capabilities: ModbusCapability[]) { - this.protocol = capabilities.includes("tcpip") ? "tcp" : "rtu"; + this.protocol = capabilities.includes("tcpip") + ? MODBUS_PROTOCOL.TCP + : MODBUS_PROTOCOL.RTU; }, - setConnectionAndProtocolByModbus(modbus?: Modbus) { + setConnectionAndProtocolByModbus(modbus?: MODBUS_TYPE) { switch (modbus) { - case "rs485serial": - this.connection = "serial"; - this.protocol = "rtu"; + case MODBUS_TYPE.RS485_SERIAL: + this.connection = MODBUS_CONNECTION.SERIAL; + this.protocol = MODBUS_PROTOCOL.RTU; break; - case "rs485tcpip": - this.connection = "tcpip"; - this.protocol = "rtu"; + case MODBUS_TYPE.RS485_TCPIP: + this.connection = MODBUS_CONNECTION.TCPIP; + this.protocol = MODBUS_PROTOCOL.RTU; break; - case "tcpip": - this.connection = "tcpip"; - this.protocol = "tcp"; + case MODBUS_TYPE.TCPIP: + this.connection = MODBUS_CONNECTION.TCPIP; + this.protocol = MODBUS_PROTOCOL.TCP; break; } }, + formId(name: string): string { + return `${name}-${this.id}`; + }, }, }); diff --git a/assets/js/components/Config/DeviceModal/SponsorTokenRequired.vue b/assets/js/components/Config/DeviceModal/SponsorTokenRequired.vue index 587b3ab0c..a1b8c1bcd 100644 --- a/assets/js/components/Config/DeviceModal/SponsorTokenRequired.vue +++ b/assets/js/components/Config/DeviceModal/SponsorTokenRequired.vue @@ -5,7 +5,7 @@
- {{ $t("config.sponsor.tokenRequired") }} + {{ $t(feature ? "config.sponsor.tokenRequiredFeature" : "config.sponsor.tokenRequired") }} {{ $t("config.sponsor.tokenRequiredLearnMore") }} @@ -19,6 +19,7 @@ export default { name: "SponsorTokenRequired", props: { compact: Boolean, + feature: Boolean, }, methods: { openModal() { diff --git a/assets/js/components/Config/DeviceModal/index.ts b/assets/js/components/Config/DeviceModal/index.ts index 49041e1f3..5de3b4a8f 100644 --- a/assets/js/components/Config/DeviceModal/index.ts +++ b/assets/js/components/Config/DeviceModal/index.ts @@ -1,4 +1,4 @@ -import type { DeviceType, MeterTemplateUsage } from "@/types/evcc"; +import type { DeviceType, MODBUS_COMSET, MeterTemplateUsage } from "@/types/evcc"; import { ConfigType } from "@/types/evcc"; import api from "@/api"; @@ -31,7 +31,7 @@ export type ModbusCapability = "rs485" | "tcpip"; export type ModbusParam = TemplateParam & { ID?: string; - Comset?: string; + Comset?: MODBUS_COMSET; Baudrate?: number; Port?: number; }; diff --git a/assets/js/components/Config/JsonModal.vue b/assets/js/components/Config/JsonModal.vue index 33f140080..f2981f1b1 100644 --- a/assets/js/components/Config/JsonModal.vue +++ b/assets/js/components/Config/JsonModal.vue @@ -1,5 +1,5 @@