Files
momo/app.py
2025-06-09 13:18:00 +02:00

88 lines
1.8 KiB
Python

import sys
import json
import RPi.GPIO as GPIO
from rain_sensor import RainSensor
from temp_sensor import TempSensor
from wind_sensor import WindSensor
from db import log_to_db
def calc_average_temp(sensor_list):
total = 0
count = 0
for sensor in sensor_list:
try:
value = float(sensor.read_data())
total += value
count += 1
except Exception:
continue
return (total / count) if count > 0 else None
GPIO.setmode(GPIO.BCM)
# Konfigration laden
config = None
with open("config.json") as f:
config = json.load(f)
if not config:
sys.exit("Konfigurationsdatei nicht gefunden.")
# Sensoren initialisieren
rain_config = config["rain_sensors"]
temp_config = config["temp_sensors"]
wind_config = config["wind_sensors"]
rain_sensors = []
for entry in rain_config:
sensor = RainSensor(int(entry["pin"]))
rain_sensors.append(sensor)
temp_sensors = []
for entry in temp_config:
sensor = TempSensor(int(entry["pin"]))
temp_sensors.append(sensor)
wind_sensors = []
for entry in wind_config:
sensor = WindSensor(int(entry["pin"]))
wind_sensors.append(sensor)
# Temperatur auslesen und Mittel bestimmen
temp = calc_average_temp(temp_sensors)
rain = None # Logik für die beiden hier noch implementieren, ggf Temp Logik anpassen
wind = None
# Bedingungen für den Actuator
threshold = int(config["temp_threshold"])
roof_should_open = (
# rain == 0 and # falls 0/1 für trocken / nass
# wind < 1 and # ebenso für Wind
temp >= threshold
)
# Actuator
act_pin = int(config["actuator_pin"])
GPIO.setup(act_pin, GPIO.OUT)
if roof_should_open:
GPIO.output(act_pin, GPIO.HIGH)
else:
GPIO.output(act_pin, GPIO.LOW)
# in die DB schreiben
log_to_db(temp, rain, wind, int(roof_should_open))
GPIO.cleanup()