1
0
mirror of https://github.com/pommi/python-itho-wpu.git synced 2024-11-25 14:32:14 +01:00

refactor(itho-wpu): compose request + calculate checksum on the fly

Messages have 6 header bytes, data bytes and 1 checksum byte.

The 6 header bytes are:
1: i2c destination address (0x82)
2: i2c reply address (0x80)
3,4: message class
5: message type (0x04 = request)
6: data length (0x00 in case of a request)
This commit is contained in:
Pim van den Berg 2020-11-15 14:30:41 +01:00
parent 58f35d988e
commit b0ea3a9473

View File

@ -125,17 +125,33 @@ class I2CMaster:
self.i = i2c_raw.I2CRaw(address=address, bus=bus) self.i = i2c_raw.I2CRaw(address=address, bus=bus)
self.queue = queue self.queue = queue
def execute_action(self, action): def compose_request(self, action):
actions = { actions = {
"getnodeid": [0x80, 0x90, 0xE0, 0x04, 0x00, 0x8A], "getnodeid": [0x90, 0xE0],
"getserial": [0x80, 0x90, 0xE1, 0x04, 0x00, 0x89], "getserial": [0x90, 0xE1],
"getdatatype": [0x80, 0xA4, 0x00, 0x04, 0x00, 0x56], "getdatatype": [0xA4, 0x00],
"getdatalog": [0x80, 0xA4, 0x01, 0x04, 0x00, 0x55], "getdatalog": [0xA4, 0x01],
} }
# 0x80 = source, 0x04 = msg_type, 0x00 = length
request = [0x80] + actions[action] + [0x04, 0x00]
request.append(self.calculate_checksum(request))
return request
def calculate_checksum(self, request):
s = 0x82
for i in request:
s += i
checksum = 256 - (s % 256)
if checksum == 256:
checksum = 0
return checksum
def execute_action(self, action):
request = self.compose_request(action)
result = None result = None
for i in range(0, 20): for i in range(0, 20):
logger.debug(f"Executing action: {action}") logger.debug(f"Executing action: {action}")
self.i.write_i2c_block_data(actions[action]) self.i.write_i2c_block_data(request)
time.sleep(0.21) time.sleep(0.21)
logger.debug("Queue size: {}".format(self.queue.qsize())) logger.debug("Queue size: {}".format(self.queue.qsize()))
if self.queue.qsize() > 0: if self.queue.qsize() > 0: