Ejemplo n.º 1
0
def extract_airqo_hourly_data_from_api(start_time: str, end_time: str) -> list:
    airqo_api = AirQoApi()
    devices = airqo_api.get_devices(tenant="airqo")
    devices_list = list(devices)
    hourly_events = []

    if len(devices_list) == 0:
        print("devices empty")
        return []

    for device in devices_list:

        try:
            if "name" not in device.keys():
                print(f"name missing in device keys : {device}")
                continue

            device_name = device["name"]
            events = airqo_api.get_events(
                tenant="airqo",
                start_time=start_time,
                frequency="hourly",
                end_time=end_time,
                device=device_name,
            )

            if not events:
                print(
                    f"No measurements for {device_name} : startTime {start_time} : endTime : {end_time}"
                )
                continue

            hourly_events.extend(events)
        except Exception as ex:
            traceback.print_exc()
            print(ex)

    device_measurements = pd.json_normalize(hourly_events)
    column_mappings = {
        "internalTemperature.value": "internalTemperature",
        "internalHumidity.value": "internalHumidity",
        "externalTemperature.value": "temperature",
        "externalHumidity.value": "humidity",
        "externalPressure.value": "pressure",
        "speed.value": "windSpeed",
        "altitude.value": "altitude",
        "battery.value": "battery",
        "satellites.value": "satellites",
        "hdop.value": "hdop",
        "pm10.value": "pm10",
        "s2_pm10.value": "s2_pm10",
        "s2_pm2_5.value": "s2_pm2_5",
        "average_pm2_5.calibratedValue": "calibrated_pm2_5",
    }

    device_measurements.rename(columns=column_mappings, inplace=True)

    return device_measurements.to_dict(orient="records")
Ejemplo n.º 2
0
def get_airqo_data(freq: str,
                   start_time: str = None,
                   end_time: str = None) -> list:
    airqo_api = AirQoApi()
    devices = airqo_api.get_devices(tenant="airqo", all_devices=False)
    measurements = []

    start = (str_to_date(start_time) if start_time else datetime.utcnow() -
             timedelta(days=7))
    end = str_to_date(end_time) if end_time else datetime.utcnow()

    start_time = (date_to_str_days(start)
                  if freq == "daily" else date_to_str_hours(start))
    end_time = date_to_str_days(end) if freq == "daily" else date_to_str_hours(
        end)

    frequency = get_airqo_api_frequency(freq=freq)
    dates = pd.date_range(start_time, end_time, freq=frequency)
    last_date_time = dates.values[len(dates.values) - 1]

    for device in devices:

        for date in dates:

            start = date_to_str(date)
            end_date_time = date + timedelta(hours=dates.freq.n)

            if np.datetime64(end_date_time) > last_date_time:
                end = end_time
            else:
                end = date_to_str(end_date_time)

            try:
                events = airqo_api.get_events(
                    tenant="airqo",
                    start_time=start,
                    frequency=freq,
                    end_time=end,
                    device=device["name"],
                )
                measurements.extend(events)

            except Exception as ex:
                print(ex)
                traceback.print_exc()

    insights = format_measurements_to_insights(data=measurements)
    return insights