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.
59 lines
1.5 KiB
TOML
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__.:",
|
|
]
|