class EnergyData { final double pvPower; // Watts - production solaire final double homePower; // Watts - consommation maison final double batteryPower; // Watts - puissance batterie (+ charge, - décharge) final double gridPower; // Watts - réseau (+ injection, - soutif) final double batterySOC; // % - état de charge batterie final double temperature; // °C final String weatherIcon; // Journée final double dayProductionWh; final double daySelfConsumptionWh; final double dayGridInjectionWh; final double selfConsumptionRate; // % final double autonomyRate; // % final double dayGains; // € // Borne de recharge final ChargingMode chargingMode; final double chargingPower; // kW final double solarSourcePercent; // % final bool gridLimitOk; const EnergyData({ this.pvPower = 0, this.homePower = 0, this.batteryPower = 0, this.gridPower = 0, this.batterySOC = 0, this.temperature = 0, this.weatherIcon = 'cloud_snow', this.dayProductionWh = 0, this.daySelfConsumptionWh = 0, this.dayGridInjectionWh = 0, this.selfConsumptionRate = 0, this.autonomyRate = 0, this.dayGains = 0, this.chargingMode = ChargingMode.pv, this.chargingPower = 3.6, this.solarSourcePercent = 82, this.gridLimitOk = true, }); EnergyData copyWith({ double? pvPower, double? homePower, double? batteryPower, double? gridPower, double? batterySOC, double? temperature, String? weatherIcon, double? dayProductionWh, double? daySelfConsumptionWh, double? dayGridInjectionWh, double? selfConsumptionRate, double? autonomyRate, double? dayGains, ChargingMode? chargingMode, double? chargingPower, double? solarSourcePercent, bool? gridLimitOk, }) { return EnergyData( pvPower: pvPower ?? this.pvPower, homePower: homePower ?? this.homePower, batteryPower: batteryPower ?? this.batteryPower, gridPower: gridPower ?? this.gridPower, batterySOC: batterySOC ?? this.batterySOC, temperature: temperature ?? this.temperature, weatherIcon: weatherIcon ?? this.weatherIcon, dayProductionWh: dayProductionWh ?? this.dayProductionWh, daySelfConsumptionWh: daySelfConsumptionWh ?? this.daySelfConsumptionWh, dayGridInjectionWh: dayGridInjectionWh ?? this.dayGridInjectionWh, selfConsumptionRate: selfConsumptionRate ?? this.selfConsumptionRate, autonomyRate: autonomyRate ?? this.autonomyRate, dayGains: dayGains ?? this.dayGains, chargingMode: chargingMode ?? this.chargingMode, chargingPower: chargingPower ?? this.chargingPower, solarSourcePercent: solarSourcePercent ?? this.solarSourcePercent, gridLimitOk: gridLimitOk ?? this.gridLimitOk, ); } } enum ChargingMode { pv, minPv, boost } class HistoryPoint { final DateTime time; final double pvWh; final double homeWh; final double gridWh; final double batteryWh; const HistoryPoint({ required this.time, this.pvWh = 0, this.homeWh = 0, this.gridWh = 0, this.batteryWh = 0, }); }