scribe data from Information tab for configuration tab
This commit is contained in:
parent
8578b42503
commit
f1cd5c0736
|
|
@ -702,6 +702,7 @@ export type ConfigurationValues = {
|
||||||
batteriesCountPerInverter: number[];
|
batteriesCountPerInverter: number[];
|
||||||
clusterNumber: number;
|
clusterNumber: number;
|
||||||
PvNumber: number;
|
PvNumber: number;
|
||||||
|
pvCountPerInverter: number[];
|
||||||
controlPermission:boolean;
|
controlPermission:boolean;
|
||||||
|
|
||||||
// For sodistoreHome-Sinexcel: TimeChargeDischarge mode
|
// For sodistoreHome-Sinexcel: TimeChargeDischarge mode
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import {
|
||||||
CardContent,
|
CardContent,
|
||||||
CircularProgress,
|
CircularProgress,
|
||||||
Container,
|
Container,
|
||||||
|
Divider,
|
||||||
FormControl,
|
FormControl,
|
||||||
Grid,
|
Grid,
|
||||||
IconButton,
|
IconButton,
|
||||||
|
|
@ -25,6 +26,7 @@ import axiosConfig from '../../../Resources/axiosConfig';
|
||||||
import { UserContext } from '../../../contexts/userContext';
|
import { UserContext } from '../../../contexts/userContext';
|
||||||
import { ProductIdContext } from '../../../contexts/ProductIdContextProvider';
|
import { ProductIdContext } from '../../../contexts/ProductIdContextProvider';
|
||||||
import { I_Installation } from 'src/interfaces/InstallationTypes';
|
import { I_Installation } from 'src/interfaces/InstallationTypes';
|
||||||
|
import { INSTALLATION_PRESETS } from '../Information/installationSetupUtils';
|
||||||
import { LocalizationProvider } from '@mui/x-date-pickers';
|
import { LocalizationProvider } from '@mui/x-date-pickers';
|
||||||
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
||||||
import {DateTimePicker } from '@mui/x-date-pickers';
|
import {DateTimePicker } from '@mui/x-date-pickers';
|
||||||
|
|
@ -106,6 +108,8 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
|
||||||
batteriesCount: props.values.Config.BatteriesCount,
|
batteriesCount: props.values.Config.BatteriesCount,
|
||||||
clusterNumber: props.values.Config.ClusterNumber ?? 1,
|
clusterNumber: props.values.Config.ClusterNumber ?? 1,
|
||||||
PvNumber: props.values.Config.PvNumber ?? 0,
|
PvNumber: props.values.Config.PvNumber ?? 0,
|
||||||
|
pvCountPerInverter: (props.values.Config as any).PvCountPerInverter
|
||||||
|
?? Array(inverterNum).fill(props.values.Config.PvNumber ?? 0),
|
||||||
timeChargeandDischargePower: props.values.Config?.TimeChargeandDischargePower ?? 0,
|
timeChargeandDischargePower: props.values.Config?.TimeChargeandDischargePower ?? 0,
|
||||||
startTimeChargeandDischargeDayandTime: (() => {
|
startTimeChargeandDischargeDayandTime: (() => {
|
||||||
const raw = props.values.Config?.StartTimeChargeandDischargeDayandTime;
|
const raw = props.values.Config?.StartTimeChargeandDischargeDayandTime;
|
||||||
|
|
@ -251,6 +255,7 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
|
||||||
batteriesCount: formValues.batteriesCountPerInverter?.[0] ?? formValues.batteriesCount,
|
batteriesCount: formValues.batteriesCountPerInverter?.[0] ?? formValues.batteriesCount,
|
||||||
clusterNumber:formValues.clusterNumber,
|
clusterNumber:formValues.clusterNumber,
|
||||||
PvNumber:formValues.PvNumber,
|
PvNumber:formValues.PvNumber,
|
||||||
|
pvCountPerInverter: formValues.pvCountPerInverter,
|
||||||
timeChargeandDischargePower: formValues.timeChargeandDischargePower,
|
timeChargeandDischargePower: formValues.timeChargeandDischargePower,
|
||||||
startTimeChargeandDischargeDayandTime: formValues.startTimeChargeandDischargeDayandTime
|
startTimeChargeandDischargeDayandTime: formValues.startTimeChargeandDischargeDayandTime
|
||||||
? new Date(formValues.startTimeChargeandDischargeDayandTime.getTime() - formValues.startTimeChargeandDischargeDayandTime.getTimezoneOffset() * 60000)
|
? new Date(formValues.startTimeChargeandDischargeDayandTime.getTime() - formValues.startTimeChargeandDischargeDayandTime.getTimezoneOffset() * 60000)
|
||||||
|
|
@ -416,7 +421,7 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
|
||||||
sx={{ transform: "scale(1.4)", marginLeft: "15px" }}
|
sx={{ transform: "scale(1.4)", marginLeft: "15px" }}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
|
sx={{ ml: 0 }}
|
||||||
label={
|
label={
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id="controlPermission"
|
id="controlPermission"
|
||||||
|
|
@ -426,99 +431,76 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style={{ marginBottom: '5px' }}>
|
|
||||||
<TextField
|
|
||||||
label={intl.formatMessage({ id: 'inverterNumber' })}
|
|
||||||
name="inverterNumber"
|
|
||||||
value={formValues.inverterNumber ?? ''}
|
|
||||||
onChange={(e) => {
|
|
||||||
setFormDirty(true);
|
|
||||||
const raw = e.target.value;
|
|
||||||
if (raw === '') {
|
|
||||||
setFormValues((prev) => ({ ...prev, inverterNumber: '' as any }));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const parsed = parseInt(raw);
|
|
||||||
if (isNaN(parsed) || parsed < 1) return;
|
|
||||||
const currentArr = formValues.batteriesCountPerInverter || [1];
|
|
||||||
const newArr = Array.from({ length: parsed }, (_, i) => currentArr[i] ?? 1);
|
|
||||||
setFormValues((prev) => ({
|
|
||||||
...prev,
|
|
||||||
inverterNumber: parsed,
|
|
||||||
batteriesCountPerInverter: newArr,
|
|
||||||
}));
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{Array.from({ length: formValues.inverterNumber ?? 1 }, (_, i) => (
|
|
||||||
<div key={`battCount_${i}`} style={{ marginBottom: '5px' }}>
|
|
||||||
<TextField
|
|
||||||
label={intl.formatMessage(
|
|
||||||
{ id: 'batteriesCountInInverter' },
|
|
||||||
{ number: i + 1 }
|
|
||||||
)}
|
|
||||||
name={`batteriesCountPerInverter_${i}`}
|
|
||||||
value={formValues.batteriesCountPerInverter?.[i] ?? ''}
|
|
||||||
onChange={(e) => {
|
|
||||||
setFormDirty(true);
|
|
||||||
const raw = e.target.value;
|
|
||||||
if (raw === '') {
|
|
||||||
setFormValues((prev) => {
|
|
||||||
const arr = [...(prev.batteriesCountPerInverter || [1])];
|
|
||||||
arr[i] = '' as any;
|
|
||||||
return { ...prev, batteriesCountPerInverter: arr };
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const parsed = parseInt(raw);
|
|
||||||
if (isNaN(parsed) || parsed < 1) return;
|
|
||||||
setFormValues((prev) => {
|
|
||||||
const arr = [...(prev.batteriesCountPerInverter || [1])];
|
|
||||||
arr[i] = parsed;
|
|
||||||
return { ...prev, batteriesCountPerInverter: arr };
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{device === 4 && (
|
{device === 4 && (
|
||||||
<>
|
<>
|
||||||
<div style={{ marginBottom: '5px' }}>
|
<Typography variant="h6" sx={{ mt: 3, mb: 1 }}>
|
||||||
<TextField
|
<FormattedMessage id="installationSetup" defaultMessage="Installation Setup" />
|
||||||
label={
|
</Typography>
|
||||||
<FormattedMessage
|
<Divider sx={{ mb: 2 }} />
|
||||||
id="clusterNumber"
|
|
||||||
defaultMessage="Cluster Number"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
name="clusterNumber"
|
|
||||||
value={formValues.clusterNumber}
|
|
||||||
onChange={handleChange}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style={{ marginBottom: '5px' }}>
|
|
||||||
<TextField
|
|
||||||
label={
|
|
||||||
<FormattedMessage
|
|
||||||
id="PvNumber"
|
|
||||||
defaultMessage="PV Number"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
name="PvNumber"
|
|
||||||
value={formValues.PvNumber}
|
|
||||||
onChange={handleChange}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{device === 4 && (() => {
|
||||||
|
const preset = INSTALLATION_PRESETS[props.installation.installationModel];
|
||||||
|
const inverterCount = preset ? preset.length : 1;
|
||||||
|
const pvStrings = (props.installation.pvStringsPerInverter || '')
|
||||||
|
.split(',')
|
||||||
|
.map((s) => s.trim())
|
||||||
|
.filter((s) => s !== '');
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div style={{ marginBottom: '5px' }}>
|
||||||
|
<TextField
|
||||||
|
label={intl.formatMessage({ id: 'inverterNumber' })}
|
||||||
|
value={inverterCount}
|
||||||
|
InputProps={{ readOnly: true }}
|
||||||
|
fullWidth
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{preset && preset.map((clusters, i) => {
|
||||||
|
const batteriesInInverter = clusters.reduce((a, b) => a + b, 0);
|
||||||
|
return (
|
||||||
|
<div key={`battCount_${i}`} style={{ marginBottom: '5px' }}>
|
||||||
|
<TextField
|
||||||
|
label={intl.formatMessage(
|
||||||
|
{ id: 'batteriesCountInInverter' },
|
||||||
|
{ number: i + 1 }
|
||||||
|
)}
|
||||||
|
value={batteriesInInverter}
|
||||||
|
InputProps={{ readOnly: true }}
|
||||||
|
fullWidth
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
|
||||||
|
{Array.from({ length: inverterCount }, (_, i) => (
|
||||||
|
<div key={`pvCount_${i}`} style={{ marginBottom: '5px' }}>
|
||||||
|
<TextField
|
||||||
|
label={intl.formatMessage(
|
||||||
|
{ id: 'pvInInverter' },
|
||||||
|
{ number: i + 1 }
|
||||||
|
)}
|
||||||
|
value={pvStrings[i] ?? 0}
|
||||||
|
InputProps={{ readOnly: true }}
|
||||||
|
fullWidth
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
})()}
|
||||||
|
|
||||||
|
{device === 4 && (
|
||||||
|
<>
|
||||||
|
<Typography variant="h6" sx={{ mt: 3, mb: 1 }}>
|
||||||
|
<FormattedMessage id="batteryLimits" defaultMessage="Battery Limits" />
|
||||||
|
</Typography>
|
||||||
|
<Divider sx={{ mb: 2 }} />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<div style={{ marginBottom: '5px' }}>
|
<div style={{ marginBottom: '5px' }}>
|
||||||
{/*<TextField*/}
|
{/*<TextField*/}
|
||||||
|
|
@ -574,6 +556,15 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{device === 4 && (
|
||||||
|
<>
|
||||||
|
<Typography variant="h6" sx={{ mt: 3, mb: 1 }}>
|
||||||
|
<FormattedMessage id="systemSettings" defaultMessage="System Settings" />
|
||||||
|
</Typography>
|
||||||
|
<Divider sx={{ mb: 2 }} />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<div style={{ marginBottom: '5px', marginTop: '10px' }}>
|
<div style={{ marginBottom: '5px', marginTop: '10px' }}>
|
||||||
<FormControl fullWidth sx={{ marginLeft: 1, width: 390 }}>
|
<FormControl fullWidth sx={{ marginLeft: 1, width: 390 }}>
|
||||||
<InputLabel
|
<InputLabel
|
||||||
|
|
|
||||||
|
|
@ -512,6 +512,11 @@
|
||||||
"powerPerInverterKW": "Leistung pro Wechselrichter (kW)",
|
"powerPerInverterKW": "Leistung pro Wechselrichter (kW)",
|
||||||
"startDateTime": "Startdatum und -zeit (Startzeit < Stoppzeit)",
|
"startDateTime": "Startdatum und -zeit (Startzeit < Stoppzeit)",
|
||||||
"stopDateTime": "Stoppdatum und -zeit (Startzeit < Stoppzeit)",
|
"stopDateTime": "Stoppdatum und -zeit (Startzeit < Stoppzeit)",
|
||||||
|
"installationSetup": "Installationseinrichtung",
|
||||||
|
"batteryLimits": "Batteriegrenzwerte",
|
||||||
|
"systemSettings": "Systemeinstellungen",
|
||||||
|
"pvPerInverter": "PV pro Wechselrichter",
|
||||||
|
"pvInInverter": "PV in Wechselrichter {number}",
|
||||||
"tourLanguageTitle": "Sprache",
|
"tourLanguageTitle": "Sprache",
|
||||||
"tourLanguageContent": "Wählen Sie Ihre bevorzugte Sprache. Die Oberfläche unterstützt Englisch, Deutsch, Französisch und Italienisch.",
|
"tourLanguageContent": "Wählen Sie Ihre bevorzugte Sprache. Die Oberfläche unterstützt Englisch, Deutsch, Französisch und Italienisch.",
|
||||||
"tourExploreTitle": "Installation erkunden",
|
"tourExploreTitle": "Installation erkunden",
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,11 @@
|
||||||
"powerPerInverterKW": "Power per Inverter (kW)",
|
"powerPerInverterKW": "Power per Inverter (kW)",
|
||||||
"startDateTime": "Start Date and Time (Start Time < Stop Time)",
|
"startDateTime": "Start Date and Time (Start Time < Stop Time)",
|
||||||
"stopDateTime": "Stop Date and Time (Start Time < Stop Time)",
|
"stopDateTime": "Stop Date and Time (Start Time < Stop Time)",
|
||||||
|
"installationSetup": "Installation Setup",
|
||||||
|
"batteryLimits": "Battery Limits",
|
||||||
|
"systemSettings": "System Settings",
|
||||||
|
"pvPerInverter": "PV per Inverter",
|
||||||
|
"pvInInverter": "PV in Inverter {number}",
|
||||||
"tourLanguageTitle": "Language",
|
"tourLanguageTitle": "Language",
|
||||||
"tourLanguageContent": "Choose your preferred language. The interface supports English, German, French, and Italian.",
|
"tourLanguageContent": "Choose your preferred language. The interface supports English, German, French, and Italian.",
|
||||||
"tourExploreTitle": "Explore an Installation",
|
"tourExploreTitle": "Explore an Installation",
|
||||||
|
|
|
||||||
|
|
@ -512,6 +512,11 @@
|
||||||
"powerPerInverterKW": "Puissance par onduleur (kW)",
|
"powerPerInverterKW": "Puissance par onduleur (kW)",
|
||||||
"startDateTime": "Date et heure de début (Début < Fin)",
|
"startDateTime": "Date et heure de début (Début < Fin)",
|
||||||
"stopDateTime": "Date et heure de fin (Début < Fin)",
|
"stopDateTime": "Date et heure de fin (Début < Fin)",
|
||||||
|
"installationSetup": "Configuration de l'installation",
|
||||||
|
"batteryLimits": "Limites de la batterie",
|
||||||
|
"systemSettings": "Paramètres système",
|
||||||
|
"pvPerInverter": "PV par onduleur",
|
||||||
|
"pvInInverter": "PV dans l'onduleur {number}",
|
||||||
"tourLanguageTitle": "Langue",
|
"tourLanguageTitle": "Langue",
|
||||||
"tourLanguageContent": "Choisissez votre langue préférée. L'interface est disponible en anglais, allemand, français et italien.",
|
"tourLanguageContent": "Choisissez votre langue préférée. L'interface est disponible en anglais, allemand, français et italien.",
|
||||||
"tourExploreTitle": "Explorer une installation",
|
"tourExploreTitle": "Explorer une installation",
|
||||||
|
|
|
||||||
|
|
@ -512,6 +512,11 @@
|
||||||
"powerPerInverterKW": "Potenza per inverter (kW)",
|
"powerPerInverterKW": "Potenza per inverter (kW)",
|
||||||
"startDateTime": "Data e ora di inizio (Inizio < Fine)",
|
"startDateTime": "Data e ora di inizio (Inizio < Fine)",
|
||||||
"stopDateTime": "Data e ora di fine (Inizio < Fine)",
|
"stopDateTime": "Data e ora di fine (Inizio < Fine)",
|
||||||
|
"installationSetup": "Configurazione dell'installazione",
|
||||||
|
"batteryLimits": "Limiti della batteria",
|
||||||
|
"systemSettings": "Impostazioni di sistema",
|
||||||
|
"pvPerInverter": "PV per inverter",
|
||||||
|
"pvInInverter": "PV nell'inverter {number}",
|
||||||
"tourLanguageTitle": "Lingua",
|
"tourLanguageTitle": "Lingua",
|
||||||
"tourLanguageContent": "Scegli la tua lingua preferita. L'interfaccia supporta inglese, tedesco, francese e italiano.",
|
"tourLanguageContent": "Scegli la tua lingua preferita. L'interfaccia supporta inglese, tedesco, francese e italiano.",
|
||||||
"tourExploreTitle": "Esplora un'installazione",
|
"tourExploreTitle": "Esplora un'installazione",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue