Documentation
    Preparing search index...

    Module @ecoflow-api/rest-client

    @ecoflow-api/rest-client

    This module provides a rest client to communicate with the official Ecoflow API via NodeJS. To use this client you need to set up an account at https://developer.ecoflow.com and generate a key pair of access- and secret-key.

    Run npm install @ecoflow-api/rest-client

    See: https://rustyy.github.io/ecoflow-api/modules/_ecoflow_api_rest_client.html

    All devices that are supported by the EcoFlow API itself are supposed to work with this client. You can use client.getDevicesPlain(), client.getDevicePropertiesPlain("<sn>"), client.getSerialNumbers(), client.getMqttCredentials() and client.setCommandPlain({...}) to request or set any information officially supported by the EcoFlow API.

    See https://developer-eu.ecoflow.com/us/document/ for more information.

    Apart from this, the client provides specific device instances that come with specific device functionality. Depending on the serial number of the device, the client will return a specific device instance that simplifies requests against the api (see examples below).

    At the moment the following devices are supported with specific instances:

    • Smart Plug
    • PowerStream
    • Delta 2
    • Glacier
    • Smart Home Panel
    • Delta Pro

    More devices to come.

    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    // get plain response from api
    const plainDevices = await client.getDevicesPlain();

    // Get a specific device instance based on the serial number.
    // e.g. a smart plug
    const smartPlug = await client.getDevice("HW52*****");
    smartPlug.turnOn();
    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    // Request the mqtt credentials
    const mqttCredentials = await client.getMqttCredentials();

    // get plain response from api
    const plainDevices = await client.getDevicesPlain();

    // Get all serial numbers bound to the account
    const serialNumbers = await client.getSerialNumbers();

    // Send a command to the api to set a property
    // See https://developer-eu.ecoflow.com/us/document/ for more information
    await client.setCommandPlain({...});

    // Request properties for the given serial number.
    const properties = await client.getDevicePropertiesPlain("sn");

    // Request a specific device instance that comes with specific device functionality,
    // that simplify requests againt the api.
    const device = await client.getDevice("sn");

    // Request device instances for all registered devices.
    const devices = await client.getDevices();

    Serial number must start with HW52

    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    const plainDevices = await client.getDevicesPlain();

    // Get a specific device instance based on the serial number.
    const smartPlug = await client.getDevice("HW52*****");

    // request all properties of the smart plug
    const properties = await smartPlug.getProperties()

    // Turn on and off the smart plug
    await smartPlug.switchOn();
    await smartPlug.switchOff();

    // Set brigthness for the led indicator
    await smartPlug.setLedBrightness(100);

    // Delete a task from the smart plug
    await smartPlug.deleteTask(1)

    Serial number must start with HW51

    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    // Get a specific device instance based on the serial number.
    const powerStream = await client.getDevice("HW51*****");

    // request all properties of the powerStream
    const properties = await powerStream.getProperties()

    // Set the power supply priority
    await powerStream.setPowerSupplyPriority("powerSupply");
    // Set power supply priority to battery.
    await powerStream.setPowerSupplyPriority("battery");

    // Set the custom load power
    // Note: at the moment this seems to have no effect,
    // although the api returns a success message.
    await powerStream.setCustomLoadPower(600);

    // Set the lower charging level
    await powerStream.setLowerChargingLevel(20);

    // Set the upper charging level
    await powerStream.setUpperChargingLevel(80);

    // Set brigthness for the led indicator
    await powerStream.setLedBrightness(100);

    // Delete a task from the smart plug
    await powerStream.deleteTask(1)

    Serial number must start with R331

    Note: not all commands have been implemented yet.

    Todo:

    • "operateType":"acOutCfg"
    • "operateType":"acChgCfg"
    • "operateType":"upsConfig"
    • "operateType":"dsgCfg"
    • "operateType":"openOilSoc"
    • "operateType":"closeOilSoc"
    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    // Get a specific device instance based on the serial number.
    const delta2 = await client.getDevice("R331*****");

    // request all properties of the delta2
    const properties = await delta2.getProperties();

    // Disable silent mode (beep)
    await delta2.setSilentMode(0);
    // Enable silent mode (beep)
    await delta2.setSilentMode(1);

    // Disable the car charger 12V
    await delta2.setCarCharger(0);
    // Enable the car charger 12V
    await delta2.setCarCharger(1);

    // Set ac standy by time to 120 minutes
    await delta2.setAcStandByTime(120);

    // Set the car input to 4000mA
    await delta2.setCarInput(4000);

    // Set the device timeout to 120 minutes
    await delta2.setDeviceTimeout(120);

    // enable ac auto out with minimum SOC of 50%
    await delta2.setAcAutoOutConfig(1, 50);

    // Enable the pv charging priority
    await delta2.enablePvChargingPriority(1);

    // 10 seconds timeout for lcd display
    await delta2.setLcdTimeout(10);

    // enable usb output
    await delta2.enableUsbOutput(1);
    // disable usb output
    await delta2.enableUsbOutput(0);

    // Car standby for 4 hours
    await delta2.setCarStandByDuration(240);

    // Set energy management
    await delta2.setEnergyManagement({
    "isConfig":1,
    "bpPowerSoc":95,
    "minDsgSoc":255,
    "minChgSoc":255
    });

    Serial number must start with BX11

    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    // Get a specific device instance based on the serial number.
    const glacier = await client.getDevice("BX11*****");

    // request all properties of the glacier
    const properties = await glacier.getProperties();

    // Set the temperature of right, left and middle zone
    await glacier.setTemperature({right:5,left:5,middle:5});

    // Enable eco mode
    await glacier.enableEcoMode(1)
    // Disable eco mode
    await glacier.enableEcoMode(0)

    // Enable buzzer
    await glacier.enableBuzzer(1)
    // Disable buzzer
    await glacier.enableBuzzer(0)

    // 0: always beep; 1: beep once; 2: Beep twice; 3: Beep three times
    await glacier.setBuzzerBeep(0)
    await glacier.setBuzzerBeep(1)
    await glacier.setBuzzerBeep(2)
    await glacier.setBuzzerBeep(3)

    // Screen timeout in seconds - 0: screen always on
    await glacier.setScreenTimeout(10);

    // Set the temperature unit to Celsius or Fahrenheit
    await glacier.setTemperatureUnit("C")
    await glacier.setTemperatureUnit("F")

    // set ice making
    // enable - 0: Disable; 1: Enable
    // iceShape - "small" or "large" ice-cubes
    await glacier.setIceMaking(1,"large")

    // set ice detaching
    await glacier.setIceDetaching(4)

    // 0: Unblocked, 1: Blocked
    await glacier.setSensorDetectionBlocking(1)

    // enabled - 0: Disable, 1: Enable
    // level - 0: Low, 1: Medium, 2: High
    await glacier.setBatteryProtectionLevel(1,3)

    Serial number must start with SP10

    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    // Get a specific device instance based on the serial number.
    const shp = await client.getDevice("SP10*****");

    // request all properties of the shp
    const properties = await shp.getProperties();

    // Update RTC time
    await shp.setRtcTime({
    sec: 10,
    min: 10,
    hour: 10,
    day: 5,
    week: 6,
    month: 10,
    year: 2024,
    });

    // Load channel control
    await shp.setLoadChannelControl({ch:1, ctrlMode:1, sta:1});

    // Standby channel control
    await shp.setStandbyChannelControl({ch:1, ctrlMode:1, sta:1});

    // Set split phase info config
    await shp.setSplitPhaseInfoConfig([
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    {linkCh: 0, linkMark: 0},
    ]);

    // Set channel current configuration
    await shp.setChannelCurrentConfiguration({
    channel: 2,
    cur: 6,
    });


    await shp.setGridPowerConfiguration({
    gridVol: 220,
    gridFreq: 50,
    });

    // Set grid power configuration
    await shp.setGridPowerConfiguration({
    gridVol: 220,
    gridFreq: 50,
    });

    // EPS mode configuration (eps: 0: off, 1: on)
    await shp.enableEpsMode(1);

    // Enable channel status
    await shp.enableChannelStatus({
    channel: 1,
    enable: 1,
    });

    // Set load channel info
    await shp.setLoadChannelInfo({
    channel: 1,
    channelName: "my-channel",
    iconInfo: 10,
    });

    // Set region info
    await shp.setRegionInfo("US,somewhere");

    // Set emergency mode
    await shp.setEmergencyMode({
    isCfg: 1,
    backupMode: 1,
    overloadMode: 1,
    chSta: [
    { "priority": 1, "isEnable": 1 },
    { "priority": 1, "isEnable": 1 },
    { "priority": 2, "isEnable": 1 },
    { "priority": 3, "isEnable": 1 },
    { "priority": 4, "isEnable": 1 },
    { "priority": 5, "isEnable": 1 },
    { "priority": 6, "isEnable": 1 },
    { "priority": 7, "isEnable": 1 },
    { "priority": 8, "isEnable": 1 },
    { "priority": 9, "isEnable": 1 }
    ]
    });

    // Set scheduled charging job
    await shp.setScheduledChargingJob({
    cfgIndex: 1,
    cfg: {
    "param": {
    "lowBattery": 95,
    "chChargeWatt": 2000,
    "chSta": [
    1,
    0
    ],
    "hightBattery": 100
    },
    "comCfg": {
    "timeScale": [
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    255,
    127
    ],
    "isCfg": 1,
    "type": 1,
    "timeRange": {
    "isCfg": 1,
    "startTime": {
    "sec": 0,
    "min": 0,
    "week": 4,
    "hour": 0,
    "month": 1,
    "year": 2023,
    "day": 11
    },
    "timeMode": 0,
    "endTime": {
    "sec": 59,
    "min": 59,
    "week": 7,
    "hour": 23,
    "month": 1,
    "year": 2023,
    "day": 22
    },
    "mode1": {
    "thur": 0,
    "sat": 0,
    "wed": 0,
    "tues": 0,
    "fri": 0,
    "sun": 0,
    "mon": 0
    },
    "isEnable": 1
    },
    "isEnable": 1,
    "setTime": {
    "sec": 35,
    "min": 53,
    "week": 4,
    "hour": 15,
    "month": 1,
    "year": 2023,
    "day": 11
    }
    }
    }
    });

    // Set scheduled discharging job
    await shp.setScheduledChargingJob({
    cfgIndex: 1,
    cfg: {
    "chSta": [
    1,
    1,
    1,
    1,
    1,
    1,
    1,
    1,
    1,
    1
    ],
    "comCfg": {
    "timeScale": [
    1,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0
    ],
    "isCfg": 1,
    "type": 2,
    "timeRange": {
    "isCfg": 1,
    "timeMode": 0,
    "startTime": {
    "sec": 0,
    "min": 0,
    "week": 2,
    "hour": 0,
    "month": 10,
    "year": 2022,
    "day": 24
    },
    "endTime": {
    "sec": 59,
    "min": 59,
    "week": 2,
    "hour": 23,
    "month": 10,
    "year": 2022,
    "day": 25
    },
    "isEnable": 1
    },
    "isEnable": 1,
    "setTime": {
    "sec": 61,
    "min": 9,
    "week": 7,
    "hour": 16,
    "month": 11,
    "year": 2022,
    "day": 15
    }
    }
    }
    });

    // Set configuration status
    await shp.setConfigurationStatus(1);

    // Start self check
    await shp.setStartSelfCheck(1);

    // Set standby charging and discharging parameters
    await shp.setStandByChargingDischargingParameters({
    discLower: 10,
    forceChargeHigh: 20,
    });

    Serial number must start with DCABZ

      const sn = "DCABZ*****";
    const client = new RestClient({
    accessKey: "my-access-key",
    secretKey: "my-secret-key",
    host: "https://api-e.ecoflow.com",
    });

    const device = client.getDevice(sn);

    // Enable or disable xboost
    await device.enableXboost(0, 1);
    // Enable or disable the car charger
    await device.enableCharger(1);
    // Set the maximum charge level
    await device.setChargeLevel(50);
    // Set the discharge level
    await device.setDischargeLevel(10);
    // Set the car input current
    await device.setCarInput(4000);
    // Enable beep
    await device.enableBeep(1)
    // Set the screen brightness
    await device.setScreenBrightness(50);
    // Setting the lower threshold percentage of smart generator auto on
    await device.setSmartGeneratorAutoOnThreshold(52);
    // Setting the upper threshold percentage of smart generator auto off
    await device.setSmartGeneratorAutoOffThreshold(10);
    // Set the unit timeout
    await device.setUnitTimeout(10);
    // Set the screen timeout
    await device.setScreenTimeout(60);
    // Setting the AC standby time
    await device.setAcStandbyTime(720);
    // AC charging settings
    await device.setAcChargingPower(0);
    // Set the pv charging type
    await device.setPvChargingType(1);
    // Enable Bypass AC auto start
    await device.enableAcAutoStartBypass(1);

    If device type could not be determined, an UnknownDevice instance will be returned or can be used.

    import {RestClient} from '@ecoflow-api/rest-client';

    const client = new RestClient({
    accessKey: "your-access",
    secretKey: "your-secret",
    host: "https://api-e.ecoflow.com"
    })

    const device = await client.getDevice("some-unsupported-sn");

    // request all properties of the device
    const properties = await device.getProperties()

    This open-source software is not affiliated with or endorsed by the company Ecoflow in any way.

    Use of the software is at your own risk and discretion, and I assume no liability for any potential damages or issues that may arise from using the software.

    It is important to be aware that using this open-source software comes without direct support or guarantees from the company Ecoflow.

    Modules

    index
    lib/devices/Delta2
    lib/devices/DeltaPro
    lib/devices/Device
    lib/devices/DeviceFactory
    lib/devices/Glacier
    lib/devices/PowerStream
    lib/devices/SmartHomePanel
    lib/devices/SmartPlug
    lib/devices/UnknownDevice
    lib/RequestHandler
    lib/signatureBuilder/SignatureBuilder