Skip to content

downloader

create_start_stop_timestamp(start_dt, stop_dt)

Returns a list of lists with start stop times in 1 day chunks in unix timesamps

Source code in src/naneos/iotweb/download/downloader.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def create_start_stop_timestamp(start_dt: dt.datetime, stop_dt: dt.datetime) -> list:
    """Returns a list of lists with start stop times in 1 day chunks in unix timesamps"""
    delta_seconds = 3600 * 24 * 2

    start = int(start_dt.timestamp())
    stop = int(stop_dt.timestamp())

    start_stop_times = []

    while start < stop - delta_seconds:
        start_stop_times.append([start, start + delta_seconds])
        start += delta_seconds
    start_stop_times.append([start, stop])

    return start_stop_times

download_from_iotweb(name, serial_number, start, stop, token)

Download your data from influxdb.naneos.ch. 1 Month of data takes about 30 seconds to download and uses about 100 MB of data.

You need to have a token to access the data. Ask mario.huegi@naneos.ch for your read token. We kindly ask you to not overuse our server. If you need to download the same data in a recuring pattern, contact us.

Parameters:

Name Type Description Default
name str

Name of the influx bucket.

required
serial_number str

Serial number of your device as string.

required
start datetime

Start date of the data you want to download.

required
stop datetime

End date of the data you want to download.

required
token str

Your read token. Do not push your token to public repositories.

required

Returns:

Type Description
DataFrame

pd.DataFrame: Dataframe with your data.

Source code in src/naneos/iotweb/download/downloader.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
def download_from_iotweb(
    name: str, serial_number: str, start: dt.datetime, stop: dt.datetime, token: str
) -> pd.DataFrame:
    """Download your data from influxdb.naneos.ch.
    1 Month of data takes about 30 seconds to download and uses about 100 MB of data.

    You need to have a token to access the data.
    Ask mario.huegi@naneos.ch for your read token.
    We kindly ask you to not overuse our server.
    If you need to download the same data in a recuring pattern, contact us.

    Args:
        name (str): Name of the influx bucket.
        serial_number (str): Serial number of your device as string.
        start (dt.datetime): Start date of the data you want to download.
        stop (dt.datetime): End date of the data you want to download.
        token (str): Your read token. Do not push your token to public repositories.

    Returns:
        pd.DataFrame: Dataframe with your data.
    """
    timestamps = create_start_stop_timestamp(start, stop)

    dfs = []

    with InfluxDBClient(url=URL_INFLUX, org=ORG_INFLUX, token=token) as client:
        for t1, t2 in timestamps:
            query = get_query(name, serial_number, t1, t2)

            df = client.query_api().query_data_frame(query)

            if isinstance(df, list):
                dfs.extend(df)
            elif isinstance(df, pd.DataFrame):
                dfs.append(df)
            else:
                logger.warning(f"Unknown type: {type(df)}")

    df = pd.concat(dfs, axis=0)
    df.set_index("_time", inplace=True)
    df.drop(["result", "table"], axis=1, inplace=True)

    return df