Something went wrong on our end
-
Bruce Flynn authored
records to frames.
Bruce Flynn authoredrecords to frames.
rrd.py 2.41 KiB
"""The data model used for the MetObs widgets using tower data.
"""
import os
from datetime import datetime, timedelta
import rrdtool
from metobs import data as d
from aosstower import station
# minimum set of records for the tower
VARS = {'air_temp', 'rh', 'dewpoint',
'wind_speed', 'winddir_east', 'winddir_north',
'pressure', 'precip', 'accum_precip',
'solar_flux', 'altimeter'}
def add_vector_winds(record):
east, north, spd = d.wind_vector_components(float(record['wind_speed']),
float(record['wind_dir']))
record['winddir_east'] = '%.3d' % east
record['winddir_north'] = '%.3d' % north
record['wind_speed'] = '%.3d' % spd
def add_altimeter(record, elev=station.ELEVATION):
record['altimeter'] = '%.3d' % d.altimeter(float(record['pressure']), elev)
def add_dewpoint(record):
record['dewpoint'] = '%.3d' % d.dewpoint(float(record['air_temp']),
float(record['rh']))
def initialize_rrd(filepath, start=None, days=365, data_interval=5):
"""Create a new empty RRD database.
"""
assert not os.path.exists(filepath), "DB already exists"
start = start or (datetime.utcnow() - timedelta(days=days))
# normalize start to data interval
secs = d.to_unix_timestamp(start)
secs -= secs % data_interval
rrdtool.create(filepath,
'--start={}'.format(secs),
'--step={:d}'.format(data_interval),
'DS:air_temp:GAUGE:10:-40:50',
'DS:rh:GAUGE:10:0:100',
'DS:dewpoint:GAUGE:10:0:100',
'DS:wind_speed:GAUGE:10:0:100',
'DS:winddir_north:GAUGE:10:-100:100',
'DS:winddir_east:GAUGE:10:-100:100',
'DS:pressure:GAUGE:10:0:1100',
'DS:precip:GAUGE:10:0:100',
'DS:accum_precip:GAUGE:10:0:100',
'DS:solar_flux:GAUGE:10:0:1000',
'DS:altimeter:GAUGE:10:0:100',
# native resolution
'RRA:AVERAGE:0.5:1:6307200',
# 1 minute
'RRA:AVERAGE:0.5:{:d}:525600'.format(60/data_interval),
# 5 minute
'RRA:AVERAGE:0.5:{:d}:105120'.format(300/data_interval),
# 30 minute
'RRA:AVERAGE:0.5:{:d}:17520'.format(1800/data_interval))