import { EcoFlowClient } from '../client.js';
export const setChargingSettingsTool = {
name: 'ecoflow_set_charging_settings',
description: 'Configure charging settings for an EcoFlow device including max charge level, min discharge level, and charging power.',
inputSchema: {
type: 'object' as const,
properties: {
serial_number: {
type: 'string',
description: 'The device serial number'
},
max_charge_soc: {
type: 'number',
description: 'Maximum charge level percentage (0-100). Device will stop charging when this level is reached.'
},
min_discharge_soc: {
type: 'number',
description: 'Minimum discharge level percentage (0-100). Device will stop discharging when this level is reached.'
},
charging_watts: {
type: 'number',
description: 'AC charging power in watts. Higher values charge faster but may generate more heat.'
}
},
required: ['serial_number']
}
};
interface ChargingSettingsArgs {
serial_number: string;
max_charge_soc?: number;
min_discharge_soc?: number;
charging_watts?: number;
}
export async function executeSetChargingSettings(
client: EcoFlowClient,
args: ChargingSettingsArgs
): Promise<string> {
try {
// Validate inputs
if (args.max_charge_soc !== undefined && (args.max_charge_soc < 0 || args.max_charge_soc > 100)) {
throw new Error('max_charge_soc must be between 0 and 100');
}
if (args.min_discharge_soc !== undefined && (args.min_discharge_soc < 0 || args.min_discharge_soc > 100)) {
throw new Error('min_discharge_soc must be between 0 and 100');
}
if (args.max_charge_soc !== undefined && args.min_discharge_soc !== undefined) {
if (args.min_discharge_soc >= args.max_charge_soc) {
throw new Error('min_discharge_soc must be less than max_charge_soc');
}
}
await client.setChargingSettings(args.serial_number, {
maxChargeSoc: args.max_charge_soc,
minDischargeSoc: args.min_discharge_soc,
chargingWatts: args.charging_watts
});
const changes: string[] = [];
if (args.max_charge_soc !== undefined) {
changes.push(`max charge level set to ${args.max_charge_soc}%`);
}
if (args.min_discharge_soc !== undefined) {
changes.push(`min discharge level set to ${args.min_discharge_soc}%`);
}
if (args.charging_watts !== undefined) {
changes.push(`charging power set to ${args.charging_watts}W`);
}
return JSON.stringify({
success: true,
message: `Charging settings updated on device ${args.serial_number}: ${changes.join(', ')}`,
settings: {
maxChargeSoc: args.max_charge_soc,
minDischargeSoc: args.min_discharge_soc,
chargingWatts: args.charging_watts
}
}, null, 2);
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new Error(`Failed to set charging settings: ${message}`);
}
}