70 lines
2.1 KiB
Python
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
|