diff --git a/tests/query_device.py b/tests/query_device.py index b63a0e5..ba272f0 100755 --- a/tests/query_device.py +++ b/tests/query_device.py @@ -4,7 +4,7 @@ from sys import argv,exit def print_help(): print( \ -f'''{argv[0]} ADDR [BAUDRATE] [{{read [REGISTER ...] | write VALUE REGISTER}}] +f'''{argv[0]} ADDR [BAUDRATE] [{{read [REGISTER ...] | write VALUE REGISTER | reset}}] where: - ADDR is Modbus address (use 0 for broadcast; note that only write can be broadcast) - BAUDRATE is (optional) baud rate; default value is 19200 @@ -30,6 +30,10 @@ Turn LED off for sensor 247, baud 115200: {argv[0]} 247 115200 write LED_on 0 Set brightness of all connected sensors to 50%, default baudrate (broadcast message): {argv[0]} 0 write LED_brightness 50 +Reset device 247, baud 19200: + {argv[0]} 247 19200 reset +Reset all devices, default baudrate: + {argv[0]} 0 reset ''') # default values @@ -99,13 +103,13 @@ if action != 'write' and len(register_name) + len(register_number) == 0: input_registers = [ x for x in Sensor.input_registers.keys() ] holding_registers = [ x for x in Sensor.holding_registers.keys() ] register_name = input_registers + holding_registers -if action != 'write' and addr == 0: +if addr == 0 and action != 'write' and action != 'reset': print(f'Cannot broadcast action "{action}"') exit(-12) # Query device print('---- Query device ----') -print(f'Address: {addr}\nBaudrate: {baudrate}\nAction: {action}') +print(f'Address: {addr if addr != 0 else "0 (broadcast)"}\nBaudrate: {baudrate}\nAction: {action}') if action == 'write': print(f'Value to be written: {value}') # open device @@ -150,8 +154,8 @@ elif action == 'write': print(f'Register number {reg_number} cannot be written') exit(-9) elif action == 'reset': - if not s.reset(): - # reset should throw NoResponse; if it doesn't, reset failed + if not s.reset() and addr != 0: + # reset should throw NoResponse; if it doesn't, reset failed (broadcast shouldn't return anything) print('Device reset failed!') else: print('---- Device reset ----')