unified Sinexcel and Growatt's operating priority

This commit is contained in:
Yinyin Liu 2026-03-09 10:57:12 +01:00
parent 37380e581f
commit 66803a2b34
1 changed files with 19 additions and 16 deletions

View File

@ -46,19 +46,16 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
const device = props.installation.device;
const OperatingPriorityOptions =
device === 3 // Growatt
device === 3 || device === 4
? ['LoadPriority', 'BatteryPriority', 'GridPriority']
: device === 4 // Sinexcel
? [
'SpontaneousSelfUse',
'TimeChargeDischarge',
// 'TimeOfUsePowerPrice',
// 'DisasterStandby',
// 'ManualControl',
'PvPriorityCharging',
// 'PrioritySellElectricity'
]
: [];
: [];
// Sinexcel S3 stores WorkingMode enum names — map them to Growatt-style display names
const sinexcelS3ToDisplayName: Record<string, string> = {
'SpontaneousSelfUse': 'LoadPriority',
'TimeChargeDischarge': 'BatteryPriority',
'PvPriorityCharging': 'GridPriority',
};
const [errors, setErrors] = useState({
minimumSoC: false,
@ -81,11 +78,17 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
const { currentUser, setUser } = context;
const { product, setProduct } = useContext(ProductIdContext);
// Resolve S3 OperatingPriority to display index (Sinexcel uses different enum names)
const resolveOperatingPriorityIndex = (s3Value: string) => {
const displayName = device === 4 ? (sinexcelS3ToDisplayName[s3Value] ?? s3Value) : s3Value;
return OperatingPriorityOptions.indexOf(displayName);
};
const [formValues, setFormValues] = useState<Partial<ConfigurationValues>>({
minimumSoC: props.values.Config.MinSoc,
maximumDischargingCurrent: props.values.Config.MaximumChargingCurrent,
maximumChargingCurrent: props.values.Config.MaximumDischargingCurrent,
operatingPriority: OperatingPriorityOptions.indexOf(
operatingPriority: resolveOperatingPriorityIndex(
props.values.Config.OperatingPriority
),
batteriesCount: props.values.Config.BatteriesCount,
@ -113,7 +116,7 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
minimumSoC: props.values.Config.MinSoc,
maximumDischargingCurrent: props.values.Config.MaximumChargingCurrent,
maximumChargingCurrent: props.values.Config.MaximumDischargingCurrent,
operatingPriority: OperatingPriorityOptions.indexOf(
operatingPriority: resolveOperatingPriorityIndex(
props.values.Config.OperatingPriority
),
batteriesCount: props.values.Config.BatteriesCount,
@ -529,10 +532,10 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
</div>
</>
{/* --- Sinexcel + TimeChargeDischarge --- */}
{/* --- Sinexcel + BatteryPriority (maps to TimeChargeDischarge on device) --- */}
{device === 4 &&
OperatingPriorityOptions[formValues.operatingPriority] ===
'TimeChargeDischarge' && (
'BatteryPriority' && (
<>
{/* Power input*/}
<div style={{ marginBottom: '5px' }}>