SolarEdgeService/service_helpers.py

70 lines
2.1 KiB
Python

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, mqtt_broker_ip_linux
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)
mqtt_ip = mqtt_broker_ip if os.name == 'nt' else mqtt_broker_ip_linux
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_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