subscribe_script.py
64 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
/ python_mqtt / subscribe_script.py
|
r14 | import matplotlib.pyplot as plt | |
import matplotlib.animation as animation | |||
|
r13 | import paho.mqtt.client as mqtt | |
|
r14 | import numpy as np | |
subscribe_topic="tesis/AnalogRaw" | |||
|
r13 | broker_address = "192.168.43.149" | |
|
r14 | analogRawMatriz=[] | |
|
r13 | contador = 0 | |
|
r14 | data=[] | |
def init(): | |||
|
r17 | ax.set_ylim(900, 1800) # Ajusta los límites de la gráfica según tus necesidades | |
|
r14 | ax.set_xlim(0,30) | |
line.set_data([], []) | |||
return line, | |||
def update(frame): | |||
y_data = np.array(data) | |||
x_data = np.arange(len(y_data)) | |||
line.set_data(x_data, y_data) | |||
return line, | |||
|
r13 | # Callback cuando se establece la conexión con el broker MQTT | |
def on_connect(client, userdata, flags, rc): | |||
if rc == 0: | |||
print("Conexión exitosa con el broker") | |||
# Suscribirse a un tópico después de la conexión exitosa | |||
client.subscribe(subscribe_topic) | |||
else: | |||
print("Error de conexión. Código de retorno =", rc) | |||
# Callback cuando se recibe un mensaje en el tópico suscrito | |||
def on_message(client, userdata, msg): | |||
|
r14 | global analogRawMatriz | |
|
r13 | global contador | |
|
r14 | global data | |
|
r13 | mensaje = float(msg.payload.decode()) | |
|
r14 | analogRawMatriz.append(mensaje) | |
|
r13 | contador=contador+1 | |
|
r14 | if contador==500: | |
|
r13 | contador=0 | |
|
r14 | valor_promedio = sum(analogRawMatriz) / len(analogRawMatriz) | |
|
r17 | # potencia=1.5476*valor_promedio-91.898 | |
data.append(valor_promedio) | |||
|
r14 | data[:] = data[-30:] | |
analogRawMatriz=[] | |||
|
r17 | print(valor_promedio) | |
|
r13 | # Configurar el cliente MQTT | |
client = mqtt.Client() | |||
# Configurar los callbacks | |||
client.on_connect = on_connect | |||
client.on_message = on_message | |||
client.connect(broker_address, port=1883, keepalive=60) | |||
|
r14 | # Configuración de la gráfica | |
fig, ax = plt.subplots() | |||
line, = ax.plot([], [], lw=2) | |||
ax.set_xlabel('Tiempo') | |||
ax.set_ylabel('Analog Raw') | |||
ax.grid(True) | |||
# Configuración de la animación | |||
ani = animation.FuncAnimation(fig, update, frames=None, init_func=init, blit=True) | |||
|
r13 | # Mantener la ejecución del programa para recibir mensajes | |
|
r14 | #client.loop_forever() | |
client.loop_start() | |||
plt.show() | |||
client.loop_stop() | |||
"""" | |||
|
r17 | PARA UN IPP DE 10MS Y 10 US DE ANCHO, la ecuación sera:PotLinea= 1.5476*AnalogRaw-91.898 | |
|
r14 | """ |