def on_PB_connectValve_clicked(self): self.roomDataConfiguration = database_manager.get_roomData_configuration(self.db) actuatorID = self.LE_actuator.text() valveID = self.LE_valve.text() if (actuatorID == "" or valveID == ""): msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "Actuator ID and Valve ID cannot be empty!") msg.setWindowTitle("Error") msg.exec_() return else: # Actuator and Valve ID corretti # Cerca se l'attuatore esiste in actuatorsConfig # L'attuatore deve essere di tipo caldo flag = 0 indexInActuatorList = 0 actualNumActuators = len(self.actuatorsConfiguration["conf"]) for i in range(0, actualNumActuators): if (str(actuatorID).lower() == str(self.actuatorsConfiguration["conf"][i]["actuatorID"]).lower() and self.actuatorsConfiguration["conf"][i]["type"] == "hot"): indexInActuatorList = i flag = 1 break if (flag == 1): # L'ID Attuatore esiste già, ottimo print("ID Actuator found!") if (int(valveID) >= 1 and int(valveID) <= 8): # Cerca se la valvola relativa a questo attuatore non è già stata impegnata free = 1 actualNumValves = len(self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"]) for i in range(0, actualNumValves): if (str(valveID).lower() == str(self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"][i]["valveID"].lower())): free = 0 # questa valvola di questo attuatore è già usata, non posso considerarla msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "This Valve on this actuator is already used!") msg.setWindowTitle("Error") msg.exec_() return if (free == 1): # La valvola per questo attuatore è libera, impegnamola # Prima devo linkare l'attuatore alla stanza # Vediamo prima se non è già stato linkato actualNumActuators = len(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"]) # Faccio un loop su tutti gli attuatori della stanza, se non trovo il mio attuatore vuol dire che non è stato ancora associato alla stanza for i in range(0, actualNumActuators): associatedFlag = 0 if (str(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][i]["actuatorID"]).lower() == str(actuatorID).lower() and str(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][i]["type"]) == "hot"): # L'Actuator è già associato alla stanza corrente, è solo necessario linkare la valvola associatedFlag = 1 indexInActuatorList = i # Poiché l'Actuator è già stato linkato, sappiamo per certo che è stata linkata anche una valvola a suo tempo, # so già per certo che devo fare la append sulla lista delle valvole. # Linkiamo ora la valvola al suo attuatore e alla stanza attuale self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][indexInActuatorList]["valves"].append({"valveID": valveID}) # Aggiungiamo la valvola anche nella lista delle valvole del singolo attuatore # Stessa cosa di prima, basta una append sulla lista delle valvole actualNumValves = len(self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"]) self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"].append({"valveID" : str(valveID)}) # Finito, commit print("\t --> COMMIT actuatorsConfiguration") print("\t --> COMMIT roomDataConfiguration") database_manager.update_actuators_configuration(self.db, self.actuatorsConfiguration) database_manager.update_roomData_configuration(self.db, self.roomDataConfiguration) msg = {"room" : str(self.actualRoomID), "actuator" : str(actuatorID), "valve" : str(valveID)} connection_manager.mqtt_publish(self.mqttClient, "actuator/configuration", str(msg)) msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Information) msg.setInformativeText("Valve connected to actuator!") msg.setWindowTitle("Info") msg.exec_() return if (associatedFlag == 0): # L'actuator non è stato ancora associato alla stanza corrente if (actualNumActuators == 1 and self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][0]["actuatorID"] == ""): # Se è anche il primo actuator ad essere associato alla stanza corrente... self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][0]["actuatorID"] = actuatorID # Linkiamo ora la valvola al suo attuatore e alla stanza attuale actualNumValves = len(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][0]["valves"]) if (actualNumValves == 1 and self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][0]["valves"][0]["valveID"] == ""): self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][0]["valves"][0]["valveID"] = valveID else: self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][actualNumActuators]["valves"].append({"valveID": valveID}) else: # Questo non è il primo actuator che è stato associato alla stanza corrente self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"].append({"actuatorID" : actuatorID, "type": "hot", "valves" : [{"valveID": ""}]}) # Linkiamo ora la valvola al suo attuatore e alla stanza attuale actualNumValves = len(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][actualNumActuators]["valves"]) if (actualNumValves == 1 and self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][actualNumActuators]["valves"][0]["valveID"] == ""): # Se questa è la prima valvola ad essere associata all'actuator corrente self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][actualNumActuators]["valves"][0]["valveID"] = valveID else: # Questa non è la prima valvola associata all'actuator corrente self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][actualNumActuators]["valves"].append({"valveID": valveID}) actualNumValves = len(self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"]) if (actualNumValves == 1 and self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"][0]["valveID"] == ""): self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"][0]["valveID"] = str(valveID) else: self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"].append({"valveID" : str(valveID)}) print("\t --> COMMIT actuatorsConfiguration") print("\t --> COMMIT roomDataConfiguration") database_manager.update_actuators_configuration(self.db, self.actuatorsConfiguration) database_manager.update_roomData_configuration(self.db, self.roomDataConfiguration) msg = {"room": str(self.actualRoomID), "actuator": str(actuatorID), "valve": str(valveID)} connection_manager.mqtt_publish(self.mqttClient, "actuator/configuration", str(msg)) msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Information) msg.setInformativeText( "Valve connected to actuator!") msg.setWindowTitle("Info") msg.exec_() else: # L'ID della valvola non esiste msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "Please insert a valid Valve ID, valid IDs from 0 to 7") msg.setWindowTitle("Error") msg.exec_() return else: # ID dell'attuatore non trovato print("ID actuator not found!") msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "ID Actuator not found!") msg.setWindowTitle("Error") msg.exec_() return
def reloadRoomData(self): self.configuration = database_manager.get_configuration(self.db) self.roomDataConfiguration = database_manager.get_roomData_configuration( self.db)
def on_PB_deleteValve_clicked(self): self.roomDataConfiguration = database_manager.get_roomData_configuration(self.db) actuatorID = self.LE_actuator.text() valveID = self.LE_valve.text() if (actuatorID == "" or valveID == ""): msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "Actuator ID and Valve ID cannot be empty!") msg.setWindowTitle("Error") msg.exec_() return else: # Actuator and Valve ID corretti # Cerca se l'attuatore esiste in actuatorsConfig actuatorFlag = 0 indexInActuatorList = 0 actualNumActuators = len(self.actuatorsConfiguration["conf"]) for i in range(0, actualNumActuators): if (str(actuatorID).lower() == str(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][i]["actuatorID"]).lower() and str(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][i]["type"]) == "hot"): indexInActuatorList = i actuatorFlag = 1 break if (actuatorFlag == 1): # L'attuatore esiste print("ID Actuator found!") if (int(valveID) >= 1 and int(valveID) <= 8): # L'ID della valvola è valido # Cerchiamo la valvola valveFlag = 0 indexInValveList = 0 actualNumValves = len(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][i]["valves"]) for j in range(0, actualNumValves): if (str(valveID).lower() == str(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][i]["valves"][j]["valveID"]).lower()): indexInValveList = j valveFlag = 1 break if (valveFlag == 1): # La valvola è stata trovata # Cancelliamo la valvola, ora non sarà più usata dalla stanza attuale del self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][indexInActuatorList]["valves"][indexInValveList] if (len(self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][indexInActuatorList]["valves"]) == 0): self.roomDataConfiguration["conf"][self.actualRoomIndex]["actuators"][indexInActuatorList]["valves"].append({"valveID": ""}) actuatorFlag = 0 indexInActuatorList = 0 actualNumActuators = len(self.actuatorsConfiguration["conf"]) for i in range(0, actualNumActuators): if (str(actuatorID).lower() == str(self.actuatorsConfiguration["conf"][i]["actuatorID"]).lower() and str(self.actuatorsConfiguration["conf"][i]["type"]) == "hot"): indexInActuatorList = i actuatorFlag = 1 break if (actuatorFlag == 1): del self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"][indexInValveList] if (len(self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"]) == 0): self.actuatorsConfiguration["conf"][indexInActuatorList]["valves"].append({"valveID" : ""}) print("\t --> COMMIT actuatorsConfiguration") print("\t --> COMMIT roomDataConfiguration") database_manager.update_actuators_configuration(self.db, self.actuatorsConfiguration) database_manager.update_roomData_configuration(self.db, self.roomDataConfiguration) else: # La valvola NON è stata trovata msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "Valve not found!") msg.setWindowTitle("Error") msg.exec_() return else: # L'ID della valvola non esiste msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "Please insert a valid Valve ID, valid IDs from 0 to 7") msg.setWindowTitle("Error") msg.exec_() return else: # ID dell'attuatore non trovato print("ID actuator not found!") msg = QtWidgets.QMessageBox() msg.setIcon(QtWidgets.QMessageBox.Critical) msg.setInformativeText( "ID Actuator not found!") msg.setWindowTitle("Error") msg.exec_() return