Weewx mit Seasons skin und wirklich allen möglichen Sensoren

Antwort erstellen

Bestätigungscode
Gib den Code genau so ein, wie du ihn siehst; Groß- und Kleinschreibung wird nicht unterschieden.
Smilies
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von xray77 » 01 Jun 2024 13:58

Hallo Werner,
Vielen Dank für Deine Hilfestellung!
Werde es in Angriff nehmen, wenn das Wetter hier schlechter ist.. Aktuell haben wir hier im Norden strahlenden Sonnenschein bei 25 Grad.
Ich hoffe sehr, das die Hochwasserlage bei Dir noch unkritisch ist und das auch bleibt!
Beste Grüsse
Michael

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von Werner » 01 Jun 2024 12:43

wo ich in den Grafik-Referenzen "sunshine_time" drin stehen habe auf sunshineDur ändern,
Ja!
Würde das dann auch mir der sunshineDur gehen
Ja - die eigentlichen Einheit dafür ist ja Sekunden
Dann müsste ich noch deine modifizierte "belcherton.py" einspielen
Nur wenn Du auch Sonnenscheinverlauf (und/oder Regendauerverlauf) darstellen möchtest
Und dann dein modifiziertes sunshine_duration.py verwenden
Meine modifzierte Datei heißt sunrainduration.py (kann auch die Regendauer)

Siehe dazu die Github-Seite:
https://github.com/WernerKr/weewx-sunrainduration

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von xray77 » 01 Jun 2024 12:29

Hallo Werner,
Habe die WeeWx-Version 5.0.3 laufen.
Wenn ich den Namen in der DB ändere, dann muss ich später überall da, wo ich in den Grafik-Referenzen "sunshine_time" drin stehen habe auf sunshineDur ändern, oder? Und ich habe ja in den Grafiken als Einheit Minuten drin bzw. lasse das in der index.html.tmpl dann gleich in Stunden ausgeben. Würde das dann auch mir der sunshineDur gehen?

Dann müsste ich noch deine modifizierte "belcherton.py" einspielen
Und dann dein modifiziertes sunshine_duration.py verwenden

Wäre das so richtig?
Gruss
Michael

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von Werner » 31 Mai 2024 19:48

Nur deine Codezeile in das Originalscript "einzufügen wird ja sicherlich nichts bringen, oder?
Nein wird nicht funktionieren.

Nun so kompliziert ist das nicht!
Welche WeeWx Version verwendest Du?

Dazu muss sowie weewx gestoppt werden/sein
Ich gehe von einem Debian-System aus (sonst dürften sich die Pfade unterscheiden)
Datenbank (wahrscheinlich unter /var/lib/weewx/weewx.sdb ) sichern.

WeeWx4;

Code: Alles auswählen

sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --rename-column=sunshine_time --to-name=sunshineDur
#Wenn man nur eine Instanz nutzt:
sudo echo "y" | wee_database --rename-column=sunshine_time --to-name=sunshineDur
WeeWx5:

Code: Alles auswählen

 weectl database rename-column sunshine_time  sunshineDur
Sollte wirklich was schief gehen, kann man ja sofort wieder auf die gesicherte sdb-Datei zurückgreifen.

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von xray77 » 31 Mai 2024 19:29

Hallo Werner,
Oha, an die Datenbank von WeeWx traue ich mich nicht so wirklich ran.. ehrlichgesagt. Wenn da etwas schiefläuft, sind womöglich die Daten seit 2002 futsch und es war eine ziemliche Mühe, diese Daten alle in WeeWx zu importieren bzw. das hat sehr lange gedauert.
Da würde ich mich wohl nur mit einer Schriff für Schritt-Anleitung rantauen.. ;-)
Soweit läuft das originale Script ja auch ganz gut.
Nur deine Codezeile in das Originalscript "einzufügen wird ja sicherlich nichts bringen, oder?
Beste Grüsse
Michael

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von Werner » 31 Mai 2024 14:54

Du musst eigentlich nur Dein jetzt vorhandenes Datenbank-Feld
'sunshine_time' ändern zu sunshineDur

Und dann in in der graphs.conf
eben auch 'sunshine_time' durch 'sunshineDur' ersetzen.
Wenn Du sinshine_time noch vonanders verwendest (was ich nicht vermute)
dann dort auch austauschen.

Ich hab mir sagen lassen müssen, man sollte in WeeWx keine wichtigen Felder mit einem
Unterstrich im Feldnamen verwenden. z.B. wenn man in Belchertown MQTT nutzen will, geht das nicht.
wo der änderbare Koeffizient im originalen sunshineduration-Script steht
Er verwendet keinen Koeffizient mehr! früher war das so

Code: Alles auswählen

    def sunshineThresh(self, mydatetime):
        coeff = 0.9  # change to calibrate with your sensor

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von xray77 » 31 Mai 2024 13:52

Hallo,
Oh, das scheinen mir doch recht viele Eingriffe zu sein, die für die Verwendung des Skriptes von Werner notwendig sind. Es läuft ja bei mir mit dem originalen Script auch schon recht gut, von daher ist mir das jetzt zu viel Aufwand. Ich könnte ja auch im originalen Script den Koeffizenten einfach ändern, um die Sonnenscheindauer anpassen. Mehr bräuchte ich nicht, da ich schon alles wie gewünscht im Belchertown-Skin integriert habe.

Vielleicht kann mir jemand von euch sagen, wo der änderbare Koeffizient im originalen sunshineduration-Script steht?
Habe es mal hier angehängt:

import syslog
from math import sin, cos, pi, asin
from datetime import datetime
import time
import weewx
from weewx.wxengine import StdService

try:
# Test for new-style weewx logging by trying to import weeutil.logger
import weeutil.logger
import logging

log = logging.getLogger(__name__)


def logdbg(msg):
log.debug(msg)


def loginf(msg):
log.info(msg)


def logerr(msg):
log.error(msg)

except ImportError:
# Old-style weewx logging
import syslog


def logmsg(level, msg):
syslog.syslog(level, 'meteotemplate: %s' % msg)


def logdbg(msg):
logmsg(syslog.LOG_DEBUG, msg)


def loginf(msg):
logmsg(syslog.LOG_INFO, msg)


def logerr(msg):
logmsg(syslog.LOG_ERR, msg)

weewx.units.obs_group_dict['sunshine_time'] = 'group_interval'

class SunshineDuration(StdService):
def __init__(self, engine, config_dict):
# Pass the initialization information on to my superclass:
super(SunshineDuration, self).__init__(engine, config_dict)

# Start intercepting events:
self.bind(weewx.NEW_LOOP_PACKET, self.newLoopPacket)
self.bind(weewx.NEW_ARCHIVE_RECORD, self.newArchiveRecord)
self.lastdateTime = 0
self.LoopDuration = 0
self.sunshineSeconds = 0
self.lastSeuil = 0
self.firstArchive = True
self.cum_time=0

def newLoopPacket(self, event):
"""Gets called on a new loop packet event."""
radiation = event.packet.get('radiation')
if radiation is not None:
if self.lastdateTime == 0:
self.lastdateTime = event.packet.get('dateTime')
self.LoopDuration = event.packet.get('dateTime') - self.lastdateTime
self.lastdateTime = event.packet.get('dateTime')
seuil = self.sunshineThreshold(event.packet.get('dateTime'))
if radiation > seuil and seuil > 0:
self.sunshineSeconds += self.LoopDuration
self.cum_time += self.LoopDuration
self.lastSeuil = seuil
logdbg("Calculated LOOP sunshine_time = %f, based on radiation = %f, and threshold = %f" % (
self.LoopDuration, radiation, seuil))

def newArchiveRecord(self, event):
"""Gets called on a new archive record event."""
radiation = event.record.get('radiation')
seuil = self.sunshineThreshold(event.record.get('dateTime'))
if self.lastdateTime == 0 or self.firstArchive: # LOOP packets not yet captured : missing archive record extracted from datalogger at start OR first archive record after weewx start
event.record['sunshine_time'] = 0.0
if radiation is not None:
self.lastSeuil = seuil
if radiation > seuil and seuil > 0:
event.record['sunshine_time'] = event.record['interval']
event.record['is_sunshine']=1
else:
event.record['is_sunshine']=0
if self.lastdateTime != 0: # LOOP already started, this is the first regular archive after weewx start
self.firstArchive = False
loginf("Estimated sunshine duration from archive record= %f min, radiation = %f, and threshold = %f" % (
event.record['sunshine_time'], event.record['radiation'], self.lastSeuil))
else:
if radiation is not None:
if radiation > seuil and seuil > 0:
event.record['is_sunshine']=1
else:
event.record['is_sunshine']=0
if self.cum_time > 0: # do not divide by zero!
event.record['sunshine_time'] = self.sunshineSeconds/self.cum_time * event.record['interval']
else:
event.record['sunshine_time'] = 0
loginf("Sunshine duration from loop packets = %f min" % (event.record['sunshine_time']))

self.sunshineSeconds = 0
self.cum_time = 0

def sunshineThreshold(self, mydatetime):
utcdate = datetime.utcfromtimestamp(mydatetime)
dayofyear = int(time.strftime("%j", time.gmtime(mydatetime)))
theta = 360 * dayofyear / 365
equatemps = 0.0172 + 0.4281 * cos((pi / 180) * theta) - 7.3515 * sin(
(pi / 180) * theta) - 3.3495 * cos(2 * (pi / 180) * theta) - 9.3619 * sin(
2 * (pi / 180) * theta)

latitude = float(self.config_dict["Station"]["latitude"])
longitude = float(self.config_dict["Station"]["longitude"])
corrtemps = longitude * 4
declinaison = asin(0.006918 - 0.399912 * cos((pi / 180) * theta) + 0.070257 * sin(
(pi / 180) * theta) - 0.006758 * cos(2 * (pi / 180) * theta) + 0.000908 * sin(
2 * (pi / 180) * theta)) * (180 / pi)
minutesjour = utcdate.hour * 60 + utcdate.minute
tempsolaire = (minutesjour + corrtemps + equatemps) / 60
angle_horaire = (tempsolaire - 12) * 15
hauteur_soleil = asin(sin((pi / 180) * latitude) * sin((pi / 180) * declinaison) + cos(
(pi / 180) * latitude) * cos((pi / 180) * declinaison) * cos((pi / 180) * angle_horaire)) * (180 / pi)
if hauteur_soleil > 3:
seuil = (0.73 + 0.06 * cos((pi / 180) * 360 * dayofyear / 365)) * 1080 * pow(
(sin(pi / 180 * hauteur_soleil)), 1.25)
else :
seuil=0
return seuil

Besten Dank schon mal und auch Danke für die vielen Informationen!
Michael

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von Werner » 30 Mai 2024 17:34

Die Beschreibung wurde überarbeitet
#sunshine_time = Value when sunshine duration is recorded in W/m²
#sunshineDur = Sunshine duration value in the archive interval in seconds
#rainDur = rain duration value in the archive interval in seconds
#hailDur = rain duration value (Ecowitt-Piezo) in the archive interval in seconds
#sunshineDur_2 = Sunshine duration value in the archive interval in seconds for 2. DAVIS station (e.g. live or console)
#rainDur_2 = Rain duration value in the archive interval in seconds for 2. DAVIS station (e.g. live or console)

weewx.conf:
[StdReport]
[[Defaults]]
[[[Units]]]
[[[[Groups]]]]
group_deltatime = hour

[RadiationDays]
min_sunshine = 120 # Entry of extension radiationhours.py, if is installed (= limit value)
sunshine_coeff = 0.8 # Factor from which value sunshine is counted - the higher the later
sunshine_min = 18 # below this value (W/m²), sunshine is not taken into account.
sunshine_loop = 1 # use for sunshine loop packet (or archive: sunshine_loop = 0)
rainDur_loop = 0 # use for rain duration loop packet - default is not
hailDur_loop = 0 # use for piezo-rain duration loop packet - default is not
sunshine_log = 0 # should not be logged when sunshine is recorded
rainDur_log = 0 # no logging for rain duration
hailDur_log = 0 # no logging for piezo-rain duration

rain2 = 0 # no rain2 available (Davis Live, Davis Console)
sunshine2 = 0 # no shunhine2 available (Davis Live, Davis Console)
sunshine2_loop = 1
rainDur2_loop = 0
sunshine2_log = 0
rainDur2_log = 0


add_sunrain.sh:
#!/bin/bash
sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --add-column=sunshine_time --type=REAL

sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --add-column=sunshineDur --type=REAL
sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --add-column=rainDur --type=REAL
sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --add-column=hailDur --type=REAL

sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --add-column=sunshineDur_2 --type=REAL
sudo echo "y" | wee_database --config=/etc/weewx/weewx.conf --add-column=rainDur_2 --type=REAL
Siehe auch Manfreds Beitrag!

Wenn Du die Verlaufsdauer des Sonnenscheins im Belchertown-skin möchtest, muss Du auch meine geänderte belchertown.py Datei verwenden.


Wobei es bei Github jetzt einen eigenen Eintrag für sunrainduration gibt und hier dann für
sunshine_time -> sunshinetime verwendet wird!
Es sind dort auch Beispiele für den Belchertown Skin enthalten.
https://github.com/WernerKr/weewx-sunrainduration

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von ManfredK » 30 Mai 2024 14:31

Hallo Michael,

Ich bin zwar nicht Werner, aber bei mir funktioniert es mit
  • $day.sunshineDur.sum
  • $month.sunshineDur.sum
Ich weiß nicht, ob du die Sonnenscheindauer noch in weiteren Darstellungen (z.B. Diagramm) über einen längeren Zeitraum darstellst.
In diesem Fall könnte es Probleme geben, da die Variable sunshine_time in Werner seiner Erweiterung den Wert der Solarstrahlung angibt, ab dem Sonnenschein angenommen wird. Diese Dauer wird dann unter der Variable sunshineDur erfasst.
Somit ist lt. Originalerweiterung die Variable sunshine_time eine Dauer, und lt. Werner seiner Erweiterung ein Grenzwert der Solarstrahlung.

Da ich die sunshineDur seit 2011 auswerte, habe ich für mich die sunshine_time für die historischen Daten über die maxSolarRad näherungsweise berechnet, und wenn nun die radiation > sunshine_time war habe ich 5 min. Sonnenschein angenommen.

Ich denke Werner wird meine Aussage korrigieren, für den Fall, dass ich Blödsinn verzapft habe.

siehe auch:
viewtopic.php?f=26&t=10711

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von xray77 » 29 Mai 2024 23:11

Werner hat geschrieben: 02 Nov 2021 15:44
https://github.com/Jterrettaz/sundurati ... uration.py - Berechnung der Sonnenscheindauer.
Welches allerdings von mir modifiziert wurde https://www.pc-wetterstation.de/weewx/u ... uration.py
und die Konfiguration via die weewx.conf und diesem Eintrag gemacht wird:
[RadiationDays]
min_sunshine = 120 #andere Erweitung = Grenzwert
sunshine_log = 0 # es soll nicht protokolliert werden, wenn Sonnenschein erfasst wird
sunshine_coeff = 0.72 #Faktor ab welchen Wert Sonnenschein gezählt wird - je höher um so später
sunshine_min = 18 # unter diesem Wert, wird Sonnenschein nicht berücksichtigt.

Beispiel für den Skin (welcher unter allen Station von Weewx läuft - hier VantagePro)
https://www.pc-wetterstation.de/wetter/weewx/

... und wer in den Dateien stöbern will (lasse ich hier zu), es gibt noch mehr Änderung von mir:
https://www.pc-wetterstation.de/weewx
Hallo Werner,
Ich habe Deine modifizierte Datei bei mir ausprobiert, vorher lief die originale Datei des Entwicklers. Leider werden dann in meinem Belchertown-Skin die Sonnenshein-Werte nicht mehr angezeigt.
Da steht dann so etwas:
Sonne heute: $day.sunshine_time.sum.hour -> also wird die Variable in der index.html.tmpl nicht mehr übersetzt..
Sonne Monat: $month.sunshine_time.sum.hour

Heisst die Sonnenschein-Variable in deinem Script denn anders als "sunshine_time" wie im originalen Script? Ich fand bei deinem Script die Konfigurationsmöglichkeit in der weewx.conf gut, deshalb habe ich das ausprobiert. Nachdem ich die originale Datei wieder zurückgespielt habe, ist wieder alles korrekt, wird natürlich auch wieder protokolliert. (sudo journalctl -f).
Kann ich etwas an meiner Vorlagendatei ändern, damit auch mit deinem Script die Sonnenstunden wieder korrekt angezeigt werden?
Beste Grüsse,
Michael

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von rsgaf » 13 Feb 2023 20:26

Die Koordinaten sind in meiner weewx.conf natürlich nicht mit xx.xxx eingetragen, die wollte ich jetzt nur nicht in die breite Öffentlichkeit tragen :D
Die sollten aber eigentlich korrekt eingetragen sein, die Sonne und Mond Daten und die Koordinaten bei den Stationsdaten werden richtig angezeigt.
Dann frage ich mal GTS Autorin nach.

Vielen herzlichen Dank für Deine Hilfe und Deine geduldigen Erklärungen :)

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von Werner » 13 Feb 2023 19:24

Wenn in Deiner weewx.conf
tatsächlich, dass so steht - also ohne gültige latitude und longitude Daten

Code: Alles auswählen

    # Latitude in decimal degrees. Negative for southern hemisphere
    latitude = XX.XXX
    # Longitude in decimal degrees. Negative for western hemisphere.
    longitude = XX.XXX
dann liegt es daran.
Wenn die Werte korrekt sind, habe ich auch keine Idee mehr.
Ich würde dann bei der Authorin der GTS-Erweiterung (Johanna Roedenbeck)
direkt nachfragen.

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von rsgaf » 13 Feb 2023 17:04

In der syslog und auch in der user.log ist dieser Eintrag nach dem WeeWx Start vorhanden:

Code: Alles auswählen

weewx[12195] INFO user.GTS: Version 0.9a1
weewx[12195] INFO user.GTS: Local mean time (LMT) UTC offset 0:51:36.132960
Der Eintrag nachdem ein Datensatz gespeichert wurde ist in beiden Log-Files nicht zu finden.

Ich hab mir die weewx.conf nochmal angeschaut (auch hier angehängt), die Einträge

Code: Alles auswählen

[StdWXCalculate]
    [[Calculations]]
        ...
        GTS = software,archive
        GTSdate = software, archive
        utcoffsetLMT = software, archive
        dayET = prefer_hardware, archive
        ET24 = prefer_hardware, archive
        yearGDD = software
        seasonGDD = software
        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
sind drinnen...
Dateianhänge
weewx.zip
(8.06 KiB) 136-mal heruntergeladen

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von Werner » 12 Feb 2023 20:24

Ist bei Dir so ein Eintrag in der syslog (oder auch user.log) - Datei wenn WeeWx gestartet wird?

Code: Alles auswählen

weewx[4370] INFO user.GTS: Version 0.9a1
weewx[4370] INFO user.GTS: Local mean time (LMT) UTC offset 0:55:16.533360
Nachdem danach ein Datensatz gespeichert wurde:

Code: Alles auswählen

weewx[4370] INFO user.GTS: GTS initialized 2023-01-01 00:04:43 
weewx[4370] INFO user.GTS: GTS 30.465319374108006, 42 loops
Wenn nicht, liegt ein Fehler in der weewx.conf Datei vor.

Dann bräuchte ich mal Deine weewx.conf - Datei

Re: Weewx mit Seasons skin und wirklich allen möglichen Sensoren

von rsgaf » 12 Feb 2023 20:02

Schade, wäre zu einfach gewesen :lol:
Ich dachte dadurch, dass die Werte für die Grünlandtemp 200 aufaddiert werden, diese auch in der Datenbank sein müssten.

Eine Webseite mit meinen Daten habe ich nicht, das ganze läuft rein lokal. Was wäre interessant zu sehen, kann ich die Dateien eventuell zippen und hochladen?

Nach oben