#!/bin/bash

# Pfade definieren
BASE_DIR="/var/www/wecker/sensors"
PYTHON_BIN="$BASE_DIR/venv/bin/python3"
PY_SCRIPT="$BASE_DIR/read_sensors.py"

# Sicherstellen, dass das Verzeichnis für das Python-Skript existiert
mkdir -p "$BASE_DIR"

################################################################################
# 1. Das Python-Skript erstellen (wird bei jedem Aufruf aktualisiert)          #
################################################################################
cat << 'EOF' > "$PY_SCRIPT"
import time
import board
import adafruit_scd4x
import json
import sys

# Konfiguration
DHT_PIN = board.D4

def get_data():
    results = {
        "status": "searching",
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "sensors": {}
    }

    # I2C / SCD41 initialisieren
    scd4x = None
    try:
        i2c = board.I2C()
        scd4x = adafruit_scd4x.SCD4X(i2c)
        scd4x.start_periodic_measurement()
    except Exception as e:
        results["sensors"]["scd41"] = {"error": str(e)}
        scd4x = None

    # DHT11 initialisieren (optional – schlägt fehl wenn GPIO nicht verfügbar)
    dht_device = None
    try:
        import adafruit_dht
        dht_device = adafruit_dht.DHT11(DHT_PIN)
    except Exception as e:
        results["sensors"]["dht11"] = {"error": str(e)}

    # Mess-Schleife (max 10 Versuche)
    for _ in range(10):
        try:
            # SCD41 auslesen
            if scd4x and scd4x.data_ready:
                results["sensors"]["scd41"] = {
                    "co2": scd4x.CO2,
                    "temp": round(scd4x.temperature, 1),
                    "hum": round(scd4x.relative_humidity, 1)
                }

                # DHT11 auslesen (optional)
                if dht_device is not None:
                    try:
                        results["sensors"]["dht11"] = {
                            "temp": dht_device.temperature,
                            "hum": dht_device.humidity
                        }
                    except Exception:
                        pass

                results["status"] = "ok"
                break
        except Exception:
            pass
        time.sleep(1)

    # Aufräumen
    try:
        if scd4x:
            scd4x.stop_periodic_measurement()
    except Exception:
        pass
    try:
        if dht_device:
            dht_device.exit()
    except Exception:
        pass

    print(json.dumps(results))

if __name__ == "__main__":
    get_data()
EOF

################################################################################
# 2. Ausführung                                                                #
################################################################################

# Prüfen ob das venv vorhanden ist
if [ ! -f "$PYTHON_BIN" ]; then
    echo '{"status": "error", "message": "venv nicht gefunden: '"$PYTHON_BIN"'"}'
    exit 1
fi

# Python-Skript ausführen
$PYTHON_BIN "$PY_SCRIPT"
