Im ersten Teil sollen Dachflächen auf ihr Potenzial für die Installation von PV-Anlagen untersucht werden. Als Bemessungsgrundlage dient dafür die erwartete Sonneneinstrahlung, welche sich aus der Neigung und Ausrichtung der Fachfläche ergibt.
Autor:in
Zugehörigkeit
Sören Sparmann
Universität Paderborn
Veröffentlichungsdatum
30. Mai 2025
Photovoltaikanlagen (PV-Anlagen) auf Dachflächen leisten einen bedeutenden Beitrag zum Klimaschutz, da sie erneuerbare Solarenergie nutzen, um Strom zu erzeugen. Dadurch wird der Bedarf an fossilen Brennstoffen wie Kohle, Öl und Gas reduziert, die bei der Verbrennung CO2 und andere Treibhausgase freisetzen, welche den Klimawandel beschleunigen.
Da Dachflächen häufig ungenutzt bleiben, bieten sie eine ideale Möglichkeit, um umweltfreundliche Energie zu gewinnen, ohne zusätzlichen Raum zu beanspruchen. Zudem tragen PV-Anlagen zur Dezentralisierung der Energieversorgung bei, was die Netzstabilität erhöht und Energieverluste minimiert.
Wie sieht es in deiner Nachbarschaft aus? Gibt es dort ungenutzte Dachflächen, die sich für PV-Anlagen eignen?
Um die Fragestellung beantworten zu können, wird eine Übersicht über alle Dachflächen in Ihrer Region benötigt.
Zunächst wird ein Standort festgelegt, für den die Dachflächen eingelesen werden sollen. Dazu wird eine Variable adresse mit der entsprechenden Adresse definiert.
from cdec import get_lat_lon_for# Adresse eingeben (Gesamtschule Salzkotten)adresse ='Upsprunger Straße 65-67, 33154 Salzkotten'# Breiten- und Längengrad bestimmenlatitude, longitude = get_lat_lon_for(adresse)print(f'Breitengrad: {latitude}, Längengrad: {longitude}')
Breitengrad: 51.6616267, Längengrad: 8.6013146
Hinweis
Die Adresse muss im Bezirk Detmold liegen.
Mit Hilfe der Funktion load_roofs() kann nun einen Datensatz eingelesen werden, welcher die Umgebung um den angebgenen Standort abdeckt.
Die Daten stammen von dem Landesamt für Natur, Umwelt und Klima Nordrhein-Westfalen (LANUK).
from cdec import load_roofs# Dachflächen für die angegebene Adresse ermittelndf = load_roofs( latitude=latitude, longitude=longitude)# Daten anzeigendf
geb_id
richtung
neigung
dachtyp
himmel_kat
geometry
id
0
Geb64596ln0403_c
269
15
geneigt
West
MULTIPOLYGON (((472254.000 5723718.000, 472254...
1
Geb77493ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472548.000 5723151.500, 472546...
2
Geb67252ln0403_c
263
44
geneigt
West
MULTIPOLYGON (((472177.500 5723508.000, 472177...
3
Geb68143ln0403_c
175
51
geneigt
Süd
MULTIPOLYGON (((472206.000 5723548.000, 472207...
4
Geb73711ln0403_c
82
21
geneigt
Ost
MULTIPOLYGON (((472698.500 5723757.500, 472698...
...
...
...
...
...
...
...
2552
Geb62779ln0403_c
176
50
geneigt
Süd
MULTIPOLYGON (((472358.906 5723561.578, 472359...
2553
Geb63299ln0403_c
246
34
geneigt
West
MULTIPOLYGON (((472215.000 5723774.500, 472214...
2554
Geb76249ln0403_c
178
26
geneigt
Süd
MULTIPOLYGON (((472931.500 5723834.000, 472931...
2555
Geb70353ln0403_c
82
36
geneigt
Ost
MULTIPOLYGON (((472099.000 5723372.500, 472099...
2556
Geb58712ln0403_c
265
33
geneigt
West
MULTIPOLYGON (((472263.000 5723281.000, 472263...
2557 rows × 6 columns
Aufgabe 1
Was könnten die Spalten richtung, neigung und himmel_kat bedeuten?
Stelle für jede der Spalten eine Vermutung auf! (1 – 2 Sätze)
(5 Minuten)
Lösung
Richtung:
Die Richtung einer Dachfläche wird in Grad angegeben und orientiert sich an den Himmelsrichtungen. Eine Dachfläche, die nach Norden zeigt, hat eine Richtung von 0 Grad, während eine Fläche, die nach Süden ausgerichtet ist, mit 180 Grad angegeben wird.
Neigung:
Die Neigung einer Dachfläche, ebenfalls in Grad angegeben, beschreibt den Winkel der Dachschräge. Eine Neigung von 0 Grad steht für eine vollständig horizontale Fläche, wie bei einem Flachdach.
Himmel Kat.:
Die Variable himmel_kat gibt die Himmelsrichtung als kategorische Angabe wieder. Beispielsweise steht die Kategorie Flach für ein Flachdach.
2 Daten explorieren
Mit der Methode explore() können die Dachflächen auf einer Karte dargestellt werden.
Hinweis
Die Form (Geometrie) einer Dachfläche ergibt sich dabei aus der Spalte geometry. Diese enthält für jede Dachfläche eine Liste mit den entsprechenden Eckpunkten.
df.explore()
Make this Notebook Trusted to load map: File -> Trust Notebook
Mit Hilfe der Methode loc (locate) kann ein einzelner Eintrag aus dem Datensatz ausgewählt (selektiert) werden. Dazu muss nur die Identifikationsnummer id des entsprechenden Eintrags angeben werden. Diese kann aus der ersten Spalte des Datensatzes oder aus der Kartendarstellung abgelesen werden.
Codefragment 1
# Selektiere das Dach mit der ID 270dach = df.loc[270]dach
geb_id Geb62092ln0403_c
richtung 148
neigung 31
dachtyp geneigt
himmel_kat Süd
geometry MULTIPOLYGON (((472325.5 5723153, 472326.5 572...
Name: 270, dtype: object
Aufgabe 2
Ändere oben die Variable adresse zu einem Ort ihrer Wahl (z.B. ihrem Wohnort oder Schule).
Führe anschließend die nachfolgenden Zellen erneut aus.
Wähle auf der Karte eine beliebige Dachfläche aus (z.B. ihr Wohnort oder Schule) und notiere die dazugehörige ID ìd.
Selektiere die Dachfläche mit Hilfe der Methode loc (siehe nächste Zelle). Verwende dazu die ID.
(5 Minuten)
2.1 Neigung und Ausrichtung der Dachfläche
Mit Hilfe der folgenden Schreibweise kann die Neigung und Ausrichtung der Dachfläche bestimmt werden. Diese beiden Werte werden später noch wichtig sein, für die Berechnung der Bestrahlungsstärke!
# Neigungswinkel der Dachflächesurface_tilt = dach['neigung']surface_tilt
31
# Ausrichtung der Dachfläche (Azimutwinkel, -1 = Flachdach)surface_azimuth = dach['richtung']surface_azimuth
148
2.2 Größe der Dachfläche
In gleicher Weise kann auf die Form (geometry) der Dachfläche zugegriffen werden.
geometry = dach['geometry']geometry
Mit dem Attribut .area kann zudem der Flächeninhalt der Form ermittelt werden. Die Größe der Dachfläche ist ein weiterer wichtiger Faktor für die Eignung einer Dachfläche (in Quadratmeter) für die Nutzung von Photovoltaik.
# Berechnung des Flächeninhalts in Quadratmeternsurface_area = geometry.areasurface_area
69.45965846481954
# Berechnung des Flächeninhalts (qm) aller Dachflächendf['flaecheninhalt'] = df['geometry'].areadf
geb_id
richtung
neigung
dachtyp
himmel_kat
geometry
flaecheninhalt
id
0
Geb64596ln0403_c
269
15
geneigt
West
MULTIPOLYGON (((472254.000 5723718.000, 472254...
7.411919
1
Geb77493ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472548.000 5723151.500, 472546...
7.500000
2
Geb67252ln0403_c
263
44
geneigt
West
MULTIPOLYGON (((472177.500 5723508.000, 472177...
36.716183
3
Geb68143ln0403_c
175
51
geneigt
Süd
MULTIPOLYGON (((472206.000 5723548.000, 472207...
12.497905
4
Geb73711ln0403_c
82
21
geneigt
Ost
MULTIPOLYGON (((472698.500 5723757.500, 472698...
36.641219
...
...
...
...
...
...
...
...
2552
Geb62779ln0403_c
176
50
geneigt
Süd
MULTIPOLYGON (((472358.906 5723561.578, 472359...
12.903848
2553
Geb63299ln0403_c
246
34
geneigt
West
MULTIPOLYGON (((472215.000 5723774.500, 472214...
32.292786
2554
Geb76249ln0403_c
178
26
geneigt
Süd
MULTIPOLYGON (((472931.500 5723834.000, 472931...
11.989565
2555
Geb70353ln0403_c
82
36
geneigt
Ost
MULTIPOLYGON (((472099.000 5723372.500, 472099...
88.135948
2556
Geb58712ln0403_c
265
33
geneigt
West
MULTIPOLYGON (((472263.000 5723281.000, 472263...
60.672663
2557 rows × 7 columns
3 Bestrahlungsstärke
Die Eignung einer Dachfläche für den Einsatz von Photovoltaik hängt unter anderem von der Ausrichtung und Neigung der Dachfläche ab. Auch der Standort und die zur Verfügung stehende Fläche spielen eine Rolle.
Je besser die Dachfläche zur Sonne ausgerichtet ist, desto höher ist die Sonneneinstrahlung und damit die potenziell nutzbare Energie!
Um das Potenzial der Dachflächen für den Einsatz von Photovoltaik zu ermitteln, wird daher zunächst die Bestrahlungsstärke (engl. irradiance) über einen festgelegten Zeitraum (z.B. ein Jahr) berechnet. Die Bestrahlungsstärke ist ein Maß für die Intensität der Sonneneinstrahlung, die auf die Dachfläche trifft.
Zur Berechnung der Bestrahlungsstärke sind folgende Schritte erforderlich:
Genaue Position und Zeitzone bestimmen (Lokalisierung)
Untersuchungszeitraum festlegen
Stand der Sonne berechnen
Trübung der Atmosphäre ermitteln (Bewölkung)
Bestrahlungsstärke berechnen
Glücklicherweise gibt es eine Programmierbibliothek pvlib, die einen Großteil der Berechnungen übernimmt.
# Bibliothek für den Umgang mit Photovoltaikimport pvlib
3.1 Lokalisierung
Zur Lokalisierung wird neben Längen- und Breitengrad auch die entsprechende Zeitzone benötigt.
from pytz import timezone# Zeitzone festlegentz = timezone('Europe/Berlin')tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
Nun kann eine genaue Lokalisierung vorgenommen werden. Diese wird für die Berechnung des Sonnenstandes und der Bestrahlungsstärke benötigt.
Elevation (Höhenwinkel): Die Elevation gibt den vertikalen Winkel an, unter dem die Sonne am Himmel steht. Ein Höhenwinkel von 0° bedeutet, dass die Sonne direkt über einem Punkt am Horizont steht, während ein Höhenwinkel von 90° darauf hinweist, dass die Sonne im Zenit steht. Ein negativer Höhenwinkel zeigt an, dass die Sonne unterhalb des Horizonts ist.
Azimuth (Azimutwinkel): Der Azimuthwinkel gibt die horizontale Richtung der Sonne an, gemessen im Uhrzeigersinn von Norden aus. Ein Azimut von 0° entspricht dem Norden, 90° dem Osten, 180° dem Süden und 270° dem Westen. Der Azimuthwinkel gibt also an, in welche Himmelsrichtung die Sonne zu einem bestimmten Zeitpunkt zeigt.
# Sonnenstand für den gegebenen Standort ermittelnsolar_position = location.get_solarposition(date_range)solar_position
apparent_zenith
zenith
apparent_elevation
elevation
azimuth
equation_of_time
2024-06-01 00:00:00+02:00
104.024246
104.024246
-14.024246
-14.024246
340.120688
2.174048
2024-06-01 01:00:00+02:00
106.075224
106.075224
-16.075224
-16.075224
354.352129
2.167611
2024-06-01 02:00:00+02:00
105.813555
105.813555
-15.813555
-15.813555
8.799992
2.161163
2024-06-01 03:00:00+02:00
103.265049
103.265049
-13.265049
-13.265049
22.910796
2.154702
2024-06-01 04:00:00+02:00
98.666027
98.666027
-8.666027
-8.666027
36.266856
2.148229
2024-06-01 05:00:00+02:00
92.380098
92.380098
-2.380098
-2.380098
48.717685
2.141744
2024-06-01 06:00:00+02:00
84.652842
84.804803
5.347158
5.195197
60.371779
2.135247
2024-06-01 07:00:00+02:00
76.251170
76.316202
13.748830
13.683798
71.527543
2.128738
2024-06-01 08:00:00+02:00
67.220090
67.258739
22.779910
22.741261
82.628833
2.122218
2024-06-01 09:00:00+02:00
57.944534
57.970618
32.055466
32.029382
94.284827
2.115685
2024-06-01 10:00:00+02:00
48.824358
48.843080
41.175642
41.156920
107.368543
2.109141
2024-06-01 11:00:00+02:00
40.417793
40.431753
49.582207
49.568247
123.179339
2.102585
2024-06-01 12:00:00+02:00
33.632141
33.643048
56.367859
56.356952
143.433505
2.096017
2024-06-01 13:00:00+02:00
29.850045
29.859454
60.149955
60.140546
169.018551
2.089437
2024-06-01 14:00:00+02:00
30.329474
30.339066
59.670526
59.660934
196.897959
2.082846
2024-06-01 15:00:00+02:00
34.883230
34.894661
55.116770
55.105339
221.419249
2.076243
2024-06-01 16:00:00+02:00
42.114043
42.128860
47.885957
47.871140
240.579977
2.069628
2024-06-01 17:00:00+02:00
50.729567
50.749589
39.270433
39.250411
255.672888
2.063002
2024-06-01 18:00:00+02:00
59.915398
59.943569
30.084602
30.056431
268.360810
2.056364
2024-06-01 19:00:00+02:00
69.160701
69.203237
20.839299
20.796763
279.838405
2.049714
2024-06-01 20:00:00+02:00
78.080902
78.155598
11.919098
11.844402
290.909352
2.043052
2024-06-01 21:00:00+02:00
86.265142
86.464622
3.734858
3.535378
302.141135
2.036379
2024-06-01 22:00:00+02:00
93.780164
93.780164
-3.780164
-3.780164
313.945942
2.029695
2024-06-01 23:00:00+02:00
99.719774
99.719774
-9.719774
-9.719774
326.585077
2.022999
Höhenwinkel
import plotly.express as px# Liniendiagramm des Höhenwinkelsfig = px.line(solar_position, y='elevation', title='Höhenwinkel der Sonne im Verlauf eines Tages')fig.update_xaxes(title="Uhrzeit")fig.update_yaxes(title="Höhenwinkel")fig.show()
Aufgabe 4
Um wie viel Uhr ist die Sonne heute circa aufgegangen?
Um wie viel Uhr wird die die Sonne heute circa untergehen?
(5 Minuten)
Azimutwinkel
Nun wird der Azimuthwinkel, also die Himmelsrichtung aus welcher die Sonne scheint, betrachtet.
px.line(solar_position, y='azimuth')
Hinweis
“Im Osten geht die Sonne auf, im Süden nimmt sie ihren Lauf, im Westen wird sie untergehen, im Norden ist sie nie zu sehen.”
3.4 Sonneneinstrahlung bei klarem Himmel
Neben der Ausrichtung und Neigung der Dachfläche spielt auch das Wetter eine Rolle für die Intensität der Sonneneinstrahlung. Bei starker Bewölkung ist die Sonneneinstrahlung geringer.
Im Rahmen der Analyse wird der Einfachheit halber davon ausgegangen, dass der Himmel klar ist und die Atmosphäre somit nicht durch Wolken getrübt ist (clear sky).
Mit Hilfe der Methode get_clearsky() lässt sich die Sonneneinstrahlung am gegebenen Standort ermitteln. Es werden drei Arten der Sonneneinstrahlung unterschieden: GHI, DNI & DHI (siehe unten).
Die Direktnormalstrahlung (DNI) ist die Menge der Sonnenstrahlung, die pro Flächeneinheit auf eine senkrecht zur Sonne stehende Fläche auftrifft.
Global Horizontal Irradiance (GHI)
Die globale horizontale Einstrahlung (GHI) ist die Gesamtstrahlung, die von einer horizontalen Fläche auf der Erde absorbiert wird.
Diffuse Horizontal Irradiance (DHI)
Die diffuse horizontale Einstrahlung (DHI) ist die terrestrische Einstrahlung, die von einer flachen Oberfläche gestreut oder diffus von der Atmosphäre zurückgestrahlt wird. DHI ist der Teil der globalen horizontalen Einstrahlung, der nicht von der direkten Sonnenstrahlung stammt.
# Sonneneinstrahlung in Liniendiagramm anzeigenpx.line(clear_sky)
3.5 Bestrahlungsstärke berechnen
Zunächst wird die Neigung tilt und die Ausrichtung azimuth der Dachfläche festgelegt.
Nun kann die Bestrahlungsstärke für die Dachfläche mit Hilfe der Funktion get_total_irradiance berechnet werden.
from pvlib.irradiance import get_total_irradiance# Bestrahlungsstärke (irradiance) berechnenirradiance = get_total_irradiance( surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, dni=clear_sky['dni'], ghi=clear_sky['ghi'], dhi=clear_sky['dhi'], solar_zenith=solar_position['zenith'], solar_azimuth=solar_position['azimuth'])# Ausgabe (Watt pro Quadratmeterirradiance
poa_global
poa_direct
poa_diffuse
poa_sky_diffuse
poa_ground_diffuse
2024-06-01 00:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 01:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 02:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 03:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 04:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 05:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 06:00:00+02:00
14.728850
1.504552
13.224298
13.085002
0.139296
2024-06-01 07:00:00+02:00
127.865252
70.525044
57.340208
56.355546
0.984662
2024-06-01 08:00:00+02:00
304.989665
214.844178
90.145486
88.010541
2.134945
2024-06-01 09:00:00+02:00
493.447482
380.279844
113.167638
109.850345
3.317293
2024-06-01 10:00:00+02:00
663.765796
533.875585
129.890211
125.494644
4.395566
2024-06-01 11:00:00+02:00
797.418402
655.602465
141.815937
136.540347
5.275590
2024-06-01 12:00:00+02:00
882.350461
732.853268
149.497193
143.608963
5.888230
2024-06-01 13:00:00+02:00
911.768201
758.664754
153.103447
146.915975
6.187472
2024-06-01 14:00:00+02:00
883.856283
731.184319
152.671964
146.520673
6.151291
2024-06-01 15:00:00+02:00
801.698222
653.497692
148.200530
142.418118
5.782412
2024-06-01 16:00:00+02:00
673.208722
533.571466
139.637256
134.529053
5.108202
2024-06-01 17:00:00+02:00
511.137221
384.375343
126.761878
122.582112
4.179766
2024-06-01 18:00:00+02:00
333.476149
224.589138
108.887011
105.815741
3.071271
2024-06-01 19:00:00+02:00
165.137163
80.941649
84.195514
82.312171
1.883343
2024-06-01 20:00:00+02:00
48.753148
0.000000
48.753148
47.985672
0.767476
2024-06-01 21:00:00+02:00
5.796908
0.000000
5.796908
5.742566
0.054342
2024-06-01 22:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 23:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
Alle Angaben sind in (Watt pro Quadratmeter).
Für die weitere Analyse ist primär die globale Bestrahlungsstärke (poa_global) von Bedeutung. Diese setzt sich aus der direkten und indirekten Sonneneinstrahlung zusammen.
# Liniendiagramm (mit eingeschlossener Fläche) der globalen Bestrahlungsstärkefig = px.area(irradiance, y='poa_global', title="Globale Bestrahlungsstärke im Verlauf eines Tages")fig.update_xaxes(title="Uhrzeit")fig.update_yaxes(title="Globale Bestrahlungsstärke<br>[W/m<sup>2</sup>]")fig.show()
Tagesleistung
Wichtig
Zur Erinnerung: Die Bestrahlungsstärke gibt nur die Intensität der Sonneneinstrahlung an und ist nicht von der Größe der Dachfläche abhängig. Sie wird daher in der Einheit angegeben.
Die Summe der Stundenwerte ergibt die Bestrahlungsenergie pro Quadratmeter () energy_per_area an dem entsprechenden Tag.
# Summe der Stundenwerte (in Wattstunden pro Quadratmeter)energy_per_area = irradiance['poa_global'].sum()energy_per_area
Um die Strahlungsenergie zu bestimmen, die im Laufe eines Tages auf die Dachfläche auftrifft, muss das Ergbnis nun nur noch mit der Größe der Dachfläche multipliziert werden.
# Größe der Dachfläche in Quadratmeter (Beispiel)surface_area =10# Berechnung der Strahlungsenergie (Wattstunden)total_energy = energy_per_area * surface_area# Ausgabe (auf zwei Nachkommastellen gerundet)print('Tagesleistung:', total_energy.round(2), 'Wh')
Die Strahlungsenergie hat die Einheit (Wattstunden).
Beispiel: Mit 1600 Wh kann eine Mikrowelle mit einem Stromverbrauch von 800 Watt 2 Stunden betrieben werden.
Um die Energie in Kilowattstunden anzugeben, muss der Wert einfach durch 1000 geteilt werden.
# W in kW umrechnentotal_energy = total_energy /1000# Ausgabeprint('Tagesleistung:', total_energy.round(2), 'kW')
Tagesleistung: 76.19 kW
Hinweis
Hierbei handelt es sich um die potenziell nutzbare Sonnenenergie, die auf die PV-Anlage trifft. Nur ein Teil davon kann tatsächlich in Strom umgewandelt werden. Zudem kann in der Regel aufgrund der Dachform nicht die gesamte Fläche mit PV-Anlagen versehen werden.
Aufgabe 5
Bestimme die optimale Ausrichtung und Neigung einer Dachfläche für den Einsatz von PV unter den oben definierten Bedigungen.
Verändere dazu die Schieberegler für die Parameter surface_tilt und surface_area.
Ziel ist es, den Wert für die Bestrahlungsenergie zu maximieren.
(5 Minuten)
Hinweis
Um mit der folgenden Abbildung interagieren zu können, muss das Notebook in einer Jupyter Umgebung ausgeführt werden!
from cdec import interactive_irradianceinteractive_irradiance(clear_sky, solar_position)
Lösung
Optimale Neigung und Ausrichtung der Dachfläche:
Parameter
Optimale Belegung
Neigung
18,50 Grad
Ausrichtung
180 Grad
Bestrahlungsenergie
7.655 kWh/qm
Jahresleistung
Nun soll die Bestrahlungsstärke über einen Zeitraum von einem Jahr hinweg betrachtet werden.
Aufgabe 6
Kopiere den folgeden Programmcode in die dafür vorgesehene Zelle.
Vervollständige den Programmcode so, dass die Bestrahlungsstärke im Laufe eines Jahres berechnet wird:
Ändere den Wert der Variablen surface_tilt und surface_azimuth entsprechend den Werten für das von Ihnen ausgewählten Daches (siehe Code 1).
Ändere den Start- und Endzeitpunkt so, dass die Zeitspanne genau ein Jahr beträgt.
(15 Minuten)
Größe
Einheit
Variable
Berechnung
Bestrahlungsstärke
Watt pro Quadratmeter []
irradiance
Bestrahlungsenergie pro Quadratmeter
Wattstunden pro Quadratmeter []
total_irradiance
irradiance.sum()
Bestrahlungsenergie
Wattstunden []
total_energy
total_irradiance * surface_area
# Neigung der Dachfläche eingebensurface_tilt =# Ausrichtung der Dachfläche eingebensurface_azimuth =# Funktion zu Berechnung der Bestrahlungsstärke über ein Jahrdef get_annual_irradiance(surface_tilt, surface_azimuth):# Startzeitpunkt eingeben start =# Endzeitpunkt eingeben end =# Zeitraum festlegen date_range = pd.date_range( start=start, end=end, freq='1h', tz=tz, inclusive='left' )# Stand der Sonne bestimmen solar_position = location.get_solarposition(date_range)# Klarer Himmel clear_sky = location.get_clearsky(date_range)# Bestrahlungsstärke berechnen irradiance = get_total_irradiance( surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, dni=clear_sky['dni'], ghi=clear_sky['ghi'], dhi=clear_sky['dhi'], solar_zenith=solar_position['zenith'], solar_azimuth=solar_position['azimuth'] ) irradiance = irradiance['poa_global']return irradianceirradiance = get_annual_irradiance(surface_tilt, surface_azimuth)irradiance
# Hier Code einfügen
Lösung
# Neigung der Dachfläche eingebensurface_tilt = dach['neigung']# Ausrichtung der Dachfläche eingebensurface_azimuth = dach['richtung']# Funktion zu Berechnung der Bestrahlungsstärke über ein Jahrdef calculate_irradiance_over_one_year(surface_tilt, surface_azimuth):# Startzeitpunkt eingeben start ='2024-01-01'# Endzeitpunkt eingeben end ='2025-01-01'# Zeitraum festlegen date_range = pd.date_range( start=start, end=end, freq='1h', tz=tz, inclusive='left' )# Stand der Sonne bestimmen solar_position = location.get_solarposition(date_range)# Klarer Himmel clear_sky = location.get_clearsky(date_range)# Bestrahlungsstärke berechnen irradiance = get_total_irradiance( surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, dni=clear_sky['dni'], ghi=clear_sky['ghi'], dhi=clear_sky['dhi'], solar_zenith=solar_position['zenith'], solar_azimuth=solar_position['azimuth'] ) irradiance = irradiance['poa_global']return irradianceirradiance = calculate_irradiance_over_one_year(surface_tilt, surface_azimuth)irradiance
Nun kann die Veränderung der Bestrahlungsstärke im Verlauf eines Jahres betrachtet werden.
# Tagesleistung im Verlauf des Jahres bestimmendaily = irradiance.resample('1D').sum()# Liniendiagramm des Jahresverlauffig = px.line(daily, title="Bestrahlungsstärke im Verlauf eines Jahres")fig.update_xaxes(title="Zeitpunkt")fig.update_yaxes(title="Bestrahlungsstärke<br>[W/m<sup>2</sup>]")fig.show()
5 Dachlächenpotenzial berechnen
Mit Hilfe der zuvor erstellten Funktion kann nun die Bestrahlungsenergie aller Dachflächen über den Zeitraum eines Jahres bestimmt werden.
# Fortschrittsbalkenfrom tqdm.auto import tqdmtqdm.pandas()# Funktion zur Berechnung der Bestrahlungsenergie pro Quadratmeter pro Jahr für ein Dachdef calculate_total_energy_per_square_metre(dach):# Ermittel Neigung und Ausrichtung der Dachfläche surface_tilt = dach['neigung'] surface_azimuth = dach['richtung']# Jährliche Bestrahlungsstärke irradiance = calculate_irradiance_over_one_year(surface_tilt, surface_azimuth) total_energy_per_square_metre = irradiance.sum()# Rückgabe der Strahlungsenergie pro Quadratmeterreturn total_energy_per_square_metre# Wende die Funktion auf alle Dächer aus den Datensatz antotal_energy_per_square_metre = df.progress_apply(calculate_total_energy_per_square_metre, axis=1)# Füge das Resultat in die Spalte irradiance eindf['total_energy_per_square_metre'] = total_energy_per_square_metre# Berechne die Bestrahlungsenergiedf['total_energy'] = df['total_energy_per_square_metre'] * df['flaecheninhalt']df
Nun kann die Dachflächen wieder auf einer Karte angezeigt werden. Die Einfärbung der Dachflächen ergibt sich nun aus dem Wert der Strahlungsenergie pro Quadratmeter.
Make this Notebook Trusted to load map: File -> Trust Notebook
6 Eignung bestimmen
Eine geneigte Dachfläche ist dann für den Einsatz von PV geeignet wenn
die Strahlungsenergie pro Quadratmeter pro Jahr mindestens 1500 kW beträgt und
die Dachfläche mindestens 20 Quadratmeter groß ist.
Bei Flachdächern wird angenommen, dass bei einer Aufständerung nach Süden 40 Prozent der Fläche genutzt werden kann. Flachdächer müssen daher mindestens eine Größe von 50 Quadratmeter aufweisen, um als geeignet eingestuft zu werden.
Aufgabe 7
Filtere die Daten ensprechend der oben genannten Kriterien.
Berücksichtige dabei auch die Flachdächer!
Der Datensatz df soll anschließend nurnoch die geeigneten Dachflächen enthalten.
(15 Minuten)
Tip
Wie im ersten Arbeitsblatt (Luftqualität) können die Daten mit folgender Notation gefiltert werden: