pywws.DataStore

DataStore.py - enregistre les lectures dans des fichiers facilement accessibles

Introduction

Ce module est au cœur de mon logiciel de station météo. Il stocke les données sur disque, mais sans le coût d’un système de base de données à grande échelle. Je l’ai conçu pour fonctionner sur une machine avec peu de mémoire comme mon routeur Asus. Pour minimiser l’utilisation de la mémoire, il ne charge que l’équivalent d’une journée de données à la fois dans la mémoire.

D’un point de vue “utilisateur”, les données sont accédées comme un croisement entre une liste et un dictionnaire. Chaque enregistrement de données est indexée par un objet datetime.datetime (comportement dictionnaire), mais les enregistrements sont stockés dans l’ordre et peut être consulté sous forme de tranches (comportement liste).

Par exemple, pour accéder aux données horaires pour le jour de Noël 2009, on peut faire ce qui suit

from datetime import datetime
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']

D’autres exemples d’accès aux données:

# 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):]

Le module fournit cinq classes pour stocker des données différentes. data_store prend les données “brutes” de la station météo; calib_store, hourly_store, daily_store et monthly_store stockent les données traitées (voir pywws.Process). Les trois sont dérivés de la même classe core_store, ils ne diffèrent que par les clés et les types de données stockées dans chaque enregistrement.

API détaillé

Fonctions

safestrptime(date_string[, format])

Classes

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

Stocke les données “calibrées” de la station météo.

core_store(root_dir)
daily_store(root_dir)

Stocke les données sommaires quotidiens de la stations météo.

data_store(root_dir)

Stocke les données brutes de la station météo.

date

date(année, mois, jour) –> date object

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

Stocke les données sommaires horaire de la stations météo.

monthly_store(root_dir)

Stocke les données mensuelles sommaire de la stations météo.

params(root_dir)

Les paramètres sont stockés dans le fichier “weather.ini”, dans le répertoire spécifié par root_dir.

status(root_dir)

Le status est stocké dans le fichier “status.ini”, dans le répertoire spécifié par root_dir.

timedelta

Différence entre deux valeurs de datetime.

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

Obtient une valeur de paramètre et renvoie une chaîne.

Si la valeur par défaut est spécifiée et la section ou l’option n’est pas définie dans le fichier, ils sont créés et définit par défaut, qui est alors la valeur retournée.

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

Définit l’option dans la section, à chaîne.

unset(section, option)[source]

Supprimer l’option de la section.

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

Les paramètres sont stockés dans le fichier “weather.ini”, dans le répertoire spécifié par root_dir.

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

Le status est stocké dans le fichier “status.ini”, dans le répertoire spécifié par root_dir.

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

Retourne datetime (horodate) du plus récent enregistrement de données existant dont datetime est <idx.

Peut même ne pas être dans la même année! Si aucun enregistrement n’existe, retourne None (Aucun).

after(idx)[source]

Retourne datetime (horodate) de la plus ancienne donnée existante dont datetime est> = idx.

Peut même ne pas être dans la même année! Si aucun enregistrement n’existe, retourne None (Aucun).

nearest(idx)[source]

Retourne le datetime (horodate) de l’enregistrement dont le datetime est le plus près de idx.

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

Stocke les données brutes de la station météo.

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 at 0x7f8712440668>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'delay': <type 'int'>, 'abs_pressure': <type 'float'>}
class pywws.DataStore.calib_store(root_dir)[source]

Stocke les données “calibrées” de la station météo.

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 at 0x7f8712440668>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'delay': <type 'int'>, 'abs_pressure': <type 'float'>}
class pywws.DataStore.hourly_store(root_dir)[source]

Stocke les données sommaires horaire de la stations météo.

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 at 0x7f8712440668>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'illuminance': <type 'float'>, 'abs_pressure': <type 'float'>}
class pywws.DataStore.daily_store(root_dir)[source]

Stocke les données sommaires quotidiens de la stations météo.

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 at 0x7f8712440668>, 'hum_in_max_t': <function safestrptime at 0x7f8712440668>, 'uv_max_t': <function safestrptime at 0x7f8712440668>, 'temp_in_max_t': <function safestrptime at 0x7f8712440668>, 'abs_pressure_min_t': <function safestrptime at 0x7f8712440668>, 'illuminance_ave': <type 'float'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x7f8712440668>, 'wind_gust': <type 'float'>, 'temp_out_min_t': <function safestrptime at 0x7f8712440668>, 'wind_gust_t': <function safestrptime at 0x7f8712440668>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x7f8712440668>, 'temp_out_max_t': <function safestrptime at 0x7f8712440668>, 'uv_max': <type 'int'>, 'illuminance_max_t': <function safestrptime at 0x7f8712440668>, 'rel_pressure_max': <type 'float'>, 'temp_in_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x7f8712440668>, 'hum_out_max': <type 'int'>, 'illuminance_max': <type 'float'>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x7f8712440668>, 'temp_in_min_t': <function safestrptime at 0x7f8712440668>, 'hum_out_max_t': <function safestrptime at 0x7f8712440668>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x7f8712440668>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x7f8712440668>, '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)[source]

Stocke les données mensuelles sommaire de la stations météo.

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 at 0x7f8712440668>, 'uv_max_lo_t': <function safestrptime at 0x7f8712440668>, 'temp_out_max_hi_t': <function safestrptime at 0x7f8712440668>, 'temp_out_max_lo': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x7f8712440668>, 'temp_in_min_hi': <type 'float'>, 'temp_in_min_lo': <type 'float'>, 'start': <function safestrptime at 0x7f8712440668>, 'hum_in_max_t': <function safestrptime at 0x7f8712440668>, 'rain_days': <type 'int'>, 'abs_pressure_min_t': <function safestrptime at 0x7f8712440668>, '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 at 0x7f8712440668>, 'temp_in_max_lo': <type 'float'>, 'temp_in_min_ave': <type 'float'>, 'wind_gust_t': <function safestrptime at 0x7f8712440668>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x7f8712440668>, 'illuminance_max_lo': <type 'float'>, 'temp_in_min_lo_t': <function safestrptime at 0x7f8712440668>, 'illuminance_max_hi': <type 'float'>, 'temp_out_max_lo_t': <function safestrptime at 0x7f8712440668>, 'temp_in_max_hi': <type 'float'>, 'rel_pressure_max': <type 'float'>, 'uv_max_hi_t': <function safestrptime at 0x7f8712440668>, 'temp_in_ave': <type 'float'>, 'uv_max_ave': <type 'float'>, 'temp_in_max_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x7f8712440668>, 'hum_out_max': <type 'int'>, 'temp_in_min_hi_t': <function safestrptime at 0x7f8712440668>, 'temp_out_min_ave': <type 'float'>, 'temp_out_min_hi_t': <function safestrptime at 0x7f8712440668>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x7f8712440668>, 'hum_out_max_t': <function safestrptime at 0x7f8712440668>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x7f8712440668>, 'uv_max_lo': <type 'int'>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x7f8712440668>, 'temp_out_min_lo_t': <function safestrptime at 0x7f8712440668>, 'illuminance_max_lo_t': <function safestrptime at 0x7f8712440668>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'temp_in_max_lo_t': <function safestrptime at 0x7f8712440668>, 'hum_in_ave': <type 'float'>, 'temp_out_max_ave': <type 'float'>, 'hum_in_min': <type 'int'>}