from statistics import mean
import time
import board
import adafruit_dht

dht_sensor = adafruit_dht.DHT11(board.D4)

mincelsius = 100
maxcelsius = -100

minhumidity = 100
maxhumidity = -100

timelist = [-100]
celciuslist = [-100]
humiditylist = [-100]

messtolleranz = 0

def edit_file(temperature, humidity):
    global messtolleranz, mincelsius, maxcelsius, minhumidity, maxhumidity
    if temperature == "None":
        return

    if celciuslist[0] != temperature or humiditylist[0] != humidity:

        if abs((celciuslist[0]-temperature) + (humiditylist[0]-humidity)) >= 2:
            print(f"Messtolleranz Diff: {abs((celciuslist[0]-temperature) + (humiditylist[0]-humidity))}")
        else:
            messtolleranz += 1
            if messtolleranz >= 12:
                print(f"Messtolleranz war bei {messtolleranz} - durchgesetzt")
                messtolleranz = 0
            else:
                print(f"Messtolleranz {messtolleranz}: {temperature} - {humidity}")
                return

        print(f"{format_time()}: Temperatur: {temperature}°C; Luftfeuchtigkeit: {humidity}%")

        if timelist[0] == -100:
            timelist[0] = format_time()
            celciuslist[0] = temperature
            humiditylist[0] = humidity
        else:
            timelist.insert(0, format_time())
            celciuslist.insert(0, temperature)
            humiditylist.insert(0, humidity)

        listmax = 0
        if len(timelist) > listmax and listmax != 0:
            timelist.pop(listmax)
            celciuslist.pop(listmax)
            humiditylist.pop(listmax)

        if len(timelist) > 0:
            s = open("/var/www/html/dht11/script/sensfile.txt", "w")

            mincelsius = min(temperature, mincelsius)
            maxcelsius = max(temperature, maxcelsius)

            minhumidity = min(humidity, minhumidity)
            maxhumidity = max(humidity, maxhumidity)

            s.write(f"Messpunkte: {len(timelist)}\n")
            s.write(f"Kältester Moment: {mincelsius}°C\nWärmster Moment: {maxcelsius}°C\nDurchschnitt: {mean(celciuslist):.0f}°C\n\n")
            s.write(f"Minimum Feuchtigkeit: {minhumidity}%\nMaximale Feuchtigkeit: {maxhumidity}%\nDurchschnitt: {mean(humiditylist):.0f}%\n\n")
            
            for i in range(len(timelist)):
                s.write(f"{timelist[i]}: {celciuslist[i]}°C - {humiditylist[i]}%\n")

            s.close()

    else:
        if messtolleranz > 0:
            print(f"Messtolleranz war bei {messtolleranz} - reset")
            messtolleranz = 0
    


def format_time(mode=0):
    t = time.localtime()
    if mode == 0:
        return time.strftime("%d.%m %H:%M", t)
    elif mode == 1:
        return time.strftime("%H:%M", t)
    


while True:
    try:
        temperature = int(dht_sensor.temperature)
        humidity = dht_sensor.humidity

        edit_file(temperature, humidity)
        time.sleep(30)

    except RuntimeError as e:
        #print(f"{format_time()}: Fehler beim DHT11-Sensors: {e}")
        time.sleep(5)