Para procesar el archivo del reporte.txt se puede leer mensaje por mensaje y extraer el registro de RSSI y SNR de cada dispositivo usando Python.
# procesar un archivo de mensajes mqtt import numpy as np import json as json # INGRESO # Parametros para la conexión servidormqtt = "192.168.xx.xx" topicolee = "#" # Para el archivo.txt nombrearchivo = 'unreporte.txt' conteo = {"lineas":{'cuenta':0}, "gateway":{'cuenta':0}, "application":{'cuenta':0} } tipotrama = [] # para tabular tabla = [] registros = {} frecuencias = [] tramabuscada = ['application/1/device/c9c2a03913ac2ec5/event/up', 'application/1/device/b35915f22af620d1/event/up', 'application/1/device/b5a2349b828d97ea/event/up', 'application/1/device/f2f724028c0e996c/event/up'] # PROCEDIMIENTO archivo = open(nombrearchivo,'r') unalinea = archivo.readline() while not(unalinea==''): conteo["lineas"]['cuenta'] = conteo["lineas"]['cuenta'] + 1 unalinea = archivo.readline() unalinea = unalinea.strip('\n') desde = unalinea.find(" b'{") untipotrama = unalinea[0:desde] if not(untipotrama in tipotrama) and (untipotrama != ''): tipotrama.append(untipotrama) conteo[untipotrama] = {'cuenta':0} for entrada in conteo: if unalinea.startswith(entrada): conteo[entrada]['cuenta'] = conteo[entrada]['cuenta']+1 for unapptrama in tramabuscada: tamanot = len(unapptrama) if unalinea.startswith(unapptrama): datostxt = unalinea[tamanot+3:].strip("'") datosjson = json.loads(datostxt) undeviceName = datosjson["deviceName"] unrssi = datosjson["rxInfo"][0]["rssi"] unloRaSNR = datosjson["rxInfo"][0]["loRaSNR"] unfrequency = datosjson["txInfo"]["frequency"] undr = datosjson["txInfo"]["dr"] if not(unfrequency in frecuencias): frecuencias.append(unfrequency) if undeviceName in registros: registros[undeviceName]['conteo'] = registros[undeviceName]['conteo']+1 registros[undeviceName]['rssi'].append([unfrequency,unrssi, unloRaSNR,undr]) else: registros[undeviceName]={'rssi':[], 'conteo':0, 'resumen':[0,0,0,0], } archivo.close() # Cierra el archivo # Calcula resumen por dispositivo frecuencias.sort() frecuencia = [902300000, 902500000, 902700000, 902900000, 903100000, 903300000, 903500000, 903700000] canalobserva = len(frecuencia) for dispositivo in registros: vector = np.array(registros[dispositivo]['rssi']) cuenta = np.zeros(canalobserva, dtype=int) suma = np.zeros(canalobserva,dtype=int) channelid = np.arange(1, canalobserva+1) cadaRSSI = [[],[],[],[],[],[],[],[],[]] cadaSNR = [[],[],[],[],[],[],[],[],[]] cadadr = [[],[],[],[],[],[],[],[],[]] resumen = [] # Clasificando k = len(vector) for j in range (0,k,1): cual = frecuencia.index(vector[j][0]) valorRssi = vector[j][1] valorSNR = vector[j][2] valordr = vector[j][3] cadaRSSI[cual].append(valorRssi) cadaSNR[cual].append(valorSNR) cadadr[cual].append(valordr) for j in range(0,canalobserva,1): vectorRSSI = np.array(cadaRSSI[j]) vectorSNR = np.array(cadaSNR[j]) vectordr = np.array(cadadr[j]) if len(vectorRSSI)>0: promedioRSSI = np.average(vectorRSSI) maximoRSSI = np.max(vectorRSSI) cantidadRSSI = len(vectorRSSI) minimoRSSI = np.min(vectorRSSI) promedioSNR = np.average(vectorSNR) maximoSNR = np.max(vectorSNR) cantidadSNR = len(vectorSNR) minimoSNR = np.min(vectorSNR) promediodr = np.average(vectordr) maximodr = np.max(vectordr) cantidaddr = len(vectordr) minimodr = np.min(vectordr) resumen.append(np.array([ j+1, cantidadRSSI, promedioRSSI, minimoRSSI, maximoRSSI, promedioSNR, minimoSNR, maximoSNR, promediodr, ])) resumen = np.array(resumen) registros[dispositivo]['resumen'] = resumen # SALIDA np.set_printoptions(precision = 2) print('conteo de tramas') for entrada in conteo: print(entrada,": ", conteo[entrada]['cuenta']) print('frecuencias: ',frecuencia) print('\nTabulando ---------') for dispositivo in registros: print() print('dispositivo_id: '+str(dispositivo)) print('total muestras: '+str(registros[dispositivo]['conteo'])) print('Promedios RSSI y SNR: ') print('[canal muestras\t RSSI \t min \t max \t SNR min max DR ]') print(registros[dispositivo]['resumen']) registros[dispositivo]['conteo']