• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

weewx - Altdaten aus anderer Software konvertieren

Begonnen von noxx, 03.02.2016, 09:22:24

⏪ vorheriges - nächstes ⏩

noxx

Moin,

da weewx nun erstmal läuft würde ich gerne meine alten Daten
konvertieren. Habe Wetterdaten der letzten 1,5 Jahre im txt format (jeden Tag 1 File, aus Awekas)
und in mySQL (Webserver) vorliegen.

mySQL:
http://www.bilder-upload.eu/show.php?file=1d8b8a-1369899725.jpg
(habe noch eine 2te mySQL, mit nur einem Wert pro Tag (tages-min, tages-max, tages-mittel)

Kann man die Daten integrieren?


falk

Schön, dass es nun läuft.

Altdaten kannst du importieren. Ich habe das für die ersten 10 Wochen 2015 auch gemacht. Beachte allerdings, dass Weewx mit den Durchschnittsberechnungen in der Statistik durcheinander kommt, wenn die Datenmeldungen in unterschiedlichen Intervallen eintreffen. Aber auch dafür gibt es eine Lösung.

Ich habe für den Import einen eigenen kleinen Treiber geschrieben. Den kann ich dir heute Abend zur Verfügung stellen. Es reicht, wenn in der Datenbank die Tabelle "archive" gefüllt wird. Vielleicht kannst du diese auch direkt beschreiben. Für die anderen Tabellen kannst du das Skript wee_database benutzen. Hier insbesondere mit den Parametern drop-daily und backfill-daily.

Die Tabelle "archive" solltest du auch öfters sichern. Hier befinden sich deine eigentlichen Wetterdaten.

noxx

Danke, dann warte ich bis heute abend.

Wie gesagt, habe als Backup 2 Datenbanken und CSVs.

CSV = ca 1400 Daten pro Tag
Datenbank 1 = Alle 10 Minuten ein Eintrag mit aktuellen Werten
Datenbank 2 = Pro Tag 1 Eintrag mit Min, Max und Mittelwerten (siehe Screenshot)
http://www.bilder-upload.eu/show.php?file=153c20-1454506214.png

CSV sieht so aus:
Datum,Zeit,Temp. Aussen,Hum. Aussen,Pressure,Regen,Wind,Wind Direction,Wind Gust
,,°C,%,hPa,l/qm,km/h,°,km/h
#Calibrate=1.000 #Regen0=0mm #Location=10/10m #Baro_correction=0hPa #Station=meteohub
,,2,18,33,34,35,36,45,133
13.09.2014,00:00,15.6,90.0,1023.4,0.00,3.6,23,4.0,1024.6
13.09.2014,00:01,15.7,90.0,1023.4,0.00,3.6,23,3.6,1024.6
13.09.2014,00:02,15.7,90.0,1023.4,0.00,3.6,23,3.6,1024.6
13.09.2014,00:03,15.7,90.0,1023.4,0.00,3.6,23,3.6,1024.6
13.09.2014,00:04,15.7,90.0,1023.4,0.00,3.6,23,3.6,1024.6
....




[gelöscht durch Administrator]

falk

#3
Oje, die Skripte waren wild verstreut. Viel bringen wird dir das wohl nichts. Für mich war der Import auch eine einmalige Angelegenheit. Ich bin wie folgt vorgegangen:

1. Einlesen einer CSV-Datei agrar.csv und Serialisierung der Paketdaten nach agrar.pkl


import csv
import string
import time
import pickle

if __name__ == '__main__':

    packets = []

    with open('agrar.csv') as csvfile:
        reader = csv.DictReader(csvfile, fieldnames=['Tag', 'Stunde', 'AVG_RH200', 'SUM_NN050', 'AVG_WV200', 'AVG_TA200'], delimiter=';')
        for row in reader:
            packet = {}
            date = time.strptime(row['Tag'],"%d.%m.%Y")
            hour = int(row['Stunde'])
            outTemp = float(string.replace(row['AVG_TA200'], ',', '.'))
            rh = float(string.replace(row['AVG_RH200'], ',', '.'))
            rain = float(string.replace(row['SUM_NN050'], ',', '.'))

            packet['usUnits'] = 17
            packet['dateTime'] = int(time.mktime(date)) + hour*3600+1800
            packet['outTemp'] = round(outTemp, 1)
            packet['outHumidity'] = round(rh, 0)
            packet['rain'] = round(rain, 1)

            packets.append(packet)

    print "dump packets..."
    output_handle = open("agrar.pkl", "wb")
    pickle.dump(packets, output_handle)
    output_handle.close()
    print "done"


2. Erzeugung der Datenbanktabellen mit einem Custom-Treiber, der einfach nur wieder die Paketdaten einliest und an die Weewx-Engine übergeht. Das geht sicher auch eleganter. Für meine Zwecke war das aber ausreichend.


from __future__ import with_statement
import time
import pickle

import weewx.drivers
import weeutil.weeutil

DRIVER_NAME = 'Custom'
DRIVER_VERSION = "1.0"

def loader(config_dict, engine):

    station = Custom(**config_dict[DRIVER_NAME])   
    return station

class Custom(weewx.drivers.AbstractDevice):
    """Vantage Vue"""

    def __init__(self, **stn_dict):
        """Initialize the station       
        """
        #self.the_time = int(time.time() + 0.5)
        #self.the_time = 1426060500
        self.the_time = 1420066800

        input_handle = open("agrar.pkl", "rb")
        self.packets = pickle.load(input_handle)
        input_handle.close()
        self.pos = 0

    def genLoopPackets(self):

        while self.pos < len(self.packets):
            packet = self.packets[self.pos]
            self.pos += 1
            self.the_time = int(packet.get('dateTime'))
            yield packet

    @property
    def hardware_name(self):
        return "Custom"

    def getTime(self):
        return self.the_time

def confeditor_loader():
    return CustomConfEditor()

class CustomConfEditor(weewx.drivers.AbstractConfEditor):
    @property
    def default_stanza(self):
        return """
[Custom]
    # This section is for the weewx custom weather station

    # The driver to use:
    driver = weewx.drivers.custom
"""

if __name__ == "__main__":
    station = Custom()
    for packet in station.genLoopPackets():
        print weeutil.weeutil.timestamp_to_string(packet['dateTime']), packet