#!usr/bin/env python3 # -*- coding: utf-8 -*- #benötigte Bibliotheken import os import glob import time import RPi.GPIO as GPIO import mariadb import datetime #benötigte Kernelmodule os.system("modprobe w1-gpio") os.system("modprobe w1-therm") #Variablen definieren FAN_PIN = 13 #Es werden GPIOs angesprochen, nicht Pins PWM_FREQ = 25 # 25kHz ist die Frequenz für die Noctua Lüfter db_user = "wettergott" db_password ="Chilli07" db_host="localhost" db_port = 3306 db_name="wetter" #GPIO-Setup GPIO.setmode(GPIO.BCM) GPIO.setup(FAN_PIN, GPIO.OUT, initial = GPIO.LOW) fan = GPIO.PWM(FAN_PIN, PWM_FREQ) #Pfad zum Sensor angeben bzw. finden lassen base_dir = "/sys/bus/w1/devices/" device_folder = glob.glob(base_dir + "28-e837*")[0] device_file = device_folder + "/w1_slave" #Funktion um die Sensordatei in eine Variable einzulesen def read_sensor(): with open(device_file, "r") as f: sensor_data = f.readlines() return sensor_data #Funktion um die Temperatur aus der Datei auszulesen #Ein return führt zum verlassen der Funktion, aber nicht in einer Schleife!! def read_temperature(): while True: sensor = read_sensor() if sensor[0].strip()[-3:] == "YES": equals_pos = sensor[1].find("t=") if equals_pos != -1: temp_string = sensor[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 return temp_c time.sleep(1) # Funktion zur Steuerung des Lüfters basierend auf der Temperatur def FanControll(temperatur): if temperatur < 20: fan_speed = 0 #print("Lüfter aus") elif 20 <= temperatur < 25: fan_speed = 20 elif 25 <= temperatur < 30: fan_speed = 40 #print("Lüfter 40%") elif 30 <= temperatur < 35: fan_speed = 60 #print("Lüfter 60%") elif 35 <= temperatur < 40: fan_speed = 80 #print("Lüfter 80%") else: fan_speed = 100 #print("Lüfter 100%") fan.start(fan_speed) return fan, fan_speed # Funktion zum Schreiben von Werten in die Datenbank def write_to_database(temperatur, fan_speed): try: # Verbindung zur Datenbank herstellen db = mariadb.connect( user=db_user, password=db_password, host=db_host, port=db_port, database=db_name ) #print("Verbunden") # Cursor erstellen cursor = db.cursor(prepared=True) # SQL-Befehl zum Einfügen von Daten sql_command = """ INSERT INTO hermes4_serverbox (temp,fan_speed) VALUES(%s,%s);""" # Daten für den Eintrag eintrag = (temperatur,fan_speed) # Befehl ausführen und Änderungen speichern cursor.execute(sql_command, eintrag) db.commit() # Cursor und Datenbankverbindung schließen cursor.close() db.close() except mariadb.Error as e: print(f"Error connecting to MariaDB Platform: {e}") #Hauptfunktion def main(): stop = 0 while True: temperatur = round(read_temperature(), 2) time.sleep(3) fan, fan_speed = FanControll(temperatur) #ermitteln der aktuellen Zeit und daraus die Minuten current_time = datetime.datetime.now() minute = current_time.minute if minute in [0,15, 30, 45]: if stop == 0: stop = 1 write_to_database(temperatur, fan_speed) print(f"Temperatur: {temperatur:.2f} °C") print ("fan_speed", fan_speed) else: stop = 0 if __name__ == "__main__": main()