Beispiel #1
0
 def __init__(self, public_key, private_key, stream_data=True, show_on_lcd=True):
     self.pi = pigpio.pi()
     self.sensor = DHT22.sensor(self.pi, GPIO_PIN)
     self.last_temperature = 0
     self.last_humidity = 0
     self.base_url = 'https://data.sparkfun.com/input/'
     self.url = self.base_url + public_key + "?private_key=" + private_key
     self.stream_data = stream_data
     self.show_on_lcd = show_on_lcd
     self.lcd_display_manager = LCDDisplayManager()
 def __init__(self, public_key, private_key, stream_data=True, show_on_lcd=True):
     self.pi = pigpio.pi()
     self.sensor = DHT22.sensor(self.pi, GPIO_PIN)
     self.last_temperature = 0
     self.last_humidity = 0
     self.base_url = "https://data.sparkfun.com/input/"
     self.url = self.base_url + public_key + "?private_key=" + private_key
     self.stream_data = stream_data
     self.show_on_lcd = show_on_lcd
     self.lcd_display_manager = LCDDisplayManager()
class DataStreamer:
    def __init__(self, public_key, private_key, stream_data=True, show_on_lcd=True):
        self.pi = pigpio.pi()
        self.sensor = DHT22.sensor(self.pi, GPIO_PIN)
        self.last_temperature = 0
        self.last_humidity = 0
        self.base_url = "https://data.sparkfun.com/input/"
        self.url = self.base_url + public_key + "?private_key=" + private_key
        self.stream_data = stream_data
        self.show_on_lcd = show_on_lcd
        self.lcd_display_manager = LCDDisplayManager()

    def run(self):
        queued_data = []
        while True:
            if len(queued_data) > 0:
                print("Has to resend %s packages" % len(queued_data))
                temp_queued_data = []
                while len(queued_data) > 0:
                    data = queued_data.pop()  # the ones the longest in the list are the oldest ones
                    if not self.do_stream_data(data):  # if not successful, queue it again
                        temp_queued_data.append(data)
                    time.sleep(SPARKFUN_REQUEST_INTERVAL)
                queued_data = temp_queued_data
                print("Managed to reduce the queue size to %s" % len(queued_data))
            data = self.get_data()
            if data["temperature"] != self.last_temperature or data["humidity"] != self.last_humidity:
                if not self.do_stream_data(data):
                    print("Error sending %s, queueing" % data)
                    queued_data.append(data)
                self.backup_data(data)
                self.last_temperature = data["temperature"]
                self.last_humidity = data["humidity"]
                print("Current temperature {}C, humidity {}%".format(data["temperature"], data["humidity"]))
                if self.show_on_lcd:
                    self.lcd_display_manager.display_message(data)
            time.sleep(INTERVAL)

    def get_data(self):
        self.sensor.trigger()
        data = {}
        temperature = round(self.sensor.temperature(), 2)
        if temperature == (-999):
            temperature = self.last_temperature
        data["temperature"] = temperature
        humidity = round(self.sensor.humidity(), 2)
        if humidity == (-999):
            humidity = self.last_humidity
        data["humidity"] = humidity
        return data

    def do_stream_data(self, data):
        if self.stream_data:
            data = urllib.parse.urlencode(data).encode("utf-8")
            request = urllib.request.Request(self.url)
            request.add_header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
            try:
                with urllib.request.urlopen(request, data) as response:
                    print(response.read().decode("utf-8"))
            except urllib.error.URLError as e:
                print("URL Error ", e.reason)
                return False
            except http.client.BadStatusLine as e:
                print("BadStatusLine Error ", e.reason)
                return False
            return True
        return True

    def backup_data(self, data):
        with open(BACKUP_FILE, "a") as csvfile:
            writer = csv.writer(csvfile, delimiter=";")
            writer.writerow([data[x] for x in data.keys()])
Beispiel #4
0
class DataStreamer():
    def __init__(self, public_key, private_key, stream_data=True, show_on_lcd=True):
        self.pi = pigpio.pi()
        self.sensor = DHT22.sensor(self.pi, GPIO_PIN)
        self.last_temperature = 0
        self.last_humidity = 0
        self.base_url = 'https://data.sparkfun.com/input/'
        self.url = self.base_url + public_key + "?private_key=" + private_key
        self.stream_data = stream_data
        self.show_on_lcd = show_on_lcd
        self.lcd_display_manager = LCDDisplayManager()

    def run(self):
        queued_data = []
        while True:
            if len(queued_data) > 0:
                print("Has to resend %s packages" % len(queued_data))
                temp_queued_data = []
                while len(queued_data) > 0:
                    data = queued_data.pop()  # the ones the longest in the list are the oldest ones
                    if not self.do_stream_data(data):  # if not successful, queue it again
                        temp_queued_data.append(data)
                    time.sleep(SPARKFUN_REQUEST_INTERVAL)
                queued_data = temp_queued_data
                print("Managed to reduce the queue size to %s" % len(queued_data))
            data = self.get_data()
            if data['temperature'] != self.last_temperature or data['humidity'] != self.last_humidity:
                if not self.do_stream_data(data):
                    print("Error sending %s, queueing" % data)
                    queued_data.append(data)
                self.backup_data(data)
                self.last_temperature = data['temperature']
                self.last_humidity = data['humidity']
                print("Current temperature {}C, humidity {}%".format(data['temperature'], data['humidity']))
                if self.show_on_lcd:
                    self.lcd_display_manager.display_message(data)
            time.sleep(INTERVAL)

    def get_data(self):
        self.sensor.trigger()
        data = {}
        temperature = round(self.sensor.temperature(), 2)
        if temperature == (-999):
            temperature = self.last_temperature
        data['temperature'] = temperature
        humidity = round(self.sensor.humidity(), 2)
        if humidity == (-999):
            humidity = self.last_humidity
        data['humidity'] = humidity
        return data

    def do_stream_data(self, data):
        if self.stream_data:
            data = urllib.parse.urlencode(data).encode('utf-8')
            request = urllib.request.Request(self.url)
            request.add_header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
            try:
                with urllib.request.urlopen(request, data) as response:
                    print(response.read().decode('utf-8'))
            except urllib.error.URLError as e:
                print("URL Error ", e.reason)
                return False
            except http.client.BadStatusLine as e:
                print("BadStatusLine Error ", e.reason)
                return False
            return True
        return True

    def backup_data(self, data):
        with open(BACKUP_FILE, 'a') as csvfile:
            writer = csv.writer(csvfile, delimiter=";")
            writer.writerow([data[x] for x in data.keys()])