class MyHouse: # Constructeur def __init__(self): # Mode actuel dans les différentes pièces self.currentMode = {"A": "AUTO", "B": "AUTO", "C": "AUTO", "D": "AUTO"} # Température par défaut des différentes pièces self.defaultTemp = {"A": 18, "B": 18, "C": 18, "D": 18} self.setup_gpio(param.GPIO) self.db = DBManager() # self.i2c = I2CManager() # GPIO configuration def setup_gpio(self, array): GPIO.setmode(GPIO.BCM) # v[0] contains the key # v[1] contains the value for v in array.items(): if isinstance(v[1], dict): self.setup_gpio(v[1]) else: if v[1][0].upper() == "IN": GPIO.setup(v[1][1], GPIO.IN) else: GPIO.setup(v[1][1], GPIO.OUT) # Test si la connexion est activee # Retourne True si internet est activee # Retourne False si non def isInternetOn(self): try: host = socket.gethostbyname("www.google.com") s = socket.create_connection((host, 80), 2) return True except: pass return False # Allume ou eteint le chauffage # room : nom du chauffage # status : True ou False def heat(self, room, status): GPIO.output(param.GPIO["Heating"][room][1], status) # Allume ou eteint la lampe # status : True ou False def setLamp(self, status): GPIO.output(param.GPIO["Lamp"][1], status) # Retourne la temperature d'une pièce def getTemp(self, name): list_room = {"A": 1, "B": 2, "C": 3, "D": 4} temp = 18 # Normalement devrait utiliser l'adc mais fonctionne pas ;( return temp # Sauvegarde la température par défault de la pièce def setDefaultTemp(self, room, temp): self.defaultTemp[room] = temp connection = self.db.getConnection() cursor = connection.cursor() cursor.execute("UPDATE temp_default SET temp_default = %s WHERE room= %s", (temp, room)) cursor.close() # Récupère la température par défaut d'une pièce def getDefaultTemp(self, room): connection = self.db.getConnection() cursor = connection.cursor() cursor.execute("SELECT temp_default FROM temp_default WHERE room = %s", (str(room))) result = cursor.fetchone() requestTemp = result[0] cursor.close() return requestTemp # Permet de récupérer la température pour la chambre à la date donnée def getRequestTemp(self, room, date): connection = self.db.getConnection() cursor = connection.cursor() cursor.execute( "SELECT temp FROM consigne WHERE room = %s AND start_order < %s AND end_order > %s", (str(room), str(date), str(date)), ) result = cursor.fetchone() if result: temp = result[0] cursor.close() return temp connection = self.db.getConnection() cursor = connection.cursor() cursor.execute("SELECT temp_default FROM temp_default WHERE room = %s", (str(room))) result = cursor.fetchone() requestTemp = result[0] print("Request temp :", requestTemp, "in room", room) cursor.close() return requestTemp # Sauvegarde une consigne def setConsigne(self, room, temp, start_timestamp, end_timestamp): self.db.executeUpdate( "INSERT INTO `consigne` (`temp`, `start_order`, `end_order`, `room`) VALUES (%s,%s,%s,%s)", (str(temp), str(start_timestamp), str(end_timestamp), room), ) def setMode(self, room, status): self.currentMode[room] = status # Retourne True ou False si fenetre Ferme ou Ouvert def getWindow(self, name): return GPIO.input(param.GPIO["Windows"][name][1]) # Retourne True ou False si porte Ferme ou Ouvert def getDoor(self, name): return GPIO.input(param.GPIO["Doors"][name][1]) # Régule la maison def regulate(self): date = int(time.time()) # Contient la date du jour requestTempA = self.getRequestTemp("A", date) requestTempB = self.getRequestTemp("B", date) requestTempC = self.getRequestTemp("C", date) requestTempD = self.getRequestTemp("D", date) if self.getTemp("D") > requestTempD or self.getWindow("D"): self.heat("D", False) else: self.heat("D", True) if self.getTemp("B") > requestTempB or self.getWindow("BG") or self.getWindow("BD"): self.heat("B", False) else: self.heat("B", True) if self.getTemp("C") > requestTempC or self.getWindow("C"): self.heat("C", False) else: self.heat("C", True)