diff --git a/SunGather/sungather.py b/SunGather/sungather.py index f5d2ec6..195594d 100644 --- a/SunGather/sungather.py +++ b/SunGather/sungather.py @@ -212,7 +212,7 @@ class SungrowInverter(): if register_value == 0xFFFF or register_value == 0x7FFF: register_value = 0 if register_value >= 32767: # Anything greater than 32767 is a negative for 16bit - register_value = (register_value - 65535) + register_value = (register_value - 65536) elif register.get('datatype') == "U32": u32_value = rr.registers[num+1] if register_value == 0xFFFF and u32_value == 0xFFFF: @@ -223,8 +223,10 @@ class SungrowInverter(): u32_value = rr.registers[num+1] if register_value == 0xFFFF and (u32_value == 0xFFFF or u32_value == 0x7FFF): register_value = 0 + elif u32_value >= 32767: # Anything greater than 32767 is a negative + register_value = (register_value + u32_value * 0x10000 - 0xffffffff -1) else: - register_value = (register_value + u32_value * 0x10000 - 0xffffffff) + register_value = register_value + u32_value * 0x10000 # We convert a system response to a human value if register.get('datarange'):