Files
Brian Bjarke Jensen aa6ec36878
Python Code Quality / python-code-quality (push) Successful in 55s
Hourly Energy Data Sync / sync-energy-data (push) Successful in 17s
added full cli package and CI execution
2025-10-27 19:07:25 +01:00

113 lines
3.5 KiB
Python

#!/usr/bin/env python3
"""Example script demonstrating the energy consumption ingester."""
import logging
from typing import Any
# Optional import for development
try:
from dotenv import load_dotenv
_load_dotenv: Any | None = load_dotenv
except ImportError:
_load_dotenv = None
from energy_consumption_ingester import (
EloverblikClient,
DatabaseStorage,
transform_metering_point_data,
transform_consumption_data,
)
def main() -> None:
"""Example usage of the energy consumption ingester."""
# Load environment variables from .env file (if available)
if _load_dotenv is not None:
_load_dotenv()
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
try:
# Initialize the Eloverblik client
logger.info("Initializing Eloverblik client...")
client = EloverblikClient.from_env()
# Initialize database storage
logger.info("Initializing database connection...")
db = DatabaseStorage.from_env()
# Connect to database and create tables
if not db.connect():
logger.error("Failed to connect to database")
return
if not db.create_tables():
logger.error("Failed to create database tables")
return
# Get metering points
logger.info("Fetching metering points...")
metering_points = client.get_metering_points()
if not metering_points:
logger.error("No metering points found")
return
logger.info(f"Found {len(metering_points)} metering points")
# Process the first metering point
mp_data = metering_points[0]
metering_point_id = mp_data["meteringPointId"]
logger.info(f"Processing metering point: {metering_point_id}")
# Transform and store metering point data
transformed_mp = transform_metering_point_data(mp_data)
if db.store_metering_point(transformed_mp):
logger.info("Metering point stored successfully")
# Get consumption data for the last 7 days
logger.info("Fetching consumption data...")
consumption_data = client.get_consumption_data_last_days(
metering_point_id, days=7
)
if consumption_data:
# Transform consumption data
_, readings = transform_consumption_data(consumption_data)
if readings:
# Store consumption readings
if db.store_consumption_readings(metering_point_id, readings):
logger.info(f"Stored {len(readings)} consumption readings")
# Show some statistics
total_consumption = sum(r["consumption_kwh"] for r in readings)
avg_consumption = total_consumption / len(readings)
logger.info(f"Total consumption: {total_consumption:.2f} kWh")
logger.info(
f"Average hourly consumption: {avg_consumption:.3f} kWh"
)
else:
logger.error("Failed to store consumption readings")
else:
logger.warning("No consumption readings to store")
else:
logger.warning("No consumption data retrieved")
except Exception as e:
logger.error(f"Error: {e}")
finally:
# Close database connection
if "db" in locals():
db.close()
logger.info("Database connection closed")
if __name__ == "__main__":
main()