# bmspy 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. To install: git clone https://git.treehouse.org.za/tim/bmspy cd bmspy poetry install Or, to install with influxdb and/or prometheus support: poetry install -E influxdb -E prometheus ## Running the server 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: cp bmspy-server.service /etc/systemd/system $EDITOR /etc/systemd/system/bmspy-server.service systemctl daemon-reload systemctl enable bmspy-server systemctl start bmspy-server ## Running a client To print a summary of all connected UPSes: poetry run bmspy To show only a specific UPS: poetry run bmspy --ups network To push data for all UPSes to InfluxDB (each measurement is tagged `ups=`): 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.