From 1c5ae29f89d5ff051451ac45f639edfaa8f4e8f0 Mon Sep 17 00:00:00 2001 From: Aaron Brown Date: Sun, 2 May 2021 20:27:26 +1000 Subject: [PATCH] Support for both python2 and python3 --- PyGrowatt/growatt_framer.py | 17 +++++++++++++---- test/test_Growatt.py | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/PyGrowatt/growatt_framer.py b/PyGrowatt/growatt_framer.py index 177158a..90bd810 100644 --- a/PyGrowatt/growatt_framer.py +++ b/PyGrowatt/growatt_framer.py @@ -1,4 +1,5 @@ import struct +import sys from pymodbus.exceptions import ModbusIOException from pymodbus.framer import SOCKET_FRAME_HEADER @@ -123,7 +124,15 @@ def buildPacket(self, message): return packet def _xor(self, data): - decrypted = b'' - for i in range(0, len(data)): - decrypted += bytes([data[i] ^ self._key[i % len(self._key)]]) - return decrypted + if sys.version_info[0] == 2: + decrypted = '' + for i in range(0, len(data)): + decrypted += chr(ord(data[i]) ^ ord(self._key[i % len(self._key)])) + return decrypted + elif sys.version_info[0] == 3: + decrypted = b'' + for i in range(0, len(data)): + decrypted += bytes([data[i] ^ self._key[i % len(self._key)]]) + return decrypted + else: + return data diff --git a/test/test_Growatt.py b/test/test_Growatt.py index 2b02fa5..2ff1900 100644 --- a/test/test_Growatt.py +++ b/test/test_Growatt.py @@ -1,4 +1,5 @@ import binascii +import sys from unittest import TestCase from pymodbus.datastore import ModbusSparseDataBlock, ModbusSlaveContext @@ -8,10 +9,18 @@ def _xor(data): key = b'Growatt' - decrypted = b'' - for i in range(0, len(data)): - decrypted += bytes([data[i] ^ key[i % len(key)]]) - return decrypted + if sys.version_info[0] == 2: + decrypted = '' + for i in range(0, len(data)): + decrypted += chr(ord(data[i]) ^ ord(key[i % len(key)])) + return decrypted + elif sys.version_info[0] == 3: + decrypted = b'' + for i in range(0, len(data)): + decrypted += bytes([data[i] ^ key[i % len(key)]]) + return decrypted + else: + return data class TestGrowattBufferedEnergyRequest(TestCase):