In [1]:
import datetime, math, time

In [2]:
def exec_ipynb(url):
    import json, re, urllib2
    nb = (urllib2.urlopen(url) if re.match(r'https?:', url) else open(url)).read()
    exec '\n'.join([''.join(cell['input']) for cell in json.loads(nb)['worksheets'][0]['cells'] if cell['cell_type'] == 'code']) in globals()

exec_ipynb('Fluxtream-Library.ipynb')
fluxtream_login()


Out[2]:
Fluxtream username:
Fluxtream password:

In [3]:
sites = {
  'CascadeLakeData':  'c:\\Campbellsci\\LoggerNet\\CR1000 - Cascade Wifi_LakeData.dat',
  'DollarPointLakeData': 'c:\\Campbellsci\\LoggerNet\\CR1000 - NS Dollar Point Modem_LakeData.dat',
  'HomewoodLakeData':  'c:\\Campbellsci\\Loggernet\\CR1000 - NS Homewood Modem_LakeData.dat',
  'MeeksLakeData':  'c:\\Campbellsci\\LoggerNet\\CR1000 - NS Meeks Modem_LakeData.dat',
  'RubiconLakeData':  'c:\\Campbellsci\\LoggerNet\\CR1000 - NS Rubicon Modem_LakeData.dat'
}

In [4]:
def sync_site(sitename):
    device = sitename

    sources_list = fluxtream_get_sources_list(fluxtream_guest_id)

    reader = csv.reader(open(sites[sitename]))
    reader.next() # skip the header
    columns = reader.next()
    units = reader.next()
    type = reader.next()
    full_columns = [columns[i] + '_' + units[i].replace('/', '_per_') for i in range(0, len(columns))]
    full_columns = full_columns[1:]

    start = (datetime.datetime.now() - datetime.datetime(1970, 1, 1)).total_seconds()

    for channel in full_columns:
        info = fluxtream_get_channel_info(device, channel, sources_list)
        if info:
            start = min(start, info['max_time'])
        else:
            start = 0
        
    records = []
    for record in reader:
        time = datetime.datetime.strptime(record[0], '%Y-%m-%d %H:%M:%S')
        epoch_time = (time - datetime.datetime(1970, 1, 1)).total_seconds()
        if epoch_time > start:
            f = [float(x) for x in record[1:]]
            non_nan = [None if math.isnan(val) else val for val in f]
            records.append([epoch_time] + non_nan)
    if len(records) == 0:
        print '%s: No new data' % sitename
    else:
        print '%s: Uploading %d records of %d channels each' % (sitename, len(records), len(records[0]) - 1)
        fluxtream_upload(device, full_columns, records)

In [6]:
for sitename in sites:
    sync_site(sitename)


MeeksLakeData: Uploading 84 records of 10 channels each
Uploading 84 data points to derekrob's account on server fluxtream.org, device MeeksLakeData, channels ['RECORD_RN', 'LS_Conductivity_Avg_mS_per_cm', 'LS_Temp_Avg_C', 'LS_RawPressure_Avg_dBar', 'LS_Chlorophyll_Avg_RFUB', 'LS_CDOM_Avg_RFUB', 'LS_Turbidity_Avg_NTU', 'LakeSensor_BattV_Min_V', 'BP_mmHg_mmHg', 'Depth_m4C_Avg_mH2O_4C']
DollarPointLakeData: Uploading 85 records of 10 channels each
Uploading 85 data points to derekrob's account on server fluxtream.org, device DollarPointLakeData, channels ['RECORD_RN', 'LS_Conductivity_Avg_mS_per_cm', 'LS_Temp_Avg_C', 'LS_RawPressure_Avg_dBar', 'LS_Chlorophyll_Avg_RFUB', 'LS_CDOM_Avg_RFUB', 'LS_Turbidity_Avg_NTU', 'LakeSensor_BattV_Min_V', 'BP_mmHg_mmHg', 'Depth_m4C_Avg_mH2O_4C']
CascadeLakeData: Uploading 85 records of 10 channels each
Uploading 85 data points to derekrob's account on server fluxtream.org, device CascadeLakeData, channels ['RECORD_RN', 'LS_Conductivity_Avg_mS_per_cm', 'LS_Temp_Avg_C', 'LS_RawPressure_Avg_dBar', 'LS_Chlorophyll_Avg_RFUB', 'LS_CDOM_Avg_RFUB', 'LS_Turbidity_Avg_NTU', 'LakeSensor_BattV_Min_V', 'BP_mmHg_mmHg', 'Depth_m4C_Avg_mH2O_4C']
RubiconLakeData: Uploading 84 records of 10 channels each
Uploading 84 data points to derekrob's account on server fluxtream.org, device RubiconLakeData, channels ['RECORD_RN', 'LS_Conductivity_Avg_mS_per_cm', 'LS_Temp_Avg_C', 'LS_RawPressure_Avg_dBar', 'LS_Chlorophyll_Avg_RFUB', 'LS_CDOM_Avg_RFUB', 'LS_Turbidity_Avg_NTU', 'LakeSensor_BattV_Min_V', 'BP_mmHg_mmHg', 'Depth_m4C_Avg_mH2O_4C']
HomewoodLakeData: Uploading 85 records of 10 channels each
Uploading 85 data points to derekrob's account on server fluxtream.org, device HomewoodLakeData, channels ['RECORD_RN', 'LS_Conductivity_Avg_mS_per_cm', 'LS_Temp_Avg_C', 'LS_RawPressure_Avg_dBar', 'LS_Chlorophyll_Avg_RFUB', 'LS_CDOM_Avg_RFUB', 'LS_Turbidity_Avg_NTU', 'LakeSensor_BattV_Min_V', 'BP_mmHg_mmHg', 'Depth_m4C_Avg_mH2O_4C']

In [ ]: