def __init__(self): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) self.dht = DHTUser(22, 4) self.tempUnit = 0 # 0 - Celcius and 1 - Fahrenheit Start with Celcius state ##database object self.db = Database() self.db.start() self.minT = 0 self.maxT = 0 self.minH = 0 self.maxH = 0 self.readingCount = 0 self.ui.todaysDateLabel.setText( datetime.datetime.now().strftime("%d %b, %Y")) self.TempthresholdUpdateEvent() self.HumthresholdUpdateEvent() self.ui.requestDataButton.clicked.connect(self.updateTempHumUI) self.ui.CtempButton.clicked.connect(self.setTempCelcius) self.ui.FtempButton.clicked.connect(self.setTempFahrenheit) self.ui.timerResolutionSpinBox.valueChanged.connect( self.updateTimerEvent) self.ui.startTimerButton.clicked.connect(self.startTimerEvent) self.ui.stopTimerButton.clicked.connect(self.stopTimerEvent) self.ui.stopTimerButton.setEnabled(False) self.ui.CtempButton.setEnabled(False) self.readingsTimer = QtCore.QTimer() self.readingsTimer.timeout.connect(self.timerTickEvent) self.now = 0 self.ui.tempUnitThresholdDisplaySlider.valueChanged.connect( self.TempthresholdUpdateEvent) self.ui.humUnitThresholdDisplaySlider.valueChanged.connect( self.HumthresholdUpdateEvent) self.realTimePlotter = RealTimePlotter() self.tempList = [] self.humList = [] self.ui.staticGraphButton.clicked.connect(self.openStaticGraph) self.ui.clearReadingsButton.clicked.connect(self.clearStoredReadings) self.AWSMQTT = AWSMQTTInterface() self.pushreadingsTimer = QtCore.QTimer() self.pushreadingsTimer.timeout.connect(self.__takeReadings) self.pushreadingsTimer.start(5000) #5sec timer #webserver self.server = DHTWebserver(self.db, True) self.server.start()
def __init__(self): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) self.dht = DHTUser(22, 4) self.tempUnit = 0 # 0 - Celcius and 1 - Fahrenheit Start with Celcius state ##database object self.db = Database() self.db.start() self.minT = 0 self.maxT = 0 self.minH = 0 self.maxH = 0 self.readingCount = 0 self.ui.todaysDateLabel.setText( datetime.datetime.now().strftime("%d %b, %Y")) self.TempthresholdUpdateEvent() self.HumthresholdUpdateEvent() self.ui.requestDataButton.clicked.connect(self.updateTempHumUI) self.ui.CtempButton.clicked.connect(self.setTempCelcius) self.ui.FtempButton.clicked.connect(self.setTempFahrenheit) self.ui.timerResolutionSpinBox.valueChanged.connect( self.updateTimerEvent) self.ui.startTimerButton.clicked.connect(self.startTimerEvent) self.ui.stopTimerButton.clicked.connect(self.stopTimerEvent) self.ui.stopTimerButton.setEnabled(False) self.ui.CtempButton.setEnabled(False) self.readingsTimer = QtCore.QTimer() self.readingsTimer.timeout.connect(self.timerTickEvent) self.now = 0 self.ui.tempUnitThresholdDisplaySlider.valueChanged.connect( self.TempthresholdUpdateEvent) self.ui.humUnitThresholdDisplaySlider.valueChanged.connect( self.HumthresholdUpdateEvent) self.realTimePlotter = RealTimePlotter() self.tempList = [] self.humList = [] self.ui.staticGraphButton.clicked.connect(self.openStaticGraph) self.ui.clearReadingsButton.clicked.connect(self.clearStoredReadings) self.AWSMQTT = AWSMQTTInterface() self.pushreadingsTimer = QtCore.QTimer() self.pushreadingsTimer.timeout.connect(self.__takeReadings) self.pushreadingsTimer.start(5000) #5sec timer #webserver self.server = DHTWebserver(self.db, True) self.server.start() #protocol comparsion objects #mqtt self.mqtt = MQTTWrapper("gunjshreya", "iot.eclipse.org") self.mqtt.subscribe("test/MQTTClient", self.__myMQTTSubCallback) self.wsServer = WebsocketWrapper() self.wsServer.start() self.coapServer = CoAPWrapper() self.protocolThread = threading.Thread(target=self.__startProtocolLoop) self.protocolThread.daemon = True self.protocolThread.start()
class AppWindow(QDialog): def __init__(self): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) self.dht = DHTUser(22, 4) self.tempUnit = 0 # 0 - Celcius and 1 - Fahrenheit Start with Celcius state ##database object self.db = Database() self.db.start() self.minT = 0 self.maxT = 0 self.minH = 0 self.maxH = 0 self.readingCount = 0 self.ui.todaysDateLabel.setText( datetime.datetime.now().strftime("%d %b, %Y")) self.TempthresholdUpdateEvent() self.HumthresholdUpdateEvent() self.ui.requestDataButton.clicked.connect(self.updateTempHumUI) self.ui.CtempButton.clicked.connect(self.setTempCelcius) self.ui.FtempButton.clicked.connect(self.setTempFahrenheit) self.ui.timerResolutionSpinBox.valueChanged.connect( self.updateTimerEvent) self.ui.startTimerButton.clicked.connect(self.startTimerEvent) self.ui.stopTimerButton.clicked.connect(self.stopTimerEvent) self.ui.stopTimerButton.setEnabled(False) self.ui.CtempButton.setEnabled(False) self.readingsTimer = QtCore.QTimer() self.readingsTimer.timeout.connect(self.timerTickEvent) self.now = 0 self.ui.tempUnitThresholdDisplaySlider.valueChanged.connect( self.TempthresholdUpdateEvent) self.ui.humUnitThresholdDisplaySlider.valueChanged.connect( self.HumthresholdUpdateEvent) self.realTimePlotter = RealTimePlotter() self.tempList = [] self.humList = [] self.ui.staticGraphButton.clicked.connect(self.openStaticGraph) self.ui.clearReadingsButton.clicked.connect(self.clearStoredReadings) self.AWSMQTT = AWSMQTTInterface() self.pushreadingsTimer = QtCore.QTimer() self.pushreadingsTimer.timeout.connect(self.__takeReadings) self.pushreadingsTimer.start(5000) #5sec timer #webserver self.server = DHTWebserver(self.db, True) self.server.start() #protocol comparsion objects #mqtt self.mqtt = MQTTWrapper("gunjshreya", "iot.eclipse.org") self.mqtt.subscribe("test/MQTTClient", self.__myMQTTSubCallback) self.wsServer = WebsocketWrapper() self.wsServer.start() self.coapServer = CoAPWrapper() self.protocolThread = threading.Thread(target=self.__startProtocolLoop) self.protocolThread.daemon = True self.protocolThread.start() def __startProtocolLoop(self): self.mqtt.loopStart() self.coapServer.start() def __myMQTTSubCallback(self, mqttObject, client, userdatta, message): print("publishing to MQTTServerEcho") #mqttObject.publish("test/MQTTServerEcho","ECHO-- "+str(message.payload.decode("utf-8"))) mqttObject.publish("test/MQTTServerEcho", message.payload) def __takeReadings(self): humidity, temperature = self.dht.read() if humidity is not None and temperature is not None: self.__setSensorStatus(True) self.updateTempHumUIElem(humidity, temperature) self.updateTempHumExtraUIElem(humidity, temperature) timestamp = datetime.datetime.now().strftime("%x:%X") #humidity = "{0:.2f}".format(humidity) #temperature = "{0:.2f}".format(temperature) self.__updateDBEvent(timestamp, humidity, temperature) self.__awsPushData(timestamp, humidity, temperature) #print ("Get DB:",self.db.getLatestData(1)) else: print("ERROR SENSOR DISCONNECTED") self.__setSensorStatus(False) def __awsPushData(self, timestamp, humidity, temperature): if humidity is not None and temperature is not None: jsonDataPacket = {} jsonDataPacket['timestamp'] = timestamp jsonDataPacket['humidity'] = humidity jsonDataPacket['temperature'] = temperature self.AWSMQTT.publishData(jsonDataPacket) def __updateDBEvent(self, timestamp, humidity, temperature): if humidity is not None and temperature is not None: #data = [datetime.datetime.now().strftime("%x:%X"),"{0:.2f}".format(temperature),"{0:.2f}".format(humidity)] data = [timestamp, round(temperature, 2), round(humidity, 2)] self.db.putData(data) #print ("DB Data:",data) self.__setSensorStatus(True) else: self.__setSensorStatus(False) def openStaticGraph(self): self.realTimePlotter.plotStatic(self.tempList, self.humList) def clearStoredReadings(self): self.tempList.clear() self.humList.clear() def TempthresholdUpdateEvent(self): self.ui.tempValueThresholdDisplayLabel.setText( str(self.ui.tempUnitThresholdDisplaySlider.value())) def HumthresholdUpdateEvent(self): self.ui.humValueThresholdDisplayLabel.setText( str(self.ui.humUnitThresholdDisplaySlider.value())) def startTimerEvent(self): print("Start Timer") self.ui.stopTimerButton.setEnabled(True) self.ui.startTimerButton.setEnabled(False) self.ui.requestDataButton.setEnabled(False) #print ("Timer value:" + str(self.ui.timerResolutionSpinBox.value())) self.now = 0 if self.ui.realtimeGraphTimerCheckbox.isChecked() is True: self.realTimePlotter.startPlotter() self.readingsTimer.start(self.ui.timerResolutionSpinBox.value() * 1000) def timerTickEvent(self): self.now += 1 humidity, temperature = self.dht.read() if humidity is not None and temperature is not None and self.realTimePlotter.isPlotterRunning( ) is True: self.realTimePlotter.putData([humidity, temperature]) def stopTimerEvent(self): print("Stop Timer") self.readingsTimer.stop() if self.realTimePlotter.isPlotterRunning() is True: self.realTimePlotter.stopPlotter() self.ui.stopTimerButton.setEnabled(False) self.ui.startTimerButton.setEnabled(True) self.ui.requestDataButton.setEnabled(True) def updateTimerEvent(self): if self.readingsTimer.isActive() is True: self.readingsTimer.stop() self.now = 0 print("Updated Timer value:" + str(self.ui.timerResolutionSpinBox.value())) self.readingsTimer.start(self.ui.timerResolutionSpinBox.value() * 1000) def setTempCelcius(self): if (self.tempUnit == 1): #if in Fah state self.tempUnit = 0 ##changing back to Celcius state self.updateSensorReadingsUIElement( self.ui.humidityLCD.value(), self.convertTemp(self.ui.temperatureLCD.value(), True)) self.ui.FtempButton.setEnabled(True) self.ui.CtempButton.setEnabled(False) ##updating the threshold related UI elements newTh = self.convertTemp( self.ui.tempUnitThresholdDisplaySlider.value(), True) self.ui.tempUnitThresholdDisplaySlider.setMinimum(-15) self.ui.tempUnitThresholdDisplaySlider.setMaximum(60) self.ui.tempUnitThresholdDisplaySlider.setValue(ceil(newTh)) self.ui.tempValueThresholdDisplayLabel.setText(str(ceil(newTh))) self.ui.tempUnitThresholdDisplayLabel.setText("C") def setTempFahrenheit(self): if self.tempUnit == 0: #if in C state self.tempUnit = 1 ##changing back to Fah state self.updateSensorReadingsUIElement(self.ui.humidityLCD.value(), self.ui.temperatureLCD.value()) self.ui.FtempButton.setEnabled(False) self.ui.CtempButton.setEnabled(True) ##updating the threshold related UI elements newTh = self.convertTemp( self.ui.tempUnitThresholdDisplaySlider.value(), False) self.ui.tempUnitThresholdDisplaySlider.setMinimum(5) self.ui.tempUnitThresholdDisplaySlider.setMaximum(120) self.ui.tempUnitThresholdDisplaySlider.setValue(ceil(newTh)) self.ui.tempValueThresholdDisplayLabel.setText(str(ceil(newTh))) self.ui.tempUnitThresholdDisplayLabel.setText("F") def convertTemp(self, tempVal, toCelcius): if toCelcius == True: return ((tempVal - 32) * (5 / 9)) else: return ((tempVal * (9 / 5)) + 32) def updateSensorReadingsUIElement(self, humidity, temperature): if self.tempUnit == 1: ## we need temp values in F temperature = self.convertTemp(temperature, False) self.ui.temperatureLCD.display("{:.1f}".format(temperature)) self.ui.humidityLCD.display("{:.1f}".format(humidity)) def updateAlarm(self, humidity, temperature): if (self.tempUnit == 1): temperature = self.convertTemp(temperature, False) ##print ("Read: hum {}, temp {} -- th h {} t {}",humidity, temperature, self.ui.humUnitThresholdDisplaySlider.value(), self.ui.tempUnitThresholdDisplaySlider.value()) if (humidity > self.ui.humUnitThresholdDisplaySlider.value()): self.ui.humThresholdAlarm.setStyleSheet( "QLabel { background-color : red; color : white; }") else: self.ui.humThresholdAlarm.setStyleSheet( "QLabel { background-color : none; color : white; }") if (temperature > self.ui.tempUnitThresholdDisplaySlider.value()): self.ui.tempThresholdAlarm.setStyleSheet( "QLabel { background-color : red; color : white; }") else: self.ui.tempThresholdAlarm.setStyleSheet( "QLabel { background-color : none; color : white; }") def __setSensorStatus(self, isConnected=True): if isConnected: self.ui.sensorStatus.setText("Sensor Connected") self.ui.sensorStatus.setStyleSheet( "QLabel { background-color : green; color : white; }") else: self.ui.sensorStatus.setText("Sensor Disconnected") self.ui.sensorStatus.setStyleSheet( "QLabel { background-color : red; color : white; }") def updateTempHumUI(self): print("Request Data") #humidity, temperature = self.dht.read() #self.updateTempHumUIElem(humidity, temperature) #self.updateTempHumExtraUIElem(humidity, temperature) def updateTempHumExtraUIElem(self, humidity, temperature): if temperature is not None and humidity is not None: if self.readingCount is 0: self.minT = temperature self.minH = humidity self.maxT = temperature self.maxH = humidity self.avgT = temperature self.avgH = humidity self.minT = min(self.minT, temperature) self.maxT = max(self.maxT, temperature) self.minH = min(self.minH, humidity) self.maxH = max(self.maxH, humidity) #print ("Count:",self.readingCount," Curr H:",humidity, " Before AVG H:", self.avgH) self.avgT = round( (((self.avgT * self.readingCount) + temperature) / (self.readingCount + 1)), 2) self.avgH = round((((self.avgH * self.readingCount) + humidity) / (self.readingCount + 1)), 2) #print ("Count:",self.readingCount," Curr H:",humidity, " After AVG H:", self.avgH) self.readingCount += 1 if self.tempUnit == 1: ## we need temp values in F self.ui.avgtemperatureLCD.display("{0:.2f}".format( self.convertTemp(self.avgT, False))) self.ui.mintemperatureLCD.display("{0:.2f}".format( self.convertTemp(self.minT, False))) self.ui.maxtemperatureLCD.display("{0:.2f}".format( self.convertTemp(self.maxT, False))) else: self.ui.avgtemperatureLCD.display("{0:.2f}".format(self.avgT)) self.ui.mintemperatureLCD.display("{0:.2f}".format(self.minT)) self.ui.maxtemperatureLCD.display("{0:.2f}".format(self.maxT)) self.ui.avghumidityLCD.display("{0:.2f}".format(self.avgH)) self.ui.minhumidityLCD.display("{0:.2f}".format(self.minH)) self.ui.maxhumidityLCD.display("{0:.2f}".format(self.maxH)) def updateTempHumUIElem(self, humidity, temperature): if humidity is not None and temperature is not None: self.tempList.append(temperature) self.humList.append(humidity) self.updateAlarm(humidity, temperature) self.__setSensorStatus(True) self.updateSensorReadingsUIElement(humidity, temperature) self.ui.lastRequestTime.setText( datetime.datetime.now().strftime("%X")) return humidity, temperature else: self.__setSensorStatus(False) return 0, 0 def closeEvent(self, event): print("Application closing. Cleaning up resources") self.pushreadingsTimer.stop() self.readingsTimer.stop() self.mqtt.disconnect() self.mqtt.loopStop() self.wsServer.stop() self.coapServer.stop() self.server.stop() #self.server.join() self.db.stopThread()
class AppWindow(QDialog): def __init__(self): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) self.dht = DHTUser(22, 4) self.tempUnit = 0 # 0 - Celcius and 1 - Fahrenheit Start with Celcius state self.ui.todaysDateLabel.setText( datetime.datetime.now().strftime("%d %b, %Y")) self.TempthresholdUpdateEvent() self.HumthresholdUpdateEvent() self.ui.requestDataButton.clicked.connect(self.updateTempHumUI) self.ui.CtempButton.clicked.connect(self.setTempCelcius) self.ui.FtempButton.clicked.connect(self.setTempFahrenheit) self.ui.timerResolutionSpinBox.valueChanged.connect( self.updateTimerEvent) self.ui.startTimerButton.clicked.connect(self.startTimerEvent) self.ui.stopTimerButton.clicked.connect(self.stopTimerEvent) self.ui.stopTimerButton.setEnabled(False) self.ui.CtempButton.setEnabled(False) self.readingsTimer = QtCore.QTimer() self.readingsTimer.timeout.connect(self.timerTickEvent) self.now = 0 self.ui.tempUnitThresholdDisplaySlider.valueChanged.connect( self.TempthresholdUpdateEvent) self.ui.humUnitThresholdDisplaySlider.valueChanged.connect( self.HumthresholdUpdateEvent) self.realTimePlotter = RealTimePlotter() self.tempList = [] self.humList = [] self.ui.staticGraphButton.clicked.connect(self.openStaticGraph) self.ui.clearReadingsButton.clicked.connect(self.clearStoredReadings) ##database object self.db = Database() self.db.start() self.dbreadingsTimer = QtCore.QTimer() self.dbreadingsTimer.timeout.connect(self.__updateDBEvent) self.dbreadingsTimer.start(1000) #5sec timer #webserver self.server = DHTWebserver(self.db, True) self.server.start() def __updateDBEvent(self): humidity, temperature = self.dht.read() if humidity is not None and temperature is not None: data = [ datetime.datetime.now().strftime("%x:%X"), temperature, humidity ] self.db.putData(data) #print (data) self.__setSensorStatus(True) else: self.__setSensorStatus(False) def openStaticGraph(self): self.realTimePlotter.plotStatic(self.tempList, self.humList) def clearStoredReadings(self): self.tempList.clear() self.humList.clear() def TempthresholdUpdateEvent(self): self.ui.tempValueThresholdDisplayLabel.setText( str(self.ui.tempUnitThresholdDisplaySlider.value())) def HumthresholdUpdateEvent(self): self.ui.humValueThresholdDisplayLabel.setText( str(self.ui.humUnitThresholdDisplaySlider.value())) def startTimerEvent(self): print("Start Timer") self.ui.stopTimerButton.setEnabled(True) self.ui.startTimerButton.setEnabled(False) self.ui.requestDataButton.setEnabled(False) #print ("Timer value:" + str(self.ui.timerResolutionSpinBox.value())) self.now = 0 if self.ui.realtimeGraphTimerCheckbox.isChecked() is True: self.realTimePlotter.startPlotter() self.readingsTimer.start(self.ui.timerResolutionSpinBox.value() * 1000) def timerTickEvent(self): self.now += 1 humidity, temperature = self.updateTempHumUI() if self.realTimePlotter.isPlotterRunning() is True: self.realTimePlotter.putData([humidity, temperature]) def stopTimerEvent(self): print("Stop Timer") self.readingsTimer.stop() if self.realTimePlotter.isPlotterRunning() is True: self.realTimePlotter.stopPlotter() self.ui.stopTimerButton.setEnabled(False) self.ui.startTimerButton.setEnabled(True) self.ui.requestDataButton.setEnabled(True) def updateTimerEvent(self): if self.readingsTimer.isActive() is True: self.readingsTimer.stop() self.now = 0 print("Updated Timer value:" + str(self.ui.timerResolutionSpinBox.value())) self.readingsTimer.start(self.ui.timerResolutionSpinBox.value() * 1000) def setTempCelcius(self): if (self.tempUnit == 1): #if in Fah state self.tempUnit = 0 ##changing back to Celcius state self.updateSensorReadingsUIElement( self.ui.humidityLCD.value(), self.convertTemp(self.ui.temperatureLCD.value(), True)) self.ui.FtempButton.setEnabled(True) self.ui.CtempButton.setEnabled(False) ##updating the threshold related UI elements newTh = self.convertTemp( self.ui.tempUnitThresholdDisplaySlider.value(), True) self.ui.tempUnitThresholdDisplaySlider.setMinimum(-15) self.ui.tempUnitThresholdDisplaySlider.setMaximum(60) self.ui.tempUnitThresholdDisplaySlider.setValue(ceil(newTh)) self.ui.tempValueThresholdDisplayLabel.setText(str(ceil(newTh))) self.ui.tempUnitThresholdDisplayLabel.setText("C") def setTempFahrenheit(self): if self.tempUnit == 0: #if in C state self.tempUnit = 1 ##changing back to Fah state self.updateSensorReadingsUIElement(self.ui.humidityLCD.value(), self.ui.temperatureLCD.value()) self.ui.FtempButton.setEnabled(False) self.ui.CtempButton.setEnabled(True) ##updating the threshold related UI elements newTh = self.convertTemp( self.ui.tempUnitThresholdDisplaySlider.value(), False) self.ui.tempUnitThresholdDisplaySlider.setMinimum(5) self.ui.tempUnitThresholdDisplaySlider.setMaximum(120) self.ui.tempUnitThresholdDisplaySlider.setValue(ceil(newTh)) self.ui.tempValueThresholdDisplayLabel.setText(str(ceil(newTh))) self.ui.tempUnitThresholdDisplayLabel.setText("F") def convertTemp(self, tempVal, toCelcius): if toCelcius == True: return ((tempVal - 32) * (5 / 9)) else: return ((tempVal * (9 / 5)) + 32) def updateSensorReadingsUIElement(self, humidity, temperature): if self.tempUnit == 1: ## we need temp values in F temperature = self.convertTemp(temperature, False) self.ui.temperatureLCD.display("{:.1f}".format(temperature)) self.ui.humidityLCD.display("{:.1f}".format(humidity)) def updateAlarm(self, humidity, temperature): if (self.tempUnit == 1): temperature = self.convertTemp(temperature, False) ##print ("Read: hum {}, temp {} -- th h {} t {}",humidity, temperature, self.ui.humUnitThresholdDisplaySlider.value(), self.ui.tempUnitThresholdDisplaySlider.value()) if (humidity > self.ui.humUnitThresholdDisplaySlider.value()): self.ui.humThresholdAlarm.setStyleSheet( "QLabel { background-color : red; color : white; }") else: self.ui.humThresholdAlarm.setStyleSheet( "QLabel { background-color : none; color : white; }") if (temperature > self.ui.tempUnitThresholdDisplaySlider.value()): self.ui.tempThresholdAlarm.setStyleSheet( "QLabel { background-color : red; color : white; }") else: self.ui.tempThresholdAlarm.setStyleSheet( "QLabel { background-color : none; color : white; }") def __setSensorStatus(self, isConnected=True): if isConnected: self.ui.sensorStatus.setText("Sensor Connected") self.ui.sensorStatus.setStyleSheet( "QLabel { background-color : green; color : white; }") else: self.ui.sensorStatus.setText("Sensor Disconnected") self.ui.sensorStatus.setStyleSheet( "QLabel { background-color : red; color : white; }") def updateTempHumUI(self): #print ("Request Data") humidity, temperature = self.dht.read() if humidity is not None and temperature is not None: self.tempList.append(temperature) self.humList.append(humidity) self.updateAlarm(humidity, temperature) self.__setSensorStatus(True) self.updateSensorReadingsUIElement(humidity, temperature) self.ui.lastRequestTime.setText( datetime.datetime.now().strftime("%X")) return humidity, temperature else: self.__setSensorStatus(False) return 0, 0 def closeEvent(self, event): print("Application closing. Cleaning up resources") self.dbreadingsTimer.stop() #latestData = self.db.getLatestData(10) #print ("Return data"), #print (latestData) self.server.stop() self.db.stopThread()