import tkinter as tk
from datetime import datetime
estado_casa = {
"Luzes Sala": False,
"Luzes Quarto": False,
"Porta Entrada": True, # True para trancada
"Termostato": 22, # Temperatura em Celsius
}
arquivo_historico = "historico_eventos.txt"
def carregar_historico():
try:
with open(arquivo_historico, "r", encoding="utf-8") as f:
return f.readlines()
except FileNotFoundError:
return []
# Salvar evento no arquivo de histórico
def salvar_evento(evento):
with open(arquivo_historico, "a", encoding="utf-8") as f:
f.write(evento + "\n")
# Inicializar histórico
historico = carregar_historico()
def alternar_dispositivo(nome):
if nome in estado_casa:
if isinstance(estado_casa[nome], bool):
estado_casa[nome] = not estado_casa[nome]
estado = "Ligada" if estado_casa[nome] else "Desligada"
registrar_evento(f"{nome} agora está {estado}.")
elif isinstance(estado_casa[nome], int): # Termostato
registrar_evento(f"Temperatura do {nome} ajustada para {estado_casa[nome]}°C.")
def ajustar_termostato(valor):
"""Ajusta a temperatura do termostato."""
estado_casa["Termostato"] += valor
registrar_evento(f"Termostato ajustado para {estado_casa['Termostato']}°C.")
atualizar_interface()
def registrar_evento(mensagem):
"""Registra um evento no histórico."""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
evento = f"[{timestamp}] {mensagem}"
historico.append(evento)
salvar_evento(evento)
atualizar_historico(evento)
def atualizar_historico(evento):
text_historico.config(state=tk.NORMAL)
text_historico.insert(tk.END, evento + "\n")
text_historico.see(tk.END)
text_historico.config(state=tk.DISABLED)
def atualizar_interface():
for nome, widget in widgets_estado.items():
estado = estado_casa[nome]
if isinstance(estado, bool):
widget.config(text="Ligada" if estado else "Desligada")
elif isinstance(estado, int):
widget.config(text=f"{estado}°C")
janela = tk.Tk()
janela.title("Simulador de Automação Residencial")
janela.geometry("500x600")
# Widgets para cada dispositivo
widgets_estado = {}
frame_dispositivos = tk.Frame(janela)
frame_dispositivos.pack(pady=20)
for dispositivo in estado_casa:
frame = tk.Frame(frame_dispositivos)
frame.pack(pady=5)
label_nome = tk.Label(frame, text=dispositivo, font=("Arial", 14))
label_nome.pack(side=tk.LEFT, padx=10)
if isinstance(estado_casa[dispositivo], bool):
btn_alternar = tk.Button(
frame, text="Ligar/Desligar",
command=lambda d=dispositivo: alternar_dispositivo(d)
)
btn_alternar.pack(side=tk.RIGHT, padx=10)
elif isinstance(estado_casa[dispositivo], int):
btn_diminuir = tk.Button(frame, text="-",
command=lambda d=dispositivo: ajustar_termostato(-1))
btn_diminuir.pack(side=tk.RIGHT, padx=5)
btn_aumentar = tk.Button(frame, text="+",
command=lambda d=dispositivo: ajustar_termostato(1))
btn_aumentar.pack(side=tk.RIGHT, padx=5)
lbl_estado = tk.Label(frame, text="Desligada" if
isinstance(estado_casa[dispositivo], bool) else f"{estado_casa[dispositivo]}°C", font=("Arial", 12))
lbl_estado.pack(side=tk.RIGHT, padx=10)
widgets_estado[dispositivo] = lbl_estado
frame_historico = tk.Frame(janela)
frame_historico.pack(pady=20, fill=tk.BOTH, expand=True)
label_historico = tk.Label(frame_historico, text="Histórico de Eventos", font=("Arial", 14))
label_historico.pack()
text_historico = tk.Text(frame_historico, font=("Arial", 12), height=10, state=tk.DISABLED)
text_historico.pack(pady=10, fill=tk.BOTH, expand=True)
for evento in historico:
atualizar_historico(evento.strip())
atualizar_interface()
janela.mainloop()