##// END OF EJS Templates
Cambios menores-data enviada
JesusTapia-dev -
r19:a04d8635f5cd
parent child
Show More
@@ -1,126 +1,125
1 1 import paho.mqtt.client as mqtt
2 2 import paho.mqtt.publish as publish
3 3 from datetime import datetime, timezone, timedelta
4 4 import numpy as np
5 5 import json
6 6 import time
7 7 subscribe_topic="tesis/analogRaw"
8 8 publish_topic="atrad/test3"#"tesis/potencia"
9 9 broker_address = "10.10.10.102"#10.10.10.102"#"192.168.43.149"
10 10 analogRawMatriz=[[],[],[],[],[],[],[],[]]#guardamos los valores del
11 11 numMaxdatos=1000 #definimos el numero máximo de datos a promediar
12 12 contador = 0
13 13 interval_start_time = time.time()
14 14 interval_duration=30 #duracion del intervalo (en segundos) para el envio de datos
15 15 def potenciaAncho10us(AnalogRaw):
16 16 potencia=[0,0,0,0,0,0,0,0]
17 17 m=1.5476
18 18 b=-91.898
19 19 for i in range(8):
20 20 potencia[i]=m*AnalogRaw[i]+b
21 21 return potencia
22 22
23 23 def potenciaAncho20us(AnalogRaw):
24 24 potencia=[0,0,0,0,0,0,0,0]
25 25 m=0.6233
26 26 b=62.891
27 27 for i in range(8):
28 28 potencia[i]=m*AnalogRaw[i]+b
29 29 return potencia
30 30 #la potencia default considera en general valores mayores a 100 us
31 31 def potenciaDefault(AnalogRaw):
32 32 potencia=[0,0,0,0,0,0,0,0]
33 33 m=0.6233
34 34 b=62.891
35 35 for i in range(8):
36 36 potencia[i]=m*AnalogRaw[i]+b
37 37 return potencia
38 38
39
40 39 def leer_datos_desde_txt(archivo):
41 40 try:
42 41 with open(archivo, 'r') as file:
43 42 lineas = file.readlines()
44 43 # Obtiene la segunda línea (índice 1)
45 44 segunda_linea = lineas[1]
46 45 datos = segunda_linea.strip().split()
47 46 datos_numericos = [float(dato) for dato in datos]
48 47 return datos_numericos
49 48 except FileNotFoundError:
50 49 print(f"El archivo '{archivo}' no fue encontrado.")
51 50 except Exception as e:
52 51 print(f"Error al leer el archivo: {e}")
53 52
54 53 def procesamiento_data(analogRawMatriz):
55 54 if analogRawMatriz[0]:
56 average_raw=[0,0,0,0,0,0,0,0,0]
55 average_raw=[0,0,0,0,0,0,0,0]
57 56 for i in range(8):
58 57 average_raw[i] = sum(analogRawMatriz[i]) / len(analogRawMatriz[i])
59 58 if(ancho<15):
60 59 potencia=potenciaAncho10us(average_raw)
61 60 if ancho>15 and ancho<25:
62 61 potencia=potenciaAncho20us(average_raw)
63 62 timestamp_actual = int(time.time())
64 63 fecha_utc=datetime.utcfromtimestamp(timestamp_actual)
65 64 zona_horaria_utc_menos_5 = timezone(timedelta(hours=-5))
66 65 fecha_utc_menos_5 = fecha_utc.replace(tzinfo=timezone.utc).astimezone(zona_horaria_utc_menos_5)
67 66 fecha_legible=fecha_utc_menos_5.strftime('%d-%m-%Y %H:%M:%S')
68 67 estado=[1 if x > 0 else 0 for x in potenciaNominal]
69 processed_data = {"Ancho_us":IPP,"average_potencia": potencia, "timestamp": fecha_legible,"potenciaNominal":potenciaNominal,"estado":estado}
68 processed_data = {"Ancho_us":IPP,"pow": potencia, "time": fecha_legible,"potenciaNominal":potenciaNominal,"status":estado}
70 69 client.publish(publish_topic, json.dumps(processed_data))
71 70 print("---------------------------------------")
72 71 print(average_raw)
73 72 print(processed_data)
74 print(type(processed_data["average_potencia"]))
73 print(type(processed_data["pow"]))
75 74
76 75 def on_connect(client, userdata, flags, rc):
77 76 if rc == 0:
78 77 print("Conexión exitosa con el broker")
79 78 client.subscribe(subscribe_topic)
80 79 else:
81 80 print("Error de conexión. Código de retorno =", rc)
82 81 # Callback cuando se recibe un mensaje en el tópico suscrito
83 82 def on_message(client, userdata, msg):
84 83 global analogRawMatriz
85 84 global contador
86 85 mensaje = msg.payload.decode()
87 86 lista=json.loads(mensaje)
88 87 if contador<numMaxdatos:
89 88 for i in range(8):
90 89 analogRawMatriz[i].append(lista[i])
91 90 contador=contador+1
92 91 #Leo los datos de la configuracion y halla el ancho
93 92 archivo_txt = 'commandPotencia.txt'
94 93 datos_numericos = leer_datos_desde_txt(archivo_txt)
95 94 if len(datos_numericos)!=10:
96 95 print("Hay más(o menos) valores de los que debería")
97 96 else:
98 97 IPP_km=datos_numericos[0]
99 98 IPP=IPP_km*1/150#IPP en ms
100 99 Dutty=datos_numericos[1]
101 100 ancho=IPP*Dutty*pow(10,3)/100
102 101 potenciaNominal=datos_numericos[2:]
103 102 # Configurar el cliente MQTT
104 103 client = mqtt.Client()
105 104 # Configurar los callbacks
106 105 client.on_connect = on_connect
107 106 client.on_message = on_message
108 107 client.connect(broker_address, port=1883, keepalive=60)
109 108
110 109 client.loop_start()
111 110 try:
112 111 while True:
113 112 # Verifica si ha pasado el intervalo de tiempo
114 113 current_time = time.time()
115 114 elapsed_time = current_time - interval_start_time
116 115 if elapsed_time >= interval_duration:
117 116 procesamiento_data(analogRawMatriz) # Calcula la potencia y envía los datos
118 117 interval_start_time = current_time # Reinicia el temporizador del intervalo
119 118 analogRawMatriz=[[],[],[],[],[],[],[],[]]
120 119 time.sleep(1)
121 120
122 121 except KeyboardInterrupt:
123 122 print("Programa detenido por el usuario.")
124 123 client.disconnect()
125 124 client.loop_stop()
126 125 #client.loop_forever() No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now