import { EcoFlowClient } from '../client.js';
export const getRawQuotaTool = {
name: 'ecoflow_get_raw_quota',
description: 'Get all raw quota/parameter data from an EcoFlow device. Useful for debugging or accessing device-specific parameters not covered by other tools.',
inputSchema: {
type: 'object' as const,
properties: {
serial_number: {
type: 'string',
description: 'The device serial number'
},
filter: {
type: 'string',
description: 'Optional filter to show only parameters containing this string (e.g., "battery", "solar", "ac")'
}
},
required: ['serial_number']
}
};
interface RawQuotaArgs {
serial_number: string;
filter?: string;
}
export async function executeGetRawQuota(
client: EcoFlowClient,
args: RawQuotaArgs
): Promise<string> {
try {
const quota = await client.getDeviceQuotaAll(args.serial_number);
let filteredQuota = quota;
if (args.filter) {
const filterLower = args.filter.toLowerCase();
filteredQuota = {};
for (const [key, value] of Object.entries(quota)) {
if (key.toLowerCase().includes(filterLower)) {
filteredQuota[key] = value;
}
}
}
// Group by prefix for better readability
const grouped: Record<string, Record<string, unknown>> = {};
for (const [key, value] of Object.entries(filteredQuota)) {
const dotIndex = key.indexOf('.');
const prefix = dotIndex > 0 ? key.substring(0, dotIndex) : 'other';
const suffix = dotIndex > 0 ? key.substring(dotIndex + 1) : key;
if (!grouped[prefix]) {
grouped[prefix] = {};
}
grouped[prefix][suffix] = value;
}
return JSON.stringify({
serialNumber: args.serial_number,
filter: args.filter || null,
totalParameters: Object.keys(filteredQuota).length,
data: grouped
}, null, 2);
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new Error(`Failed to get raw quota: ${message}`);
}
}