import { EcoFlowClient } from '../client.js';
export const getChargingSettingsTool = {
name: 'ecoflow_get_charging_settings',
description: 'Get current charging configuration for an EcoFlow device including max/min charge levels, charging speed, and timeout settings.',
inputSchema: {
type: 'object' as const,
properties: {
serial_number: {
type: 'string',
description: 'The device serial number'
}
},
required: ['serial_number']
}
};
interface ChargingArgs {
serial_number: string;
}
interface ChargingSettings {
chargeLimits?: {
maxChargeSoc?: number;
minDischargeSoc?: number;
};
chargingSpeed?: {
acChargingWatts?: number;
solarChargingWatts?: number;
carChargingAmps?: number;
};
standbyTimeouts?: {
deviceStandbyMin?: number;
acStandbyMin?: number;
dcStandbyMin?: number;
lcdTimeoutSec?: number;
};
upsSettings?: {
upsEnabled?: boolean;
upsMinSoc?: number;
};
other?: {
beeperEnabled?: boolean;
brightnessLevel?: number;
};
}
export async function executeGetChargingSettings(
client: EcoFlowClient,
args: ChargingArgs
): Promise<string> {
try {
const quota = await client.getDeviceQuotaAll(args.serial_number);
const settings: ChargingSettings = {};
// Charge limits
const maxChgSoc = quota['pd.maxChgSoc'] ?? quota['inv.cfgAcChgSoc'] ?? quota['mppt.maxChgSoc'];
const minDsgSoc = quota['pd.minDsgSoc'] ?? quota['inv.cfgAcOutSoc'] ?? quota['mppt.minDsgSoc'];
if (maxChgSoc !== undefined || minDsgSoc !== undefined) {
settings.chargeLimits = {};
if (maxChgSoc !== undefined) settings.chargeLimits.maxChargeSoc = maxChgSoc as number;
if (minDsgSoc !== undefined) settings.chargeLimits.minDischargeSoc = minDsgSoc as number;
}
// Charging speed settings
const acChgWatts = quota['inv.cfgFastChgWatts'] ?? quota['pd.acChgCur'] ?? quota['mppt.acChgWatts'];
const solarChgWatts = quota['mppt.cfgChgWatts'] ?? quota['pd.pvChgWatts'];
const carChgAmps = quota['mppt.dcChgCurrent'] ?? quota['pd.carChgAmps'];
if (acChgWatts !== undefined || solarChgWatts !== undefined || carChgAmps !== undefined) {
settings.chargingSpeed = {};
if (acChgWatts !== undefined) settings.chargingSpeed.acChargingWatts = acChgWatts as number;
if (solarChgWatts !== undefined) settings.chargingSpeed.solarChargingWatts = solarChgWatts as number;
if (carChgAmps !== undefined) settings.chargingSpeed.carChargingAmps = carChgAmps as number;
}
// Standby timeouts
const deviceStandby = quota['pd.standbyMin'] ?? quota['inv.cfgStandbyMin'];
const acStandby = quota['inv.cfgAcOutFreq'] !== undefined ? quota['inv.cfgAcOutTimeout'] : quota['pd.acStandbyMin'];
const dcStandby = quota['pd.dcStandbyMin'] ?? quota['mppt.dcStandbyMin'];
const lcdTimeout = quota['pd.lcdOffSec'] ?? quota['inv.lcdBrightTime'];
if (deviceStandby !== undefined || acStandby !== undefined || dcStandby !== undefined || lcdTimeout !== undefined) {
settings.standbyTimeouts = {};
if (deviceStandby !== undefined) settings.standbyTimeouts.deviceStandbyMin = deviceStandby as number;
if (acStandby !== undefined) settings.standbyTimeouts.acStandbyMin = acStandby as number;
if (dcStandby !== undefined) settings.standbyTimeouts.dcStandbyMin = dcStandby as number;
if (lcdTimeout !== undefined) settings.standbyTimeouts.lcdTimeoutSec = lcdTimeout as number;
}
// UPS settings
const upsEnabled = quota['pd.upsMode'] ?? quota['inv.cfgAcWorkMode'];
const upsMinSoc = quota['pd.upsMinSoc'];
if (upsEnabled !== undefined || upsMinSoc !== undefined) {
settings.upsSettings = {};
if (upsEnabled !== undefined) settings.upsSettings.upsEnabled = (upsEnabled as number) === 1;
if (upsMinSoc !== undefined) settings.upsSettings.upsMinSoc = upsMinSoc as number;
}
// Other settings
const beeperEnabled = quota['pd.beepMode'] ?? quota['inv.cfgAcBuzzer'];
const brightness = quota['pd.brightness'] ?? quota['inv.lcdBrightness'];
if (beeperEnabled !== undefined || brightness !== undefined) {
settings.other = {};
if (beeperEnabled !== undefined) settings.other.beeperEnabled = (beeperEnabled as number) !== 0;
if (brightness !== undefined) settings.other.brightnessLevel = brightness as number;
}
return JSON.stringify({
serialNumber: args.serial_number,
settings
}, null, 2);
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new Error(`Failed to get charging settings: ${message}`);
}
}