Note
pywws documentation is now located at http://pywws.readthedocs.org/fr/. This copy is no longer being updated and may be out of date.
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) |
|
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. |
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. |
-
class
pywws.DataStore.
ParamStore
(root_dir, file_name)[source]¶
-
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).
-
-
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 0x7f32bfa57e60>, '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 0x7f32bfa57e60>, '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 0x7f32bfa57e60>, '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 0x7f32bfa57e60>, 'hum_in_max_t': <function safestrptime at 0x7f32bfa57e60>, 'uv_max_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_in_max_t': <function safestrptime at 0x7f32bfa57e60>, 'abs_pressure_min_t': <function safestrptime at 0x7f32bfa57e60>, 'illuminance_ave': <type 'float'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x7f32bfa57e60>, 'wind_gust': <type 'float'>, 'temp_out_min_t': <function safestrptime at 0x7f32bfa57e60>, 'wind_gust_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_out_max_t': <function safestrptime at 0x7f32bfa57e60>, 'uv_max': <type 'int'>, 'illuminance_max_t': <function safestrptime at 0x7f32bfa57e60>, 'rel_pressure_max': <type 'float'>, 'temp_in_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_max': <type 'int'>, 'illuminance_max': <type 'float'>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_in_min_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_max_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x7f32bfa57e60>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x7f32bfa57e60>, '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 0x7f32bfa57e60>, 'uv_max_lo_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_out_max_hi_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_out_max_lo': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_in_min_hi': <type 'float'>, 'temp_in_min_lo': <type 'float'>, 'start': <function safestrptime at 0x7f32bfa57e60>, 'hum_in_max_t': <function safestrptime at 0x7f32bfa57e60>, 'rain_days': <type 'int'>, 'abs_pressure_min_t': <function safestrptime at 0x7f32bfa57e60>, '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 0x7f32bfa57e60>, 'temp_in_max_lo': <type 'float'>, 'temp_in_min_ave': <type 'float'>, 'wind_gust_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x7f32bfa57e60>, 'illuminance_max_lo': <type 'float'>, 'temp_in_min_lo_t': <function safestrptime at 0x7f32bfa57e60>, 'illuminance_max_hi': <type 'float'>, 'temp_out_max_lo_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_in_max_hi': <type 'float'>, 'rel_pressure_max': <type 'float'>, 'uv_max_hi_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_in_ave': <type 'float'>, 'uv_max_ave': <type 'float'>, 'temp_in_max_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_max': <type 'int'>, 'temp_in_min_hi_t': <function safestrptime at 0x7f32bfa57e60>, 'temp_out_min_ave': <type 'float'>, 'temp_out_min_hi_t': <function safestrptime at 0x7f32bfa57e60>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_max_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x7f32bfa57e60>, 'uv_max_lo': <type 'int'>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x7f32bfa57e60>, 'temp_out_min_lo_t': <function safestrptime at 0x7f32bfa57e60>, 'illuminance_max_lo_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'temp_in_max_lo_t': <function safestrptime at 0x7f32bfa57e60>, 'hum_in_ave': <type 'float'>, 'temp_out_max_ave': <type 'float'>, 'hum_in_min': <type 'int'>}¶
-