Added broadcast reset, minor formatting changes

This commit is contained in:
mj 2022-01-16 19:20:30 +01:00
parent 45895f179e
commit 4628aa8d20

View File

@ -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 ----')