Files
bmspy/pyproject.toml
T
tim e32d3a8e22 Add a Grafana dashboard generator for the three UPS devices
tools/generate_grafana_ups.py writes grafana-ups.json, which shows the JBD network UPS, the River 2 desktop UPS, and the River 3 NAS UPS in three columns. Git ignores the generated file.

Each EcoFlow column shows one time-remaining panel in hours, for the direction in use. The River 2 histories add pack current and remaining capacity. The River 3 reports neither, so its histories add battery power and charge.
2026-10-10 11:56:29 +02:00

59 lines
1.5 KiB
TOML

[project]
name = "bmspy"
version = "2.1"
description = "bmspy is a tool to get information from a xiaoxiang-type BMS system"
authors = [{name = "Timothy Allen", email = "tim@treehouse.org.za"}]
license = "CC-BY-NC-SA-4.0"
license-files = ["LICENSE"]
readme = "README.md"
requires-python = ">=3.12,<4.0"
dependencies = [
"pyserial>=3.5",
]
[project.optional-dependencies]
influxdb = [
"influxdb3-python>=0.19.0",
"typing-extensions>=4.13",
]
prometheus = ["prometheus-client>=0.11.0"]
ecoflow-bt = [
"bleak>=0.21.0",
"ecdsa>=0.19.0",
"pycryptodome>=3.20.0",
]
[project.scripts]
bmspy = "bmspy:main"
bmspy-server = "bmspy.server:main"
bmspy-influxdb = "bmspy.influxdb:main"
bmspy-prometheus = "bmspy.prometheus:main"
bmspy-ups = "bmspy.ups:main"
bmspy-ecoflow-login = "bmspy.ecoflow_login:main"
[dependency-groups]
dev = [
"pytest>=8.0",
"pytest-cov>=7.1.0",
]
[build-system]
requires = ["uv_build>=0.12.5,<0.13"]
build-backend = "uv_build"
[tool.uv.build-backend]
module-root = ""
source-include = [
"tests/**", "docs/ecoflow-river2-fields.md", "docs/ecoflow-river3-fields.md",
"tools/generate_ecoflow_river3_schema.py", "tools/ecoflow-bt.py", "*.service", "uv.lock",
"docs/grafana-ups.md", "tools/generate_grafana_ups.py",
]
# Do not distribute the external Type 7 table or the unfinished local USB stub.
source-exclude = ["/bmspy/ecoflow_keydata.py", "/bmspy/usbhid.py"]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"if __name__ == .__main__.:",
]