diff --git a/tests/query_device.py b/tests/query_device.py index 5eb2834..b63a0e5 100755 --- a/tests/query_device.py +++ b/tests/query_device.py @@ -22,10 +22,14 @@ Read only CO2 register from sensor 123, baudrate 4800: {argv[0]} 123 4800 read CO2 Read CO2, T_SHT4x and RH_SCD4x from sensor 222, default baudrate: {argv[0]} 222 read CO2 T_SHT4x RH_SCD4x +Read register 30010 from sensor 247, default baudrate: + {argv[0]} 247 read 30010 +Read registers 30011, 30012, 30020 from sensor 247, baudrate 19200: + {argv[0]} 247 19200 read 30011 30012 30020 Turn LED off for sensor 247, baud 115200: - {argv[0]} 247 115200 write 0 LED_on_register -Set brightness of all connected sensors to 50%: - {argv[0]} 0 write 50 LED_brightness_register + {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 ''') # default values @@ -84,7 +88,7 @@ if action != 'read' and action != 'write' and action != 'all' and action != 'res print(f'Unknown action {action}') exit(-4) if action == 'write' and value == None: - print(f'Action "write" needs value"') + print(f'Action "write" needs value') exit(-5) if action == 'write' and len(register_number) + len(register_name) != 1: print(f'Action "write" needs exactly one register to write to') @@ -106,13 +110,16 @@ if action == 'write': print(f'Value to be written: {value}') # open device s = Sensor(address=addr, baudrate=baudrate) +all_registers = Sensor.input_registers.copy() +all_registers.update(Sensor.holding_registers) +all_register_numbers = {} +for name, number in all_registers.items(): + all_register_numbers[number] = name if action == 'read' or action == 'all': print('---- Register readout ----') for register in register_name + register_number: if isinstance(register, str): reg_name = register - all_registers = Sensor.input_registers.copy() - all_registers.update(Sensor.holding_registers) if reg_name in all_registers: reg_number = all_registers[reg_name] else: @@ -120,13 +127,13 @@ if action == 'read' or action == 'all': exit(-7) else: reg_number = register - reg_name = '' + # try reverse lookup + reg_name = all_register_numbers[reg_number] if reg_number in all_register_numbers else '' try: - result = s.read_register(reg_number) + result = int(s.read_register(reg_number)) except: - print(f'{reg_number : <10} {"N/A" : <10} Failed to read register') - continue - print(f'{reg_number : <10} {int(result) : <10} {reg_name}') + result = 'N/A' + print(f'{reg_number : <10} {result : <10} {reg_name}') elif action == 'write': if len(register_name) > 0: if register_name[0] not in Sensor.holding_registers: