import serial
from tkinter import *
from tkinter import messagebox
import tkinter as tk
import time
from datetime import datetime, timedelta
import os
import locale
import sched
import threading
import queue
from multiprocessing import Process
import sqlite3
import urllib.request
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import os, sys, subprocess
import mysql.connector
import uuid
import getmac
import pyfirmata2
######################################################## ANULACIÓN DE "X" DE CERRADO DE VENTANAS ########################################################
def botonCerrarTotal():
pass
######################################################## INTERFACE GRAFICA ########################################################
def center(ventana):
ventana.update_idletasks()
width = ventana.winfo_width()
frm_width = ventana.winfo_rootx() - ventana.winfo_x()
win_width = width + 2 * frm_width
height = ventana.winfo_height()
titlebar_height = ventana.winfo_rooty() - ventana.winfo_y()
win_height = height + titlebar_height + frm_width
x = ventana.winfo_screenwidth() // 2 - win_width // 2
y = ventana.winfo_screenheight() // 2 - win_height // 2
ventana.geometry('{}x{}+{}+{}'.format(width, height, x, y))
ventana.deiconify()
raiz = Tk()
raiz.title("PRUEBAS")
raiz.resizable(False,False)
raiz.geometry("900x300")
raiz.overrideredirect(0)
center(raiz)
FramePrincipal=Frame(raiz)
FramePrincipal.pack()
FramePrincipal.config(width="600", height="450")
locale.setlocale(locale.LC_ALL, '')
FrameReloj=Frame(raiz)
FrameReloj.pack()
current_time_label=tk.Label(text=time.strftime("%A, %d de %B de %Y \n %H:%M:%S"), font=('Tahoma', 12))
current_time_label.place(x=650, y=20)
current_time_label.config(bg="white")
global timeRunning
timeRunning = tk.BooleanVar()
timeRunning.set(True)
def update_clock():
time_now=time.strftime("%A, %d de %B de %Y \n %H:%M:%S")
if timeRunning.get() == True:
if current_time_label['text']!=time_now:
current_time_label["text"]=time_now
FrameReloj.after(1000, update_clock)
else:
FrameReloj.after_cancel(update_clock)
update_clock()
######################################################## CONEXION A ARDUINO ########################################################
serialPort = 'COM6'
baudRate = 9600
global serialArduino
serialArduino = serial.Serial(serialPort, baudRate)
######################################################## ENVIO DATOS A ARDUINO ########################################################
def DesconexionSistema():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'9')
serialArduino.close()
def ActivacionSistema():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'1')
serialArduino.close()
def ParoSistema():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'0')
serialArduino.close()
def PulsadorManual():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'3')
serialArduino.close()
#PulsadorManual()
def ParoManual():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'2')
serialArduino.close()
def ActivacionSonido():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'5')
serialArduino.close()
#ActivacionSonido()
def ParoSonido():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'4')
serialArduino.close()
def ActivacionAlarma1():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'A')
serialArduino.close()
def ParoAlarma1():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'B')
serialArduino.close()
def ActivacionAlarma2():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'C')
serialArduino.close()
def ParoAlarma2():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'D')
serialArduino.close()
def ActivacionAlarma3():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'E')
serialArduino.close()
def ParoAlarma3():
serialArduino = serial.Serial(serialPort, baudRate)
serialArduino.write(b'F')
serialArduino.close()
######################################################## RECEPCION DATOS DE ARDUINO ########################################################
def ObtenerDatosArduino():
while(True):
global STModoInstalador
if STModoInstalador.get() == True:
pass
else:
global serialArduino
serialArduino = serial.Serial(serialPort, baudRate)
LecturaArduino = serialArduino.readline()
new_LecturaArduino = LecturaArduino.decode("utf-8")
final_LecturaArduino = new_LecturaArduino.strip()
print (final_LecturaArduino)
serialArduino.close()
time.sleep(0.1)
######################################################## BOTON SONIDO ########################################################
STBotonSonido = tk.BooleanVar()
STBotonSonido.set(True)
def pulsacionBotonSonido():
if STBotonSonido.get() == False:
STBotonSonido.set(True)
BotonSonido.config(image=ImagenBotonSonidoActivado)
EventoBotonSonidoActivado = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
ActivacionSonido()
print("AVISADOR ACUSTICO ACTIVADO " + time.strftime(EventoBotonSonidoActivado))
else:
STBotonSonido.set(False)
BotonSonido.config(image=ImagenBotonSonidoSilencio)
EventoBotonSonidoSilencio = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
ParoSonido()
print("AVISADOR ACUSTICO SILENCIADO " + time.strftime(EventoBotonSonidoSilencio))
BotonSonido=Frame(raiz)
BotonSonido.pack()
ImagenBotonSonidoActivado = PhotoImage (file = "CON_SONIDO.png")
ImagenBotonSonidoSilencio = PhotoImage (file = "SIN_SONIDO.png")
BotonSonido = tk.Button(raiz, image=ImagenBotonSonidoActivado, command=pulsacionBotonSonido)
BotonSonido.config(width="120", height="120")
BotonSonido.place(x=20, y=140)
######################################################## BOTON ALARMA 1 ########################################################
STBotonAlarma1 = tk.BooleanVar()
STBotonAlarma1.set(False)
def cambioEstadoAlarma1():
if (BotonAlarma1["state"] == tk.DISABLED):
BotonAlarma1["state"] = tk.NORMAL
BotonAlarma1.config(image=ImagenBotonAlarma1Habilitado)
else:
BotonAlarma1["state"] = tk.DISABLED
BotonAlarma1.config(image=ImagenBotonAlarma1Deshabilitado)
def pulsacionBotonAlarma1():
if STBotonAlarma1.get() == True:
STBotonAlarma1.set(False)
BotonAlarma1.config(image=ImagenBotonAlarma1Habilitado)
ParoAlarma1()
ParoEstadoLetreroAlarma1()
CambioEstadoLetreroAlarma1()
EventoBotonAlarma1 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("ALARMA 1 PARADA " + time.strftime(EventoBotonAlarma1))
else:
STBotonAlarma1.set(True)
BotonAlarma1.config(image=ImagenBotonAlarma1Pulsado)
ActivacionAlarma1()
ActivacionEstadoLetreroAlarma1()
CambioEstadoLetreroAlarma1()
EventoBotonAlarma1 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("ALARMA 1 ACTIVADA " + time.strftime(EventoBotonAlarma1))
BotonAlarma1=Frame(raiz)
BotonAlarma1.pack()
ImagenBotonAlarma1Deshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma1Habilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma1Pulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonAlarma1 = tk.Button(raiz, state=tk.DISABLED, image=ImagenBotonAlarma1Habilitado, command=pulsacionBotonAlarma1)
BotonAlarma1.config(width="120", height="120")
BotonAlarma1.place(x=165, y=140)
######################################################## BOTON ALARMA 2 ########################################################
global STBotonAlarma2
STBotonAlarma2 = tk.BooleanVar()
STBotonAlarma2.set(False)
def cambioEstadoAlarma2():
if (BotonAlarma2["state"] == tk.DISABLED):
BotonAlarma2["state"] = tk.NORMAL
BotonAlarma2.config(image=ImagenBotonAlarma2Habilitado)
else:
BotonAlarma2["state"] = tk.DISABLED
BotonAlarma2.config(image=ImagenBotonAlarma2Deshabilitado)
def pulsacionBotonAlarma2():
if STBotonAlarma2.get() == True:
STBotonAlarma2.set(False)
BotonAlarma2.config(image=ImagenBotonAlarma2Habilitado)
ParoAlarma2()
ParoEstadoLetreroAlarma2()
CambioEstadoLetreroAlarma2()
EventoBotonAlarma2 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("ALARMA 2 PARADA " + time.strftime(EventoBotonAlarma2))
else:
STBotonAlarma2.set(True)
BotonAlarma2.config(image=ImagenBotonAlarma2Pulsado)
ActivacionAlarma2()
ActivacionEstadoLetreroAlarma2()
CambioEstadoLetreroAlarma2()
EventoBotonAlarma2 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("ALARMA 2 ACTIVADA " + time.strftime(EventoBotonAlarma2))
BotonAlarma2=Frame(raiz)
BotonAlarma2.pack()
ImagenBotonAlarma2Deshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma2Habilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma2Pulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonAlarma2 = tk.Button(raiz, state=tk.DISABLED, image=ImagenBotonAlarma2Habilitado, command=pulsacionBotonAlarma2)
BotonAlarma2.config(width="120", height="120")
BotonAlarma2.place(x=310, y=140)
######################################################## BOTON ALARMA 3 ########################################################
global STBotonAlarma3
STBotonAlarma3 = tk.BooleanVar()
STBotonAlarma3.set(False)
def cambioEstadoAlarma3():
if (BotonAlarma3["state"] == tk.DISABLED):
BotonAlarma3["state"] = tk.NORMAL
BotonAlarma3.config(image=ImagenBotonAlarma3Habilitado)
else:
BotonAlarma3["state"] = tk.DISABLED
BotonAlarma3.config(image=ImagenBotonAlarma3Deshabilitado)
def pulsacionBotonAlarma3():
if STBotonAlarma3.get() == True:
STBotonAlarma3.set(False)
BotonAlarma3.config(image=ImagenBotonAlarma3Habilitado)
ParoAlarma3()
ParoEstadoLetreroAlarma3()
CambioEstadoLetreroAlarma3()
EventoBotonAlarma3 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("ALARMA 3 PARADA " + time.strftime(EventoBotonAlarma3))
else:
STBotonAlarma3.set(True)
BotonAlarma3.config(image=ImagenBotonAlarma3Pulsado)
ActivacionAlarma3()
ActivacionEstadoLetreroAlarma3()
CambioEstadoLetreroAlarma3()
EventoBotonAlarma3 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("ALARMA 3 ACTIVADA " + time.strftime(EventoBotonAlarma3))
BotonAlarma3=Frame(raiz)
BotonAlarma3.pack()
ImagenBotonAlarma3Deshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma3Habilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma3Pulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonAlarma3 = tk.Button(raiz, state=tk.DISABLED, image=ImagenBotonAlarma3Habilitado, command=pulsacionBotonAlarma3)
BotonAlarma3.config(width="120", height="120")
BotonAlarma3.place(x=455, y=140)
######################################################## BOTON REARME MANUAL ########################################################
STBotonRearmeManual = tk.BooleanVar()
STBotonRearmeManual.set(True)
def pulsacionBotonRearmeManual():
if STBotonRearmeManual.get() == True:
STBotonRearmeManual.set(True)
STBotonParoManual.set(False)
BotonRearmeManual.config(image=ImagenBotonRearmeManualPulsado)
BotonParoManual.config(image=ImagenBotonParoManualSinPulsar)
else:
if STBotonAlarma1.get() == True or STBotonAlarma2.get() == True or STBotonAlarma3.get() == True:
pass
else:
STBotonRearmeManual.set(True)
STBotonParoManual.set(False)
BotonRearmeManual.config(image=ImagenBotonRearmeManualPulsado)
BotonParoManual.config(image=ImagenBotonParoManualSinPulsar)
PulsadorManual()
EventoBotonRearmeManual = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("PULSADOR REARME MANUAL ACTIVADO " + time.strftime(EventoBotonRearmeManual))
BotonRearmeManual=Frame(raiz)
BotonRearmeManual.pack()
ImagenBotonRearmeManualDeshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonRearmeManualHabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonRearmeManualSinPulsar = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonRearmeManualPulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonRearmeManual = tk.Button(raiz, image=ImagenBotonRearmeManualPulsado, command=pulsacionBotonRearmeManual)
BotonRearmeManual.config(width="120", height="120")
BotonRearmeManual.place(x=600, y=140)
######################################################## BOTON PARO EMERGENCIA ########################################################
STBotonParoManual = tk.BooleanVar()
STBotonParoManual.set(False)
def pulsacionBotonParoManual():
if STBotonParoManual.get() == False:
STBotonRearmeManual.set(False)
STBotonParoManual.set(True)
BotonParoManual.config(image=ImagenBotonParoManualPulsado)
BotonRearmeManual.config(image=ImagenBotonRearmeManualSinPulsar)
ParoManual()
EventoBotonParoManual = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
print("PULSADOR PARO EMERGENCIA ACTIVADO " + time.strftime(EventoBotonParoManual))
else:
STBotonRearmeManual.set(False)
STBotonParoManual.set(True)
BotonParoManual.config(image=ImagenBotonParoManualPulsado)
BotonRearmeManual.config(image=ImagenBotonRearmeManualSinPulsar)
BotonParoManual=Frame(raiz)
BotonParoManual.pack()
ImagenBotonParoManualDeshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonParoManualHabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonParoManualSinPulsar = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonParoManualPulsado = PhotoImage (file = "BOTON_ON_ROJO.png")
BotonParoManual = tk.Button(raiz, image=ImagenBotonParoManualSinPulsar, command=pulsacionBotonParoManual)
BotonParoManual.config(width="120", height="120")
BotonParoManual.place(x=745, y=140)
######################################################## MODO INSTALADOR (HABILITADO DE MENUS DE CONTROL) ########################################################
# ACTIVACION:
global STModoInstalador
STModoInstalador = tk.BooleanVar()
STModoInstalador.set (False)
global FrameIndicadorModoInstalador
FrameIndicadorModoInstalador = Frame(raiz)
FrameIndicadorModoInstalador.pack()
def ActivacionIndicadorModoInstalador():
global FrameIndicadorModoInstalador
FrameIndicadorModoInstalador = tk.Label(raiz, text=" MODO INSTALADOR ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameIndicadorModoInstalador.place(x=20, y=20)
def DesactivacionIndicadorModoInstalador():
global FrameIndicadorModoInstalador
FrameIndicadorModoInstalador.destroy()
def ActivacionModoInstalador():
if STModoInstalador.get() == True:
pass
else:
ActivacionIndicadorModoInstalador()
cambioEstadoAlarma1()
cambioEstadoAlarma2()
cambioEstadoAlarma3()
STModoInstalador.set (True)
def SalirModoInstalador():
if STModoInstalador.get() == False:
pass
else:
DesactivacionIndicadorModoInstalador()
cambioEstadoAlarma1()
cambioEstadoAlarma2()
cambioEstadoAlarma3()
STModoInstalador.set (False)
######################################################## CONFIGURACION HILOS DE PROCESOS ########################################################
lock = threading.Lock()
HiloDatosArduino = threading.Thread(target=ObtenerDatosArduino)
HiloDatosArduino.start()
def contadorHilosActivos():
threading.active_count()
print ("Hilos activos: " + str(threading.active_count()))
######################################################## LETREROS DE DISPOSITIVOS ########################################################
FrameLetreroAlarma1=Frame(raiz)
FrameLetreroAlarma1.pack()
FrameLetreroAlarma1 = tk.Label(raiz, text=" ALARMA 1 ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameLetreroAlarma1.place(x=188, y=95)
FrameLetreroAlarma2=Frame(raiz)
FrameLetreroAlarma2.pack()
FrameLetreroAlarma2 = tk.Label(raiz, text=" ALARMA 2 ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameLetreroAlarma2.place(x=332, y=95)
FrameLetreroAlarma3=Frame(raiz)
FrameLetreroAlarma3.pack()
FrameLetreroAlarma3 = tk.Label(raiz, text=" ALARMA 3 ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameLetreroAlarma3.place(x=476, y=95)
FrameRearmeManual=Frame(raiz)
FrameRearmeManual.pack()
FrameRearmeManual = tk.Label(raiz, text=" REARME MANUAL ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameRearmeManual.place(x=600, y=95)
FrameParoManual=Frame(raiz)
FrameParoManual.pack()
FrameParoManual = tk.Label(raiz, text=" PARO EMERGENCIA ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameParoManual.place(x=742, y=95)
######################################################## LETRERO ALARMA 1 ########################################################
STLetreroAlarma1 = tk.BooleanVar()
STLetreroAlarma1.set(False)
def LeerEstadoLetreroAlarma1():
STLetreroAlarma1.get()
print(STLetreroAlarma1.get())
def ActivacionEstadoLetreroAlarma1():
if STLetreroAlarma1.get() == True:
pass
else:
STLetreroAlarma1.set(True)
pulsacionBotonParoManual()
def ParoEstadoLetreroAlarma1():
if STLetreroAlarma1.get() == False:
pass
else:
STLetreroAlarma1.set(False)
def CambioEstadoLetreroAlarma1():
if STLetreroAlarma1.get() == False:
FrameLetreroAlarma1.config (bg="white")
raiz.update()
else:
FrameLetreroAlarma1.config (bg="red")
raiz.update()
######################################################## LETRERO ALARMA 2 ########################################################
STLetreroAlarma2 = tk.BooleanVar()
STLetreroAlarma2.set(False)
def LeerEstadoLetreroAlarma2():
STLetreroAlarma2.get()
print(STLetreroAlarma2.get())
def ActivacionEstadoLetreroAlarma2():
if STLetreroAlarma2.get() == True:
pass
else:
STLetreroAlarma2.set(True)
pulsacionBotonParoManual()
def ParoEstadoLetreroAlarma2():
if STLetreroAlarma2.get() == False:
pass
else:
STLetreroAlarma2.set(False)
def CambioEstadoLetreroAlarma2():
if STLetreroAlarma2.get() == False:
FrameLetreroAlarma2.config (bg="white")
raiz.update()
else:
FrameLetreroAlarma2.config (bg="red")
raiz.update()
######################################################## LETRERO ALARMA 3 ########################################################
STLetreroAlarma3 = tk.BooleanVar()
STLetreroAlarma3.set(False)
def LeerEstadoLetreroAlarma3():
STLetreroAlarma3.get()
print(STLetreroAlarma3.get())
def ActivacionEstadoLetreroAlarma3():
if STLetreroAlarma3.get() == True:
pass
else:
STLetreroAlarma3.set(True)
pulsacionBotonParoManual()
def ParoEstadoLetreroAlarma3():
if STLetreroAlarma3.get() == False:
pass
else:
STLetreroAlarma3.set(False)
def CambioEstadoLetreroAlarma3():
if STLetreroAlarma3.get() == False:
FrameLetreroAlarma3.config (bg="white")
raiz.update()
else:
FrameLetreroAlarma3.config (bg="red")
raiz.update()
######################################################## CERRAR EL SISTEMA ########################################################
def salirSistema():
DesconexionSistema()
raiz.destroy()
######################################################## BARRA DE MENÚ ########################################################
fuente = ('Tahoma', 20)
barraMenu=Menu(raiz)
raiz.config(menu=barraMenu)
sistemaMenu=Menu(barraMenu, font = fuente, tearoff=0)
sistemaMenu.add_command(label="Activar Modo Instalador", command=ActivacionModoInstalador)
sistemaMenu.add_command(label="Salir Modo Instalador", command=SalirModoInstalador)
sistemaMenu.add_command(label="Contador Hilos Activos", command=contadorHilosActivos)
sistemaMenu.add_command(label="Salir", command=salirSistema)
barraMenu.add_cascade(label="Sistema", menu=sistemaMenu)
######################################################## LOOP DE INTERFACE ########################################################
raiz.protocol("WM_DELETE_WINDOW", salirSistema)
raiz.mainloop()