import csv import os import requests from paho.mqtt import client as mqtt from constants import solaredge_api_key, solaredge_monitoring_api_url, mqtt_username, mqtt_password, mqtt_broker_ip import logging logger = logging.getLogger() def ensure_dir(file_name): """ Check/create the folder implied by the specified file. If the directory does not exist it will be created. :param file_name: basestring """ d = os.path.dirname(file_name) if not os.path.exists(d): os.makedirs(d) def save_data_to_csv(file_name, data): ensure_dir(file_name) with open(file_name, mode='w', newline='') as file: writer = csv.writer(file) # Kolomkoppen (headers) writer.writerow(['Datum', 'Energie (Wh)', 'Energie (kWh)']) for entry in data: datum = entry['date'] waarde_wh = entry.get('value', 0) if waarde_wh is not None: waarde_kwh = waarde_wh / 1000 writer.writerow([datum, waarde_wh, waarde_kwh]) def get_energy_totals(time_unit, start_date, end_date): params = { 'api_key': solaredge_api_key, 'startDate': start_date, 'endDate': end_date, 'timeUnit': time_unit # Opties: DAY, MONTH, YEAR } response = requests.get(solaredge_monitoring_api_url, params=params) response.raise_for_status() full_json = response.json() # Stap voor stap door de JSON structuur graven energy_obj = full_json.get('energy', {}) values_list = energy_obj.get('values', []) return values_list def connect_mqtt(): c = mqtt.Client() c.username_pw_set(mqtt_username, mqtt_password) try: # Stel in: probeer elke 1 tot 120 seconden opnieuw te verbinden c.reconnect_delay_set(min_delay=1, max_delay=120) c.connect(mqtt_broker_ip, 1883, 60) c.loop_start() # Draait op de achtergrond en regelt de automatische reconnect return c except Exception as e: logger.error(f"MQTT Verbinding mislukt: {e}") return None