Bonjour à tous, j'ai un problème sur l'appelation d'une fonction sur mon script. J'ai des scripts suivante :
- Installation_Definition : Classe principale et les sous_classes des installations solaires :
- InstallationVictron : collecte des données se fait par l'API
- les autres : Meteocontrol, Fronius, et SMA. La collecte des données se fait manuellement puis on la lit , traite et manipuler
- Scripts Report_Generator : est executé avec d'un fichier excel macro.Code:import pandas as pd import numpy as np class SolarInstallation: # Parameters common to all installations def __init__(self, name): self.name = name self.type = None self.data = None self.start = None self.end = None self.month_type = None self.writer = None def load_dates_from_report(self, master_path): """ Charge les dates de début et de fin à partir du fichier Excel maître. """ worksheet_name = self.type try: df = pd.read_excel(master_path, sheet_name=worksheet_name) site_data = df[df.iloc[:, 0] == self.name] if not site_data.empty: self.start = pd.to_datetime(site_data.iloc[:, 5].values[0], format='%d/%m/%Y') self.end = pd.to_datetime(site_data.iloc[:, 6].values[0], format='%d/%m/%Y') else: print(f"Aucune donnée trouvée pour le site {self.name}") except FileNotFoundError: print(f"Fichier maître introuvable à {master_path}") except Exception as e: print(f"Erreur lors du chargement des dates : {e}") # Méthodes à implémenter dans les sous-classes def get_all_data(self, start, end): raise NotImplementedError("Should be implemented by subclasses!") def get_data_previous_month(self): raise NotImplementedError("Should be implemented by subclasses!") def get_data_12_months(self): raise NotImplementedError("Should be implemented by subclasses!") def get_and_analyze_bv_and_sy(self): raise NotImplementedError("Should be implemented by subclasses!") def get_soc(self): raise NotImplementedError("Should be implemented by subclasses!") def get_alarms(self): raise NotImplementedError("Should be implemented by subclasses!") class SolarInstallationMC(SolarInstallation): def __init__(self, name, report_type, data_path, year): super().__init__(name) self.report_type = report_type self.data_path = data_path self.year = year self.type = "meteocontrol" def load_dates_from_report(self, master_path): """ Charge les dates de début et de fin à partir du fichier Excel maître. """ worksheet_name = self.type try: df = pd.read_excel(master_path, sheet_name=worksheet_name) site_data = df[df.iloc[:, 0] == self.name] if not site_data.empty: self.start = pd.to_datetime(site_data.iloc[:, 5].values[0], format='%d/%m/%Y') self.end = pd.to_datetime(site_data.iloc[:, 6].values[0], format='%d/%m/%Y') else: print(f"Aucune donnée trouvée pour le site {self.name}") except FileNotFoundError: print(f"Fichier maître introuvable à {master_path}") except Exception as e: print(f"Erreur lors du chargement des dates : {e}") def get_all_data(self, start=None, end=None): df_month = pd.read_csv(f"{self.data_path}/month_report.csv", encoding='utf-16', sep='\t', skiprows=2, on_bad_lines='skip') df_previous_month = pd.read_csv(f"{self.data_path}/previous_month_report.csv", encoding='utf-16', sep='\t', skiprows=2, on_bad_lines='skip') df_sun = pd.read_csv(f"{self.data_path}/max_production_day.csv", encoding='utf-16', sep='\t', skiprows=2, on_bad_lines='skip') df_conso = pd.read_csv(f"{self.data_path}/max_consumption_day.csv", encoding='utf-16', sep='\t', skiprows=2, on_bad_lines='skip') # Afficher les colonnes pour vérifier leur nom exact print("Colonnes du fichier df_month:", df_month.columns) df_month['Date'] = pd.to_datetime(df_month['Date'], errors='coerce', dayfirst=True) if start is not None and end is not None: start = pd.to_datetime(start) end = pd.to_datetime(end) target_day_sun = df_month[(df_month['Date'] >= start) & (df_month['Date'] <= end)].copy() target_day_conso = df_month[(df_month['Date'] >= start) & (df_month['Date'] <= end)].copy() target_day_sun = target_day_sun.dropna(subset=['Date']) target_day_conso = target_day_conso.dropna(subset=['Date']) # Sélectionner la première date de target_day_sun et convertir en timestamp if not target_day_sun.empty: target_day_sun_date = target_day_sun.iloc[0]['Date'] s_sun = int(target_day_sun_date.timestamp()) e_sun = s_sun + 86400 else: s_sun, e_sun = None, None # Valeurs par défaut si aucune date n'est trouvée # Sélectionner la première date de target_day_conso et convertir en timestamp if not target_day_conso.empty: target_day_conso_date = target_day_conso.iloc[0]['Date'] s_conso = int(target_day_conso_date.timestamp()) e_conso = s_conso + 86400 else: s_conso, e_conso = None, None # Valeurs par défaut si aucune date n'est trouvée else: # Si start et end ne sont pas fournis, retourner les données entières s_sun, e_sun = None, None s_conso, e_conso = None, None # Retourne les valeurs nécessaires pour l'appel dans `write_data_site` return df_sun, df_conso, df_month, target_day_conso, target_day_sun class SolarInstallationFronius(SolarInstallation): def __init__(self, name): super().__init__(name) class SolarInstallationSMA(SolarInstallation): def __init__(self, name): super().__init__(name)
Le problème en ce moment se pose sur l'appelation du fonction get_all_data car les variables sont différent sur l'installation avec API et sans API. Comment résoudre le problème sur cette fonction
Merci d'avance à tousCode:Argument passé à get_report_type: Antana Production, master_path: G:/.shortcut-targets-by-id/12F2rxDjhgWoKdVhzLQxaPsc1FL1nWr9H/17- Technique/3 - SAV/3 - Rapports de production/3 - Outil de rapport/Projet_SAV/#Master_Report Generator.xlsm Type de rapport obtenu : 1m Feuilles disponibles dans le fichier : ['victron energy', 'Fronius', 'SMA', 'meteocontrol'] Valeurs de récapitulatif obtenues pour Antana Production : ['Antana Production', 'Oui', 'Non', 'Non', '1 mois', Timestamp('2024-09-01 00:00:00'), Timestamp('2024-09-30 00:00:00'), 200.2, 440.0, '7 x ECO 27.0-3-S', Timestamp('2022-09-01 00:00:00'), 'JA Solar 455Wp', nan, nan, nan, nan, 431, -18.912, 47.527, 'crystSi', 14, 'building', 35, 0, 2005, 2020, nan, nan, nan] Fichier du rapport cree Aide rapport terminée Colonnes du fichier df_month: Index(['Date', 'Economies GASOIL (l) [l]', 'Economies JIRAMA (kWh) [kWh]', 'Energie consommées totale [kWh]', 'Energie Export JIRAMA [kWh]', 'Energie GE [kWh]', 'Energie Import JIRAMA [kWh]', 'Energie PV directement consommées [kWh]', 'Energie PV totale [kWh]', 'Irradiation [Wh/m²]'], dtype='object') Traceback (most recent call last): File "G:\.shortcut-targets-by-id\12F2rxDjhgWoKdVhzLQxaPsc1FL1nWr9H\17- Technique\3 - SAV\3 - Rapports de production\3 - Outil de rapport\Projet_SAV\Projet_SAV\Scripts\Report_Generation_MC.py", line 87, in <module> main(args.arg) File "G:\.shortcut-targets-by-id\12F2rxDjhgWoKdVhzLQxaPsc1FL1nWr9H\17- Technique\3 - SAV\3 - Rapports de production\3 - Outil de rapport\Projet_SAV\Projet_SAV\Scripts\Report_Generation_MC.py", line 79, in main generate_report(master_path, template_path, result_path, test_installation) File "G:\.shortcut-targets-by-id\12F2rxDjhgWoKdVhzLQxaPsc1FL1nWr9H\17- Technique\3 - SAV\3 - Rapports de production\3 - Outil de rapport\Projet_SAV\Projet_SAV\Report_Generation\Report_Generator.py", line 327, in generate_report fill_data(report_file, recap_values, installation) File "G:\.shortcut-targets-by-id\12F2rxDjhgWoKdVhzLQxaPsc1FL1nWr9H\17- Technique\3 - SAV\3 - Rapports de production\3 - Outil de rapport\Projet_SAV\Projet_SAV\Report_Generation\Report_Generator.py", line 219, in fill_data write_data_site(writer, installation, start, end) File "G:\.shortcut-targets-by-id\12F2rxDjhgWoKdVhzLQxaPsc1FL1nWr9H\17- Technique\3 - SAV\3 - Rapports de production\3 - Outil de rapport\Projet_SAV\Projet_SAV\Report_Generation\Report_Generator.py", line 196, in write_data_site s_sun, e_sun = int(target_day_sun.timestamp()), int(target_day_sun.timestamp()) + 86400 ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\elino\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\generic.py", line 6299, in __getattr__ return object.__getattribute__(self, name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'DataFrame' object has no attribute 'timestamp'. Did you mean: 'to_timestamp'?
-----