From 851ce7cbeaa3c41728ffc77f50d16050cf0ba505 Mon Sep 17 00:00:00 2001 From: "jp.av.dev" Date: Sun, 18 Jul 2021 04:39:56 -0400 Subject: [PATCH] +Python script --- README.md | 4 + scripts/README.md | 3 + scripts/caldera.py | 297 ++++++++++++++++++++++++++++++++++++++ scripts/script_python.png | Bin 0 -> 24746 bytes 4 files changed, 304 insertions(+) create mode 100755 scripts/caldera.py create mode 100644 scripts/script_python.png diff --git a/README.md b/README.md index e19bc70..00060ed 100644 --- a/README.md +++ b/README.md @@ -130,3 +130,7 @@ const char* password = "password"; Ingresa Opcion : ``` + +### caldera.py + +![python_script](./script_python.png) diff --git a/scripts/README.md b/scripts/README.md index a5918b8..21076db 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -28,3 +28,6 @@ ``` +### caldera.py + +![python_script](./script_python.png) diff --git a/scripts/caldera.py b/scripts/caldera.py new file mode 100755 index 0000000..79c8c01 --- /dev/null +++ b/scripts/caldera.py @@ -0,0 +1,297 @@ +#!/usr/bin/python3 +""" + Script de control Caldera autmatizada Arduino+ESP01 +""" +import os +import sys +from time import sleep +try: + import requests + from colorama import Fore, Back, Style +except ModuleNotFoundError as ex: + print("Debes instalar los modulos necesarios\n") + print(ex) + sleep(2) + sys.exit() + +ESP01 = "http://192.168.31.247" +clear = lambda: os.system('clear') if os.name == 'posix' else os.system('cls') + +def enviar_consulta(consulta): + resp = requests.get(consulta) + return resp.text + +def consultas(modo, *args): + orden = '?' + for indx, arg in enumerate(args): + orden += str(indx+1)+'='+str(arg)+'&' + resp = enviar_consulta(ESP01+modo+orden[:-1]) + return resp + +def pantallas(pantalla, vals): + if pantalla == '': + if vals[0] == '\n1': + vals[0] = ' AUTO ' + elif vals[0] == '\n5': + vals[0] = ' MANUAL ' + elif vals[0] == '\n6': + vals[0] = ' LIBRE ' + else: + vals[0] = '¡¡¡ERROR!!!' + for i in range(10,15): + if int(vals[i]) < 10: + vals[i] = '0'+vals[i] + for i in range(2,6): + if int(vals[i]) < 10: + vals[i] = ' '+vals[i] + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + if vals[1] == '1': + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ESTADO TERMO "+Style.RESET_ALL+ + Fore.GREEN+Back.BLUE+Style.BRIGHT+f" ENCENDIDO " + Style.RESET_ALL) + elif vals[1] == '0': + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ESTADO TERMO "+Style.RESET_ALL+ + Fore.RED+Back.BLUE+Style.BRIGHT+f" APAGADO " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" MODO "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f"{vals[0]}" + Style.RESET_ALL) + print(Fore.LIGHTGREEN_EX+Back.LIGHTBLACK_EX+ + f" {vals[10]}:{vals[11]}:{vals[12]} {vals[13]}/{vals[14]}/{vals[15]} "+ + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ON-1 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[2]} " + Style.RESET_ALL, end='') + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" OFF-1 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[3]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ON-2 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[4]} " + Style.RESET_ALL, end='') + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" OFF-2 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[5]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Menu de Opciones "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 1.- Modo Autonomo "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 2.- Ajustar hora y fecha "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 3.- Ajustar temporizador "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 4.- Calibrar servo "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 5.- Modo Manual "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 6.- Modo Libre "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" 0.- Salir "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" ⏎.- Actualizar "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Ingresa una opción "+Style.RESET_ALL, + end='\b\b\b\b\b\b') + elif pantalla == '1': + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+vals+Style.RESET_ALL) + elif pantalla == '2': + for i in range(0,5): + if int(vals[i]) < 10 and vals[i][0:1] != '0' : + vals[i] = '0'+vals[i] + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Valores actuales en RTC "+Style.RESET_ALL) + print(Fore.LIGHTGREEN_EX+Back.LIGHTBLACK_EX+ + f" Hora : {vals[0]}:{vals[1]}:{vals[2]} "+Style.RESET_ALL) + print(Fore.LIGHTGREEN_EX+Back.LIGHTBLACK_EX+ + f" Fecha : {vals[3]}/{vals[4]}/{vals[5]} "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Ajustando fecha y hora "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + elif pantalla == '3': + for i in range(0,4): + if int(vals[i]) < 10 and vals[i][0:1] != ' ': + vals[i] = ' '+vals[i] + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Horario Temporizador "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ON-1 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[0]} " + Style.RESET_ALL, end='') + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" OFF-1 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[1]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ON-2 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[2]} " + Style.RESET_ALL, end='') + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" OFF-2 "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[3]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Ingresa nuevo horario "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + elif pantalla == '4': + for i in range(0,4): + if int(vals[i]) < 100: + vals[i] = ' '+vals[i] + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Configuracion Actual "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" 1 Posición ON "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[0]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" 2 Posición ON "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[1]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" 1 Posición OFF "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[2]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" 2 Posición OFF "+Style.RESET_ALL+ + Fore.LIGHTRED_EX+Back.BLUE+Style.BRIGHT+f" {vals[3]} " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Ingresa nuevos valores "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + elif pantalla == '5': + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Accionamiento Manual "+Style.RESET_ALL) + if vals[0] == '1': + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ESTADO TERMO "+Style.RESET_ALL+ + Fore.GREEN+Back.BLUE+Style.BRIGHT+f" ENCENDIDO " + Style.RESET_ALL) + elif vals[0] == '0': + print(Fore.BLUE+Back.LIGHTWHITE_EX+Style.DIM+" ESTADO TERMO "+Style.RESET_ALL+ + Fore.RED+Back.BLUE+Style.BRIGHT+f" APAGADO " + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Encender o Apagar "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + elif pantalla == '6': + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Movimiento Libre "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+"==========================="+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" Ingresa posición (16..164)"+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + +def solicita_dato(valid, mensaje): + invalido = True + while invalido: + try: + dato = input(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+mensaje+Style.RESET_ALL) + dato = int(dato) + if valid[0] < dato < valid[1]: + invalido = False + return dato + raise ValueError + except ValueError: + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+ + "Ingresa un número válido "+Style.RESET_ALL) + +def solicita_dato_str(valid, mensaje): + invalido = True + while invalido: + try: + dato = input(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+mensaje+Style.RESET_ALL) + if dato in valid: + invalido = False + return dato + raise ValueError + except ValueError: + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+ + " Debes ingresar \'on\' u \'off\' "+Style.RESET_ALL) + +intentos = 0 +while True: + #res[1] = 'ENCENDIDO' if res[1] == '1' else 'APAGADO' if '0' else '' + res = [] + try: + clear() + resp = consultas('') + for var in resp.split(','): + res.append(var) + assert len(res) == 16 + pantallas('', res) + opc = input(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+":"+Style.RESET_ALL) + if opc == '0': + sys.exit() + elif opc == '1': + resp = consultas('/auto') + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+resp+Style.RESET_ALL) + sleep(8) + elif opc == '2': + pantallas('2',[res[10], res[11], res[12], res[13], res[14], res[15]]) + resp = consultas('/sethora', opc, solicita_dato((0,32),' DIA : '), + solicita_dato((0,13),' MES : '), + solicita_dato((2020,2100),' AÑO : '), + solicita_dato((-1,24),' HORA : '), + solicita_dato((-1,60),' MINUTO : '), + solicita_dato((-1,60),' SEGUNDO : ')) + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+resp+Style.RESET_ALL) + sleep(8) + elif opc == '3': + pantallas('3',[res[2], res[3], res[4], res[5]]) + resp = consultas('/horasAcc', opc, + solicita_dato((-1,24),' 1er Encendido : '), + solicita_dato((-1,24),' 1er Apagado : '), + solicita_dato((-1,24),' 2do Ecendido (opc.): '), + solicita_dato((-1,24),' 2do Apagado (opc.): ')) + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+resp+Style.RESET_ALL) + sleep(8) + elif opc == '4': + pantallas('4',[res[6], res[7], res[8], res[9]]) + resp = consultas('/setservo', opc, + solicita_dato((15,165),' 1ra Posición Encendido:'), + solicita_dato((15,165),' 2ra Posición Encendido:'), + solicita_dato((15,165),' 1ra Posición Apagado :'), + solicita_dato((15,165),' 2da Posición Apagado :')) + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+resp+Style.RESET_ALL) + sleep(8) + elif opc == '5': + pantallas('5',[res[1]]) + resp = consultas('/accion', opc, solicita_dato_str(('on','off'), + ' Ingresa \'on\' u \'off\': ')) + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+resp+Style.RESET_ALL) + sleep(8) + elif opc == '6': + pantallas('6',[res[1]]) + resp = consultas('/setlibre', opc, solicita_dato((15,165),' Ingresa posición :')) + print(Fore.MAGENTA+Back.BLUE+Style.BRIGHT+resp+Style.RESET_ALL) + sleep(8) + elif opc == '': + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+ + Style.RESET_ALL) + print(Fore.RED+Back.YELLOW+Style.BRIGHT+" Actualizando... "+ + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+ + Style.RESET_ALL) + sleep(1.5) + else: + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+ + Style.RESET_ALL) + print(Fore.RED+Back.YELLOW+Style.BRIGHT+" Opción incorrecta "+ + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+ + Style.RESET_ALL) + sleep(1.5) + except KeyboardInterrupt: + sys.exit() + except AssertionError: + clear() + intentos += 1 + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.RED+Back.YELLOW+Style.BRIGHT+" Arduino no disponible "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+f" Intentando nuevamente ({intentos+1}) "+ + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + intentos += 1 + sleep(2) + except ConnectionError: + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+f" Intentando conexión ({intentos+1}) "+ + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + intentos += 1 + sleep(2) + except OSError: + clear() + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+f" Intentando conexión ({intentos+1}) "+ + Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + intentos += 1 + sleep(2) + if intentos > 4: + print(Fore.RED+Back.YELLOW+Style.BRIGHT+" Imposible conectar con "+Style.RESET_ALL) + print(Fore.RED+Back.YELLOW+Style.BRIGHT+" ESP, o Arduino, verfica "+Style.RESET_ALL) + print(Fore.RED+Back.YELLOW+Style.BRIGHT+" IP, conexión o estado de "+Style.RESET_ALL) + print(Fore.RED+Back.YELLOW+Style.BRIGHT+ " de los dispositivos. "+Style.RESET_ALL) + print(Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM+" "+Style.RESET_ALL) + sys.exit() + + +#if __name__ == '__main__': diff --git a/scripts/script_python.png b/scripts/script_python.png new file mode 100644 index 0000000000000000000000000000000000000000..eccbe0ad26ba34f15dc96486294edb8254457c8e GIT binary patch literal 24746 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 literal 0 HcmV?d00001