diff --git a/bmspy/classes.py b/bmspy/classes.py new file mode 100644 index 0000000..85f8a73 --- /dev/null +++ b/bmspy/classes.py @@ -0,0 +1,39 @@ +from dataclasses import dataclass, fields as dataclass_fields + + +@dataclass +class BMSScalarField: + """Single numeric or boolean measurement""" + + help: str + raw_value: float | bool + value: str + units: str | None = None + + def get(self, key, default=None): + return getattr(self, key, default) + + +@dataclass +class BMSMultiField: + """Indexed collection (cells, temperature sensors)""" + + help: str + label: str + raw_values: dict + values: dict + units: str | None = None + + def get(self, key, default=None): + return getattr(self, key, default) + + +@dataclass +class BMSInfoField: + """Text / date info (non-numeric)""" + + help: str + info: str + + def get(self, key, default=None): + return getattr(self, key, default) diff --git a/bmspy/jbd_ups.py b/bmspy/jbd_ups.py index 4b6addd..a6e2d6e 100644 --- a/bmspy/jbd_ups.py +++ b/bmspy/jbd_ups.py @@ -8,43 +8,7 @@ import serial.rs485 import time from dataclasses import dataclass, fields as dataclass_fields - -@dataclass -class BMSScalarField: - """Single numeric or boolean measurement""" - - help: str - raw_value: float | bool - value: str - units: str | None = None - - def get(self, key, default=None): - return getattr(self, key, default) - - -@dataclass -class BMSMultiField: - """Indexed collection (cells, temperature sensors)""" - - help: str - label: str - raw_values: dict - values: dict - units: str | None = None - - def get(self, key, default=None): - return getattr(self, key, default) - - -@dataclass -class BMSInfoField: - """Text / date info (non-numeric)""" - - help: str - info: str - - def get(self, key, default=None): - return getattr(self, key, default) +from bmspy.classes import BMSScalarField, BMSMultiField, BMSInfoField @dataclass