ZEVS Forum

Računalništvo => Omrežja in razvijanje strani => Temo je začel: Tminc na 28. Januar 2023, 07:29:29



Naslov: Izris podatkov iz weewx databaze
Sporočilo napisal: Tminc na 28. Januar 2023, 07:29:29
weewx je sicer super programček za beleženje podatkov in generacijo spletne strani, vendar mi ni všeč, da so podatki shranjeni v .sdb bazi. Grafi, ki jih rišejo splošne teme, so omejene na tekočih 24h, 1 teden, mesec in leto.
Ker pride včasih potreba po vpogledu v specifično časovno obdobje, sem si vzel malo časa in (s pomočjo googla) pripravil skripto, ki dela prav to. Skripta je zelo enostavna, nisem je še parametriziral, itd.. Če komu pride prav, jo seveda komot poljubno razširi.
Testiral sem s python3 na Ubuntu, z malenkostnim popravkom v modulih pa jo lahko poženeš direktno na Raspberry Pi, kjer je databaza (matplotlibu je potrebno povedati, da nima "zaslona" = headless).
Primer nariše temperaturo, rosišče in veter, graf in skripta sta pripeta.

lp Peter

Koda:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sqlite3, pandas , matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.dates as mdates

# Pot do datoteke s podatki, vkljucno z imenom datoteke
bazafile="weewx.sdb"

conn = sqlite3.connect(bazafile)
c = conn.cursor()

# ------------------- funkcije ------------------------

# Pretvori iz F v C
def ftoc(t):
    return float((t-32)/1.8)

# Pretvori mph v km/h
def mtok(v):
    return (v*1.60934)

def graph_data():

#   Znotraj klica definiraj zacetni in koncni datum/cas

    c.execute('SELECT dateTime, outTemp, dewpoint, windGust, windSpeed FROM archive \
        WHERE dateTime BETWEEN \
                       STRFTIME("%s", "2023-01-23 06:00") AND \
                       STRFTIME("%s", "2023-01-25 06:00") ')
    data = c.fetchall()
    cas = []
    t1 = []
    t2 = []
    v1 = []
    v2 = []
    for row in data:
        cas.append(datetime.fromtimestamp(row[0]))
        t1.append( ftoc(row[1]) )
        t2.append( ftoc(row[2]) )
        v1.append( mtok(row[3]) )
        v2.append( mtok(row[4]) )

    myFmt = mdates.DateFormatter('%d.%m. %Hh')

    plt.figure()
    plt.subplot(211)
    plt.plot(cas,t1)
    plt.plot(cas,t2)
    plt.grid(True)
    plt.xlim(min(cas),max(cas))
    plt.ylabel(u'temperatura [°C]')
    plt.xlabel(u'čas [h]')
    plt.legend([u'temperatura',u'rosišče'])
    plt.gca().xaxis.set_major_formatter(myFmt)

    plt.subplot(212)
    plt.plot(cas,v1)
    plt.plot(cas,v2)
    plt.grid(True)
    plt.xlim(min(cas),max(cas))
    plt.ylabel(u'hitrost [km/h]')
    plt.xlabel(u'čas [h]')
    plt.legend([u'sunek vetra',u'povprečna hitrost'])
    plt.gca().xaxis.set_major_formatter(myFmt)

    plt.show()

# -------------- konec funkcij ----------------

graph_data()


Naslov: Odg: Izris podatkov iz weewx databaze
Sporočilo napisal: TgT na 28. Januar 2023, 14:18:49
Lepo  :icon_wink:


ZEVS Forum | Powered by SMF 1.1.21.
© 2005, Simple Machines. All Rights Reserved.