def __init__ (self, parent = None):
        super(Form, self).__init__ ()
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        
        #start websocket server
        self.ws = PythonWS()

        self.wsthread = WebSocket()
        self.wsthread.moveToThread(self.wsthread)

        # initialize values to track
        self.count = 0 # value of progress bar
        self.repeats = 0 # stop at 30
        self.temp_f = 0 # Fahrenheit reading
        self.temp_c = 0 # Celsius reading
        self.avgT = 0
        self.avgH = 0
        self.maxT = 0
        self.minT = 0
        self.mode = "F" # choose F or C
        self.ui.switchFC.setText(self.mode)
        self.graph = False # choose true (show graphs) or false (hide graphs)
        self.ui.showHideGraphs.setText("Show Graphs")
        #self.ui.tempGraph.canvas.ax.clear()
        #self.ui.tempGraph.canvas.ax.set_axis_off()
        #self.ui.humGraph.canvas.ax.clear()
        #self.ui.humGraph.canvas.ax.set_axis_off()
        self.hum = 0
        self.maxH = 0
        self.minH = 0
        #indexes for plotting
        self.temp_list = [0] * 10
        self.tempf_list = [0] * 10
        self.hum_list = [0] * 10
        self.idx_list = [0] * 10
        
        for i in range(10):
            self.idx_list[i] = i + 1
        
        self.ui.autoRefresh.setValue(self.count)
        self.timer = QtCore.QBasicTimer()
        self.timerEvent(64) # start timer

        self.scaleTemp()

        self.ui.humSet.setRange(15, 30)
        
        self.updateReadings()
Ejemplo n.º 2
0
class Form(Ui_Form):
    # initialize function: set all tracked variables and start 15 second looped timer
    def __init__(self, parent=None):
        super(Form, self).__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)

        # initialize values to track
        self.count = 0  # value of progress bar
        self.repeats = 0  # stop at 30
        self.temp_f = 0  # Fahrenheit reading
        self.temp_c = 0  # Celsius reading
        self.avgT = 0
        self.avgH = 0
        self.maxT = 0
        self.minT = 0
        self.mode = "F"  # choose F or C
        self.ui.switchFC.setText(self.mode)
        self.graph = False  # choose true (show graphs) or false (hide graphs)
        self.ui.showHideGraphs.setText("Show Graphs")
        #self.ui.tempGraph.canvas.ax.clear()
        #self.ui.tempGraph.canvas.ax.set_axis_off()
        #self.ui.humGraph.canvas.ax.clear()
        #self.ui.humGraph.canvas.ax.set_axis_off()
        self.hum = 0
        self.maxH = 0
        self.minH = 0
        #indexes for plotting
        self.temp_list = [0] * 10
        self.tempf_list = [0] * 10
        self.hum_list = [0] * 10
        self.idx_list = [0] * 10

        for i in range(10):
            self.idx_list[i] = i + 1

        self.ui.autoRefresh.setValue(self.count)
        self.timer = QtCore.QBasicTimer()
        self.timerEvent(64)  # start timer

        self.scaleTemp()

        self.ui.humSet.setRange(15, 30)

        self.updateReadings()

    # rescale temperature sliders after switching F <--> C
    def scaleTemp(self):
        if self.mode == "F":
            self.ui.tempSet.setMin(0)
            self.ui.tempSet.setMax(120)
            self.ui.tempSet.setRange(65, 80)
        elif self.mode == "C":
            self.ui.tempSet.setMin(-10)
            self.ui.tempSet.setMax(50)
            self.ui.tempSet.setRange(20, 25)
        else:
            return

    # take in current reading from sensor: temperature, humidity, datetime
    def sensor(self):
        #        # uncomment if running with actual sensor
        sensor = Adafruit_DHT.DHT22
        pin = 4  # pin 7 on rpi 3 is GPIO 4

        humidity, temperature = Adafruit_DHT.read(
            sensor, pin)  #Changed to read() from read_retry()
        #error case
        if humidity is None or temperature is None:
            self.ui.status.setText('status: Sensor is not working!!!')
            return

        t_f = round((temperature * 9) / 5 + 32)
        #self.temp_f = (temperature*9)/5 + 32.0
        self.temp_c = temperature
        self.hum = humidity
        self.temp_f = (temperature * 9) / 5 + 32.0
        t_f = round((temperature * 9) / 5 + 32)
        unix = int(time.time())
        date = str(
            datetime.datetime.fromtimestamp(unix).strftime(
                '%Y-%m-%d %H:%M:%S'))
        self.ui.status.setText("status: Temperature - " +
                               str(int(self.temp_f)) + "deg F / " +
                               str(int(self.temp_c)) + "deg C || Humidity: " +
                               str(int(self.hum)) + "% || Date/Time: " + date)
        message1 = json.dumps({
            "TemperatureinC": int(temperature),
            "Humidity": str(humidity)
        })
        c.execute(
            "INSERT INTO SENSOR (dateandtime, TEMPERATUREinC,TEMPERATUREinF,HUMIDITY) VALUES (%s, %s, %s, %s)",
            (date, temperature, t_f, humidity))
        mqtt_client.publish("EID_Project3", message1, 0)
        conn.commit()


#        c.close
#        conn.close()

# uncomment if testing without sensor
# humidity = 20
# temperature = 30

# self.currTemp.setText('{0:0.1f} * C '.format(self.temp_c))
# self.currTempinF.setText('{0:0.1f} * F '.format(self.temp_f))
# self.currHum.setText('{0:0.1f} %  '.format(self.hum))

# generate Temperature and Humidity graphs
#    def plot_graph(self):
#        self.ui.tempGraph.plot(self.idx_list, self.temp_list)
#        plt = self.ui.tempGraph.canvas.ax
#
#        #plt.clear()
#        #self.ui.tempGraph.canvas.clear()
#
#        plt.set_xlabel('Latest 10 values')
#
#        if self.mode == "C":
#            plt.set_ylabel('Temperature (Celsius)')
#            plt.set_title('Temperature') #| Average = {0:0.1f} deg C
#            plt.savefig('temp.png')
#        elif self.mode == "F":
#            plt.set_ylabel('Temperature (Fahrenheit)')
#            plt.set_title('Temperature') # | Average = {0:0.1f} deg F.format(self.avgT).format(self.avgT)
#        self.ui.tempGraph.canvas.draw()
#
#        self.ui.humGraph.plot(self.idx_list, self.hum_list)
#        plt2 = self.ui.humGraph.canvas.ax
#        #plt2.clear()
#        #self.ui.humGraph.canvas.clear()
#
#        plt2.set_xlabel('Latest 10 values')
#        plt2.set_ylabel('Humidity (%)')
#        plt2.set_title('Humidity')
#        plt2.savefig('humidity.png')#| Average = {0:0.1f} %.format(self.avgH)
#        self.ui.humGraph.canvas.draw()
#
# pull current reading

    def button_pressed(self):
        self.sensor()
        #self.timerEvent(64) #this needs an argument to work but I'm not sure what is is yet so I just put in some random number

    # show or hide graphs
    def toggleGraphs(self):
        if self.graph == False:
            self.graph = True
            self.ui.showHideGraphs.setText("Hide Graphs")
            self.ui.tempGraph.show()
            self.ui.humGraph.show()
            self.plot_graph()
        elif self.graph == True:
            self.graph = False
            self.ui.showHideGraphs.setText("Show Graphs")
            self.ui.tempGraph.hide()
            self.ui.humGraph.hide()

    # switch between Fahrenheit (F) and Celsius (C)
    def toggleFC(self):
        if self.mode == "C":
            self.mode = "F"
            self.ui.switchFC.setText("F")
        elif self.mode == "F":
            self.mode = "C"
            self.ui.switchFC.setText("C")
        self.scaleTemp()

    # pull current reading and recalculate average
    def updateReadings(self):
        self.sensor()

        self.temp_list.pop(0)
        self.tempf_list.pop(0)
        self.hum_list.pop(0)
        self.tempf_list.append(self.temp_f)

        self.temp_list.append(self.temp_c)

        self.hum_list.append(self.hum)

        # average value calculation
        self.avgT = sum(self.temp_list) / 10
        self.avgH = sum(self.hum_list) / 10
        self.avgTf = sum(self.tempf_list) / 10

        self.updateTemp()
        self.updateHum()

    # update temperature readouts and check if out of bounds
    def updateTemp(self):
        # update temperature limits
        self.maxT = int(self.ui.tempSet.end())
        self.minT = int(self.ui.tempSet.start())

        print("acceptable range: " + str(self.minT) + "-" + str(self.maxT))

        # get latest reading and average
        if self.mode == "F":
            self.ui.currTemp.setProperty("intValue", self.temp_f)
        elif self.mode == "C":
            self.ui.currTemp.setProperty("intValue", self.temp_c)
        else:
            return
        self.ui.avgTemp.setProperty("intValue", self.avgT)

        _currTemp = self.ui.currTemp.intValue()
        _avgTemp = self.ui.avgTemp.intValue()

        # check if current temp ok
        if _currTemp > self.maxT or _currTemp < self.minT:
            print("NO NO NO")
            message = "Temp and Humidity above threshold!!!"
            mqtt_client.publish("EID_Project3", message2, 0)
            self.ui.currTemp.setProperty("alert", True)
        else:
            print("just right")
            self.ui.currTemp.setProperty("alert", False)

        # check if avg temp ok
        if _avgTemp > self.maxT or _avgTemp < self.minT:
            self.ui.avgTemp.setProperty("alert", True)
            message = "Temp and Humidity above threshold!!!"
            #mqtt_client.publish("EID_Project3", message2, 0)
        else:
            self.ui.avgTemp.setProperty("alert", False)

        self.ui.currTemp.setStyle(self.ui.currTemp.style())
        self.ui.avgTemp.setStyle(self.ui.avgTemp.style())

    # update humidity readouts and check if out of bounds
    def updateHum(self):
        #update humidity bounds
        self.minH = self.ui.humSet.start()
        self.maxH = self.ui.humSet.end()
        self.ui.currHum.setProperty("intValue", self.hum)
        self.ui.avgHum.setProperty("intValue", self.avgH)

        #check if current humidity ok
        if self.ui.currHum.intValue() < self.ui.humSet.start():
            self.ui.currHum.setProperty("alert", True)
            message = "Temp and Humidity above threshold!!!"
            mqtt_client.publish("EID_Project3", message2, 0)
        else:
            self.ui.currHum.setProperty("alert", False)

        #check if average humidity ok
        if self.ui.avgHum.intValue() < self.ui.humSet.start():
            self.ui.avgHum.setProperty("alert", True)
            message = "Temp and Humidity above threshold!!!"
            #mqtt_client.publish("EID_Project3", message2, 0)
        else:
            self.ui.avgHum.setProperty("alert", False)

        self.ui.currHum.setStyle(self.ui.currTemp.style())
        self.ui.avgHum.setStyle(self.ui.avgTemp.style())

    # handle timerstart/increment/loop/stop
    def timerEvent(self, e):
        #        self.ui.autoRefresh.setValue(self.count)
        #        if self.count >=15:
        #            self.count = 0
        #            self.repeats += 1
        #            if self.repeats == 29:
        #                self.timer.stop()
        #            self.updateReadings()
        #            self.plot_graph()
        #        else:
        #            if self.timer.isActive():
        #                pass
        #            else:
        #                self.timer.start(1000,self) #10 milliseconds
        #        self.count+=1
        return

    # temperature converting functions
    def FtoC(temp_f):
        return (temp_f - 32) * 5 / 9

    def CtoF(temp_c):
        return temp_c * 9 / 5 + 32
Ejemplo n.º 3
0
 def __init__(self):
     super().__init__()
     self.ui = Ui_Form()  # Class name from bestThermostat.py
     self.ui.setupUi(self)
     self.show()