Wetterstationsforum.info - Archiv

Software => Linuxforum => Thema gestartet von: rodolfo am 03.05.2020, 11:06:22

Titel: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: rodolfo am 03.05.2020, 11:06:22
Hallo zusammen,

ich betreibe einen Netatmo Wetterstation. Die zugehörige Webseiten findet ihr hier --> https://station.cyberninja.de/ (https://station.cyberninja.de/).

Die Auswertung geschieht mit WeeWX, dies läuft auf einem Raspberry und generiert die beiden Webseiten. So weit. so gut!

Da ich noch keinen eigenen UV und AQ Sensor habe, hole ich mir die entsprechenden Daten von nahegelegenen Stationen und zeige diese direkt im Template an. Nun würde ich diese Daten allerdings gerne in die WeeWX Datenbank mit aufnehmen (für Statistiken und Auswertungszwecke). Wie gehe ich da vor? Kann mich diesbezüglich eventuell jemand auf den richtigen Weg bringen?

Vielen Dank vorab
Viele Grüße
Rolf
Titel: Re: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: gargamel am 03.05.2020, 13:48:05
Was ist ein AQ-Sensor?
Herzlich willkommen hier.
Titel: Re: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: olicat am 03.05.2020, 14:03:33
Hi!

AQ wird wohl Air Quality bedeuten. Also Feinstaubsensor vermutlich.

Oliver
Titel: Re: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: rodolfo am 03.05.2020, 14:05:40
Hallo Wilfried,

danke schön.  :)

Ein Feinstaub Sensor zum messen der Luftqualität (Air Qualität).

Viele Grüße
Rolf

edit: da war jemand schneller
Titel: Re: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: gargamel am 03.05.2020, 16:33:44
Man immer diese Abkürzungen.
Wir sind doch hier nicht bei SMS und Whatsapp  :D :D :D
Titel: Re: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: shinebar am 04.05.2020, 00:13:33

Ich habe dafür einen neuen Service erzeugt, war ein wenig tricky, weiß also nicht, ob das der "richtige" Weg ist:

Als erstes habe ich ein Script, was die Daten sehr stumpf in eine Textdatei schreibt. Der Inhalt ist dabei nur Wert1,Wert2 (also z.B. 2.53,1.25) - das passiert regelmäßig. Um die Daten in weewx zu lesen, braucht es einen neuen Service (http://www.weewx.com/docs/customizing.htm#Adding_a_service) - der sieht bei mir aus wie der Code unten und liegt in /usr/share/weewx/user/feinstaub.py

Last but not least muss dieser Dienst in der weewx.conf auch geladen werden:
[[Services]]
        data_services = user.feinstaub.StaubService


Viel weiter bin ich aber noch nicht, ich sehe die Daten im Loop, habe sie aber noch nicht in der DB - vielleicht hilft es Dir trotzdem :)

import syslog
import weewx
from weewx.wxengine import StdService

class StaubService(StdService):
    def __init__(self, engine, config_dict):
        super(StaubService, self).__init__(engine, config_dict)
        d = config_dict.get('StaubService', {})
        self.filename = d.get('filename', '/tmp/feinstaub.txt')
        syslog.syslog(syslog.LOG_INFO, "Feinstaub: using %s" % self.filename)
        self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)

    def read_file(self, event):
        try:
            with open(self.filename) as f:
                #value = f.read()
                line = f.readline()
                value = line.split(',')

            syslog.syslog(syslog.LOG_DEBUG, "Feinstaub: found value of %s" % value)
            event.record['FeinstaubPM10'] = float(value[0])
            event.record['FeinstaubPM2.5'] = float(value[1])
        except Exception as e:
            syslog.syslog(syslog.LOG_ERR, "Feinstaub: cannot read value: %s" % e)
Titel: Re: Externe Werte in die WeeWX Datenbank mit aufnehmen
Beitrag von: rodolfo am 05.05.2020, 11:27:43
Hallo shinebar,

vielen Dank - dein Script hat mich tatsächlich auf den richtigen Weg gebracht. Die gewünschten Werte befinden sich nun im Loop und werden auch in der DB gespeichert.  :top:

Um die Werte in die DB aufzunehmen bin ich wie folgt vorgegangen:

In "/usr/share/weewx/user/extensions.py" folgendes einfügen:

import schemas.wview
schema_extended = schemas.wview.schema + [('BEZ_NEUER_RECORD1', 'REAL'), ('BEZ_NEUER_RECORD2', 'REAL')]


Müsste bei dir dann wohl so aussehen:
schema_extended = schemas.wview.schema + [('FeinstaubPM10', 'REAL'), ('FeinstaubPM2.5', 'REAL')]

Die weewx.conf wie folgt anpassen: Unter [DataBindings] -> [[wx_binding]] die Zeile "schema = schemas.wview.schema" durch "schema = user.extensions.schema_extended" ersetzen.

Nun die Datenbank per "wee_database" neu konfigurieren (hier musste ich den kompletten Pfad zur weewx.conf angeben - bei mir also "/etc/weewx/weewx.conf"):
wee_database /etc/weewx/weewx.conf --reconfigure

Das dauert, je nach DB Größe ein Weilchen. Wenn durchgelaufen wurde eine neue DB angelegt (bei mir weewx.sdb_new). Danach kannst du die neu erstellte Datenbank in weewx.sdb umbenennen oder die Konfiguration zur Verwendung der neuen DB anpassen.

Jetzt noch einen Wiederaufbau der Datenbank anstoßen: 
wee_database /etc/weewx/weewx.conf --rebuild-daily

Und weewx neu starten - ab sofort werden die neuen Werte in den entsprechenden Spalten der DB abgelegt!

Viele Grüße
Rolf