Skip to content

Commit

Permalink
Fix decoding of voltage values
Browse files Browse the repository at this point in the history
Voltage sensors are encoded as unsigned values and 0xFFFF actually represents invalid value, thus 0.
  • Loading branch information
mletenay committed Apr 8, 2024
1 parent 925f37d commit c2f1de0
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
6 changes: 3 additions & 3 deletions goodwe/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -739,13 +739,13 @@ def read_voltage(buffer: ProtocolResponse, offset: int = None) -> float:
"""Retrieve voltage [V] value (2 bytes) from buffer"""
if offset is not None:
buffer.seek(offset)
value = int.from_bytes(buffer.read(2), byteorder="big", signed=True)
return float(value) / 10
value = int.from_bytes(buffer.read(2), byteorder="big", signed=False)
return float(value) / 10 if value != 0xffff else 0


def encode_voltage(value: Any) -> bytes:
"""Encode voltage value to raw (2 bytes) payload"""
return int.to_bytes(int(value * 10), length=2, byteorder="big", signed=True)
return int.to_bytes(int(value * 10), length=2, byteorder="big", signed=False)


def read_current(buffer: ProtocolResponse, offset: int = None) -> float:
Expand Down
14 changes: 7 additions & 7 deletions tests/test_dt.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ def test_GW6000_DT_runtime_data(self):
self.assertSensor('vpv3', None, 'V', data)
self.assertSensor('ipv3', None, 'A', data)
self.assertSensor('ppv3', None, 'W', data)
self.assertSensor('vline1', -0.1, 'V', data)
self.assertSensor('vline2', -0.1, 'V', data)
self.assertSensor('vline3', -0.1, 'V', data)
self.assertSensor('vline1', 0, 'V', data)
self.assertSensor('vline2', 0, 'V', data)
self.assertSensor('vline3', 0, 'V', data)
self.assertSensor('vgrid1', 225.6, 'V', data)
self.assertSensor('vgrid2', 229.7, 'V', data)
self.assertSensor('vgrid3', 231.0, 'V', data)
Expand Down Expand Up @@ -208,7 +208,7 @@ def test_GW5000D_NS_runtime_data(self):
self.assertSensor('vpv2', 291.8, 'V', data)
self.assertSensor('ipv2', 0, 'A', data)
self.assertSensor('ppv2', 0, 'W', data)
self.assertSensor('vline1', -0.1, 'V', data)
self.assertSensor('vline1', 0, 'V', data)
self.assertSensor('vgrid1', 240.5, 'V', data)
self.assertSensor('igrid1', 0.0, 'A', data)
self.assertSensor('fgrid1', 49.97, 'Hz', data)
Expand All @@ -228,7 +228,7 @@ def test_GW5000D_NS_runtime_data(self):
self.assertSensor('safety_country_label', 'Australia Victoria', '', data)
self.assertSensor('funbit', 2400, '', data)
self.assertSensor('vbus', 291.7, 'V', data)
self.assertSensor('vnbus', -0.1, 'V', data)
self.assertSensor('vnbus', 0, 'V', data)
self.assertSensor('derating_mode', -1, '', data)
self.assertSensor('derating_mode_label', '', '', data)

Expand Down Expand Up @@ -274,7 +274,7 @@ def test_GW5000_MS_runtime_data(self):
self.assertSensor('vpv3', 143.2, 'V', data)
self.assertSensor('ipv3', 0.4, 'A', data)
self.assertSensor('ppv3', 57, 'W', data)
self.assertSensor('vline1', -0.1, 'V', data)
self.assertSensor('vline1', 0, 'V', data)
self.assertSensor('vgrid1', 240.1, 'V', data)
self.assertSensor('igrid1', 0.9, 'A', data)
self.assertSensor('fgrid1', 49.98, 'Hz', data)
Expand All @@ -294,7 +294,7 @@ def test_GW5000_MS_runtime_data(self):
self.assertSensor('safety_country_label', 'Australia Victoria', '', data)
self.assertSensor('funbit', 2384, '', data)
self.assertSensor('vbus', 393.9, 'V', data)
self.assertSensor('vnbus', -0.1, 'V', data)
self.assertSensor('vnbus', 0, 'V', data)
self.assertSensor('derating_mode', -1, '', data)
self.assertSensor('derating_mode_label', '', '', data)

Expand Down
4 changes: 2 additions & 2 deletions tests/test_et.py
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ def test_GW6000_EH_runtime_data(self):
self.assertSensor('temperature', 38.6, 'C', data)
self.assertSensor('function_bit', 256, '', data)
self.assertSensor('bus_voltage', 380.6, 'V', data)
self.assertSensor('nbus_voltage', -0.1, 'V', data)
self.assertSensor('nbus_voltage', 0, 'V', data)
self.assertSensor('vbattery1', 0.0, 'V', data)
self.assertSensor('ibattery1', 0.1, 'A', data)
self.assertSensor('pbattery1', 0, 'W', data)
Expand Down Expand Up @@ -539,7 +539,7 @@ def test_GEH10_1U_10_runtime_data(self):
self.assertSensor('temperature', 67.0, 'C', data)
self.assertSensor('function_bit', 257, '', data)
self.assertSensor('bus_voltage', 458.4, 'V', data)
self.assertSensor('nbus_voltage', -0.1, 'V', data)
self.assertSensor('nbus_voltage', 0, 'V', data)
self.assertSensor('vbattery1', 406.1, 'V', data)
self.assertSensor('ibattery1', -3.8, 'A', data)
self.assertSensor('pbattery1', -1566, 'W', data)
Expand Down

0 comments on commit c2f1de0

Please sign in to comment.