From 72580bb5b2267860c14ec3d65ea79e23b8a089d1 Mon Sep 17 00:00:00 2001 From: Trygve Date: Thu, 7 Apr 2022 21:00:37 +0200 Subject: [PATCH] La til card punch constructor fra seriel packet --- otime.py | 34 ++++++++++++++++++++++++++++++++++ serial_test.py | 31 +++++++++++++++++++++++++------ 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/otime.py b/otime.py index 160e5e4..d1ab9e0 100644 --- a/otime.py +++ b/otime.py @@ -239,6 +239,40 @@ class card_punch: def __repr__(self): return f'card({self.card}) controls({self.controls}) splits({self.splits})' + def from_mtr_bytes(datamsg): + card = int.from_bytes(datamsg[20:23], 'little') + + #Extract codes and splits: + controls = [] + splits = [] + splits_offset = 26 + code_numbytes = 1 + time_numbytes = 2 + split_numbytes = code_numbytes + time_numbytes + for split_index in range(50): + code_offset = splits_offset + split_index * split_numbytes + time_offset = code_offset + code_numbytes + code = int.from_bytes(datamsg[code_offset:code_offset+code_numbytes], 'little') + time = int.from_bytes(datamsg[time_offset:time_offset+time_numbytes], 'little') + if code != 0: + controls.append(code) + splits.append(time) + + # Extract start time: + year = int.from_bytes(datamsg[8:9], 'little') + month = int.from_bytes(datamsg[9:10], 'little') + day = int.from_bytes(datamsg[10:11], 'little') + hours = int.from_bytes(datamsg[11:12], 'little') + minutes = int.from_bytes(datamsg[12:13], 'little') + seconds = int.from_bytes(datamsg[13:14], 'little') + milliseconds = int.from_bytes(datamsg[14:16], 'little') + + read_time = datetime.datetime(year, month, day, hours, minutes, seconds, milliseconds) + start_time = read_time - datetime.timedelta(seconds = splits[-1]) + finish_time = read_time - datetime.timedelta(seconds = splits[-2]) + + return(card_punch(card, controls, splits, start_time, finish_time)) + def list_from_mtr_f(mtr_f): csvreader = csv.reader(open(mtr_f)) diff --git a/serial_test.py b/serial_test.py index 449ef91..12eb408 100644 --- a/serial_test.py +++ b/serial_test.py @@ -3,17 +3,36 @@ import mtrreader from rich import inspect import mtrlog from datetime import datetime +import binascii +import otime mtr = serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=40) def main(): - data = mtr.read_until(expected='FFFFFFFFFF', size=230) - print('START') - msg = mtrreader.MtrDataMessage(data) - f = mtrlog.MtrLogFormatter - print(f.format(f, msg, datetime.now())) - print('END') + pree = mtr.read_until(expected=b'\xFF\xFF\xFF\xFF') + size = mtr.read(size=1) + if size == b'\xe6': + meat = mtr.read(229) + print('START') + + full = b'\xFF\xFF\xFF\xFF' + size + meat + print(binascii.hexlify(full)) + msg = mtrreader.MtrDataMessage(full) + f = mtrlog.MtrLogFormatter + #print(f.format(f, msg, datetime.now())) + #card_r_from_mtr_bytes(full) + inspect(otime.card_punch.from_mtr_bytes(full)) + print('END') + elif size == b'\x37': + meat = mtr.read(55) + status = mtrreader.MtrStatusMessage(meat) + inspect(status) + print(status.year(),status.month(),status.day(),status.hours(),status.minutes()) main() +def send_status_command(mtr): + mtr.write(b'/ST') + if __name__ == '__main__': + #send_status_command(mtr) main()