def __init__(self, nom, priorite, etatEffacement, consommationInitiale, consommationOptimisee, conso_max) : self.nom = nom self.numero = 0 self.priorite = priorite self.etatEffacement = etatEffacement self.consommationOptimisee = consommationOptimisee self.consommationInitiale = consommationInitiale #consommation s'il n'y avait pas eu d'effacement self.x = (320 + 480) / 2 self.y = (220 + 380) / 2 self.graphe_affiche = False self.conso_max = conso_max self.jauge = Jauge(self, master, consommationInitiale, consommationOptimisee, conso_max, etatEffacement)
class AppareilAff : def __init__(self, nom, priorite, etatEffacement, consommationInitiale, consommationOptimisee, conso_max) : self.nom = nom self.numero = 0 self.priorite = priorite self.etatEffacement = etatEffacement self.consommationOptimisee = consommationOptimisee self.consommationInitiale = consommationInitiale #consommation s'il n'y avait pas eu d'effacement self.x = (320 + 480) / 2 self.y = (220 + 380) / 2 self.graphe_affiche = False self.conso_max = conso_max self.jauge = Jauge(self, master, consommationInitiale, consommationOptimisee, conso_max, etatEffacement) #Fonction appelee si clic gauche def callback2(self, event) : if self.nom == 'Smart_En_Co' : if self.graphe_affiche : self.cacherAppareils() self.graphe_affiche = False else : self.afficherAppareils() self.graphe_affiche = True else : if self.jauge.affichee : self.jauge.cacher() else : self.jauge.afficher() #Fonctions d'affichage def afficherAppareils(self) : n = len(appareils) self.jauge.cacher() self.jauge.thermometre.cacher() for i in range(n): appareils[i].numero = i + 1 appareils[i].x = (50 + 150) / (2 * np.pi / n) * np.cos(2 * np.pi * i / n) + self.x appareils[i].y = - (50 + 150) / (2 * np.pi / n) * np.sin(2 * np.pi * i / n) + self.y appareils[i].droite = master.create_line((self.x + 80 * np.cos(2 * np.pi * i / n) , self.y - 80 * np.sin(2 * np.pi * i / n)), (appareils[i].x - 50 * np.cos(2 * np.pi * i / n), appareils[i].y + 50 * np.sin(2 * np.pi * i / n)), fill = 'black', width = 5) appareils[i].cercle = master.create_oval((appareils[i].x - 50, appareils[i].y + 50, appareils[i].x + 50, appareils[i].y - 50), fill = change_color('ovale', value = appareils[i].consommationOptimisee, valuemin = 0, valuemax = appareils[i].conso_max), outline = change_color('line', value = appareils[i].priorite / len(appareils), valuemin = 0, valuemax = 1), width = 5, activeoutline = 'grey', tags = appareils[i].nom) appareils[i].titre = Frame(height = 30, width = 70) appareils[i].titre.place(x = appareils[i].x, y = appareils[i].y, anchor = CENTER) appareils[i].titre_text = Label(appareils[i].titre,text=appareils[i].nom,justify=CENTER, bg = master.itemcget(appareils[i].cercle,'fill'), font = "Verdana 10 bold").grid() appareils[i].jauge.afficher() master.tag_bind(appareils[i].nom, '<Button-1>',appareils[i].callback2) def cacherAppareils(self) : for i in range(len(appareils)) : master.delete(appareils[i].cercle) master.delete(appareils[i].droite) appareils[i].titre.destroy() if appareils[i].jauge.affichee : appareils[i].jauge.cacher() self.jauge.afficher() self.jauge.thermometre.afficher() #Mise a jour des objets def miseAJour(self, nature, temperature, matrice, i) : consotot = 0 etat_efftot = 0 if nature == 'algo' : for k in range(len(appareils)) : appareils[k].priorite = recupPriorite(matrice, i, appareils[k].nom) appareils[k].etatEffacement = recupEffacement(matrice, i , appareils[k].nom) appareils[k].jauge.etat_effacement = appareils[k].etatEffacement appareils[k].consommationOptimisee = recupPuissance(matrice, i, appareils[k].nom) appareils[k].jauge.puiss = appareils[k].consommationOptimisee consotot += appareils[k].consommationOptimisee etat_efftot += appareils[k].etatEffacement self.etatEffacement = etat_efftot / len(appareils) self.consommationOptimisee = consotot else : for k in range(len(appareils)) : appareils[k].etatEffacement = donneesFinales[k][i] / conso_max[k] appareils[k].jauge.etat_effacement = appareils[k].etatEffacement appareils[k].consommationOptimisee = donneesFinales[k][i] appareils[k].jauge.puiss = appareils[k].consommationOptimisee consotot += appareils[k].consommationOptimisee etat_efftot += appareils[k].etatEffacement self.etatEffacement = etat_efftot / len(appareils) self.consommationOptimisee = consotot self.temperature = temperature self.jauge.thermometre.temp = temperature #Mise a jour de l'affichage def miseAJourAff(self) : c1 = change_color('ovale', value = self.consommationOptimisee, valuemin = 0, valuemax = 83400) master.itemconfigure(self.cercle, fill = c1) self.titre.destroy() self.titre = Frame(height = 50, width = 150) self.titre.place(x = self.x, y = self.y, anchor = CENTER) self.titre_text = Label(self.titre,text=self.nom,justify=CENTER, bg = master.itemcget(self.cercle,'fill'), font = "Verdana 18 bold").grid() self.jauge.mettre_a_jour(self.consommationOptimisee, 0.3) self.jauge.thermometre.changer_temperature(self.jauge.thermometre.temp) if self.graphe_affiche : for i in range(len(appareils)) : c1 = change_color('ovale', value = appareils[i].consommationOptimisee, valuemin = 0, valuemax = appareils[i].conso_max) master.itemconfigure(appareils[i].cercle, fill = c1, outline = change_color('line', value = appareils[i].priorite / len(appareils), valuemin = 0, valuemax = 1)) appareils[i].titre.destroy() appareils[i].titre = Frame(height = 50, width = 150) appareils[i].titre.place(x = appareils[i].x, y = appareils[i].y, anchor = CENTER) appareils[i].titre_text = Label(appareils[i].titre,text=appareils[i].nom,justify=CENTER, bg = master.itemcget(appareils[i].cercle,'fill'), font = "Verdana 10 bold").grid() appareils[i].jauge.mettre_a_jour(appareils[i].consommationOptimisee, 0.3) #Gestion des instructions utilisateur def evolutionAlgo(self, matrices) : global indiceAlgo global indiceEffTime if indiceAlgo < len(matrices[indiceEffTime]) : self.miseAJour('algo', 0, matrices[indiceEffTime], indiceAlgo) self.miseAJourAff() indiceAlgo += 1 else : self.timer.destroy() self.timer = Frame(height = 50, width = 150) self.timer.place(x = 75, y = 630) self.titre_text = Label(self.timer, text = "fin de l'algorithme", justify=CENTER, font = "Verdana 18 bold").grid() def evolution10min(self, temps, temperatures, donneesFinales, tempsEffacement) : global indice10min global indiceAlgo self.miseAJour('10', temperatures[indice10min], [[[]]], indice10min) self.miseAJourAff() indiceAlgo = 0 self.timer.destroy() self.timer = Frame(height = 50, width = 150) self.timer.place(x = 75, y = 630) self.titre_text = Label(self.timer, text = temps[indice10min].strftime('%a %d %b %Y %H:%M'), justify=CENTER, font = "Verdana 18 bold").grid() indice10min += 1 def evolutionProchainEffacement(self, temps, temperatures, matrices, tempsEffacement) : global indice10min global indiceAlgo global indiceEffTime k = 0 for l in range(indice10min, len(temps), 6) : if tempsEffacement[l][1] != 0 : k = l self.miseAJour('10', temperatures[k], [[[]]], k) self.miseAJourAff() indiceAlgo = 0 indice10min = k indiceEffTime += 1 self.timer.destroy() self.timer = Frame(height = 50, width = 150) self.timer.place(x = 75, y = 630) self.titre_text = Label(self.timer, text = temps[indice10min-1].strftime('%a %d %b %Y %H:%M'), justify=CENTER, font = "Verdana 18 bold").grid() #Initialisation du schema def initialisation(self) : c = master.create_oval((320,220,480,380),fill = change_color('ovale', value = self.consommationOptimisee, valuemin = 0, valuemax = self.conso_max), outline = 'black', width = 5, activeoutline = 'grey', tags = 'Smart_En_Co') self.cercle = c self.titre = Frame(height = 50, width = 150) self.titre.place(x = self.x, y = self.y, anchor = CENTER) self.titre_text = Label(self.titre,text=self.nom,justify=CENTER, bg = master.itemcget(self.cercle,'fill'), font = "Verdana 18 bold").grid() self.jauge._rectangle_fond = self.jauge.canvas.create_rectangle((self.jauge.cercle.x-50,self.jauge.cercle.y+100,self.jauge.cercle.x+45,self.jauge.cercle.y+130), fill = 'white', width =2.0) self.jauge._barre_etat_ini = self.jauge.canvas.create_line((self.jauge.cercle.x-50+70*self.jauge.puiss_ini/self.jauge.puiss_max,self.jauge.cercle.y+100,self.jauge.cercle.x-50+70*self.jauge.puiss_ini/self.jauge.puiss_max,self.jauge.cercle.y+130),width = 3.0,tags = self.jauge.cercle.nom+'i') self.jauge.puissance_actuelle = self.jauge.canvas.create_rectangle((self.jauge.cercle.x-50, self.jauge.cercle.y+100, self.jauge.cercle.x-50+70*self.jauge.puiss/self.jauge.puiss_max, self.jauge.cercle.y+130), fill = 'orange',width = 2.0,tags = self.jauge.cercle.nom+'p') self.jauge.indice_eff = self.jauge.canvas.create_polygon(self.jauge.cercle.x+45+7,self.jauge.cercle.y+100,self.jauge.cercle.x+45+7,self.jauge.cercle.y+130,self.jauge.cercle.x+45+7+30,self.jauge.cercle.y+115, fill = change_color('triangle', brightness = 1-self.etatEffacement), width = 2, outline = 'black',tags = self.jauge.cercle.nom+'e') self.jauge.thermometre = Thermometre(master, 20, 35, 500,220,530,380) self.jauge.thermometre.afficher() self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'e','<Enter>',self.jauge.ouvreinfobulle_e) self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'e','<Leave>',self.jauge.fermeinfobulle) self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'i', '<Enter>',self.jauge.ouvreinfobulle_i) self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'i', '<Leave>',self.jauge.fermeinfobulle) self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'p', '<Enter>',self.jauge.ouvreinfobulle_p) self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'p', '<Leave>',self.jauge.fermeinfobulle) self.jauge.canvas.tag_bind('thermometre', '<Enter>',self.jauge.ouvreinfobulle_t) self.jauge.canvas.tag_bind('thermometre', '<Leave>',self.jauge.fermeinfobulle) master.tag_bind(self.nom,'<Button-2>',self.callback1) master.tag_bind(self.nom,'<Button-3>',self.callback1) master.tag_bind(self.nom,'<Button-1>',self.callback2) self.timer = Frame(height = 50, width = 150) self.timer.place(x = 75, y = 630) self.titre_text = Label(self.timer, text = "Vous pouvez commencer", justify=CENTER, font = "Verdana 18 bold").grid()