https://github.com/roe-dl/weewx-gts
XType extension for WeeWX to provide solar energy, "Grünlandtemperatursumme" (a kind of growing degree days) and "dayET" and "ET24" as some kind of opposite to "dayRain" and "rain24"
https://github.com/roe-dl/weewx-gts
climate-data gardening growing-degree-days gts solar-energy sun vegetation weewx xtypes
Last synced: 5 months ago
JSON representation
XType extension for WeeWX to provide solar energy, "Grünlandtemperatursumme" (a kind of growing degree days) and "dayET" and "ET24" as some kind of opposite to "dayRain" and "rain24"
- Host: GitHub
- URL: https://github.com/roe-dl/weewx-gts
- Owner: roe-dl
- License: gpl-3.0
- Created: 2021-02-20T09:13:45.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-07-14T19:53:36.000Z (about 1 year ago)
- Last Synced: 2024-07-14T20:53:40.597Z (about 1 year ago)
- Topics: climate-data, gardening, growing-degree-days, gts, solar-energy, sun, vegetation, weewx, xtypes
- Language: Python
- Homepage:
- Size: 257 KB
- Stars: 12
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README-de.md
- Changelog: changelog
- License: LICENSE
Awesome Lists containing this project
README
# weewx-GTS
XType-Erweiterung für WeeWX
* "Grünlandtemperatursumme" (eine Form der Wachstumsgradtage)
* Sonnenenergie, ein zusätzlicher 'aggregation_type'
* 'dayET' und 'ET24' als Gegenstück zu 'dayRain' und 'rain24'
* (potentielle) Äquivalenttemperatur, Mischungsverhältnis,
absolute Luftfeuchtigkeit, (Sättigungs)Dampfdruck
* Tags für Zeitspannen mit einer anderen Tagesgrenze als Mitternacht
* `yearGDD` und `seasonGDD`
* `aggregation_type` `GDD` zur Berechnung der Wachstumsgradtage nach verschiedenen Verfahren## Melden von Fehlern
Wenn Sie Fehler melden wollen oder Hilfe benötigen, orientieren Sie sich
bitte beim Einreichen eines Issues an dem Artikel
[Help! Posting to weewx user](https://github.com/weewx/weewx/wiki/Help!-Posting-to-weewx-user)
bezüglich des Aufbaus und des Inhalts Ihres Issues.Beachten Sie, daß die Größen `GTS` und `yearGDD` nur berechnet werden
können, wenn Temperaturdaten vom Beginn des Jahres an vorliegen. Wenn
Ihre Datenbank nicht den ganzen Zeitraum vom Jahresanfang bis jetzt
umfaßt, können diese Werte nicht berechnet werden.Wenn Ihnen die Erzeugung der Internet-Seiten in WeeWX zu lange dauert,
lesen Sie bitte zuerst den WeeWX-Wiki-Artikel
[V5 Performance Troubleshooting](https://github.com/weewx/weewx/wiki/v5-performance-troubleshooting),
bevor Sie hier ein Issue einreichen. Wir können zwar versuchen, Dinge
zu optimieren, sind aber an gewisse Grenzen gebunden.## Installation:
1) Download
```shell
wget -O weewx-GTS.zip https://github.com/roe-dl/weewx-GTS/archive/master.zip
```2) Aufruf des Installationsprogramms
WeeWX bis Version 4.10
```shell
sudo wee_extension --install weewx-GTS.zip
```WeeWX ab Version 5.0
```shell
sudo weectl extension install weewx-GTS.zip
```3) Prüfung der Konfiguration in weewx.conf
```
[StdWXCalculate]
[[Calculations]]
...
GTS = software,archive
GTSdate = software, archive
utcoffsetLMT = software, archive
dayET = prefer_hardware, archive
ET24 = prefer_hardware, archive
yearGDD = software, archive
seasonGDD = software, archive
outVaporP = software,loop
outSVP = software,loop
outMixingRatio = software,loop
outEquiTemp = software,loop
outThetaE = software,loop
outHumAbs = software,loop
...
[Engine]
[[Services]]
...
xtype_services = ... ,user.GTS.GTSService
```
5) Neustart von WeeWXbei SysVinit-Systemen:
```shell
sudo /etc/init.d/weewx stop
sudo /etc/init.d/weewx start
```bei systemd-Systemen:
```shell
sudo systemctl stop weewx
sudo systemctl start weewx
```## Nutzung in Skins:
Die Werte, die diese Erweiterung bereitstellt, können in allen Skins
von WeeWX genutzt werden. Sie können als Zahlenwerte angezeigt und
als Diagramme dargestellt werden.### Grünlandtemperatursumme
Die Grünlandtemperatursumme gehört zur Gruppe der unter dem Überbegriff
Wachstumsgradtage zusammengefaßten empirischen Größen, die in Landwirtschaft
und Gartenbau verwendet werden. Sie liefert eine Aussage über den Verlauf
des Frühjahrs und wann das Pflanzenwachstum beginnt.#### Werte anzeigen (CheetahGenerator)
* `GTS`: der Wert der Grünlandtemperatursumme (Beispiel: `$current.GTS`)
* `GTSdate`: das Datum, wenn die Grünlandtemperatursumme den Wert von 200
überschreitet, was als Beginn des Frühlings betrachtet wird (Beispiel: `$day.GTSdate.last.format("%d.%m.%Y")`)
* `utcoffsetLMT`: Offfset der Ortszeit gegenüber UTC am Ort der Station
* `LMTtime`: ein String, der die Ortszeit bei der letzten Speicherung
angibt (nur mit ".raw" nutzbar, Beispiel: `$current.LMTtime.raw`)Die Werte können zusammen mit jedem Zeitraum verwendet werden, der in
WeeWX verfügbar ist. Es sind die "aggregation_types" `avg`, `min`,
`max`, `last`, `has_data` und `not_null` definiert. Nicht alle Zeiträume
sind mit jeder Zusammenfassung möglich.Unter https://weewx.com/docs/customizing.htm#Tags ist die Nutzung von
Tags in WeeWX beschrieben.#### Diagramme (ImageGenerator)
Zur Darstellung von Diagrammen müssen zusätzliche Abschnitte im Bereich
\[ImageGenerator\] der Datei skin.conf definiert werden. Nachfolgend
sind Beispiele angegeben.Im Abschnitt \[\[month_images\]\]:
```
[[[monthGTS]]]
line_gap_fraction = 0.04
yscale = 0,None,None
aggregate_type = avg
[[[[GTS]]]]
aggregate_interval = 86400
label = Grünlandtemperatursumme
```![]()
Im Abschnitt \[\[year_images\]\]:```
[[[yearGTS]]]
aggregate_type = avg
[[[[GTS]]]]
label = Grünlandtemperatursumme
```Diese Beispiele erzeugen Dateien mit den Namen 'monthGTS.png' bzw. 'yearGTS.png'.
Um sie anzuzeigen, ist ein entsprechendes \Tag in der Datei index.html.tmpl
einzutragen:
```![]()
```
```![]()
```### Wachstumsgradtage
#### Werte anzeigen (CheetahGenerator)
* `yearGDD`: Summe oder Integral der Wachstumsgrade vom Anfang des Jahres bis zum
zum aktuellen Moment
* `seasonGDD`: Summe oder Integral der Wachstumsgrade beginnend beim Datum von `GTSdate`
bis zum aktuellen Moment. Vor `GTSdate` ist der Wert undefiniert, ebenso nach dem
31. Oktober
* aggregation_type `GDD` (oder `growdeg`): Zur Berechnung der Wachstumsgradtage
für andere Größen als `outTemp`. Das kann jeder Temperaturwert sein, zum Beispiel
die Gewächshaustemperatur.#### Diagramme (ImageGenerator)
Im Abschnitt \[\[year_images\]\]:
```
[[[yearGDD]]]
aggregate_type = avg
[[[[yearGDD]]]]
label = Growing degree days
[[[[seasonGDD]]]]
label = Season growing degree days
```Dieses Beispiel erzeugt eine Graphikdatei namens "yearGDD.png". Um sie anzuzeigen,
muß das entsprechende <img> Tag zum Beispiel in index.html.tmpl eingefügt werden:```
![]()
```Die Graphik kann auch mit der Grünlandtemperatursumme kombiniert werden:
```
[[[yearGTS]]]
aggregate_type = avg
[[[[GTS]]]]
label = Grünlandtemperatursumme
[[[[yearGDD]]]]
label = Growing degree days
[[[[seasonGDD]]]]
label = Season growing degree days
```Um dieses Diagramm anzuzeigen, ist folgende Eintragung zum Beispiel in index.html.tmpl nötig:
```
![]()
```### Evapotranspiration
#### Werte anzeigen (CheetahGenerator)
* `dayET`: Summe von ET für den Kalendertag, so wie "dayRain" für den
Regen
* `ET24`: Summe von ET für die letzten 24 Stunden, so wie rain24 für den
Regen#### Diagramme (ImageGenerator)
`dayET` and `ET24` werden nicht in Diagrammen benutzt.
### Spezielle abgeleitete meteorologische Größen
WeeWX enthält bereits Berechnungsfunktionen für diverse abgeleitete
meteorologische Größen, die aber nur intern verwendet werden. Mit
dieser Erweiterung werden sie für die Berechnung im Abschnitt
`[StdWXCalculate]` und zur Nutzung auf Webseiten und in Diagrammen
bereitgestellt.Beachte: WeeWX enthält ein Beispiel, wie Erweiterungen programmiert
werden, das einen "Dampfdruck" (vapor pressure) bezeichneten
Wert liefert. In Wirklichkeit wird dort aber der Sättigungsdampfdruck
berechnet. Und die Formel ist auch eine andere als WeeWX sie intern
benutzt.Warnung: Dieser Teil ist noch im Alpha-Status.
#### Werte anzeigen (CheetahGenerator)
* `outSVP`: Sättigungsdampfdruck
* `outVaporP`: aktueller Dampfdruck
* `outMxingRatio`: Mischungsverhältnis
* `outHumAbs`: absolute Luftfeuchtigkeit
* `outEquiTemp`: Äquivalenttemperatur
* `outThetaE`: potentielle Äquivalenttemperatur
* `boilingTemp`: Siedetemperatur des Wassers in Abhängigkeit von
der Meereshöhe der Station und dem aktuellen Luftdruck#### Diagramme (ImageGenerator)
Um Diagramme mit diesen Werten darzustellen, ist es nicht nötig, sie
in der Datenbank zu speichern. Nur die Ausgangswerte Außentemperatur,
relative Luftfeuchtigkeit und Stationsluftdruck müssen vorhanden
sein. Dann erfolgt die Berechnung live bei der Darstellung des
Diagramms.Beispiel: absolute Luftfeuchtigkeit
```
[[[dayhumabs]]]
unit = gram_per_meter_cubed
[[[[outHumAbs]]]]
```
#### Diagramme (Belchertown skin)
Beispiel: relative und absolute Luftfeuchtigkeit in einem Diagramm:
```
[[humidity]]
title = "Humidity"
[[[outHumidity]]]
name = "relative
[[[outHumAbs]]]
name = "absolute"
yAxis = 1
unit = gram_per_meter_cubed
[[[[numberFormat]]]]
decimals = 1
```
### Sonnenenergie
"radiation" und "maxSolarRad" sind in WeeWX standardmäßig bereitgestellte
Größen. Diese Erweiterung stellt den zusätzlichen
"aggregation_type" `energy_integral` zur Verfügung, der die Sonnenenergie
berechnet, die über den Berechnungszeitraum am Meßort eingegangen ist
bzw. maximal möglich wäre.Beachte: Ein Integral ist nicht einfach die Summe der Meßwerte. Details
sind unten unter Algorithmus beschrieben.#### Werte anzeigen (CheetahGenerator)
`energy_integral` kann nur zusammen mit Tags für Zeiträume wie etwa
`$day`, `$yesterday`, `$week`, `$month`, and `$year` benutzt werden.`energy_integral` wird wie andere "aggregation_types", z.B. `min`,
`max` oder `sum` benutzt.Beispiel:
`$yesterday.radiation.energy_integral` zeigt die gesamte Sonnenenergie
an, die am Vortag eingegangen ist.Um den Wert in kWh/m^2 anstelle von Wh/m^2 anzuzeigen:
`$yesterday.radiation.energy_integral.kilowatt_hour_per_meter_squared`#### Diagramme (ImageGenerator)
Im Abschnitt \[\[month_images\]\]:
```
[[[monthRadiationEnergy]]]
line_gap_fraction = 0.04
#y_label = "Wh/m²"
[[[[radiation]]]]
label = "Sonnenenergie (täglich gesamt)"
data_type = radiation
aggregate_type = energy_integral
aggregate_interval = 86400
```Dieses Beispiel erzeugt eine Bilddatei namens 'monthRadiationEnergy.png'.
Um sie darzustellen, muß das entsprechende \Tag z.B. in index.html.tmpl
eingefügt werden:```
![]()
```#### Diagramme (Belchertown skin)
Die Belchertown Skin benutzt eine andere Graphik-Engine (Highcharts).
Deshalb ist die Syntax etwas anders.Im Abschnitt \[month\] oder \[year\] von graphs.conf:
```
[[Sonnenenergie]]
title = "Sonnenenergie (täglich gesamt)"
aggregate_type = energy_integral
aggregate_interval = 86400
yAxis_label = Energie
yAxis_label_unit = "Wh/m²"
[[[radiation]]]
```Es wird kein \
Tag benötigt.
#### Textdatei
Im "examples"-Verzeichnis ist eine Vorlage (template) zu finden, die
eine Textdatei mit den tabellierten Werten von Sonnenenergie und
Sonnenstrahlung erzeugt. Um sie zu nutzen, muß die Datei in das
Skin-Verzeichnis kopiert werden. In `skin.conf` sind dann folgende
Eintragungen vorzunehmen:```
[CheetahGenerator]
...
[[SummaryByYear]]
...
[[[sun_year]]]
encoding = strict_ascii
template = sun-%Y.txt.tmpl
```Damit wird für jedes Jahr, für das Daten in der Datenbank verfügbar
sind, eine Datei erzeugt.### Bodenfeuchte
WeeWX definiert die Einheitengruppe `group_moisture` mit der Einheit
`centibar`, wohl in Anlehnung an die von Davis Instruments vertriebene
Bodenfeuchte-Bodentemperatur-Einheit 6345. Diese Einheit mißt genaugenommen
nicht die Feuchte sondern die Saugspannung.Anstelle der Saugspannung, gemessen in einer Druckeinheit, wird auch
die logarithmische Größe pF-Wert benutzt. Diese WeeWX-Erweiterung
stellt diese Größe als zusätzliche Einheit `pF_value` für
`group_moisture` bereit. Sie ermöglicht gleichzeitig, auch andere
Druckeinheiten als nur `centibar` zu nutzen.### Besondere Zeitspannen
In der Meteorologie werden Zeitspannen zuweilen nicht von Mitternacht zu Mitternacht
der geltenenden Zonenzeit gemessen, sondern es werden andere Zeitpunkte zur Trennung
der Tage verwendet, zum Beispiel 09:00 Uhr. Die folgenden Tags werden genau so wie
`$hour`, `$day` usw. benutzt.#### Beliebiges Offset zu UTC
* `$offsethour(data_binding=None, hours_ago=0, dayboundary=None)`
* `$offsetday(data_binding=None, days_ago=0, dayboundary=None)`
* `$offsetyesterday(data_binding=None, dayboundary=None)`
* `$offsetmonth(data_binding=None, months_ago=0, dayboundary=None)`
* `$offsetyear(data_binding=None, years_ago=0, dayboundary=None)`#### Mittlere Ortszeit am Ort der Station
* `$LMThour(data_binding=None, hours_ago=0)`
* `$LMTday(data_binding=None, days_ago=0)`
* `$LMTyesterday(data_binding=None)`
* `$LMTmonth(data_binding=None, months_ago=0)`
* `$LMTyear(data_binding=None, years_ago=0, month_span=None)`Die Tagesgrenze für diese Tags ist Mitternacht nach der Mittleren
Ortszeit am Ort der Station.Der optionale Parameter `month_span` ergibt eine Zeitspanne von
einigen Monaten innerhalb eines gegebenen Jahres. Zum Beispiel
ist `$LMTyear(month_span=(6,8)).outTemp.avg` die Durchschnittstemperatur
des Sommers des aktuellen Jahres.
`$LMTyear(years_ago=1,month_span=(12,2)).outTemp.max` ist die
Maximaltemperatur der letzten Windersaison.Das Attribut `days` kann verwendet werden, um mittels `$LMTmonth`
bzw. `$LMTyear` eine Schleife über die Tage des Monats bzw. Jahres
zu bilden.### Zeitspanne `daylight`
* `$daylight(timestamp=None, data_binding=None, days_ago=0, horizon=None, use_center=False)`:
Zeitspanne von
Sonnenaufgang bis SonnenuntergangWenn `timestamp` None ist (das ist der Standard), dann ist es die Zeitspanne
von Sonnenaufgang bis Sonnenuntergang am gegenwärtigen Tag oder an
dem Tag, der `day_ago` Tage zurückliegt.Sonst kann `timestamp` ein Wert der Klasse TimespanBinder, eine Zeitspanne
oder ein Zeitpunkt sein. `$daylight` ist dann die Zeitspanne
von Sonnenaufgang bis Sonnenuntergang an dem Tag, der durch
die Zeitspanne oder den Zeitpunkt definiert wird.* `$LMTmonth(data_binding=None, months_ago=0).daylights(horizon=None, use_center=False)`:
Folge von täglichen Zeitspannen, pro Tag jeweils die
Zeit von Sonnenaufgang zu Sonnenuntergang* `$LMTyear(data_binding=None, months_ago=0).daylights(horizon=None, use_center=False)`:
Folge von täglichen Zeitspannen, pro Tag jeweils die
Zeit von Sonnenaufgang zu SonnenuntergangDie Optionen `horizon` und `use_center` entsprechend denen, die im
[WeeWX Benutzerhandbuch](https://weewx.com/docs/customizing.htm#Heavenly_bodies)
für `$almanac` beschrieben sind. Sind sie nicht angegeben, werden
Standardwerte benutzt.Beispiele:
* Durchschnittstemperatur für die Zeit zwischen Sonnenaufgang und
Sonnenuntergang, also während der Zeit des Tageslichtes
```
$daylight.outTemp.avg
```
* Tabelle mit dem Tag des Monats und der zugehörigen
Durchschnittstemperatur für die Zeit des Tageslichts des
jeweiligen Tages
```
#for $span in $LMTmonth.daylights
$span.dateTime.format("%d"): $span.outTemp.avg
#end for
```
* Regen am Tag und in der Nacht
```
#from weewx.units import ValueTuple, ValueHelper
Day
Day rain
Night rain
#for $dd in $week.days
#set $light=$daylight(timestamp=$dd)
#set $nightrain=$dd.rain.sum.raw-$light.rain.sum.raw
#set $nightrain_vh=ValueHelper(ValueTuple($nightrain,$unit.unit_type.rain,'group_rain'),formatter=$station.formatter)
$dd.start.format("%d.%m.%Y")
$light.rain.sum
$nightrain_vh
#end for
```
* Sonnenaufgang, Sonnenuntergang und Tageslichtlänge unter
Verwendung der `timestamp`-Option
```
sunrise
sunset
daylight
#for $dd in $week.days
$dd.format("%A")
$daylight(timestamp=$dd).start
$daylight(timestamp=$dd).end
$daylight(timestamp=$dd).length
#end for
```## Algorithmus:
### Grünlandtemperatursumme (GTS)
* Grundlage der Berechnuung ist der Tagesmittelwert der Temperatur. Wenn
er größer als 0°C ist, wird er verwendet, anderenfalls nicht.
* Im Januar wird der Mittelwert mit 0,5 multipliziert.
* Im Februar wird der Mittelwert mit 0,75 multipliziert.
* Ab März werden die Mittelwerte unverändert verwendet.
* Um die Grünlandtemperatursumme eines Tages zu erhalten, werden jetzt
alle die Mittelwerte wie vorstehend beschrieben zusammenaddiert.
* Der Tag, an dem der Wert 200 überschreitet, wird als Beginn des
Frühlings betrachtet. Man geht davon aus, daß dann der Boden
wieder genügend Stickstoff aufnehmen kann, um nachhaltiges
Pflanzenwachstum zu ermöglichen.
* Die Grünlandtemperatursumme selbst wird bis zum 31. Mai berechnet.
Der Endwert wird als Maß für die Qualität des Frühlings angesehen.### Sonnenenergie
Die Sonnenenergie wird berechnet, indem alle Strahlungsmeßwerte
("radiation") mit dem jeweiligen Meßintervall ("interval")
multipliziert. Alle die Produkte aus der Multiplikation werden
über den Berechnungszeitraum addiert. Dabei wird der Strahlungswert
als während dieses
Zeitraumes als konstant angenommen. Das ist nicht hunderprozentig
korrekt, aber der Fehler wird als gering genug angenommen, daß man
ihn vernachlässigen kann.Während die Einheit der Sonnenstrahlung W/m^2 ist, ist die Einheit
der Sonnenenergie Wh/m^2 bzw. kWh/m^2.### Tageslichtzeitraum
`$daylight` verwendet zur Berechnung das Modul von WeeWX, das
auch von `$almanac` verwendet wird, aber es berücksichtigt dabei
zusäztliche Informationen.Während `$almanac.sunrise` und `$almanac.sunset` Sonnenaufgang und
Sonnenuntergang unter Verwendung der Temperatur und des Luftdrucks
zur Berechnungszeit ermitteln, berücksichtigt `$daylight` Temperatur
und Luftdruck der Zeit, für die die Tageslichtzeitspanne berechnet
wird, soweit Datenbankeinträge für diese Zeit vorhanden sind. Es
berechnet zunächst ungefähre Sonnenaufgangs- und Sonnenuntergangszeiten
für die ICAO-Standardatmosphäre bei 15°C und 1013,25 mbar. Dann wird
die tatsächliche Temperatur und der tatsächliche Luftdruck für diese
beiden Zeitpunkte ermittelt. Anschließend werden Sonnenaufgang und
Sonnenuntergang erneut berechnet, wobei der Berechnung die jeweilige
Temperatur und der jeweilige Luftdruck zu Grunde gelegt werden.`$daylight(timestamp=$X).start` liefert damit für Zeitpunkte X in
der Vergangenheit eine genauere Sonnenaufgangszeit als
`$almanac(almanac_time=X).sunrise`. Gleiches gilt mit
`$daylight(timestamp=$X).end` sinngemäß für den Sonnenuntergang
und mit `$daylight(timestamp=$X).length` für die Tageslichtlänge.
(Stand: WeeWX 4.9.2)## Quellen:
* http://www.groitzsch-wetter.de/HP/green1.html
* http://www.regionalwetter-sa.de/sa_gruenland.php
* WeeWX-Beispiel examples/stats.py## Verweise (Links):
* [Übersicht zu WeeWX auf Deutsch](https://www.woellsdorf-wetter.de/software/weewx.html)
* [WeeWX](http://weewx.com) - [WeeWX Wiki](https://github.com/weewx/weewx/wiki)
* [Belchertown Skin](https://obrienlabs.net/belchertownweather-com-website-theme-for-weewx/) - [Belchertown skin Wiki](https://github.com/poblabs/weewx-belchertown/wiki)
* [Wöllsdorfer Wetter](https://www.woellsdorf-wetter.de)
* [XTypes performance](https://github.com/weewx/weewx/wiki/XTypes-performance)
(Dieser Artikel gibt Hinweise, wenn die HTML-Seiten-Erzeugung zu lange
dauert.)