From d387caecad0774f47f6c5234f0e6a4935e07352b Mon Sep 17 00:00:00 2001 From: Duke NUCem Date: Wed, 20 Oct 2021 20:38:37 +0200 Subject: [PATCH] Added measurement script for multiple devices --- tests/find_address.py | 4 +-- tests/measure_multiple_devices.py | 42 +++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100755 tests/measure_multiple_devices.py diff --git a/tests/find_address.py b/tests/find_address.py index 6606f88..c201ebf 100755 --- a/tests/find_address.py +++ b/tests/find_address.py @@ -6,8 +6,8 @@ import serial print('---- Looking for device ----') -slave_address_list = range(1,256) -baud_list = [4800,115200] +slave_address_list = range(200,256) +baud_list = [19200,115200] CO2_addr = 9 total_devices = 0 for slave_address in slave_address_list: diff --git a/tests/measure_multiple_devices.py b/tests/measure_multiple_devices.py new file mode 100755 index 0000000..90e41a7 --- /dev/null +++ b/tests/measure_multiple_devices.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +from time import sleep, time +from sys import exit +import minimalmodbus +import serial + +slave_address_list = [ 252, 253 ] + +# read +while True: + for slave_address in slave_address_list: + # initialize modbus + instrument = minimalmodbus.Instrument('/dev/rs485', slave_address, close_port_after_each_call=True) # port name, slave address (in decimal) + instrument.serial.baudrate = 115200 + instrument.serial.bytesize = 8 + instrument.serial.parity = serial.PARITY_EVEN + instrument.serial.stopbits = 1 + instrument.serial.timeout = 0.05 # seconds + instrument.mode = minimalmodbus.MODE_RTU # rtu or ascii mode + instrument.clear_buffers_before_each_transaction = True + + try: + CO2_addr = 9 + CO2 = instrument.read_register(CO2_addr, 1, functioncode=4) * 10 + T_SHT4x_addr = 10 + T_SHT4x = instrument.read_register(T_SHT4x_addr, 1, functioncode=4) + RH_SHT4x_addr = 11 + RH_SHT4x = instrument.read_register(RH_SHT4x_addr, 1, functioncode=4) * 10 + T_SCD4x_addr = 12 + T_SCD4x = instrument.read_register(T_SCD4x_addr, 1, functioncode=4) + RH_SCD4x_addr = 13 + RH_SCD4x = instrument.read_register(RH_SCD4x_addr, 1, functioncode=4) * 10 + T_SHT4x_signed_addr = 14 + T_SHT4x_signed = instrument.read_register(T_SHT4x_signed_addr, 1, functioncode=4, signed=True) + T_SCD4x_signed_addr = 15 + T_SCD4x_signed = instrument.read_register(T_SCD4x_signed_addr, 1, functioncode=4, signed=True) + with open(f'measurement_device_{slave_address}.csv', 'a+') as f: + f.write(f'{time():.1f} {CO2} {T_SHT4x} {RH_SHT4x} {T_SCD4x} {RH_SCD4x} {T_SHT4x_signed} {T_SCD4x_signed}\n') + except minimalmodbus.NoResponseError: + print(f'Read error for device {slave_address} at {time()}') + continue + sleep(10)