##// END OF EJS Templates
Se agrego el threshold...
Se agrego el threshold Se modifico el programa principal para que la alarma se active según el porcentaje definido por el operador

File last commit:

r20:96b1842fbedf schottkyExp
r20:96b1842fbedf schottkyExp
Show More
mainScriptPython_v1.py
125 lines | 4.6 KiB | text/x-python | PythonLexer
/ python_mqtt / mainScriptPython_v1.py
JesusTapia-dev
Add main script...
r17 import paho.mqtt.client as mqtt
JesusTapia-dev
Agrego timestamp y estado...
r18 import paho.mqtt.publish as publish
from datetime import datetime, timezone, timedelta
JesusTapia-dev
Add main script...
r17 import numpy as np
import json
import time
JesusTapia-dev
Agrego timestamp y estado...
r18 subscribe_topic="tesis/analogRaw"
publish_topic="atrad/test3"#"tesis/potencia"
broker_address = "10.10.10.102"#10.10.10.102"#"192.168.43.149"
analogRawMatriz=[[],[],[],[],[],[],[],[]]#guardamos los valores del
numMaxdatos=1000 #definimos el numero máximo de datos a promediar
JesusTapia-dev
Add main script...
r17 contador = 0
interval_start_time = time.time()
JesusTapia-dev
Agrego timestamp y estado...
r18 interval_duration=30 #duracion del intervalo (en segundos) para el envio de datos
JesusTapia-dev
Add main script...
r17 def potenciaAncho10us(AnalogRaw):
potencia=[0,0,0,0,0,0,0,0]
m=1.5476
b=-91.898
for i in range(8):
potencia[i]=m*AnalogRaw[i]+b
return potencia
def potenciaAncho20us(AnalogRaw):
potencia=[0,0,0,0,0,0,0,0]
JesusTapia-dev
Agrego timestamp y estado...
r18 m=0.6233
b=62.891
JesusTapia-dev
Add main script...
r17 for i in range(8):
potencia[i]=m*AnalogRaw[i]+b
return potencia
JesusTapia-dev
Agrego timestamp y estado...
r18 #la potencia default considera en general valores mayores a 100 us
def potenciaDefault(AnalogRaw):
potencia=[0,0,0,0,0,0,0,0]
m=0.6233
b=62.891
for i in range(8):
potencia[i]=m*AnalogRaw[i]+b
return potencia
JesusTapia-dev
Add main script...
r17 def leer_datos_desde_txt(archivo):
try:
with open(archivo, 'r') as file:
lineas = file.readlines()
# Obtiene la segunda línea (índice 1)
segunda_linea = lineas[1]
datos = segunda_linea.strip().split()
datos_numericos = [float(dato) for dato in datos]
return datos_numericos
except FileNotFoundError:
print(f"El archivo '{archivo}' no fue encontrado.")
except Exception as e:
print(f"Error al leer el archivo: {e}")
def procesamiento_data(analogRawMatriz):
if analogRawMatriz[0]:
JesusTapia-dev
Cambios menores-data enviada
r19 average_raw=[0,0,0,0,0,0,0,0]
JesusTapia-dev
Add main script...
r17 for i in range(8):
average_raw[i] = sum(analogRawMatriz[i]) / len(analogRawMatriz[i])
if(ancho<15):
potencia=potenciaAncho10us(average_raw)
if ancho>15 and ancho<25:
potencia=potenciaAncho20us(average_raw)
JesusTapia-dev
Agrego timestamp y estado...
r18 timestamp_actual = int(time.time())
fecha_utc=datetime.utcfromtimestamp(timestamp_actual)
zona_horaria_utc_menos_5 = timezone(timedelta(hours=-5))
fecha_utc_menos_5 = fecha_utc.replace(tzinfo=timezone.utc).astimezone(zona_horaria_utc_menos_5)
fecha_legible=fecha_utc_menos_5.strftime('%d-%m-%Y %H:%M:%S')
estado=[1 if x > 0 else 0 for x in potenciaNominal]
JesusTapia-dev
Se agrego el threshold...
r20 processed_data = {"Ancho_us":IPP,"pow": potencia, "time": fecha_legible,"potenciaNominal":potenciaNominal,"status":estado,"threshold":threshold}
JesusTapia-dev
Agrego timestamp y estado...
r18 client.publish(publish_topic, json.dumps(processed_data))
JesusTapia-dev
Add main script...
r17 print("---------------------------------------")
print(average_raw)
print(processed_data)
JesusTapia-dev
Cambios menores-data enviada
r19 print(type(processed_data["pow"]))
JesusTapia-dev
Add main script...
r17
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Conexión exitosa con el broker")
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):
global analogRawMatriz
global contador
mensaje = msg.payload.decode()
lista=json.loads(mensaje)
if contador<numMaxdatos:
for i in range(8):
analogRawMatriz[i].append(lista[i])
contador=contador+1
JesusTapia-dev
Agrego timestamp y estado...
r18 #Leo los datos de la configuracion y halla el ancho
JesusTapia-dev
Add main script...
r17 archivo_txt = 'commandPotencia.txt'
datos_numericos = leer_datos_desde_txt(archivo_txt)
JesusTapia-dev
Se agrego el threshold...
r20 if len(datos_numericos)!=11:
JesusTapia-dev
Add main script...
r17 print("Hay más(o menos) valores de los que debería")
else:
IPP_km=datos_numericos[0]
IPP=IPP_km*1/150#IPP en ms
Dutty=datos_numericos[1]
JesusTapia-dev
Se agrego el threshold...
r20 threshold=datos_numericos[2]
JesusTapia-dev
Add main script...
r17 ancho=IPP*Dutty*pow(10,3)/100
JesusTapia-dev
Se agrego el threshold...
r20 potenciaNominal=datos_numericos[3:]
JesusTapia-dev
Add main script...
r17 # 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)
client.loop_start()
try:
while True:
# Verifica si ha pasado el intervalo de tiempo
current_time = time.time()
elapsed_time = current_time - interval_start_time
if elapsed_time >= interval_duration:
JesusTapia-dev
Agrego timestamp y estado...
r18 procesamiento_data(analogRawMatriz) # Calcula la potencia y envía los datos
JesusTapia-dev
Add main script...
r17 interval_start_time = current_time # Reinicia el temporizador del intervalo
analogRawMatriz=[[],[],[],[],[],[],[],[]]
time.sleep(1)
except KeyboardInterrupt:
print("Programa detenido por el usuario.")
client.disconnect()
client.loop_stop()
JesusTapia-dev
Agrego timestamp y estado...
r18 #client.loop_forever()