#!/usr/bin/env python3 import argparse import os from pathlib import Path from datetime import datetime import base64 def create_html_dashboard(base_filename: str, charts_dir: str = "charts", output_file: str = None): """ Create an HTML dashboard with all generated charts. Args: base_filename: Base filename used for the data charts_dir: Directory containing chart PNG files output_file: Output HTML file path """ charts_path = Path(charts_dir) if not charts_path.exists(): print(f"Charts directory not found: {charts_path}") return # Chart files to include (in display order) chart_files = [ ("monthly_comparison.png", "Porównanie miesięczne", "Porównanie zużycia energii w poszczególnych miesiącach"), ("cost_analysis_miesięczne.png", "Analiza kosztów - miesięczna", "Koszty i przychody z energii elektrycznej w ujęciu miesięcznym"), ("monthly_hourly_profiles.png", "Profile godzinowe miesięczne", "Średnie godzinowe zużycie energii dla każdego miesiąca"), ("monthly_timeseries.png", "Trend miesięczny", "Miesięczne zużycie energii w czasie"), ("cost_analysis_dzienne.png", "Analiza kosztów - dzienna", "Koszty i przychody z energii elektrycznej w ujęciu dziennym"), ("weekly_timeseries.png", "Trend tygodniowy", "Tygodniowe zużycie energii w czasie"), ("daily_timeseries.png", "Trend dzienny", "Dzienne zużycie energii w czasie"), ("daily_stacked.png", "Obszar skumulowany", "Dzienne zużycie - wykres obszarowy"), ("hourly_timeseries.png", "Dane godzinowe", "Zużycie energii w ciągu dnia (próbka 30 dni)") ] # Encode images to base64 for embedding encoded_images = {} for filename, _, _ in chart_files: chart_path = charts_path / filename if chart_path.exists(): with open(chart_path, 'rb') as f: encoded_images[filename] = base64.b64encode(f.read()).decode('utf-8') # Generate HTML html_content = f""" Raport PGE - Dashboard Energii

🔌 Dashboard Energii PGE

Analiza zużycia energii elektrycznej

📊 Informacje o raporcie

Plik źródłowy: {base_filename}

Data generowania: {datetime.now().strftime('%d/%m/%Y %H:%M')}

Typ analizy: Kompletna analiza czasowa (godzinowa, dzienna, tygodniowa, miesięczna)

🎨 Legenda typów energii

Czynna zbilansowana - Energia netto
Czynna oddana - Energia oddana do sieci
Czynna pobrana - Energia pobrana z sieci
""" # Add charts to HTML for filename, title, description in chart_files: if filename in encoded_images: html_content += f"""

{title}

{description}

{title}
""" html_content += """
""" # Save HTML file if output_file is None: output_file = f"dashboard_{base_filename}.html" output_path = Path(output_file) with open(output_path, 'w', encoding='utf-8') as f: f.write(html_content) print(f"Dashboard saved: {output_path}") return output_path def main(): parser = argparse.ArgumentParser( description="Generate HTML dashboard for PGE energy visualization charts" ) parser.add_argument( "base_filename", help="Base filename used for the data and charts" ) parser.add_argument( "--charts-dir", "-c", default="charts", help="Directory containing chart PNG files (default: 'charts')" ) parser.add_argument( "--output", "-o", help="Output HTML file path (default: dashboard_.html)" ) args = parser.parse_args() try: dashboard_path = create_html_dashboard( base_filename=args.base_filename, charts_dir=args.charts_dir, output_file=args.output ) print(f"\\nDashboard created successfully!") print(f"Open in browser: file://{dashboard_path.absolute()}") except Exception as e: print(f"Error: {e}") return 1 return 0 if __name__ == "__main__": exit(main())