pywws.DataStore

DataStore.py - memorizza le letture in file di facile accesso

Introduzione

Questo modulo è il cuore del mio software per la stazione meteo. Esso memorizza i dati su disco, ma senza il sovraccarico di un complesso database. L’ho progettato per funzionare su una macchina con poca memoria come il mio router Asus. Per ridurre al minimo l’utilizzo della memoria, carica solo l’equivalente di un giorno di dati alla volta in memoria.

Da un punto di vista “user”, i dati vengono eseguiti come un incrocio tra un elenco e un dizionario. Ogni record di dati è indicizzato da un oggetto datetime.datetime (comportamento di dizionario), ma i record vengono archiviati in ordine ed è possibile accedervi come fogli (comportamento di elenco).

Ad esempio, per accedere ai dati orari per il giorno di Natale 2009, uno potrebbe effettuare le seguenti operazioni:

from datetime import datetime
from pywws import DataStore
hourly = DataStore.hourly_store('weather_data')
for data in hourly[datetime(2009, 12, 25):datetime(2009, 12, 26)]:
    print data['idx'], data['temp_out']

Alcuni esempi di accesso dati:

# get value nearest 9:30 on Christmas day 2008
data[data.nearest(datetime(2008, 12, 25, 9, 30))]
# get entire array, equivalent to data[:]
data[datetime.min:datetime.max]
# get last 12 hours worth of data
data[datetime.utcnow() - timedelta(hours=12):]

Si noti che l’indice datetime.datetime è in formato UTC. Potrebbe essere necessario applicare un offset per convertire in ora locale.

Il modulo fornisce cinque classi per archiviare dati diversi. data_store prende i dati “raw” dalla stazione meteo; calib_store, hourly_store, daily_store e monthly_store memorizza i dati elaborati (vedi pywws.Process).Tutti e tre sono derivati dallo stessa classe core_store, differiscono solo per le chiavi e i tipi di dati memorizzati in ogni record.

Dettagli API

Funzioni

safestrptime(date_string[, format])

Classi

ParamStore(root_dir, file_name)
RawConfigParser([defaults, dict_type, ...])
calib_store(root_dir)

Memorizza i dati ‘calibrati’ della Stazione Meteo.

core_store(root_dir)
daily_store(root_dir)

Memorizza i dati giornalieri di riepilogo della Stazione Meteo.

data_store(root_dir)

Memorizza i dati grezzi Stazione Meteo.

date date(year, month, day) –> date object
datetime(year, month, day[, hour[, minute[, ...) The year, month and day arguments are required.
hourly_store(root_dir)

Memorizza i dati orari di riepilogo della Stazione Meteo.

monthly_store(root_dir)

Memorizza i dati mensili di riepilogo della Stazione Meteo.

params(root_dir)

I parametri sono memorizzati in un file “weather.ini” in root_dir.

status(root_dir)

Lo stato viene memorizzato in un file “status.ini” in root_dir.

timedelta

Differenza tra due valori datetime.

pywws.DataStore.safestrptime(date_string, format=None)[sorgente]
class pywws.DataStore.ParamStore(root_dir, file_name)[sorgente]
flush()[sorgente]
get(section, option, default=None)[sorgente]

Ottiene un dato di parametro e restituisce una stringa.

Se si specifica default e la sezione o l’opzione non sono definite nel file, sono creati e impostati su default, che è poi il valore restituito.

get_datetime(section, option, default=None)[sorgente]
set(section, option, value)[sorgente]

Impostare l’opzione nella sezione valore stringa.

unset(section, option)[sorgente]

Rimuovere l’opzione dalla sezione.

class pywws.DataStore.params(root_dir)[sorgente]

I parametri sono memorizzati in un file “weather.ini” in root_dir.

class pywws.DataStore.status(root_dir)[sorgente]

Lo stato viene memorizzato in un file “status.ini” in root_dir.

class pywws.DataStore.core_store(root_dir)[sorgente]
before(idx)[sorgente]

Ritorno data ora dell’ultimo record di dati esistenti cui data ora è < idx.

Potrebbe anche non essere nello stesso anno! Se non esiste nessun record, restituisce None.

after(idx)[sorgente]

Restuisce data ora del record di dati esistente più antico cui data ora è >= idx.

Potrebbe anche non essere nello stesso anno! Se non esiste nessun record, restituisce None.

nearest(idx)[sorgente]

Restuisce data ora del record cui data ora è più vicina di idx.

flush()[sorgente]
class pywws.DataStore.data_store(root_dir)[sorgente]

Memorizza i dati grezzi Stazione Meteo.

key_list = ['idx', 'delay', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'status', 'illuminance', 'uv']
conv = {'status': <type 'int'>, 'wind_ave': <type 'float'>, 'rain': <type 'float'>, 'hum_in': <type 'int'>, 'temp_out': <type 'float'>, 'wind_dir': <type 'int'>, 'hum_out': <type 'int'>, 'illuminance': <type 'float'>, 'wind_gust': <type 'float'>, 'idx': <function safestrptime>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'delay': <type 'int'>, 'abs_pressure': <type 'float'>}
class pywws.DataStore.calib_store(root_dir)[sorgente]

Memorizza i dati ‘calibrati’ della Stazione Meteo.

key_list = ['idx', 'delay', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'rel_pressure', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'status', 'illuminance', 'uv']
conv = {'status': <type 'int'>, 'wind_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure': <type 'float'>, 'hum_in': <type 'int'>, 'temp_out': <type 'float'>, 'wind_dir': <type 'int'>, 'hum_out': <type 'int'>, 'illuminance': <type 'float'>, 'wind_gust': <type 'float'>, 'idx': <function safestrptime>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'delay': <type 'int'>, 'abs_pressure': <type 'float'>}
class pywws.DataStore.hourly_store(root_dir)[sorgente]

Memorizza i dati orari di riepilogo della Stazione Meteo.

key_list = ['idx', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'rel_pressure', 'pressure_trend', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'illuminance', 'uv']
conv = {'pressure_trend': <type 'float'>, 'wind_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure': <type 'float'>, 'hum_in': <type 'int'>, 'temp_out': <type 'float'>, 'wind_dir': <type 'int'>, 'hum_out': <type 'int'>, 'wind_gust': <type 'float'>, 'idx': <function safestrptime>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'illuminance': <type 'float'>, 'abs_pressure': <type 'float'>}
class pywws.DataStore.daily_store(root_dir)[sorgente]

Memorizza i dati giornalieri di riepilogo della Stazione Meteo.

key_list = ['idx', 'start', 'hum_out_ave', 'hum_out_min', 'hum_out_min_t', 'hum_out_max', 'hum_out_max_t', 'temp_out_ave', 'temp_out_min', 'temp_out_min_t', 'temp_out_max', 'temp_out_max_t', 'hum_in_ave', 'hum_in_min', 'hum_in_min_t', 'hum_in_max', 'hum_in_max_t', 'temp_in_ave', 'temp_in_min', 'temp_in_min_t', 'temp_in_max', 'temp_in_max_t', 'abs_pressure_ave', 'abs_pressure_min', 'abs_pressure_min_t', 'abs_pressure_max', 'abs_pressure_max_t', 'rel_pressure_ave', 'rel_pressure_min', 'rel_pressure_min_t', 'rel_pressure_max', 'rel_pressure_max_t', 'wind_ave', 'wind_gust', 'wind_gust_t', 'wind_dir', 'rain', 'illuminance_ave', 'illuminance_max', 'illuminance_max_t', 'uv_ave', 'uv_max', 'uv_max_t']
conv = {'temp_in_min': <type 'float'>, 'temp_in_max': <type 'float'>, 'uv_ave': <type 'float'>, 'temp_out_max': <type 'float'>, 'temp_out_min': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'start': <function safestrptime>, 'hum_in_max_t': <function safestrptime>, 'uv_max_t': <function safestrptime>, 'temp_in_max_t': <function safestrptime>, 'abs_pressure_min_t': <function safestrptime>, 'illuminance_ave': <type 'float'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure_min_t': <function safestrptime>, 'wind_gust': <type 'float'>, 'temp_out_min_t': <function safestrptime>, 'wind_gust_t': <function safestrptime>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime>, 'temp_out_max_t': <function safestrptime>, 'uv_max': <type 'int'>, 'illuminance_max_t': <function safestrptime>, 'rel_pressure_max': <type 'float'>, 'temp_in_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime>, 'hum_out_max': <type 'int'>, 'illuminance_max': <type 'float'>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime>, 'temp_in_min_t': <function safestrptime>, 'hum_out_max_t': <function safestrptime>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'hum_in_ave': <type 'float'>, 'hum_in_min': <type 'int'>}
class pywws.DataStore.monthly_store(root_dir)[sorgente]

Memorizza i dati mensili di riepilogo della Stazione Meteo.

key_list = ['idx', 'start', 'hum_out_ave', 'hum_out_min', 'hum_out_min_t', 'hum_out_max', 'hum_out_max_t', 'temp_out_ave', 'temp_out_min_lo', 'temp_out_min_lo_t', 'temp_out_min_hi', 'temp_out_min_hi_t', 'temp_out_min_ave', 'temp_out_max_lo', 'temp_out_max_lo_t', 'temp_out_max_hi', 'temp_out_max_hi_t', 'temp_out_max_ave', 'hum_in_ave', 'hum_in_min', 'hum_in_min_t', 'hum_in_max', 'hum_in_max_t', 'temp_in_ave', 'temp_in_min_lo', 'temp_in_min_lo_t', 'temp_in_min_hi', 'temp_in_min_hi_t', 'temp_in_min_ave', 'temp_in_max_lo', 'temp_in_max_lo_t', 'temp_in_max_hi', 'temp_in_max_hi_t', 'temp_in_max_ave', 'abs_pressure_ave', 'abs_pressure_min', 'abs_pressure_min_t', 'abs_pressure_max', 'abs_pressure_max_t', 'rel_pressure_ave', 'rel_pressure_min', 'rel_pressure_min_t', 'rel_pressure_max', 'rel_pressure_max_t', 'wind_ave', 'wind_gust', 'wind_gust_t', 'wind_dir', 'rain', 'rain_days', 'illuminance_ave', 'illuminance_max_lo', 'illuminance_max_lo_t', 'illuminance_max_hi', 'illuminance_max_hi_t', 'illuminance_max_ave', 'uv_ave', 'uv_max_lo', 'uv_max_lo_t', 'uv_max_hi', 'uv_max_hi_t', 'uv_max_ave']
conv = {'uv_ave': <type 'float'>, 'illuminance_max_hi_t': <function safestrptime>, 'uv_max_lo_t': <function safestrptime>, 'temp_out_max_hi_t': <function safestrptime>, 'temp_out_max_lo': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'rel_pressure_min_t': <function safestrptime>, 'temp_in_min_hi': <type 'float'>, 'temp_in_min_lo': <type 'float'>, 'start': <function safestrptime>, 'hum_in_max_t': <function safestrptime>, 'rain_days': <type 'int'>, 'abs_pressure_min_t': <function safestrptime>, 'temp_out_max_hi': <type 'float'>, 'illuminance_ave': <type 'float'>, 'temp_out_min_lo': <type 'float'>, 'illuminance_max_ave': <type 'float'>, 'uv_max_hi': <type 'int'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'temp_out_min_hi': <type 'float'>, 'wind_gust': <type 'float'>, 'temp_in_max_hi_t': <function safestrptime>, 'temp_in_max_lo': <type 'float'>, 'temp_in_min_ave': <type 'float'>, 'wind_gust_t': <function safestrptime>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime>, 'illuminance_max_lo': <type 'float'>, 'temp_in_min_lo_t': <function safestrptime>, 'illuminance_max_hi': <type 'float'>, 'temp_out_max_lo_t': <function safestrptime>, 'temp_in_max_hi': <type 'float'>, 'rel_pressure_max': <type 'float'>, 'uv_max_hi_t': <function safestrptime>, 'temp_in_ave': <type 'float'>, 'uv_max_ave': <type 'float'>, 'temp_in_max_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime>, 'hum_out_max': <type 'int'>, 'temp_in_min_hi_t': <function safestrptime>, 'temp_out_min_ave': <type 'float'>, 'temp_out_min_hi_t': <function safestrptime>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime>, 'hum_out_max_t': <function safestrptime>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime>, 'uv_max_lo': <type 'int'>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime>, 'temp_out_min_lo_t': <function safestrptime>, 'illuminance_max_lo_t': <function safestrptime>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'temp_in_max_lo_t': <function safestrptime>, 'hum_in_ave': <type 'float'>, 'temp_out_max_ave': <type 'float'>, 'hum_in_min': <type 'int'>}