added full cli package and CI execution
This commit is contained in:
+112
@@ -0,0 +1,112 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user