diff --git a/solar_ble.py b/solar_ble.py index 1baafe0..138225a 100755 --- a/solar_ble.py +++ b/solar_ble.py @@ -159,6 +159,36 @@ CMD_ = b"\xff\x78\x00\x00\x00\x01" # ?: load_enabled +# Only factor of 1000 +SI_PREFIXES_LARGE = "kMGTPEZY" +SI_PREFIXES_SMALL = "mµnpfazy" + + +def humanize_number(data, unit: str = ""): + counter = 0 + + while data >= 1000: + data /= 1000 + counter += 1 + if counter >= len(SI_PREFIXES_LARGE): + break + + while data < 1: + data *= 1000 + counter -= 1 + if abs(counter) >= len(SI_PREFIXES_SMALL): + break + + if not counter: + prefix = "" + elif counter > 0: + prefix = SI_PREFIXES_LARGE[counter - 1] + elif counter < 0: + prefix = SI_PREFIXES_SMALL[abs(counter) - 1] + + return f"{data:.3g} {prefix}{unit}" + + class DataItem: name: str st_format: str @@ -187,7 +217,6 @@ class DataItem: def transform(self, data): if self.transformation is None: return data - return self.transformation(data)