add 4 relay controls on configuration tab for sinexcel of sodistore home and pro
This commit is contained in:
parent
b11e3340fd
commit
646b6c0e20
|
|
@ -47,6 +47,13 @@ public class Configuration
|
||||||
public string? TimeToBuyFrom { get; set; }
|
public string? TimeToBuyFrom { get; set; }
|
||||||
public string? TimeToBuyTo { get; set; }
|
public string? TimeToBuyTo { get; set; }
|
||||||
|
|
||||||
|
// Relay control (Sinexcel only, device=4) — surfaced on Configuration tab for SodistoreHome + SodistorePro.
|
||||||
|
// Nullable so WhenWritingNull keeps them out of payloads for non-Sinexcel installations.
|
||||||
|
public bool? Relay1 { get; set; }
|
||||||
|
public bool? Relay2 { get; set; }
|
||||||
|
public bool? Relay3 { get; set; }
|
||||||
|
public bool? Relay4 { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CalibrationChargeType
|
public enum CalibrationChargeType
|
||||||
|
|
|
||||||
|
|
@ -747,6 +747,12 @@ export type ConfigurationValues = {
|
||||||
timeToSellTo?: string;
|
timeToSellTo?: string;
|
||||||
timeToBuyFrom?: string;
|
timeToBuyFrom?: string;
|
||||||
timeToBuyTo?: string;
|
timeToBuyTo?: string;
|
||||||
|
|
||||||
|
// For SodistoreHome + SodistorePro Sinexcel (device=4): relay control toggles
|
||||||
|
relay1?: boolean;
|
||||||
|
relay2?: boolean;
|
||||||
|
relay3?: boolean;
|
||||||
|
relay4?: boolean;
|
||||||
};
|
};
|
||||||
//
|
//
|
||||||
// export interface Pv {
|
// export interface Pv {
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,10 @@ function SodistoreHomeConfigurationV2(props: SodistoreHomeConfigurationProps) {
|
||||||
return parsed && parsed.year() >= 2020 ? parsed.toDate() : new Date();
|
return parsed && parsed.year() >= 2020 ? parsed.toDate() : new Date();
|
||||||
})(),
|
})(),
|
||||||
controlPermission: String(props.values.Config.ControlPermission).toLowerCase() === "true",
|
controlPermission: String(props.values.Config.ControlPermission).toLowerCase() === "true",
|
||||||
|
relay1: String((props.values.Config as any).Relay1).toLowerCase() === "true",
|
||||||
|
relay2: String((props.values.Config as any).Relay2).toLowerCase() === "true",
|
||||||
|
relay3: String((props.values.Config as any).Relay3).toLowerCase() === "true",
|
||||||
|
relay4: String((props.values.Config as any).Relay4).toLowerCase() === "true",
|
||||||
dynamicPricingMode: (props.values.Config as any).DynamicPricingMode ?? 'Disabled',
|
dynamicPricingMode: (props.values.Config as any).DynamicPricingMode ?? 'Disabled',
|
||||||
currentPrice: (props.values.Config as any).CurrentPrice?.toString() ?? '',
|
currentPrice: (props.values.Config as any).CurrentPrice?.toString() ?? '',
|
||||||
priceToSell: (props.values.Config as any).PriceToSell?.toString() ?? '',
|
priceToSell: (props.values.Config as any).PriceToSell?.toString() ?? '',
|
||||||
|
|
@ -347,6 +351,14 @@ function SodistoreHomeConfigurationV2(props: SodistoreHomeConfigurationProps) {
|
||||||
? new Date(formValues.stopTimeChargeandDischargeDayandTime.getTime() - formValues.stopTimeChargeandDischargeDayandTime.getTimezoneOffset() * 60000)
|
? new Date(formValues.stopTimeChargeandDischargeDayandTime.getTime() - formValues.stopTimeChargeandDischargeDayandTime.getTimezoneOffset() * 60000)
|
||||||
: null,
|
: null,
|
||||||
controlPermission:formValues.controlPermission,
|
controlPermission:formValues.controlPermission,
|
||||||
|
// Relay control — only send for Sinexcel (device=4); leaving them undefined
|
||||||
|
// ensures they're omitted from the UDP payload for Growatt installations.
|
||||||
|
...(device === 4 ? {
|
||||||
|
relay1: Boolean(formValues.relay1),
|
||||||
|
relay2: Boolean(formValues.relay2),
|
||||||
|
relay3: Boolean(formValues.relay3),
|
||||||
|
relay4: Boolean(formValues.relay4),
|
||||||
|
} : {}),
|
||||||
dynamicPricingMode: formValues.dynamicPricingMode,
|
dynamicPricingMode: formValues.dynamicPricingMode,
|
||||||
currentPrice: formValues.currentPrice,
|
currentPrice: formValues.currentPrice,
|
||||||
priceToSell: formValues.priceToSell,
|
priceToSell: formValues.priceToSell,
|
||||||
|
|
@ -522,6 +534,47 @@ function SodistoreHomeConfigurationV2(props: SodistoreHomeConfigurationProps) {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{device === 4 && (
|
||||||
|
<>
|
||||||
|
<Typography variant="h6" sx={{ mt: 3, mb: 1 }}>
|
||||||
|
<FormattedMessage id="relayControl" defaultMessage="Relay Control" />
|
||||||
|
</Typography>
|
||||||
|
<Divider sx={{ mb: 2 }} />
|
||||||
|
<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 3, mb: 1, ml: 1 }}>
|
||||||
|
{[1, 2, 3, 4].map((n) => {
|
||||||
|
const key = `relay${n}` as 'relay1' | 'relay2' | 'relay3' | 'relay4';
|
||||||
|
return (
|
||||||
|
<FormControlLabel
|
||||||
|
key={key}
|
||||||
|
labelPlacement="start"
|
||||||
|
control={
|
||||||
|
<Switch
|
||||||
|
name={key}
|
||||||
|
checked={Boolean(formValues[key])}
|
||||||
|
onChange={(e) => {
|
||||||
|
setFormDirty(true);
|
||||||
|
setFormValues((prev) => ({
|
||||||
|
...prev,
|
||||||
|
[key]: e.target.checked,
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
sx={{ transform: 'scale(1.2)', ml: 1 }}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
sx={{ ml: 0, mr: 0 }}
|
||||||
|
label={
|
||||||
|
<FormattedMessage
|
||||||
|
id={`relay${n}`}
|
||||||
|
defaultMessage={`Relay ${n}`}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Box>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
{(device === 3 || device === 4) && (
|
{(device === 3 || device === 4) && (
|
||||||
<>
|
<>
|
||||||
<Typography variant="h6" sx={{ mt: 3, mb: 1 }}>
|
<Typography variant="h6" sx={{ mt: 3, mb: 1 }}>
|
||||||
|
|
|
||||||
|
|
@ -536,6 +536,11 @@
|
||||||
"stopDateTime": "Stoppdatum und -zeit (Startzeit < Stoppzeit)",
|
"stopDateTime": "Stoppdatum und -zeit (Startzeit < Stoppzeit)",
|
||||||
"installationSetup": "Installationseinrichtung",
|
"installationSetup": "Installationseinrichtung",
|
||||||
"batteryLimits": "Batteriegrenzwerte",
|
"batteryLimits": "Batteriegrenzwerte",
|
||||||
|
"relayControl": "Relaissteuerung",
|
||||||
|
"relay1": "Relais 1",
|
||||||
|
"relay2": "Relais 2",
|
||||||
|
"relay3": "Relais 3",
|
||||||
|
"relay4": "Relais 4",
|
||||||
"systemSettings": "Systemeinstellungen",
|
"systemSettings": "Systemeinstellungen",
|
||||||
"pvPerInverter": "PV pro Wechselrichter",
|
"pvPerInverter": "PV pro Wechselrichter",
|
||||||
"pvInInverter": "PV in Wechselrichter {number}",
|
"pvInInverter": "PV in Wechselrichter {number}",
|
||||||
|
|
|
||||||
|
|
@ -284,6 +284,11 @@
|
||||||
"stopDateTime": "Stop Date and Time (Start Time < Stop Time)",
|
"stopDateTime": "Stop Date and Time (Start Time < Stop Time)",
|
||||||
"installationSetup": "Installation Setup",
|
"installationSetup": "Installation Setup",
|
||||||
"batteryLimits": "Battery Limits",
|
"batteryLimits": "Battery Limits",
|
||||||
|
"relayControl": "Relay Control",
|
||||||
|
"relay1": "Relay 1",
|
||||||
|
"relay2": "Relay 2",
|
||||||
|
"relay3": "Relay 3",
|
||||||
|
"relay4": "Relay 4",
|
||||||
"systemSettings": "System Settings",
|
"systemSettings": "System Settings",
|
||||||
"pvPerInverter": "PV per Inverter",
|
"pvPerInverter": "PV per Inverter",
|
||||||
"pvInInverter": "PV in Inverter {number}",
|
"pvInInverter": "PV in Inverter {number}",
|
||||||
|
|
|
||||||
|
|
@ -536,6 +536,11 @@
|
||||||
"stopDateTime": "Date et heure de fin (Début < Fin)",
|
"stopDateTime": "Date et heure de fin (Début < Fin)",
|
||||||
"installationSetup": "Configuration de l'installation",
|
"installationSetup": "Configuration de l'installation",
|
||||||
"batteryLimits": "Limites de la batterie",
|
"batteryLimits": "Limites de la batterie",
|
||||||
|
"relayControl": "Commande des relais",
|
||||||
|
"relay1": "Relais 1",
|
||||||
|
"relay2": "Relais 2",
|
||||||
|
"relay3": "Relais 3",
|
||||||
|
"relay4": "Relais 4",
|
||||||
"systemSettings": "Paramètres système",
|
"systemSettings": "Paramètres système",
|
||||||
"pvPerInverter": "PV par onduleur",
|
"pvPerInverter": "PV par onduleur",
|
||||||
"pvInInverter": "PV dans l'onduleur {number}",
|
"pvInInverter": "PV dans l'onduleur {number}",
|
||||||
|
|
|
||||||
|
|
@ -536,6 +536,11 @@
|
||||||
"stopDateTime": "Data e ora di fine (Inizio < Fine)",
|
"stopDateTime": "Data e ora di fine (Inizio < Fine)",
|
||||||
"installationSetup": "Configurazione dell'installazione",
|
"installationSetup": "Configurazione dell'installazione",
|
||||||
"batteryLimits": "Limiti della batteria",
|
"batteryLimits": "Limiti della batteria",
|
||||||
|
"relayControl": "Controllo relè",
|
||||||
|
"relay1": "Relè 1",
|
||||||
|
"relay2": "Relè 2",
|
||||||
|
"relay3": "Relè 3",
|
||||||
|
"relay4": "Relè 4",
|
||||||
"systemSettings": "Impostazioni di sistema",
|
"systemSettings": "Impostazioni di sistema",
|
||||||
"pvPerInverter": "PV per inverter",
|
"pvPerInverter": "PV per inverter",
|
||||||
"pvInInverter": "PV nell'inverter {number}",
|
"pvInInverter": "PV nell'inverter {number}",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue