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