Tutorial de Aurelpere | Catégories : Énergie
Tools for sizing an offgrid photovoltaic installation
Tools for sizing an offgrid photovoltaic installation
photovoltaïque, off-grid, hors-réseau, dimensionnement
Most photovoltaic domestic installations are today
plugged to the grid (erdf/enedis in france), whether
on commercial packs called "surplus injection", or
"total injection".
With old electric meter, it is still possible
to "run backwards" the electric meter when
the pannels produce (a bit like if your smart electric meter like linky in France was subtracting
from your consumption what your pannels produce whatever
the time the production happens)
Being plugged to the electric grid is very useful because it avoids
the need to store the electricity produced.
However, wether it be for societal evolution reasons (let allow us
the right to dream to other urbanistic models where ecological autonomous sites
without needs for infrastructure are encouraged), or for
natural constraints reasons, or by choice, we can wish
to be network independant, 100% autonomous in electric energy.
I have initially made a bit of code for correctly sizing
a mobilhome i wanted to make offgrid,
and connect a fridge and a freezer (which necessitate a
constant power, ie without blackout)
The INES already has these tools here:
http://ines.solaire.free.fr/pvisole_1.php
and here:
https://autocalsol.ines-solaire.org/etude/localisation/
However, the hypothesis are 1kWc produces 1kWh in winter
for the first link et we only have mean average for the second link.
In addition, we do not have possibility to "data-test" the number of days
of blackout based on the sizing chosen.
This tutorial allows therefore to size by "data-testing", ie
with day-to-day winter productions hypothesis,
less "meaned", and allows to test the sizing chosen
less costly in storage capacity (still expensive in 2024).
Considered the number of patents declared in the
electricity storage these past 15 years, and considered
geopolitical evolutions in the brics, it is likely
that we end up with very low elecricity storage costs
in the forthcoming years and the optimizing algorithm
to fine tune sizing at the lower cost storage will probably
be less economically relevant in the years
to come.
But a storage a very low cost would dramatically challenge
the petro dollar system, so we have probably time to see it coming ;)
Any way, used batteries produce quite a few
waste, and that would still be interesting to have this piece of logic
to size more precisely to be in a low tech
perspective and avoiding oversizing when it is possible
to have seldom blackout episodes.
Interactive web demo here:
https://vpn.matangi.dev/sunFirstly we need to estimate your electric consumption
To do that, we need to take into account the correct temporal scales:
mean consumption on the one hand, but also daily variations (consumtion variations
according to day time) and seasonal variations (consumption in winter and in summer for example).
This exercise is not only interesting for sizing adequately the production,
but also to think how to reduce your consumption. For example, it is absurd to heat up
with electric heater if your main source of energy is photovoltaic.
Another example is the water heater that consumes consequent quantities of energy
which are relatively linear to the number of hot showers you take
and that can question the relevant source of energy to heat up your water or the number of showers
adequate for a non fossil production (we can usefully wonder
how to switch to a thermic solar source of energy and /or heat up with wood or biogaz)
NB: for a shower of 10min at 40°C, you approximately need 3kWh, so approximately the biomethane generated daily by 100 hen's poo
(order of magnitude)
To measure your consumption, you can use your electric meter.
Thus, you can measure your daily consumption but alos the horary consumption
of every electrical device (the simpler is to remove the electric fuse of all devices
you dont want to measure)
Offgrid, the path the electrons take after the photovoltaic pannels have made them move is the path that go
to less resistance. Thus, if the electrons must "choose" between a running electric device
and the storage batteries, they will go to power the electric device.
This consideration can be important if you have an electric consumption important by day (when the pannels produce)
but in most cases, the daily production variations and the horary difference between the production and
the consumption imply we size the storage based on the maximul daily need.
Example: daily need of 4kWh
We take the maximum discharge percentage accepted by the batteries based on its storage technology.
For example 80% for lithium ion batteries.
Exemple: (daily needs)/(max discharge percentage)=(4)/(0,8)=5kWh
NB: the battery capacities are often expressed in Ah. To obtain the Ah from the capacity
expressed in kWh, simply divide the Wh by the storage voltage. For example in 24V:
500Wh/24V=208Ah
To size the storage correctly based on the maximum daily need, we will then
seek to know how many days without sun the storage must hold your maximum daily needs
To find the maximum number off days without sun, you can either measure yourself the sunlight (see
my other tutorial here Mesure de l'ensoleillement-luminosité avec un ordinateur monocarte (raspberry-orangepi),
either use the downloadable data from european jrc modelisation pvgis which are the reference data in the industry (warning, it is a modelisation,
Edit 27/02: after verification, the date comes from horary satellites photos, so empirical data as an input in particular for the clouds, but the hypothesis of the model regarding the quantity of sunlight going through the clouds are not very well explicited, see https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/getting-started-pvgis/pvgis-data-sources-calculation-methods_en?prefLang=fr)
To download jrc data, type this command in your linux terminal:
wget --max-redirect=10 -O output.csv "https://re.jrc.ec.europa.eu/api/v5_2/seriescalc?lat=44.203142&lon=0.616363&loss=14&angle=45&aspect=0&startyear=2005&endyear=2020&pvcalculation=1&peakpower=1&pvtechchoice=crystSi&browser=0&outputformat=csv"
The parameters lat= and lon= allow to adjust latitude and longitude
startyear= and endyear= are the time limits of the considered period (here 15 years between 2005 and 2020)
peakpower= corresponds to the photovoltaic power in kWc (here 1kWc)
We then use a piece of python/pandas code to obtain the maximum number of consecutive days for 1kWc to produce respectively 1kWh, 2kWh and 3kWh
import pandas as pd df = pd.read_csv('output.csv', skiprows=10, skipfooter=11, sep=',', engine='python') df['time']=df['time'].astype(str) df['time']=pd.to_datetime(df['time'],format="%Y%m%d:%H%M") df=df.set_index('time') daily_data = df.resample('D').sum() max_streak = 0 current_streak = 0 current_sum=0 target=1000 streaks=[] for value in daily_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("maximum nb of consecutive days for 1kWc to produce 1kWh: "+str(max_streak)+" j") print("nombre d'occurences: "+ str(streaks.count(max_streak))) print("mean nb of consecutive days for 1kWc to produce 1kWh: "+str(sum(streaks)/len(streaks))+" j") max_streak = 0 current_streak = 0 current_sum=0 target=2000 streaks=[] for value in daily_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("maximum nb of consecutive days for 1kWc to produce 2kWh: "+str(max_streak)+" j") print("number of occurences: "+ str(streaks.count(max_streak))) print("mean nb of consecutive days for 1kWc to produce 2kWh: "+str(sum(streaks)/len(streaks))+" j") max_streak = 0 current_streak = 0 current_sum=0 target=3000 streaks=[] for value in daily_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("maximum nb of consecutive days for 1kWc to produce 3kWh: "+str(max_streak)+" j") print("number of occurences: "+ str(streaks.count(max_streak))) print("mean nb of consecutive days for 1kWc to produce 3kWh: "+str(sum(streaks)/len(streaks))+" j")
In our case, we get:
maximum number of consecutive days for 1kWc to produce 1kWh: 4d
number of occurences : 1
mean number of consecutive days for 1kWc to produce 1kWh: 1.1124367317425885d
maximum number of consecutive days for 1kWc to produce 2kWh: 5d
number of occurences : 3
mean number of consecutive days for 1kWc to produce 2kWh: 1.2801404603979711d
maximum number of consecutive days for 1kWc to produce 3kWh: 7d
number of occurences : 1
mean number of consecutive days for 1kWc to produce 3kWh: 1.4647827920708563d
What are these numbers telling us?
That the maximum number of days with a low sunlight vary from 4 to 7d based on the level of sunlight hoped
But alos that the number of occurences are relatively low: 1 to 3 occurences only of these episodes with very few sunlight and production in 15 years.
(if you are not entirely satisfied with the modelised data considered your experience of photovoltai production based on your experience of the weather, and my hypothesis is
that solar pannels produce more that the jrc modelised data give us, i encourage you to
use empirical data using my other tutorial here : Mesure de l'ensoleillement-luminosité avec un ordinateur monocarte (raspberry-orangepi) )
And finally that the mean number of days for 1kWc to produce 1kWh to 3kWh varies from 1 to 1,5d
We then have a choice:
-either oversize the storage to hold 4d needs to face these seldom very low sunlight episodes : 20kWh of batteries for 4kWh needs
-either oversize the storage to hold 1 to 2d to and have a fossil fuel generator on the side: 5 to 10kWh of batteries for 4kWh needs
to avoid a costly oversizing for vey seldom occasions
-either, if criticity of needs is not too high, size the storage to hold 1 to 2d and
cope wihtout electricity when there ar long episodes without sun: 5 to 10kWh of batteries for 4kWh needs
-(or also play on the production side with oversizing production -a produced kWh is much cheaper than a stored kWh in 2024- in the next stage to fully charge the batteries the first day after sunlightless episodes)
We are in may 2024, et we just leave the informal industrial consensus of 1€/Wh for high performance batteries.
If you want to size your storage "at scale" after you have reduced your electric needs, the best
is still to reuse car batteries.
See photos from a lowtech workshop at astrolab for lithium ion car battery reuse.
In may 2024, we can get 14kWh for 3k€ with thise kind of reuse.
It is still difficul to get away with BMS (Battery management system) for security norms,
but we can find some on aliexpress (see photos for references).
We suppose we size the batteries at 10kWh for 4kWh needs -so 2d of autonomy-
We can size production several ways: 1. So as batteries are entirely charged on an mean interval in december/january (sunless months of the year) 2.So as batteries are entirely charged in one sunny mean day in december/january
We notice sizing based on winter months allow to produce enough to provide with electri needs all year long, but imply an overproduction in summer that would be useful to reuse (for example by hyrdolyzing water to produce hydrogen and then transform it in methane, cf scenario negawatt 2011) in particular if this type of installation was to be generalized.
We will reuse the previous piece of code and adapt it to find the same stats as before but only in december and january.
import pandas as pd df = pd.read_csv('output.csv', skiprows=10, skipfooter=11, sep=',', engine='python') df['time']=df['time'].astype(str) df['time']=pd.to_datetime(df['time'],format="%Y%m%d:%H%M") df=df.set_index('time') daily_data = df.resample('D').sum() dec_jan_data = daily_data[(daily_data.index.month == 12) <span>|</span> (daily_data.index.month == 1)] print("Mean daily production in january and december") print(str(dec_jan_data['P'].mean()/1000)+" kWh") max_streak = 0 current_streak = 0 current_sum=0 target=1000 streaks=[] for value in dec_jan_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("maximum nb of consecutive days for 1kWc to produce 1kWh: "+str(max_streak)+" j") print("number of occurences: "+ str(streaks.count(max_streak))) print("mean nb of consecutive days for 1kWc to produce 1kWh: "+str(sum(streaks)/len(streaks))+" j") max_streak = 0 current_streak = 0 current_sum=0 target=2000 streaks=[] for value in dec_jan_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("maximum nb of consecutive days for 1kWc to produce 2kWh: "+str(max_streak)+" j") print("number of occurences: "+ str(streaks.count(max_streak))) print("mean nb of consecutive days for 1kWc to produce 2kWh: "+str(sum(streaks)/len(streaks))+" j") max_streak = 0 current_streak = 0 current_sum=0 target=3000 streaks=[] for value in dec_jan_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("maximum nb of consecutive days for 1kWc to produce 3kWh: "+str(max_streak)+" j") print("number of occurences: "+ str(streaks.count(max_streak))) print("mean nb of consecutive days for 1kWc to produce 3kWh: "+str(sum(streaks)/len(streaks))+" j")
In our case, we get:
Mean daily production in january and december:1.9924362701612903 kWh
Maximum number of consecutive days for 1kWc to produce 1kWh: 4d
number of occurences: 1
mean number of consecutive days for 1kWc to produce 1kWh: 1.3539192399049882d
Maximum number of consecutive days for 1kWc to produce 2kWh: 5d
number of occurences: 3
mean number of consecutive days for 1kWc to produce 2kWh: 1.8022598870056497d
Maximum number of consecutive days for 1kWc to produce 3kWh: 7d
number of occurences: 1
mean number of consecutive days for 1kWc to produce 3kWh: 2.263157894736842d
1. When sizing on the mean 1kWh interval : 1kWc produces on average 1kWh in 1,35d, so 0,74kWh scaled to a 1 day interval, so a sized production of 10kWh/0,74=13,5kWc When sizing on the mean 2kWh interval : 1kWc produces on average 2kWh in 1,8d, so 1,11kWh scaled to a 1 day interval, so a sized production of 10kWh/1,11=9kWc When sizing on the mean 3kWh interval : 1kWc produces on average 3kWh in 2,26d, so 1,33kWh scaled to a 1 day interval, so a sized production of 10kWh/1,33=7,5kWc
2. When sizing on a mean day, 1kWc produces on average 1,99kWh per day, so a production need of 10kWh/1,99=5kWc
We notice that the reference ines data for production of 1kWc in december corresponds to 1kWc===1kWh approximately (https://autocalsol.ines-solaire.org/etude/localisation/ et http://ines.solaire.free.fr/pvisole_1.php pour site isolés)
We can here talk about more or less conservative hypothesis, ie hypothesis more or less "careful", in order for the battries to be always charged in winter. We notice that whatever the hypothesis to satisfy in a continuous way the needs, includin winter, we have overproduction in summer. It is then relavant to use overproduction reuse system in absence of grid in which we can inject the surplus (for example by hyrdolyzing water to produce hydrogen and then transform hydrogen in methane, cf scenario negawatt 2011).
Basics recall: plugging in serie (+ on - and + on -): we add voltage and we keep same amperage plugging in paralell (+ on + and - on -): we add amperage and we keep same voltage
same for batteries: to keep in paralell to keep same voltage
The first problematic for lowtech offgrid photovoltaic is sizing
You can use the libreoffice calc sheet attached in this tutorial to do diy sizing
Previous stages have permitted to compute batty storage size based on jrc data and the average production of 1 kWc in winter
You can read the characteristics of your solar pannels you were give or found on second hand website:
-peak power: they add up to obtain the necessary power found when sizing production
-voltage: 12V, 24V or 48V. See basics recall for additions. You can also make a mixed serie/paralell system to adjust voltage
-amperage: variable according to the models but generally lower than 10A. See basics recall for addition. You can also make mixed serie/paralelle system to adjust
To recharge batteries, in principle, if you connect your pannels directly on a battery, you only need your voltage to be the same as the battery for your pannel charge the battery when producing energy
There is an important device to recall to charge correctly your batteries:
The charging regulator (nb: generally inverter said "hybrid", ie with an output for battery and one output for grid, include a charging regulator, mostly mppt, that conditions the battery types that can be plugged)
3 types exist: TOR (Tout ou rien) MPPT (maximum power point tracking) PWM (Pulse Width Modulation)
They are made of DC/DC adapter (direct current to direct current) and a circuit breaker. The mppt also includes an impedence adapter (resistance to adapt amperage injected into the batteries). The mppt generally accept higher nominal power, ie higher voltage and intensity.
Le régulateur ou controleur de charge permet principalement de couper le circuit quand la batterie est rechargée en surveillant la tension et l'intensité de charge. Il coupe le circuit si leurs valeurs dépassent les intervalles de référence (pour cela le regulateur arrete la charge temporairement et mesure la tension aux bornes des batteries).
Le mppt a un "algorithme" électronique intégré qui va chercher le point de puissance optimal grace a son adaptateur de resistance.
If you connect several pannels and several batteries, it is recommended to have a regulator to stop charging correctly when the battery is fully charged.
The charging voltage of reference are 12V,24V and 48V.
However, the prices of the models get higher when the nominal power they accept gets higher (so it will mainly rely on amperage)
To limit current amperage of the photovoltaic production, it is useful to use pannels with a higher power which are generally at higher voltage.
(recall P=U*I
recall E=P*t keeps equal in a closed system).
note: if the storage system or the device connected to the pannel doesnt absorb all the produced power, and if the regulator doesnt cut the circuit, the rest of energy will be dissipated in heat.
Amperage will also depend on the storage capacity of your batteries, sized to cover your needs during the time periode defined at sizing.
The charge current is calculated by dividing by 4 or 5 the nominal capacity of the battery expressed in Ah, which should then charge in 4 to 5h. However, a battery can recharge with a lower charge current, for example nominal battery capacity divided by 20, so more slowly in 20h.
To size correctly the regulator, we can:
-either mount all the pannels in serie(which will lead to a higher voltage and it might be difficult to find an adequate regulator)
-either mount all the pannels in paralell (which will raise the amperage)
-either mount in serie/paralelle to adjust voltage and amperage to the characteristics of your regulator
There's finaly a last point to be cautious with: the trigger of the battery charge by the regulator (which triggers when the voltage of the battery goes below a treshold)
Indeed, if the power taken from the battery is too low, it is possible that the time necessary to discharge it with your daily consumption to triggers the charge will be longer than the daily sunlight exposure. The battery would then not charge during the day
Dans ce cas, votre batterie ne se rechargera qu'un jour sur deux ou sur trois (selon le seuil de déclenchement de la recharge du regulateur).
This is a parameter to take into account if your consumption is very low
The regulator has 3 phases:
bulk: the regulator lets the current pass
floating: le regulateur alterne interupteur fermée et ouvert à une fréquence donnée pour maintenir la batterie chargée
En outre il faut prendre des précautions car la charge des batteries présente certains risques.
absorption (pour les mppt): la tension de charge augmente un peu pour créer une difference de potentiel suffisante pour continuer à charger la batterie presque pleine.
En théorie le courant de charge diminue lorsque la batterie est presque rechargée (courant de queue etc.)
La charge de batteries en paralelle ou en série sur des batteries usagées qui n'ont pas les mêmes tensions ou intensité présente en théorie des risques. En effet vous lirez un peu partout que la résistance des fils pour relier ces batteries
créee des différences de potentiels entre les batteries qui produisent des décharges d'une batterie envers une autre etc.
créant des risques d'explosion, de degazage pour les batteries plomb etc.
Il faut bien se rapeller que les batteries sont des assemblages de composants unitaires de faible tension mis en séries et en paralelle pour obtenir un générateur de l'intensité et la tension voulue et qu'à priori faire de même avec des batterie entiere ne présente pas vraiment de risques..
On parle souvent de "battery management system" (bms) "intégré" pour les batteries lithium ion.
En réalité le régulateur de charge est déjà un "bms". En théorie, le bms intégré s'assure que les tensions et les intensités de chaque unité composant la batterie est la même et la rééquilibre au besoin.
On peut bien sûr s'interroger si tout ceci n'est pas une façon de rendre le stockage de l'énergie plus cher avec des composants BMS artificiellement chers et si ce n'est pas une façon d'éviter de réutiliser des unités de batteries usagées.
Il est par exemple étonnant qu'il n'existe pas de BMS pour rééquilibrer automatiquement des batteries plomb acide, ce qui rendrait utilisable toutes les batteries mises au rebut de l'industrie automobile pour stocker l'énergie photovoltaïque sans risque!
Dans tous les cas, si vous réutilisez des batteries au plomb, utilisez un régulateur pour éviter de continuer à charger vos batteries rechargées (risques de production d'hydrogene) -ou si vous n'en utilisez pas dimensionnez avec beaucoup de soin-, évitez les décharges profondes, et maintenez les batteries à une temperature constante autant que possible.
On va maintenant utiliser un bout de code python pour itérer (un peu sur le principe d'essais et erreurs) en augmentant progressivement la puissance des modules, la capacité de la batterie, et le nombre de jours de blackout admissibles et en testant au jour le jour le résultat stockage - consommation electrique + production sur les données jrc précédemment téléchargées.
Explications : Le code est commenté pour expliquer ce qui est fait et les noms des variables sont relativement explicites.
Pour la boucle d'itération: On démarre à puissance0=(consommation journaliere)/2 (hypothese hiver 1 kWc produit 2kWh en moyenne) On démarre à batterie0=consommation journaliere/0,8 au lithium et consommation journaliere/0,5 au plomb
On itere 14 fois les puissances par pas de 1/3*puissance0 kWc On itere 40 fois les capacités de batterie par pas de 1/2*batterie0 kWh On itere 20 fois les jours admissibles de blackout par pas de 1j
On demarre à batterie pleine et on teste chaque jour si le stock d'électricité dans la batterie moins la consommation plus la production photovoltaique aboutit à un blackout ou permet de subvenir à la consommation journaliere. S'il y a black out, on arrete la boucle au bout du nombre de jours consécutifs admissibles de black out.
Pré-requis logiciels:
Pour utiliser python sous un autre os que linux, débrouillez vous avec vos daubes propriétaires intrusives.
Sous linux, python est généralement installé et pour utiliser le code partagé dans ce tuto, il suffira de copier coller le code dans un fichier processing.py puis entrer
python processing.py
Cependant, il faut installer la librairie pandas qui est très largement utilisé dans le monde de la finance et dans le monde scientifique, notamment pour sa gestion efficace des séries temporelles et sa capacité de vectorisation des données.
Pour cela voici les commandes à entrer dans linux debian avant de lancer le script processing.py pour être tranquille:
sudo apt install python3 python3-venv python3-pip python-is-python3 cd ~ && python -m venv venv source venv/bin/activate pip install pandas
Penser ensuite à activer l'environnement virtuel dans lequel est installé pandas chaque fois que vous utilisez le script (apres un reboot ou si vous fermez et reouvrez votre terminal) en lançant la commande:
cd ~ && source venv/bin/activate
Nous sommes en 2024 et si vous êtes cibles d'entraves anti éco-terroristes de psychopathes comme moi, et en bon scientifique qui se respecte vous inspectez vos instruments de mesures avant de les utiliser, vous pouvez inspectez le code source de pandas qui est évidemment logiciel libre ici : https://github.com/pandas-dev/pandas , ou vous pouvez faire l'hypothèse discutable qu'on peut avoir confiance dans un logiciel aussi massivement utilisé dans le monde de la finance et de la science.
Python reposant sur des librairies C pour un certains nombres d'opérations de base, le hack, y compris le hack scientifique, n'est jamais impossible mais on laissera de coté ces considérations pro-lowtech qui n'entrent pas dans le champ de réflexion de ce tutoriel.
bout de code: (update 8.4.24: ajout commentaires, input angle&orientation&% decharge batterie)
import pandas as pd import sys import os import math import time # Demander à l'utilisateur d'entrer la latitude et la longitude x_input = input("Entrez la latitude de votre lieux: ") y_input = input("Entrez la longitude de votre lieux: ") # Remplacer les virgules par des points x_input = float(x_input.replace(',', '.')) y_input = float(y_input.replace(',', '.')) #Entrer l'orientation de votre lieu aspect_input=input("Entrer l'orientation de votre lieux (est,ouest,nord,sud)") dictaspect={'est':-90,'ouest':90,'nord':180,'sud':0} if aspect_input in dictaspect: aspect=dictaspect[aspect_input] else: aspect=0 #Entrer l'angle des modules angle_input=input("Entre l'angle des modules en °") try: angle=float(angle_input) except Exception as err: print(f'{err} error, angle utilisé: 45°') angle=45 # Telecharger les données try: os.system(f'wget --max-redirect=10 -O output.csv "https://re.jrc.ec.europa.eu/api/v5_2/seriescalc?lat={x_input}&lon={y_input}&loss=14&angle={angle}&aspect={aspect}&startyear=2005&endyear=2020&pvcalculation=1&peakpower=1&pvtechchoice=crystSi&browser=0&outputformat=csv"') except: print("les données n'ont pas pu être téléchargée, exiting") sys.exit() df = pd.read_csv('output.csv', skiprows=10, skipfooter=11, sep=',', engine='python') df['time']=df['time'].astype(str) df['time']=pd.to_datetime(df['time'],format="%Y%m%d:%H%M") df=df.set_index('time') daily_data = df.resample('D').sum() max_streak = 0 current_streak = 0 current_sum=0 target=1000 streaks=[] for value in daily_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("\n") print("nb de jours consécutifs maximum pour qu'1kWc produise 1kWh: "+str(max_streak)+" j") print("nombre d'occurences: "+ str(streaks.count(max_streak))) print("nb de jours consécutifs moyen pour qu'1kWc produise 1kWh: "+str(sum(streaks)/len(streaks))+" j") max_streak = 0 current_streak = 0 current_sum=0 target=2000 streaks=[] for value in daily_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("\n") print("nb de jours consécutifs maximum pour qu'1kWc produise 2kWh: "+str(max_streak)+" j") print("nombre d'occurences: "+ str(streaks.count(max_streak))) print("nb de jours consécutifs moyen pour qu'1kWc produise 2kWh: "+str(sum(streaks)/len(streaks))+" j") max_streak = 0 current_streak = 0 current_sum=0 target=3000 streaks=[] for value in daily_data['P']: if current_sum <= target: current_sum+=value current_streak += 1 max_streak = max(max_streak, current_streak) else: streaks.append(current_streak) current_sum=0 current_streak=0 print("\n") print("nb de jours consécutifs maximum pour qu'1kWc produise 3kWh: "+str(max_streak)+" j") print("nombre d'occurences: "+ str(streaks.count(max_streak))) print("nb de jours consécutifs moyen pour qu'1kWc produise 3kWh: "+str(sum(streaks)/len(streaks))+" j") daily_data['P']=daily_data['P']/1000 #Production d'un kWh à partir des data jrc: resultday=daily_data['P'].resample('D').sum() resultday.index=pd.to_datetime(resultday.index,format="%Y%m%d") print("\nProduction moyenne par jour (kWh):\n", resultday.mean()) print("Production minimum par jour (kWh):\n", resultday.min()) print("Production maximum par jour (kWh):\n", resultday.max()) # Calculer les sommes de production par semaine resultweek=daily_data['P'].resample('W').sum() # Calculer les sommes de production par mois resultmonth=daily_data['P'].resample('M').sum() # Calculer les sommes de production par trimestre resulttrim=resultday.resample('Q').sum() resulttrim=resulttrim.rename_axis('trimestre') print("\nProduction par trimestre (kWh):\n",resulttrim.to_string()) # Calculer les sommes de production par an resultyear=daily_data['P'].resample('Y').sum() print("\nProduction annuelle moyennes d'1kWc (kWh):\n",resultyear.mean()) # Calculer le nombre de jours consécutifs maximum sans production max_streak = 0 current_streak = 0 for value in resultday: if value == 0: current_streak += 1 max_streak = max(max_streak, current_streak) else: current_streak = 0 # Reset the streak if the value is not zero print(f"\nNombre de jours consecutifs maximum à production 0: {max_streak}") # Moyenne par trimestre pour chaque trimestre moyenne_trimestrielle_par_trimestre = resulttrim.groupby(resulttrim.index.quarter).mean() # Minimum par trimestre pour chaque trimestre min_trimestrielle_par_trimestre = resulttrim.groupby(resulttrim.index.quarter).min() # Maximum par trimestre pour chaque trimestre max_trimestrielle_par_trimestre = resulttrim.groupby(resulttrim.index.quarter).max() # Imprimer les résultats print("\nMoyenne par trimestre pour chaque trimestre (kWh):\n", moyenne_trimestrielle_par_trimestre) print("\nMinimum par trimestre pour chaque trimestre (kWh):\n", min_trimestrielle_par_trimestre) print("\nMaximum par trimestre pour chaque trimestre (kWh):\n", max_trimestrielle_par_trimestre) # Demander à l'utilisateur d'entrer sa consommation d'electricité journaliere inputelecconsoday = input("Entrez la consommation d'électricité journaliere (kWh): ") # Remplacer les virgules par des points inputelecconsoday = float(inputelecconsoday.replace(',', '.')) # Demander à l'utilisateur batterie plomb ou lithium typebatterie = input("Voulez vous utiliser des batteries au plomb? Taper oui ou o pour repondre oui (Lithium par défaut si rien n'est indiqué)") # Dimensionnement batterie initiale pour avoir 24h d'autonomie: if typebatterie=="oui" or typebatterie=="o" or typebatterie=="y" or typebatterie=="yes": batterie0=int(math.ceil(inputelecconsoday/0.5)) typebatterie="plomb" else: batterie0=int(math.ceil(inputelecconsoday/0.8)) typebatterie="lithium" print(f"""Seuil batterie initiale avec hypothèse entrée et données fournies par l'utilisateur (batterie {typebatterie})) hypothese:(conso elec journaliere / 0.8 au lithium et conso elec journaliere / 0.5 au plomb) {batterie0} kWh""") # Pourcentage de décharge maximum d_input=input('Entrer le pourcentage de décharge maximum autorisé (20% si vous voulez que votre batterie ne se décharge pas à moins de 20%. Appuyer sur entree si vous voulez utiliser les valeurs par défaut de 50% pour le plomb et de 0% sinon (hypothese solid state battery)') try: d=float(d_input)/100 except Exception as err: if typebatterie=='plomb': d=0.5 else: d=0 # Demander à l'utilisateur combien de jours sans elec il ou elle peut supporter inputjnoelec = input("Combien de jours maximum consécutifs sans electricité (ou avec un groupe electrogene) pouvez vous supporter (0 par défaut si reponse vide)") try: jnoelec=int(inputjnoelec) except Exception as err: jnoelec=0 print(f"""Nombre de jours maximum consécutifs sans electricité (ou avec un groupe electrogene) pris en hypothèse {jnoelec} j""") # Dimensionnement puissance crete des modules (kWc) initiale pour produire suffisamment en hiver (hypothese 2kWh par kWc par jour): puissance0=int(math.ceil(inputelecconsoday/2)) print(f"""\nSeuil puissance initiale avec hypothèse entrée et données fournies par l'utilisateur hypothèse: conso elec journaliere/2 (2kWh produit par kWc en hiver) {puissance0} kWc""") print(f"""\nSeuil volume de batterie initiale avec hypothèse entrée et données fournies par l'utilisateur hypothèse: conso elec journaliere/0.8 au lithium et 0.5 au plomb {batterie0} kWh""") batterie0_input = input("\n\nSi vous souhaitez corriger la valeur initiale de batterie (kWh) pour les itérations, entrer votre valeur, sinon appuyer sur entree") try: _=float(batterie0_input) batterie0=_ except Exception as err: print(f"\nerreur de type ou valeur utilisateur vide, poursuite avec utilisation de batterie0={batterie0}kWh") puissance0_input = input("\n\nSi vous souhaitez corriger la valeur initiale de puissance (kWc) pour les itérations, entrer votre valeur, sinon appuyer sur entree") try: _=float(puissance0_input) puissance0=_ except Exception as err: print(f"\nerreur de type ou valeur utilisateur vide, poursuite avec utilisation de puissance0={puissance0}kWc") # Itérations algorithmiques stockage&consommation #fonction check surface volume def iter(data,consoelecday,v0,p0,joursnoelec): #elec est l'energie dans la batterie : electricite initiale=v0 (volume de batterie à t0) elec=v0 #current_streak est le nombre de jours de blackout consécutif current_streak = 0 #listjnoelec est la liste dans laquelle on enregistre les jours de blackout listjnoelec=[] #boucle sur la date entrée en argulent de la fonction for i in range(len(data)): #recupday est l'électricite recupérée (produite) au jour i (la puissance d'1kWc*p0) #p0 est la puissance crete entree en argument recupday=data.iloc[i]*p0 #consoday est la consommation electrique du jour i entree en argument de la fonction consoday=consoelecday #energie mise à jour avec consoday et recupday elec=elec+recupday-consoday #si l'énergie mise à jour est superieure au volume de batterie if elec>v0: #print("batterie pleine") #le nombre de jours de balckout consécutif est remis à zero current_streak=0 #l'énergie est égale au volume de la batterie elec=v0 #hypothese gestion du trop plein ok continue #si l'énergie mise à jour est inférieure au pourcentage max de decharge et le nombre de jours consécutifs de blackout est inférieure au nombre de jours toléré elif elec<d*v0 and current_streak<joursnoelec: #si le nombre de jours consécutifs de blackout est égal à zero if current_streak==0: #ajouter la date du jour et un compteur à la liste listjnoelec listjnoelec.append([data.index[i].strftime('%d-%m-%Y'),1]) #sinon else: #incrementer le compteur de la dernier entree de listjnoelec listjnoelec[-1][-1]+=1 #remise à zero de la valeur négative de elec elec=0 #incrementation du nombre de jours consécutifs de blackout current_streak+=1 continue #si l'énergie est inférieure au pourcentage max de decharge et le nombre de jours consécutifs de blackout supérieur au nombre de jours tolérés elif elec<d*v0 and current_streak>=joursnoelec: #la fonction renvoie une valeur nulle return (0,0) #sinon else: #remise à zero du nombre de jours consécutifs de blackout current_streak=0 #variable nombre d'épisode de blackout = longueur de la la liste listjnoelec nb_episode_no_elec=len(listjnoelec) #si listjnoelec n'est pas vide if len(listjnoelec)!=0: #liste des durees des épisodes sans elec list_duree_episode_no_elec=[length[1] for length in listjnoelec] #moyenne de cette liste duree_moy_episode_no_elec=sum(list_duree_episode_no_elec)/len(list_duree_episode_no_elec) #sinon else: #duree moyenne egale à zero duree_moy_episode_no_elec=0 #print("les puissances et batteries permettent de subvenir à la consommation d'electricité sur le dataset") #renvoyer les variables necessaires au traitement des résultats return (v0,p0,joursnoelec,nb_episode_no_elec,duree_moy_episode_no_elec,listjnoelec) #hypothèse récupérateur plein à t0 elec=batterie0 resultpuissancevolume=(batterie0,puissance0,jnoelec,0) #boucle iteration listpuissance0=[puissance0*(1+i*0.33) for i in range(0,999)] listbatterie0=[batterie0*(1+i*0.5) for i in range(0,999)] listresult_0blackout=[] listresult_blackout=[] # increment avec hypothèse jnoelec=0 (k in range 0,1) for i in range(0,14): #boucle iteration surface modules for j in range (0,i+40):#boucle iteration volume batterie for k in range(0,1): resultpuissancevolume=iter(resultday,inputelecconsoday,listbatterie0[j],listpuissance0[i],k) #si les resultats ne sont pas nuls if resultpuissancevolume!=(0,0): #ajouter les resultats à une liste de resultats listresult_0blackout.append(resultpuissancevolume) #arreter la boucle k break else:#sinon continuer continue #arreter la boucle j si les resultats ne sont pas nul if resultpuissancevolume!=(0,0): break else: continue #idem avec increment hypothèse jnoelec entre 0 et 13 (i in range 0,14) for i in range(0,14): for j in range (0,i+40): for k in range(0,21): resultpuissancevolume=iter(resultday,inputelecconsoday,listbatterie0[j],listpuissance0[i],k) if resultpuissancevolume!=(0,0): listresult_blackout.append(resultpuissancevolume) break else: continue if resultpuissancevolume!=(0,0): break else: continue # Affichage des résultats des boucles d'itérations for k in listresult_0blackout: print(f"""avec les données fournies par l'utilisateur, et une batterie de {k[0]}kWh et une puissance crete de {k[1]}kWc, et une hypothèse de {k[2]}j sans elec possible et {k[3]} episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): {k[5]} pour une duree moyenne d'épisode sans elec de {k[4]}j on satisfait aux besoins utilisateurs ({inputelecconsoday}kWh/jour)entrées en hypothèse""") for k in listresult_blackout: print(f"""avec les données fournies par l'utilisateur, et une batterie de {k[0]}kWh et une puissance crete de {k[1]}kWc, et une hypothèse de {k[2]}j sans elec possible et {k[3]} episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): {k[5]} pour une duree moyenne d'épisode sans elec de {k[4]}j on satisfait aux besoins utilisateurs ({inputelecconsoday}kWh/jour)entrées en hypothèse""") print('\n\n\n\n') print('affichage des résultats optimisés') # Optimisation résultats: # premier résultat en incrémentant la puissance crete dont la capacité de batterie est minimale batterie_0blackout=[k[0] for k in listresult_0blackout] minbatterie_0blackout=min(batterie_0blackout) for k in listresult_0blackout: if k[0]==minbatterie_0blackout: print(f"""avec les données fournies par l'utilisateur, et une batterie de {k[0]}kWh et une puissance crete de {k[1]}kWc, et une hypothèse de {k[2]}j sans elec possible et {k[3]} episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): {k[5]} pour une duree moyenne d'épisode sans elec de {k[4]}j on satisfait aux besoins utilisateurs ({inputelecconsoday}kWh/jour)entrées en hypothèse""") break # premier résultat en incrémentant la puissance crete fournissant un nb de jours de blackout inferieur ou égal # à celui entrée par l'utilisateur for k in listresult_blackout: if k[2]<=jnoelec: print(f"""avec les données fournies par l'utilisateur, et une batterie de {k[0]}kWh et une puissance crete de {k[1]}kWc, et une hypothèse de {k[2]}j sans elec possible et {k[3]} episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): {k[5]} pour une duree moyenne d'épisode sans elec de {k[4]}j on satisfait aux besoins utilisateurs ({inputelecconsoday}kWh/jour)entrées en hypothèse""") break
Pour notre exemple, on aboutit aux résultats suivant (avec 1j de blackout authorisé): Les "résultats optimisés sont tout en bas":
Entrez la latitude de votre lieux: 44.2 Entrez la longitude de votre lieux: 0.6 Entrer l'orientation de votre lieux (est,ouest,nord,sud)sud Entre l'angle des modules en °45 --2024-04-08 20:04:29-- https://re.jrc.ec.europa.eu/api/v5_2/seriescalc?lat=44.2&lon=0.6&loss=14&angle=45.0&aspect=0&startyear=2005&endyear=2020&pvcalculation=1&peakpower=1&pvtechchoice=crystSi&browser=0&outputformat=csv Résolution de re.jrc.ec.europa.eu (re.jrc.ec.europa.eu)… 64:ff9b::8bbf:dd12, 139.191.221.18 Connexion à re.jrc.ec.europa.eu (re.jrc.ec.europa.eu)|64:ff9b::8bbf:dd12|:443… connecté. requête HTTP transmise, en attente de la réponse… 200 OK Taille : 6291134 (6,0M) [text/html] Enregistre : «output.csv» output.csv 100%[===================>] 6,00M 1,03MB/s ds 7,2s 2024-04-08 20:04:43 (852 KB/s) - «output.csv» enregistré [6291134/6291134] nb de jours consécutifs maximum pour qu'1kWc produise 1kWh: 4 j nombre d'occurences: 1 nb de jours consécutifs moyen pour qu'1kWc produise 1kWh: 1.1124367317425885 j nb de jours consécutifs maximum pour qu'1kWc produise 2kWh: 5 j nombre d'occurences: 3 nb de jours consécutifs moyen pour qu'1kWc produise 2kWh: 1.2801404603979711 j nb de jours consécutifs maximum pour qu'1kWc produise 3kWh: 7 j nombre d'occurences: 1 nb de jours consécutifs moyen pour qu'1kWc produise 3kWh: 1.4647827920708563 j Production moyenne par jour (kWh): 3.4641937012320336 Production minimum par jour (kWh): 0.0 Production maximum par jour (kWh): 6.65871 Production par trimestre (kWh): trimestre 2005-03-31 270.56038 2005-06-30 375.15833 2005-09-30 399.84068 2005-12-31 227.76775 2006-03-31 247.03158 2006-06-30 406.70165 2006-09-30 389.10805 2006-12-31 233.93622 2007-03-31 229.46528 2007-06-30 348.05120 2007-09-30 390.13982 2007-12-31 250.21269 2008-03-31 250.87365 2008-06-30 347.15819 2008-09-30 385.60970 2008-12-31 202.44585 2009-03-31 286.11329 2009-06-30 350.51328 2009-09-30 397.86835 2009-12-31 237.76417 2010-03-31 270.32507 2010-06-30 366.21454 2010-09-30 394.93503 2010-12-31 236.08537 2011-03-31 271.73968 2011-06-30 400.68298 2011-09-30 374.99079 2011-12-31 255.64396 2012-03-31 294.48135 2012-06-30 344.82346 2012-09-30 394.74104 2012-12-31 217.83773 2013-03-31 259.24581 2013-06-30 323.20427 2013-09-30 402.14528 2013-12-31 228.40704 2014-03-31 268.96648 2014-06-30 385.06742 2014-09-30 388.64375 2014-12-31 252.08195 2015-03-31 242.45034 2015-06-30 402.47347 2015-09-30 400.23336 2015-12-31 273.02084 2016-03-31 248.06779 2016-06-30 354.35530 2016-09-30 411.73628 2016-12-31 224.28598 2017-03-31 267.90392 2017-06-30 410.47864 2017-09-30 363.44330 2017-12-31 251.00240 2018-03-31 231.96132 2018-06-30 362.16785 2018-09-30 426.21631 2018-12-31 219.18595 2019-03-31 313.23495 2019-06-30 368.76834 2019-09-30 407.61175 2019-12-31 201.18704 2020-03-31 283.16855 2020-06-30 389.45566 2020-09-30 395.65480 2020-12-31 240.10074 Freq: Q-DEC Production annuelle moyennes d'1kWc (kWh): 1265.2967493749998 Nombre de jours consecutifs maximum à production 0: 2 Moyenne par trimestre pour chaque trimestre (kWh): trimestre 1 264.724340 2 370.954661 3 395.182393 4 234.435355 Name: P, dtype: float64 Minimum par trimestre pour chaque trimestre (kWh): trimestre 1 229.46528 2 323.20427 3 363.44330 4 201.18704 Name: P, dtype: float64 Maximum par trimestre pour chaque trimestre (kWh): trimestre 1 313.23495 2 410.47864 3 426.21631 4 273.02084 Name: P, dtype: float64 Entrez la consommation d'électricité journaliere (kWh): 4 Voulez vous utiliser des batteries au plomb? Taper oui ou o pour repondre oui (Lithium par défaut si rien n'est indiqué) Seuil batterie initiale avec hypothèse entrée et données fournies par l'utilisateur (batterie lithium)) hypothese:(conso elec journaliere / 0.8 au lithium et conso elec journaliere / 0.5 au plomb) 5 kWh Entrer le pourcentage de décharge maximum autorisé (20% si vous voulez que votre batterie ne se décharge pas à moins de 20%. Appuyer sur entree si vous voulez utiliser les valeurs par défaut de 50% pour le plomb et de 0% sinon (hypothese solid state battery) Combien de jours maximum consécutifs sans electricité (ou avec un groupe electrogene) pouvez vous supporter (0 par défaut si reponse vide)1 Nombre de jours maximum consécutifs sans electricité (ou avec un groupe electrogene) pris en hypothèse 1 j Seuil puissance initiale avec hypothèse entrée et données fournies par l'utilisateur hypothèse: conso elec journaliere/2 (2kWh produit par kWc en hiver) 2 kWc Seuil volume de batterie initiale avec hypothèse entrée et données fournies par l'utilisateur hypothèse: conso elec journaliere/0.8 au lithium et 0.5 au plomb 5 kWh Si vous souhaitez corriger la valeur initiale de batterie (kWh) pour les itérations, entrer votre valeur, sinon appuyer sur entree erreur de type ou valeur utilisateur vide, poursuite avec utilisation de batterie0=5kWh Si vous souhaitez corriger la valeur initiale de puissance (kWc) pour les itérations, entrer votre valeur, sinon appuyer sur entree erreur de type ou valeur utilisateur vide, poursuite avec utilisation de puissance0=2kWc avec les données fournies par l'utilisateur, et une batterie de 75.0kWh et une puissance crete de 2.0kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 22.5kWh et une puissance crete de 2.66kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 17.5kWh et une puissance crete de 3.3200000000000003kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 15.0kWh et une puissance crete de 3.98kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 12.5kWh et une puissance crete de 4.640000000000001kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 12.5kWh et une puissance crete de 5.300000000000001kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 5.96kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 6.62kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 7.28kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 7.94kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 8.600000000000001kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 9.260000000000002kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 9.92kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 10.58kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene) entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 2.0kWc, et une hypothèse de 10j sans elec possible et 185 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['14-01-2005', 1], ['19-01-2005', 3], ['23-01-2005', 2], ['01-02-2005', 1], ['11-02-2005', 3], ['17-11-2005', 1], ['26-11-2005', 3], ['02-12-2005', 1], ['04-12-2005', 2], ['07-12-2005', 2], ['12-12-2005', 6], ['22-12-2005', 2], ['25-12-2005', 3], ['31-12-2005', 2], ['03-01-2006', 10], ['18-01-2006', 4], ['29-01-2006', 7], ['23-02-2006', 1], ['09-03-2006', 2], ['21-11-2006', 2], ['25-11-2006', 2], ['28-11-2006', 1], ['30-11-2006', 5], ['08-12-2006', 3], ['20-12-2006', 7], ['08-01-2007', 1], ['20-01-2007', 4], ['30-01-2007', 4], ['06-02-2007', 3], ['08-10-2007', 1], ['10-10-2007', 1], ['01-12-2007', 1], ['07-12-2007', 3], ['15-12-2007', 1], ['25-12-2007', 5], ['01-01-2008', 3], ['05-01-2008', 5], ['11-01-2008', 1], ['18-01-2008', 2], ['22-01-2008', 2], ['30-01-2008', 1], ['01-02-2008', 1], ['07-03-2008', 1], ['11-03-2008', 2], ['17-05-2008', 2], ['28-10-2008', 1], ['30-10-2008', 2], ['02-11-2008', 2], ['06-11-2008', 2], ['15-11-2008', 9], ['30-11-2008', 2], ['03-12-2008', 2], ['12-12-2008', 9], ['25-12-2008', 2], ['04-01-2009', 9], ['14-01-2009', 1], ['23-01-2009', 2], ['19-04-2009', 2], ['16-08-2009', 1], ['11-11-2009', 1], ['02-12-2009', 1], ['04-12-2009', 1], ['06-12-2009', 3], ['14-12-2009', 3], ['23-12-2009', 2], ['28-12-2009', 2], ['04-01-2010', 4], ['09-01-2010', 4], ['14-01-2010', 1], ['16-01-2010', 2], ['05-05-2010', 2], ['01-11-2010', 1], ['04-11-2010', 3], ['08-11-2010', 5], ['25-11-2010', 1], ['28-11-2010', 1], ['02-12-2010', 2], ['17-12-2010', 2], ['22-12-2010', 3], ['07-01-2011', 3], ['13-01-2011', 3], ['31-01-2011', 2], ['04-02-2011', 1], ['23-02-2011', 4], ['02-03-2011', 2], ['29-10-2011', 1], ['05-11-2011', 4], ['25-11-2011', 4], ['04-12-2011', 5], ['14-12-2011', 3], ['21-12-2011', 3], ['13-01-2012', 3], ['23-01-2012', 1], ['08-02-2012', 1], ['15-02-2012', 1], ['20-10-2012', 2], ['06-11-2012', 1], ['20-11-2012', 4], ['25-11-2012', 5], ['14-12-2012', 1], ['22-12-2012', 1], ['05-01-2013', 6], ['19-01-2013', 1], ['22-01-2013', 1], ['26-01-2013', 2], ['08-11-2013', 1], ['10-11-2013', 1], ['15-11-2013', 1], ['17-11-2013', 3], ['23-11-2013', 3], ['03-12-2013', 4], ['25-01-2014', 3], ['01-02-2014', 1], ['15-02-2014', 1], ['24-11-2014', 3], ['01-12-2014', 3], ['06-12-2014', 1], ['13-12-2014', 8], ['24-12-2014', 2], ['27-12-2014', 2], ['03-01-2015', 4], ['10-01-2015', 1], ['24-01-2015', 1], ['29-01-2015', 2], ['03-03-2015', 1], ['12-11-2015', 5], ['19-11-2015', 1], ['26-11-2015', 1], ['04-12-2015', 2], ['03-01-2016', 8], ['21-01-2016', 3], ['01-02-2016', 2], ['16-10-2016', 2], ['05-11-2016', 1], ['18-11-2016', 1], ['22-11-2016', 4], ['20-12-2016', 1], ['24-12-2016', 3], ['30-12-2016', 6], ['11-01-2017', 2], ['06-12-2017', 3], ['10-12-2017', 2], ['13-12-2017', 6], ['22-12-2017', 4], ['28-12-2017', 3], ['03-01-2018', 5], ['14-01-2018', 3], ['20-01-2018', 4], ['30-01-2018', 2], ['05-02-2018', 2], ['08-02-2018', 1], ['20-02-2018', 1], ['28-03-2018', 1], ['28-10-2018', 2], ['02-11-2018', 1], ['09-11-2018', 2], ['04-12-2018', 1], ['09-12-2018', 1], ['13-12-2018', 4], ['21-12-2018', 5], ['29-12-2018', 4], ['08-01-2019', 1], ['13-01-2019', 2], ['22-01-2019', 1], ['30-01-2019', 2], ['23-10-2019', 2], ['02-11-2019', 1], ['04-11-2019', 5], ['16-11-2019', 3], ['01-12-2019', 2], ['07-12-2019', 3], ['12-12-2019', 3], ['23-12-2019', 3], ['04-01-2020', 2], ['29-02-2020', 1], ['04-03-2020', 2], ['23-04-2020', 1], ['12-05-2020', 1], ['06-10-2020', 1], ['03-12-2020', 2], ['10-12-2020', 2], ['13-12-2020', 3], ['18-12-2020', 2], ['21-12-2020', 5], ['28-12-2020', 2]] pour une duree moyenne d'épisode sans elec de 2.5513513513513515j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 2.66kWc, et une hypothèse de 8j sans elec possible et 103 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['19-01-2005', 3], ['23-01-2005', 1], ['01-02-2005', 1], ['12-02-2005', 2], ['26-11-2005', 3], ['05-12-2005', 1], ['08-12-2005', 1], ['12-12-2005', 6], ['23-12-2005', 1], ['26-12-2005', 2], ['31-12-2005', 1], ['04-01-2006', 4], ['09-01-2006', 4], ['20-01-2006', 2], ['29-01-2006', 4], ['03-02-2006', 2], ['22-11-2006', 1], ['04-12-2006', 1], ['10-12-2006', 1], ['22-12-2006', 5], ['22-01-2007', 2], ['30-01-2007', 4], ['08-02-2007', 1], ['01-12-2007', 1], ['08-12-2007', 2], ['26-12-2007', 4], ['03-01-2008', 1], ['06-01-2008', 4], ['11-01-2008', 1], ['23-01-2008', 1], ['07-03-2008', 1], ['17-05-2008', 2], ['07-11-2008', 1], ['16-11-2008', 8], ['01-12-2008', 1], ['04-12-2008', 1], ['15-12-2008', 6], ['26-12-2008', 1], ['05-01-2009', 8], ['24-01-2009', 1], ['19-04-2009', 2], ['16-08-2009', 1], ['11-11-2009', 1], ['08-12-2009', 1], ['14-12-2009', 3], ['23-12-2009', 2], ['05-01-2010', 3], ['09-01-2010', 2], ['12-01-2010', 1], ['06-05-2010', 1], ['05-11-2010', 2], ['12-11-2010', 1], ['22-12-2010', 3], ['08-01-2011', 1], ['31-01-2011', 2], ['06-11-2011', 3], ['25-11-2011', 4], ['07-12-2011', 2], ['21-12-2011', 3], ['14-01-2012', 2], ['20-10-2012', 2], ['21-11-2012', 2], ['25-11-2012', 2], ['28-11-2012', 1], ['14-12-2012', 1], ['22-12-2012', 1], ['05-01-2013', 6], ['19-01-2013', 1], ['18-11-2013', 2], ['24-11-2013', 2], ['04-12-2013', 2], ['25-01-2014', 3], ['25-11-2014', 2], ['02-12-2014', 2], ['14-12-2014', 7], ['05-01-2015', 2], ['13-11-2015', 2], ['04-01-2016', 5], ['10-01-2016', 1], ['23-01-2016', 1], ['17-10-2016', 1], ['23-11-2016', 1], ['25-11-2016', 1], ['20-12-2016', 1], ['25-12-2016', 2], ['31-12-2016', 5], ['12-01-2017', 1], ['22-12-2017', 4], ['29-12-2017', 1], ['04-01-2018', 3], ['16-01-2018', 1], ['21-01-2018', 3], ['31-01-2018', 1], ['04-12-2018', 1], ['15-12-2018', 2], ['22-12-2018', 4], ['30-12-2018', 3], ['31-01-2019', 1], ['17-11-2019', 2], ['02-12-2019', 1], ['08-12-2019', 1], ['13-12-2019', 2], ['29-12-2020', 1]] pour une duree moyenne d'épisode sans elec de 2.203883495145631j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 3.3200000000000003kWc, et une hypothèse de 6j sans elec possible et 66 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['20-01-2005', 2], ['23-01-2005', 1], ['01-02-2005', 1], ['12-02-2005', 2], ['27-11-2005', 1], ['12-12-2005', 6], ['27-12-2005', 1], ['06-01-2006', 2], ['09-01-2006', 1], ['11-01-2006', 2], ['29-01-2006', 3], ['03-02-2006', 2], ['24-12-2006', 3], ['23-01-2007', 1], ['01-02-2007', 2], ['27-12-2007', 3], ['23-01-2008', 1], ['07-03-2008', 1], ['17-05-2008', 2], ['16-11-2008', 4], ['21-11-2008', 1], ['23-11-2008', 1], ['19-12-2008', 2], ['26-12-2008', 1], ['05-01-2009', 1], ['07-01-2009', 6], ['19-04-2009', 1], ['16-08-2009', 1], ['14-12-2009', 3], ['24-12-2009', 1], ['05-01-2010', 1], ['10-01-2010', 1], ['12-01-2010', 1], ['05-11-2010', 2], ['23-12-2010', 2], ['01-02-2011', 1], ['07-11-2011', 1], ['26-11-2011', 3], ['21-12-2011', 3], ['14-01-2012', 1], ['20-10-2012', 2], ['21-11-2012', 1], ['26-11-2012', 1], ['14-12-2012', 1], ['05-01-2013', 6], ['24-11-2013', 2], ['05-12-2013', 1], ['26-01-2014', 2], ['26-11-2014', 1], ['02-12-2014', 2], ['17-12-2014', 3], ['13-11-2015', 1], ['05-01-2016', 1], ['07-01-2016', 2], ['17-10-2016', 1], ['23-11-2016', 1], ['01-01-2017', 4], ['23-12-2017', 3], ['06-01-2018', 1], ['22-01-2018', 2], ['31-01-2018', 1], ['16-12-2018', 1], ['23-12-2018', 3], ['30-12-2018', 3], ['02-12-2019', 1], ['14-12-2019', 1]] pour une duree moyenne d'épisode sans elec de 1.8636363636363635j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 3.98kWc, et une hypothèse de 6j sans elec possible et 43 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['20-01-2005', 2], ['01-02-2005', 1], ['13-02-2005', 1], ['12-12-2005', 5], ['27-12-2005', 1], ['07-01-2006', 1], ['12-01-2006', 1], ['29-01-2006', 1], ['31-01-2006', 1], ['04-02-2006', 1], ['25-12-2006', 2], ['02-02-2007', 1], ['28-12-2007', 2], ['23-01-2008', 1], ['07-03-2008', 1], ['17-05-2008', 2], ['16-11-2008', 4], ['21-11-2008', 1], ['08-01-2009', 2], ['11-01-2009', 2], ['19-04-2009', 1], ['16-08-2009', 1], ['15-12-2009', 2], ['24-12-2009', 1], ['05-01-2010', 1], ['10-01-2010', 1], ['06-11-2010', 1], ['23-12-2010', 2], ['01-02-2011', 1], ['26-11-2011', 3], ['22-12-2011', 2], ['21-10-2012', 1], ['05-01-2013', 6], ['25-11-2013', 1], ['26-01-2014', 1], ['03-12-2014', 1], ['17-10-2016', 1], ['01-01-2017', 4], ['23-12-2017', 3], ['23-01-2018', 1], ['23-12-2018', 1], ['25-12-2018', 1], ['30-12-2018', 3]] pour une duree moyenne d'épisode sans elec de 1.697674418604651j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 4.640000000000001kWc, et une hypothèse de 4j sans elec possible et 22 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['12-12-2005', 1], ['14-12-2005', 3], ['27-12-2005', 1], ['26-12-2006', 1], ['07-03-2008', 1], ['17-05-2008', 2], ['17-11-2008', 3], ['09-01-2009', 1], ['11-01-2009', 2], ['19-04-2009', 1], ['16-08-2009', 1], ['15-12-2009', 2], ['23-12-2010', 2], ['27-11-2011', 2], ['23-12-2011', 1], ['06-01-2013', 4], ['25-11-2013', 1], ['03-12-2014', 1], ['02-01-2017', 3], ['24-12-2017', 2], ['23-12-2018', 1], ['01-01-2019', 1]] pour une duree moyenne d'épisode sans elec de 1.6818181818181819j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 5.300000000000001kWc, et une hypothèse de 4j sans elec possible et 16 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['14-12-2005', 3], ['27-12-2005', 1], ['17-05-2008', 2], ['17-11-2008', 3], ['09-01-2009', 1], ['12-01-2009', 1], ['19-04-2009', 1], ['16-08-2009', 1], ['15-12-2009', 1], ['24-12-2010', 1], ['28-11-2011', 1], ['06-01-2013', 4], ['25-11-2013', 1], ['03-12-2014', 1], ['03-01-2017', 2], ['01-01-2019', 1]] pour une duree moyenne d'épisode sans elec de 1.5625j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 5.96kWc, et une hypothèse de 2j sans elec possible et 10 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['15-12-2005', 2], ['17-05-2008', 2], ['18-11-2008', 2], ['19-04-2009', 1], ['16-08-2009', 1], ['15-12-2009', 1], ['24-12-2010', 1], ['06-01-2013', 2], ['09-01-2013', 1], ['03-12-2014', 1]] pour une duree moyenne d'épisode sans elec de 1.4j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 6.62kWc, et une hypothèse de 2j sans elec possible et 5 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['16-12-2005', 1], ['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1], ['06-01-2013', 2]] pour une duree moyenne d'épisode sans elec de 1.2j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 7.28kWc, et une hypothèse de 1j sans elec possible et 4 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1], ['07-01-2013', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 7.94kWc, et une hypothèse de 1j sans elec possible et 4 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1], ['07-01-2013', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 8.600000000000001kWc, et une hypothèse de 1j sans elec possible et 3 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 9.260000000000002kWc, et une hypothèse de 1j sans elec possible et 3 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 9.92kWc, et une hypothèse de 1j sans elec possible et 3 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 10.58kWc, et une hypothèse de 1j sans elec possible et 3 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse affichage des résultats optimisés avec les données fournies par l'utilisateur, et une batterie de 10.0kWh et une puissance crete de 5.96kWc, et une hypothèse de 0j sans elec possible et 0 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [] pour une duree moyenne d'épisode sans elec de 0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse avec les données fournies par l'utilisateur, et une batterie de 5.0kWh et une puissance crete de 7.28kWc, et une hypothèse de 1j sans elec possible et 4 episodes sans elec (ou avec un groupe electrogene): entre 2005 et 2020: Liste des episodes sans elec (nb de jours): [['18-05-2008', 1], ['19-04-2009', 1], ['16-08-2009', 1], ['07-01-2013', 1]] pour une duree moyenne d'épisode sans elec de 1.0j on satisfait aux besoins utilisateurs (4.0kWh/jour)entrées en hypothèse
en fr 1 Published
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #