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 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) 132-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?

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

von Werner » 12 Feb 2023 19:23

Unter Archive ist GTS und GTSdate nicht zu finden. Müssen die beiden ergänzt werden?
Nein,
den diese Werte werden immer direkt berechnet. Sind auch nur Tages-Werte!

Hast Du mal eine "Seite" wo ich mir das ansehen kann?

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

von rsgaf » 12 Feb 2023 12:54

Ok, jetzt habe ich das System halbwegs verstanden :)
Die entsprechenden Einträge sind in der current.inc vorhanden, daran kann es also nicht liegen.
Muss eventuell an der Datenbank selbst noch etwas für GTS und GTSdate erweitert werden?
Ich habe mal ein Backup der weewx.sdb mit dem Windows-Editor geöffnet (hab leider grad nichts passendens da), GTS und GTSdate sind nicht zu finden.

Nachtrag:
Gerade habe ich eine Seite zurück deinen Hinweis auf DB Browser for SQLite gesehen und gleich installiert.
Unter Archive ist GTS und GTSdate nicht zu finden. Müssen die beiden ergänzt werden?
Wenn ja, so wie es ebenfalls dort beschrieben wird?

Code: Alles auswählen

sudo echo "y" | wee_database --add-column=GTS --type=REAL
sudo echo "y" | wee_database --add-column=GTSdate --type=REAL

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

von Werner » 06 Feb 2023 21:32

Darüber wird der Wert geholt:

Code: Alles auswählen

   #else
     #set $xt = getattr($current, $x[0])
und hiermit ausgeben:

Code: Alles auswählen

    #else
      <tr>
        <td class="label"><font color=$color>$obs.label[$x[0]]</font></td>
        <td class="data">$xt</td>
      </tr>
('GTS','#25ea2f','current','1'),
$x[0]= GTS
$x[1]= #25ea2f
$x[2]= current
$x[3]= 1
Wenn $x[3]= 0 wird dieser Wert ignoriert.

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

von rsgaf » 06 Feb 2023 18:49

Also muss die $current.GTS nicht in den unteren Abschnitt der current.inc rein?
$day.GTSdate wird dort ja mit aufgeführt:

Code: Alles auswählen

 #elif $x[0] == 'GTSdate'
      <tr>
        <td class="label"><span><font color=$color>$obs.label[$x[0]]</font></span></td>
          <td class="data">$day.GTSdate.last.format("%d.%m.%Y")</td>
      </tr>
Wie funktioniert dann das ein-/ausblenden via ('GTS','#25ea2f','current','1'), worauf greift das zu?
Das habe ich noch nicht verstanden :oops:

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

von Werner » 05 Feb 2023 20:03

Wo ist die $current.GTS hinterlegt? Ich finde die weder in weewx.conf
Die Definition findet in der weewx.conf statt:

Code: Alles auswählen

[StdWXCalculate]
   [[Calculations]]
      GTS = software, archive
 

Nach oben