Introduction
Ce module est au cœur de mon logiciel de station météo. Il stocke les données sur le 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 (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']
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). Tous les trois sont issues 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é
DataStore.py - enregistre les lectures dans des fichiers facilement accessibles
Un fichier distinct est utilisé pour les données de chaque jour, pour garder la charge mémoire raisonnable. Un jour à la fois est conservé en mémoire et sauvegardé sur le disque quand un autre jour doit être accessible.
Les données sont accédées comme un croisement entre une liste et un dictionnaire. Les exemples suivants sont tous valides: # obtenir la donné la plus près de Noel à 9h30 data[data.nearest(datetime(2008, 12, 25, 9, 30))] # obtenir le tableau complet, équivalent de data[:] ou seulement data data[datetime.min:datetime.max] # obtenir les données des dernières 12 heures data[datetime.utcnow() - timedelta(hours=12):]
Fonctions
Classes
data_store(root_dir) |
Stocke les données brutes de la station météo. |
calib_store(root_dir) |
Stocke les données “calibrées” de la station météo. |
hourly_store(root_dir) |
Stocke les données sommaires horaire de la stations météo. |
daily_store(root_dir) |
Stocke les données sommaires quotidiens de la stations météo. |
monthly_store(root_dir) |
Stocke les données mensuelles sommaire de la stations météo. |
core_store(root_dir) |
|
params(root_dir) |
Les paramètres sont stockés dans le fichier “weather.ini”, dans le répertoire spécifié par root_dir. |
-
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.
If default is specified and section or option are not defined
in the file, they are created and set to default, which is
then the return value.
-
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]
Remove option from 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]
Status is stored in a file “status.ini” in 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 0x23ea8c0>, '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 0x23ea8c0>, '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 0x23ea8c0>, '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 0x23ea8c0>, 'hum_in_max_t': <function safestrptime at 0x23ea8c0>, 'uv_max_t': <function safestrptime at 0x23ea8c0>, 'temp_in_max_t': <function safestrptime at 0x23ea8c0>, 'abs_pressure_min_t': <function safestrptime at 0x23ea8c0>, 'illuminance_ave': <type 'float'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x23ea8c0>, 'wind_gust': <type 'float'>, 'temp_out_min_t': <function safestrptime at 0x23ea8c0>, 'wind_gust_t': <function safestrptime at 0x23ea8c0>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x23ea8c0>, 'temp_out_max_t': <function safestrptime at 0x23ea8c0>, 'uv_max': <type 'int'>, 'illuminance_max_t': <function safestrptime at 0x23ea8c0>, 'rel_pressure_max': <type 'float'>, 'temp_in_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x23ea8c0>, 'hum_out_max': <type 'int'>, 'illuminance_max': <type 'float'>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x23ea8c0>, 'temp_in_min_t': <function safestrptime at 0x23ea8c0>, 'hum_out_max_t': <function safestrptime at 0x23ea8c0>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x23ea8c0>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x23ea8c0>, '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 0x23ea8c0>, 'uv_max_lo_t': <function safestrptime at 0x23ea8c0>, 'temp_out_max_hi_t': <function safestrptime at 0x23ea8c0>, 'temp_out_max_lo': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x23ea8c0>, 'temp_in_min_hi': <type 'float'>, 'temp_in_min_lo': <type 'float'>, 'start': <function safestrptime at 0x23ea8c0>, 'hum_in_max_t': <function safestrptime at 0x23ea8c0>, 'rain_days': <type 'int'>, 'abs_pressure_min_t': <function safestrptime at 0x23ea8c0>, '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 0x23ea8c0>, 'temp_in_max_lo': <type 'float'>, 'temp_in_min_ave': <type 'float'>, 'wind_gust_t': <function safestrptime at 0x23ea8c0>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x23ea8c0>, 'illuminance_max_lo': <type 'float'>, 'temp_in_min_lo_t': <function safestrptime at 0x23ea8c0>, 'illuminance_max_hi': <type 'float'>, 'temp_out_max_lo_t': <function safestrptime at 0x23ea8c0>, 'temp_in_max_hi': <type 'float'>, 'rel_pressure_max': <type 'float'>, 'uv_max_hi_t': <function safestrptime at 0x23ea8c0>, 'temp_in_ave': <type 'float'>, 'uv_max_ave': <type 'float'>, 'temp_in_max_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x23ea8c0>, 'hum_out_max': <type 'int'>, 'temp_in_min_hi_t': <function safestrptime at 0x23ea8c0>, 'temp_out_min_ave': <type 'float'>, 'temp_out_min_hi_t': <function safestrptime at 0x23ea8c0>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x23ea8c0>, 'hum_out_max_t': <function safestrptime at 0x23ea8c0>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x23ea8c0>, 'uv_max_lo': <type 'int'>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x23ea8c0>, 'temp_out_min_lo_t': <function safestrptime at 0x23ea8c0>, 'illuminance_max_lo_t': <function safestrptime at 0x23ea8c0>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'temp_in_max_lo_t': <function safestrptime at 0x23ea8c0>, 'hum_in_ave': <type 'float'>, 'temp_out_max_ave': <type 'float'>, 'hum_in_min': <type 'int'>}