You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmftools/energie/currentprice.py

77 lines
2.9 KiB

import time
from db import Database
from mqtt_publisher import MQTTPublisher
from logger import setup_logger
from config import get_db_config, get_mqtt_config
from dotenv import load_dotenv
def main():
try:
# Laad de configuratie uit het .env bestand
load_dotenv()
print("Configuratie geladen.")
logger = setup_logger()
logger.debug("Logger ingesteld.")
# Verkrijg de database configuratie
db_config = get_db_config()
logger.debug(f"Database configuratie geladen: {db_config}")
# Verkrijg de MQTT configuratie
mqtt_config = get_mqtt_config()
logger.debug(f"MQTT configuratie geladen: {mqtt_config}")
# Maak een verbinding met de database
db = Database(db_config, logger)
logger.debug(
"db initialiseerd...")
mqtt_publisher = MQTTPublisher(mqtt_config, logger)
logger.debug(
"mqtt_publisher initialiseerd...")
logger.debug(
"Start met het ophalen en publiceren van de elektriciteitsprijs...")
# Periodieke publicatie in een loop (elke 30 minuten)
while True:
# Haal de prijs op uit de database
price = db.fetch_current_price()
if price is not None:
logger.debug(f"Huidige prijs opgehaald: {price} EUR/kWh")
mqtt_publisher.publish(price, mqtt_config['topic_price'])
logger.debug(
f"Prijs gepubliceerd naar MQTT-topic {mqtt_config['topic_price']}: {price}")
else:
logger.warning("Geen prijs gevonden voor het huidige uur.")
total_costs_today = db.fetch_daily_costs()
if total_costs_today is not None:
rounded_costs = round(total_costs_today, 2)
# Afgerond op 2 decimalen en met euroteken
formatted_costs = f"{rounded_costs:.2f}"
logger.debug(f"Huidige kosten voor vandaag: {formatted_costs}")
mqtt_publisher.publish(
formatted_costs, mqtt_config['topic_costs'])
logger.debug(
f"Huidige kosten voor vandaag: {formatted_costs} EUR")
mqtt_publisher.publish(
formatted_costs, mqtt_config['topic_costs'])
logger.debug(
f"Kosten gepubliceerd naar MQTT-topic {mqtt_config['topic_costs']}: {formatted_costs}")
else:
logger.warning("Geen kosten gevonden voor de huidige dag.")
# Wacht 30 minuten (1800 seconden) voor de volgende publicatie
print("Wachten op de volgende publicatie...")
logger.debug("Wachten op de volgende publicatie...")
time.sleep(60)
except Exception as e:
logger.error(f"Fout in main loop: {e}")
exit(1) # Stop de applicatie als er een fout optreedt
if __name__ == "__main__":
main()