diff --git a/solar_ble.py b/solar_ble.py index a0cf72b..3064867 100755 --- a/solar_ble.py +++ b/solar_ble.py @@ -5,6 +5,7 @@ import datetime import struct import sys import time +from decimal import Decimal from io import RawIOBase from typing import Callable, Collection, Optional, cast @@ -403,15 +404,18 @@ if __name__ == "__main__": if per_voltages(now): data = try_read_parse(dev, 0x0100, 11, parse_battery_state) if data: - data[DataName.CALCULATED_BATTERY_POWER] = data.get( - DataName.BATTERY_VOLTAGE, 0 - ) * data.get(DataName.BATTERY_CURRENT) - data[DataName.CALCULATED_PANEL_POWER] = data.get( - DataName.PANEL_VOLTAGE, 0 - ) * data.get(DataName.PANEL_CURRENT) - data[DataName.CALCULATED_LOAD_POWER] = data.get( - DataName.LOAD_VOLTAGE, 0 - ) * data.get(DataName.LOAD_CURRENT) + data[DataName.CALCULATED_BATTERY_POWER] = float( + Decimal(data.get(DataName.BATTERY_VOLTAGE, 0)) + * Decimal(data.get(DataName.BATTERY_CURRENT, 0)) + ) + data[DataName.CALCULATED_PANEL_POWER] = float( + Decimal(data.get(DataName.PANEL_VOLTAGE, 0)) + * Decimal(data.get(DataName.PANEL_CURRENT, 0)) + ) + data[DataName.CALCULATED_LOAD_POWER] = float( + Decimal(data.get(DataName.LOAD_VOLTAGE, 0)) + * Decimal(data.get(DataName.LOAD_CURRENT, 0)) + ) log(data) for consumer in consumers: consumer.write(data)