UNPKG

tsme-metering

Version:

A useful lib and CLI to collect water meter data from your TSME group provider account

64 lines 3.04 kB
#!/usr/bin/env node import { program } from "commander"; import pkg from "../../package.json" with { type: "json" }; import { meterDataToCsv, meterDataToJson, metersDataToCsv, metersDataToJson, wait } from "../helpers.js"; import { displaySummary, getClient, getEndDate, getStartDate } from "./utils.js"; program .name("tsme-metering") .description("CLI to retrive water meter data from TSME group (Suez, ...)") .version(pkg.version); program .command("extract-all") .description("Launch data extraction for all water meters in the account") .option("-s, --start <start>", "The starting date (YYYY-MM-DD)") .option("-e, --end <end>", "The ending date (YYYY-MM-DD)") .option("-p, --provider <provider>", "The provider to use", "suez") .option("-f, --format <format>", "The output format to use", "json") .action(async (options) => { console.error(`🚀 Launching extraction of all water meters...`); const client = getClient(options.provider); const startDate = getStartDate(options.start); const endDate = getEndDate(options.end); displaySummary(options.provider, startDate, endDate); const metersIds = await client.getMetersIds(); if (metersIds.length < 1) { console.error(`❌ There is no compatible water meter in your account`); process.exit(1); } const metersData = []; for (const meterId of metersIds) { const meteringData = await client.getMetering(meterId, startDate, endDate); metersData.push({ meterId, meteringData }); if (metersIds.length > 1) { await wait(750); } } const output = options.format === "csv" ? metersDataToCsv(metersData) : metersDataToJson(metersData); console.info(output); }); program .command("extract") .description("Launch data extraction for a specific meter id") .argument("<meter-id>", "The meter ID") .option("-s, --start <start>", "The starting date (YYYY-MM-DD)") .option("-e, --end <end>", "The ending date (YYYY-MM-DD)") .option("-p, --provider <provider>", "The provider to use", "suez") .option("-f, --format <format>", "The output format to use", "json") .action(async (meterId, options) => { console.error(`🚀 Launching extraction of meter #${meterId}...`); const client = getClient(options.provider); const startDate = getStartDate(options.start); const endDate = getEndDate(options.end); displaySummary(options.provider, startDate, endDate); console.error(`- 🔧 Meter ID: ${meterId}`); const metersIds = await client.getMetersIds(); if (!metersIds.includes(meterId)) { console.error(`❌ The meter ID ${meterId} not found, check your account`); process.exit(1); } const metering = await client.getMetering(meterId, startDate, endDate); const output = options.format === "csv" ? meterDataToCsv(meterId, metering) : meterDataToJson(meterId, metering); console.info(output); }); program.parse(process.argv); //# sourceMappingURL=index.js.map