From 91b1b0afccfb28f6a65fa58352408df3308bbfe2 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 3 Aug 2026 10:41:01 +0200 Subject: [PATCH] scales: Add Gassner-Enq --- scales/simulator.py | 52 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/scales/simulator.py b/scales/simulator.py index ab7166a..fa7e5f0 100755 --- a/scales/simulator.py +++ b/scales/simulator.py @@ -56,7 +56,41 @@ def handle_systec_it(req: bytes) -> bytes: return b'<' + data + f'{crc16_modbus(data):8}'.encode('ascii') + b'>\r\n' -def handle_avery_async(client: socket.socket) -> None: +def handle_gassner_enq(req: bytes) -> bytes: + global IDENT_NR + + if req.startswith(b'C'): + # set date and time + incr = False + elif req == b'\x05': + incr = True + elif req == b'?': + incr = False + else: + return b'\x02ES 0 0 0 1 \x03' + + if incr: + time.sleep(random.randint(0, 5) / 10.0) + + gew = random.randint(40, 4000) + m = random.randint(1, 10) + if incr: + match m: + case 1: + return b'\x02 M 0 0 0 1 \x03' + case 2: + incr = False + gew = 0 + + if incr: + IDENT_NR += 1 + now = datetime.datetime.now() + data = f'{IDENT_NR:6}{now:%Y%m%d%H%M%S}' if incr else ' ' + data = f' S{gew:7}{0:7}{gew:7}{1:2}{data}' + return b'\x02' + data.encode('ascii') + b'\x03' + + +def handle_avery_event(client: socket.socket) -> None: global IDENT_NR try: client.settimeout(0) @@ -94,12 +128,22 @@ def main(mode: str) -> None: c.send(res) except: pass - elif mode == 'Avery-Async': - handle_avery_async(c) + elif mode == 'Gassner-Enq': + try: + while True: + req = c.recv(1024) + log(req + b'\n') + res = handle_gassner_enq(req) + log(res + b'\n') + c.send(res) + except: + pass + elif mode == 'Avery-Event': + handle_avery_event(c) if __name__ == '__main__': parser = argparse.ArgumentParser() - parser.add_argument('mode', choices=['SysTec-IT', 'Avery-Async']) + parser.add_argument('mode', choices=['SysTec-IT', 'Gassner-Enq', 'Avery-Event']) args = parser.parse_args() main(args.mode)