You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.1 KiB
70 lines
2.1 KiB
#!/usr/bin/env python3
|
|
# encoding: utf-8
|
|
|
|
import time
|
|
import configparser
|
|
import logging
|
|
import bme280
|
|
import LCD1602
|
|
try:
|
|
import smbus2
|
|
except ImportError: # Wenn smbus2 nicht zu importieren ist, nehmen wir smbus
|
|
from smbus import SMBus
|
|
import mysql.connector
|
|
|
|
port = 1
|
|
# Der BME280 ist auf Meerehöhe kalibriert, so dass der gelieferte Luftdruck
|
|
# vom tatsächlichen Druck am Ort abweicht. Dies müssen wir hier ausgleichen.
|
|
__luftdruck_kalibrierung__ = 296 # Kalibrierung auf ortsbezogenen Luftdruck
|
|
adresse_bme280 = 0x76
|
|
|
|
logging.basicConfig( format='%(asctime)s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
|
|
|
|
|
|
def info(msg):
|
|
logging.info(msg)
|
|
|
|
def debug(msg):
|
|
logging.debug(msg)
|
|
|
|
def print_weather(temperature, humidity, pressure):
|
|
lcd.setCursor(0, 0)
|
|
lcd.printout('T:{:5.1f}'.format(temperature))
|
|
lcd.printout(' D:{:5.1f}'.format(pressure))
|
|
|
|
lcd.setCursor(0, 1)
|
|
lcd.printout('F:{:5.2f}%'.format(humidity))
|
|
|
|
|
|
# Datenbankverbindung herstellen.
|
|
config = configparser.ConfigParser()
|
|
config.read('db.ini')
|
|
mydb = mysql.connector.connect(host=config['weatherdb']['host'], user=config['weatherdb']['user'],password=config['weatherdb']['password'],database =config['weatherdb']['database'])
|
|
mycursor = mydb.cursor()
|
|
debug('Datenverbindung hergestellt.')
|
|
|
|
#LCD1602 initialisieren
|
|
lcd=LCD1602.LCD1602(16,2)
|
|
|
|
# BME280 initialisieren
|
|
bus = smbus2.SMBus(port)
|
|
calibration_params = bme280.load_calibration_params(bus, adresse_bme280)
|
|
debug(f'Sensor kalibriert. {calibration_params}')
|
|
try:
|
|
while True:
|
|
data = bme280.sample(bus, adresse_bme280, calibration_params)
|
|
temperature = data.temperature
|
|
pressure = data.pressure + __luftdruck_kalibrierung__
|
|
humidity = data.humidity
|
|
info('{:05.2f}°C {:05.2f}hPa {:05.2f}%'.format(temperature, pressure, humidity))
|
|
print_weather(temperature,humidity, pressure)
|
|
sql = 'INSERT into stats (datum,temperature, humidity, pressure) VALUES(now(), %s, %s, %s)'
|
|
val = (temperature, humidity, pressure)
|
|
mycursor.execute(sql, val)
|
|
mydb.commit()
|
|
time.sleep(10)
|
|
except(KeyboardInterrupt):
|
|
mydb.close()
|
|
lcd.clear()
|
|
del lcd
|
|
|
|
|