#!/bin/bash

# Pfade definieren
BASE_DIR="/home/wecker/PiClock/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 adafruit_dht
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 für SCD41 initialisieren
    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
    dht_device = adafruit_dht.DHT11(DHT_PIN)

    # 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)
                try:
                    results["sensors"]["dht11"] = {
                        "temp": dht_device.temperature,
                        "hum": dht_device.humidity
                    }
                except:
                    pass
                
                results["status"] = "ok"
                break
        except Exception:
            pass
        time.sleep(1)

    # Aufräumen
    if scd4x:
        scd4x.stop_periodic_measurement()
    dht_device.exit()
    
    # Das Ergebnis direkt als JSON ausgeben
    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"}'
    exit 1
fi

# Python-Skript ausführen - die Ausgabe erscheint direkt im Terminal
$PYTHON_BIN "$PY_SCRIPT"