bmspy is a tool to get information from a [xiaoxiang-type](https://www.lithiumbatterypcb.com/product/4s-or-3s-12v-li-ion-or-lifepo4-battery-smart-bms-with-bluetooth-function-uart-and-rs485-communication-with-60a-to-120a-constant-current/?attribute_specification-selection=4S+Lifepo4+120A+with+UART+and+RS485) BMS system, using some sort of serial connection.
It can display the information as text, in JSON, or export the data continuously to InfluxDB or a Prometheus exporter.
Multiple BMS/UPS devices can be connected at once. Each is identified by a name, and data from all of them (or just one) can be pushed to InfluxDB or Prometheus in the same connection, with each measurement tagged with the UPS name.
The server daemon reads from one or more serial devices and makes the data available over a Unix socket.
Single device (defaults to `/dev/ttyUSB0`):
poetry run bmspy-server
Multiple devices, with optional names (default name is derived from the device path, e.g. `ttyUSB0`):
poetry run bmspy-server -d network:/dev/ttyUSB0 -d nas:/dev/ttyUSB1
To run via systemd, copy `bmspy-server.service` to `/etc/systemd/system`, adjust `WorkingDirectory` and the `ExecStart` line as needed, then enable and start it:
To push data for all UPSes to InfluxDB (each measurement is tagged `ups=<name>`):
poetry run bmspy-influxdb --url https://influx.example.com --org myorg --token mytoken
To push data for a single UPS only:
poetry run bmspy-influxdb --ups network --url ...
InfluxDB connection details can also be supplied via environment variables (`INFLUXDB_V2_URL`, `INFLUXDB_V2_ORG`, `INFLUXDB_V2_TOKEN`) instead of command-line flags.