voltkeeper(1) – CLI tool for Bluetti power stations

SYNOPSIS

voltkeeper COMMAND [OPTIONS]

DESCRIPTION

voltkeeper scans, connects to, and reads data from Bluetti power stations over Bluetooth Low Energy. It supports plaintext Modbus (V1 protocol) and AES-128-CBC encrypted devices (V2 protocol), with automatic handshake.

Commands are organized as subcommands under voltkeeper.

COMMANDS

scan

voltkeeper scan [-t SECONDS]

Scan for nearby Bluetti BLE devices. Displays the Bluetooth address, device name, and the exact command to connect to each one.

Option

Description

-t, –timeout FLOAT

Scan timeout in seconds (default: 10.0)

status

voltkeeper status [ADDRESS] [-t SECONDS] [-v]

Read battery status. If no address is given, scans for devices and prompts for selection.

Output includes SOC (%), pack voltage, charging status, time estimates, and load readings (DC, AC, total in watts).

Option

Description

-t, –timeout FLOAT

Scan timeout in seconds (default: 10.0)

-v, –verbose

Display all available device information

write

voltkeeper write ADDRESS FIELD VALUE

Write a setting to the device.

Field

Values

ac_output, dc_output, power_off, dc_eco_mode, ac_eco_mode, power_lifting, alarm_sound

on, off

charging_mode

standard, turbo, silent

battery_range_start, battery_range_end, lcd_timeout, led_color, soc_low, soc_high, inv_voltage, inv_freq, working_mode

(numeric)

mqtt-publish

voltkeeper mqtt-publish ADDRESS –broker HOST [OPTIONS]

Continuously polls the device over BLE and publishes state to an MQTT broker. Supports Home Assistant MQTT auto-discovery.

Option

Description

–serial TEXT

Device serial number (overrides BLE lookup for MQTT topic)

–broker TEXT

MQTT broker hostname (required)

–port INTEGER

MQTT broker port (default: 1883)

–username TEXT

MQTT broker username

–password TEXT

MQTT broker password

–interval INTEGER

Seconds between polling cycles (default: 0)

–ha-config MODE

HA discovery mode: normal, none, advanced (default: normal)

–restart-on-source-change

Exit cleanly when source code changes

mqtt-listen

voltkeeper mqtt-listen [ADDRESS] –serial SERIAL –broker HOST [OPTIONS]

Subscribes to the device’s MQTT topic and watches battery SOC. When SOC drops below the threshold, initiates a system shutdown after a grace period. The shutdown is latched – once triggered, it cannot be cancelled by SOC recovery.

Option

Description

–serial TEXT

Device serial number (or provide ADDRESS for BLE lookup)

–broker TEXT

MQTT broker hostname (required)

–port INTEGER

MQTT broker port (default: 1883)

–username TEXT

MQTT broker username

–password TEXT

MQTT broker password

–shutdown-at INTEGER

SOC % threshold for shutdown (default: 10)

–grace-period INTEGER

Seconds below threshold before shutdown (default: 60)

–restart-on-source-change

Exit cleanly when source code changes

mqtt-publish-service

voltkeeper mqtt-publish-service ADDRESS –broker HOST [OPTIONS]

Generate a systemd unit file for the MQTT publish command.

Option

Description

–user NAME

System user to run as (default: current user)

–exec PATH

Path to voltkeeper executable (default: auto-detect)

-o, –output PATH

Write to file instead of stdout

mqtt-listen-service

voltkeeper mqtt-listen-service –serial SERIAL –broker HOST [OPTIONS]

Generate a systemd unit file for the MQTT listen shutdown watchdog.

Option

Description

–user NAME

System user to run as (default: root)

–exec PATH

Path to voltkeeper executable (default: auto-detect)

-o, –output PATH

Write to file instead of stdout

probe

voltkeeper probe ADDRESS [-o FILE]

Connects to the device, sweeps all known register blocks, and emits a YAML profile. Useful for device reverse-engineering and new-model support.

Option

Description

-o, –output PATH

Output YAML file

annotate

voltkeeper annotate ADDRESS [-o FILE]

Live-polls the device and highlights byte-level changes in real time. Prompts for field names at each changed offset, saving annotations incrementally to a YAML draft. Press Ctrl-C to stop.

Option

Description

-o, –output PATH

Output draft YAML file

validate-profile

voltkeeper validate-profile FILE

Parses the register blocks in a probe YAML and flags fields with suspect values (stuck-at-zero, all-0xFFFF, out of range).

load-test

voltkeeper load-test ADDRESS [OPTIONS]

Run a controlled battery discharge test. Coaches through setup, then logs device stats every N seconds to a CSV file until the battery reaches 0%.

Option

Description

-o, –output PATH

CSV output file (default: auto-named)

-i, –interval SECONDS

Sample interval, minimum 15s (default: 60)

-l, –expected-load W

Known load wattage for analysis reference

-p, –phase TEXT

Label for this test phase

SEE ALSO

systemd(1), mosquitto(8)