From b5740d78c886e012bd986b451a2284a5f265bdf7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= <oddstr13@openshell.no>
Date: Mon, 29 Nov 2021 20:42:54 +0100
Subject: [PATCH] Make sure calculations are done using Decimal

---
 solar_ble.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/solar_ble.py b/solar_ble.py
index 3064867..097bab1 100755
--- a/solar_ble.py
+++ b/solar_ble.py
@@ -405,16 +405,18 @@ if __name__ == "__main__":
                             data = try_read_parse(dev, 0x0100, 11, parse_battery_state)
                             if data:
                                 data[DataName.CALCULATED_BATTERY_POWER] = float(
-                                    Decimal(data.get(DataName.BATTERY_VOLTAGE, 0))
-                                    * Decimal(data.get(DataName.BATTERY_CURRENT, 0))
+                                    Decimal(str(data.get(DataName.BATTERY_VOLTAGE, 0)))
+                                    * Decimal(
+                                        str(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))
+                                    Decimal(str(data.get(DataName.PANEL_VOLTAGE, 0)))
+                                    * Decimal(str(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))
+                                    Decimal(str(data.get(DataName.LOAD_VOLTAGE, 0)))
+                                    * Decimal(str(data.get(DataName.LOAD_CURRENT, 0)))
                                 )
                                 log(data)
                                 for consumer in consumers: