@@ -1,17 +1,17 | |||
|
1 | 1 | import paho.mqtt.client as mqtt |
|
2 | from datetime import datetime | |
|
2 | import paho.mqtt.publish as publish | |
|
3 | from datetime import datetime, timezone, timedelta | |
|
3 | 4 | import numpy as np |
|
4 | 5 | import json |
|
5 | 6 | import time |
|
6 |
subscribe_topic="tesis/ |
|
|
7 |
publish_topic=" |
|
|
8 |
broker_address = " |
|
|
9 | analogRawMatriz=[[],[],[],[],[],[],[],[]] | |
|
10 | numMaxdatos=1000 | |
|
7 | subscribe_topic="tesis/analogRaw" | |
|
8 | publish_topic="atrad/test3"#"tesis/potencia" | |
|
9 | broker_address = "10.10.10.102"#10.10.10.102"#"192.168.43.149" | |
|
10 | analogRawMatriz=[[],[],[],[],[],[],[],[]]#guardamos los valores del | |
|
11 | numMaxdatos=1000 #definimos el numero máximo de datos a promediar | |
|
11 | 12 | contador = 0 |
|
12 | data=[] | |
|
13 | 13 | interval_start_time = time.time() |
|
14 |
interval_duration= |
|
|
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 |
@@ -22,11 +22,20 def potenciaAncho10us(AnalogRaw): | |||
|
22 | 22 | |
|
23 | 23 | def potenciaAncho20us(AnalogRaw): |
|
24 | 24 | potencia=[0,0,0,0,0,0,0,0] |
|
25 |
m= |
|
|
26 |
b= |
|
|
25 | m=0.6233 | |
|
26 | b=62.891 | |
|
27 | 27 | for i in range(8): |
|
28 | 28 | potencia[i]=m*AnalogRaw[i]+b |
|
29 | 29 | return potencia |
|
30 | #la potencia default considera en general valores mayores a 100 us | |
|
31 | def potenciaDefault(AnalogRaw): | |
|
32 | potencia=[0,0,0,0,0,0,0,0] | |
|
33 | m=0.6233 | |
|
34 | b=62.891 | |
|
35 | for i in range(8): | |
|
36 | potencia[i]=m*AnalogRaw[i]+b | |
|
37 | return potencia | |
|
38 | ||
|
30 | 39 | |
|
31 | 40 | def leer_datos_desde_txt(archivo): |
|
32 | 41 | try: |
@@ -51,11 +60,18 def procesamiento_data(analogRawMatriz): | |||
|
51 | 60 | potencia=potenciaAncho10us(average_raw) |
|
52 | 61 | if ancho>15 and ancho<25: |
|
53 | 62 | potencia=potenciaAncho20us(average_raw) |
|
54 | processed_data = {"Ancho_us":IPP,"average_potencia": potencia, "timestamp": datetime.now()} | |
|
55 | #client.publish(publish_topic, json.dumps(processed_data)) | |
|
63 | timestamp_actual = int(time.time()) | |
|
64 | fecha_utc=datetime.utcfromtimestamp(timestamp_actual) | |
|
65 | zona_horaria_utc_menos_5 = timezone(timedelta(hours=-5)) | |
|
66 | fecha_utc_menos_5 = fecha_utc.replace(tzinfo=timezone.utc).astimezone(zona_horaria_utc_menos_5) | |
|
67 | fecha_legible=fecha_utc_menos_5.strftime('%d-%m-%Y %H:%M:%S') | |
|
68 | 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} | |
|
70 | client.publish(publish_topic, json.dumps(processed_data)) | |
|
56 | 71 | print("---------------------------------------") |
|
57 | 72 | print(average_raw) |
|
58 | 73 | print(processed_data) |
|
74 | print(type(processed_data["average_potencia"])) | |
|
59 | 75 | |
|
60 | 76 | def on_connect(client, userdata, flags, rc): |
|
61 | 77 | if rc == 0: |
@@ -73,7 +89,7 def on_message(client, userdata, msg): | |||
|
73 | 89 | for i in range(8): |
|
74 | 90 | analogRawMatriz[i].append(lista[i]) |
|
75 | 91 | contador=contador+1 |
|
76 | #Leo los datos de la configuracion | |
|
92 | #Leo los datos de la configuracion y halla el ancho | |
|
77 | 93 | archivo_txt = 'commandPotencia.txt' |
|
78 | 94 | datos_numericos = leer_datos_desde_txt(archivo_txt) |
|
79 | 95 | if len(datos_numericos)!=10: |
@@ -84,14 +100,12 else: | |||
|
84 | 100 | Dutty=datos_numericos[1] |
|
85 | 101 | ancho=IPP*Dutty*pow(10,3)/100 |
|
86 | 102 | potenciaNominal=datos_numericos[2:] |
|
87 | ||
|
88 | 103 | # Configurar el cliente MQTT |
|
89 | 104 | client = mqtt.Client() |
|
90 | 105 | # Configurar los callbacks |
|
91 | 106 | client.on_connect = on_connect |
|
92 | 107 | client.on_message = on_message |
|
93 | 108 | client.connect(broker_address, port=1883, keepalive=60) |
|
94 | #client.loop_forever() | |
|
95 | 109 | |
|
96 | 110 | client.loop_start() |
|
97 | 111 | try: |
@@ -100,14 +114,13 try: | |||
|
100 | 114 | current_time = time.time() |
|
101 | 115 | elapsed_time = current_time - interval_start_time |
|
102 | 116 | if elapsed_time >= interval_duration: |
|
103 |
procesamiento_data(analogRawMatriz) # Calcula la potencia y envía los datos |
|
|
117 | procesamiento_data(analogRawMatriz) # Calcula la potencia y envía los datos | |
|
104 | 118 | interval_start_time = current_time # Reinicia el temporizador del intervalo |
|
105 | 119 | analogRawMatriz=[[],[],[],[],[],[],[],[]] |
|
106 | # Puedes ajustar el tiempo de espera según tus necesidades | |
|
107 | 120 | time.sleep(1) |
|
108 | 121 | |
|
109 | 122 | except KeyboardInterrupt: |
|
110 | 123 | print("Programa detenido por el usuario.") |
|
111 | #procesamiento_data() # Asegúrate de enviar los datos acumulados antes de salir | |
|
112 | 124 | client.disconnect() |
|
113 | 125 | client.loop_stop() |
|
126 | #client.loop_forever() No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now