scales: Add Gassner-Enq

This commit is contained in:
2026-08-03 10:41:01 +02:00
parent ec7486124b
commit 91b1b0afcc
+48 -4
View File
@@ -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)