Access data via ZENTRA Cloud API

⚠️ DEPRECATED — this package is no longer maintained.

zentracloud targets the legacy ZENTRA Cloud (zentracloud.com) API. It has been superseded by ZENTRA Cloud 2.0 (app.zentracloud.io) and the new zentraR package. New users should start with zentraR; existing users are encouraged to migrate.

Note for zentracloud.eu users: ZENTRA Cloud 2.0 does not yet have an EU equivalent, so zentraR cannot currently access data hosted on zentracloud.eu. If your data lives on zentracloud.eu, continue using this package for now. Most accounts (including many in the EU) are on the default zentracloud.com server, which shares data with app.zentracloud.io and is fully supported by zentraR.

zentracloud provides functions to access your data via METER’s ZENTRA Cloud API.

Installation

As the package is hosted on a public gitlab page, all that needs to be done to install the package is:

url = "https://gitlab.com/meter-group-inc/pubpackages/zentracloud"
remotes::install_git(url = url, build_vignettes = TRUE)

The build_vignette argument is optional, but using it allows the use of vignette("zentracloud") to show the introductory article.

Usage

# load package
library(zentracloud)

Currently, there are only a few user relevant, exported functions:

1. functions for option management

setZentracloudOptions() writes all required package settings to the global options. These are:

If the cache settings are not provided explicitly, default values are used. setZentracloudOptions() has to be performed once at the beginning of a session.

getZentracloudOptions() lists all currently set options.


setZentracloudOptions(
  token = Sys.getenv("ZENTRACLOUD_TOKEN")
  , domain = "default"
)

getZentracloudOptions()
#> <zentracloudOptions>
#>   ZENTRACLOUD_CACHE_DIR     : /home/<user>/.cache/R/zentracloud
#>   ZENTRACLOUD_CACHE_MAX_AGE : 7
#>   ZENTRACLOUD_CACHE_MAX_SIZE: 500
#>   ZENTRACLOUD_DOMAIN        : zentracloud.com
#>   ZENTRACLOUD_TOKEN         : <-- hidden -->

2. function to get data

getReadings() is the main function of the package. It takes the device serial number as well as start and end date datetime in question. The token and domain needed for the API query are read from the options, therefore the function will fail if these info have not been set using setZentracloudOptions().

getReadings() first checks the cache if any of the requested time period is covered by the results of a previous query. If yes, it loads that part and appends anything that is missing, while also writing the new data to cache. If not, it queries the ZENTRA Cloud API and saves the results to cache. The cache directory is also read from the options.

library(zentracloud)

setZentracloudOptions(
  token = Sys.getenv("ZENTRACLOUD_TOKEN")
  , domain = "default"
)

zentra_data = getReadings(
  device_sn = "06-01185"
  , start_time = "2022-06-01 00:00:00"
  , end_time = "2022-06-14 23:59:00"
  , force_api = FALSE
  , ignore_cache = FALSE
)
str(zentra_data, max.level = 3, give.attr = FALSE)
#> List of 6
#>  $ ATM-410003090_port6: tibble [20 × 48] (S3: tbl_df/tbl/data.frame)
#>   ..$ timestamp_utc                         : int [1:20] 1654066800 1654067700 1654068600 1654069500 1654070400 1654071300 1654072200 1654073100 1654074000 1654074900 ...
#>   ..$ tz_offset                             : int [1:20] -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 ...
#>   ..$ datetime                              : chr [1:20] "2022-06-01 00:00:00-07:00" "2022-06-01 00:15:00-07:00" "2022-06-01 00:30:00-07:00" "2022-06-01 00:45:00-07:00" ...
#>   ..$ rh_sensor_temp.value                  : num [1:20] 12 11.8 11.4 11.3 11.2 11.2 11.2 11 10.9 10.9 ...
#>   ..$ rh_sensor_temp.error_flag             : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ rh_sensor_temp.error_description      : chr [1:20] NA NA NA NA ...
#>   ..$ precipitation.value                   : num [1:20] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ precipitation.error_flag              : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ precipitation.error_description       : chr [1:20] NA NA NA NA ...
#>   ..$ solar_radiation.value                 : num [1:20] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ solar_radiation.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ solar_radiation.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ x_axis_level.value                    : num [1:20] -0.6 -0.7 -0.7 -0.7 -0.7 -0.7 -0.7 -0.6 -0.7 -0.6 ...
#>   ..$ x_axis_level.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ x_axis_level.error_description        : chr [1:20] NA NA NA NA ...
#>   ..$ wind_speed.value                      : num [1:20] 2.93 1.86 2.03 2.24 2.08 2.27 1.63 1.61 1.69 2.63 ...
#>   ..$ wind_speed.error_flag                 : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ wind_speed.error_description          : chr [1:20] NA NA NA NA ...
#>   ..$ lightning_distance.value              : num [1:20] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ lightning_distance.error_flag         : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ lightning_distance.error_description  : chr [1:20] NA NA NA NA ...
#>   ..$ wind_direction.value                  : num [1:20] 105 114 107 106 98 99 101 102 95 96 ...
#>   ..$ wind_direction.error_flag             : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ wind_direction.error_description      : chr [1:20] NA NA NA NA ...
#>   ..$ y_axis_level.value                    : num [1:20] 0.8 0.8 0.8 0.8 0.8 0.9 0.9 0.8 0.8 0.8 ...
#>   ..$ y_axis_level.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ y_axis_level.error_description        : chr [1:20] NA NA NA NA ...
#>   ..$ vpd.value                             : num [1:20] 0.39 0.35 0.36 0.35 0.35 0.35 0.31 0.31 0.3 0.34 ...
#>   ..$ vpd.error_flag                        : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ vpd.error_description                 : chr [1:20] "" "" "" "" ...
#>   ..$ max_precip_rate.value                 : num [1:20] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ max_precip_rate.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ max_precip_rate.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ lightning_activity.value              : num [1:20] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ lightning_activity.error_flag         : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ lightning_activity.error_description  : chr [1:20] NA NA NA NA ...
#>   ..$ atmospheric_pressure.value            : num [1:20] 93 93 93 93 93 ...
#>   ..$ atmospheric_pressure.error_flag       : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ atmospheric_pressure.error_description: chr [1:20] NA NA NA NA ...
#>   ..$ vapor_pressure.value                  : num [1:20] 1.02 1.02 1 1.01 1.01 ...
#>   ..$ vapor_pressure.error_flag             : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ vapor_pressure.error_description      : chr [1:20] NA NA NA NA ...
#>   ..$ air_temperature.value                 : num [1:20] 12.1 11.6 11.6 11.5 11.5 11.5 11.2 11.2 11.1 11.5 ...
#>   ..$ air_temperature.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ air_temperature.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ gust_speed.value                      : num [1:20] 5 2.96 3.34 4 4.08 4.75 2.75 3.14 3.96 5.45 ...
#>   ..$ gust_speed.error_flag                 : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ gust_speed.error_description          : chr [1:20] NA NA NA NA ...
#>  $ T12-0000248_port5  : tibble [20 × 12] (S3: tbl_df/tbl/data.frame)
#>   ..$ timestamp_utc                          : int [1:20] 1654066800 1654067700 1654068600 1654069500 1654070400 1654071300 1654072200 1654073100 1654074000 1654074900 ...
#>   ..$ tz_offset                              : int [1:20] -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 ...
#>   ..$ datetime                               : chr [1:20] "2022-06-01 00:00:00-07:00" "2022-06-01 00:15:00-07:00" "2022-06-01 00:30:00-07:00" "2022-06-01 00:45:00-07:00" ...
#>   ..$ saturation_extract_ec.value            : num [1:20] 2.1 2.09 2.1 2.1 2.1 ...
#>   ..$ saturation_extract_ec.error_flag       : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ saturation_extract_ec.error_description: chr [1:20] NA NA NA NA ...
#>   ..$ water_content.value                    : num [1:20] 0.361 0.361 0.361 0.361 0.361 0.361 0.361 0.361 0.361 0.361 ...
#>   ..$ water_content.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ water_content.error_description        : chr [1:20] NA NA NA NA ...
#>   ..$ soil_temperature.value                 : num [1:20] 10.1 10.1 10.1 10.1 10.1 10.1 10.1 10.1 10.1 10.1 ...
#>   ..$ soil_temperature.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ soil_temperature.error_description     : chr [1:20] NA NA NA NA ...
#>  $ T12-0000495_port4  : tibble [20 × 12] (S3: tbl_df/tbl/data.frame)
#>   ..$ timestamp_utc                          : int [1:20] 1654066800 1654067700 1654068600 1654069500 1654070400 1654071300 1654072200 1654073100 1654074000 1654074900 ...
#>   ..$ tz_offset                              : int [1:20] -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 ...
#>   ..$ datetime                               : chr [1:20] "2022-06-01 00:00:00-07:00" "2022-06-01 00:15:00-07:00" "2022-06-01 00:30:00-07:00" "2022-06-01 00:45:00-07:00" ...
#>   ..$ soil_temperature.value                 : num [1:20] 10.7 10.7 10.7 10.7 10.7 10.7 10.7 10.7 10.7 10.7 ...
#>   ..$ soil_temperature.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ soil_temperature.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ water_content.value                    : num [1:20] 0.348 0.348 0.348 0.348 0.348 0.348 0.348 0.348 0.348 0.348 ...
#>   ..$ water_content.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ water_content.error_description        : chr [1:20] NA NA NA NA ...
#>   ..$ saturation_extract_ec.value            : num [1:20] 1.86 1.86 1.86 1.86 1.86 ...
#>   ..$ saturation_extract_ec.error_flag       : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ saturation_extract_ec.error_description: chr [1:20] NA NA NA NA ...
#>  $ T12-0000499_port2  : tibble [20 × 12] (S3: tbl_df/tbl/data.frame)
#>   ..$ timestamp_utc                          : int [1:20] 1654066800 1654067700 1654068600 1654069500 1654070400 1654071300 1654072200 1654073100 1654074000 1654074900 ...
#>   ..$ tz_offset                              : int [1:20] -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 ...
#>   ..$ datetime                               : chr [1:20] "2022-06-01 00:00:00-07:00" "2022-06-01 00:15:00-07:00" "2022-06-01 00:30:00-07:00" "2022-06-01 00:45:00-07:00" ...
#>   ..$ saturation_extract_ec.value            : num [1:20] 1.47 1.47 1.47 1.47 1.47 ...
#>   ..$ saturation_extract_ec.error_flag       : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ saturation_extract_ec.error_description: chr [1:20] NA NA NA NA ...
#>   ..$ soil_temperature.value                 : num [1:20] 12.2 12.2 12.2 12.2 12.2 12.2 12.3 12.3 12.3 12.3 ...
#>   ..$ soil_temperature.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ soil_temperature.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ water_content.value                    : num [1:20] 0.334 0.334 0.334 0.334 0.334 0.334 0.334 0.334 0.334 0.334 ...
#>   ..$ water_content.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ water_content.error_description        : chr [1:20] NA NA NA NA ...
#>  $ T12-0000500_port1  : tibble [20 × 12] (S3: tbl_df/tbl/data.frame)
#>   ..$ timestamp_utc                          : int [1:20] 1654066800 1654067700 1654068600 1654069500 1654070400 1654071300 1654072200 1654073100 1654074000 1654074900 ...
#>   ..$ tz_offset                              : int [1:20] -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 ...
#>   ..$ datetime                               : chr [1:20] "2022-06-01 00:00:00-07:00" "2022-06-01 00:15:00-07:00" "2022-06-01 00:30:00-07:00" "2022-06-01 00:45:00-07:00" ...
#>   ..$ saturation_extract_ec.value            : num [1:20] 0.977 0.977 0.977 0.972 0.969 0.968 0.97 0.971 0.971 0.976 ...
#>   ..$ saturation_extract_ec.error_flag       : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ saturation_extract_ec.error_description: chr [1:20] NA NA NA NA ...
#>   ..$ soil_temperature.value                 : num [1:20] 13.8 13.8 13.8 13.8 13.8 13.8 13.8 13.8 13.7 13.7 ...
#>   ..$ soil_temperature.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ soil_temperature.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ water_content.value                    : num [1:20] 0.291 0.291 0.291 0.291 0.291 0.291 0.291 0.291 0.291 0.291 ...
#>   ..$ water_content.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ water_content.error_description        : chr [1:20] NA NA NA NA ...
#>  $ T12-0000504_port3  : tibble [20 × 12] (S3: tbl_df/tbl/data.frame)
#>   ..$ timestamp_utc                          : int [1:20] 1654066800 1654067700 1654068600 1654069500 1654070400 1654071300 1654072200 1654073100 1654074000 1654074900 ...
#>   ..$ tz_offset                              : int [1:20] -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 -25200 ...
#>   ..$ datetime                               : chr [1:20] "2022-06-01 00:00:00-07:00" "2022-06-01 00:15:00-07:00" "2022-06-01 00:30:00-07:00" "2022-06-01 00:45:00-07:00" ...
#>   ..$ saturation_extract_ec.value            : num [1:20] 1.18 1.19 1.19 1.19 1.19 ...
#>   ..$ saturation_extract_ec.error_flag       : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ saturation_extract_ec.error_description: chr [1:20] NA NA NA NA ...
#>   ..$ soil_temperature.value                 : num [1:20] 11.5 11.5 11.5 11.5 11.5 11.5 11.6 11.6 11.6 11.6 ...
#>   ..$ soil_temperature.error_flag            : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ soil_temperature.error_description     : chr [1:20] NA NA NA NA ...
#>   ..$ water_content.value                    : num [1:20] 0.328 0.328 0.328 0.328 0.328 0.328 0.328 0.328 0.328 0.328 ...
#>   ..$ water_content.error_flag               : logi [1:20] FALSE FALSE FALSE FALSE FALSE FALSE ...
#>   ..$ water_content.error_description        : chr [1:20] NA NA NA NA ...

3. function to clear the cache

clearCache() allows clearing the cache of files older than the specified file_age.

# deletes all .parquet files that are 30 days or more old
clearCache(file_age = 30L) 

4. function to get the device settings

queryDeviceSettings() will query the API and return the contents as a list. The list entry device will then contain sensor metadata like measurement settings, sensor location and others.


library(listviewer)

settings = queryDeviceSettings(
  device_sn = "06-01185"
)

jsonedit(settings)

Benchmarks for cache vs. API

setZentracloudOptions(
  token = Sys.getenv("ZENTRACLOUD_TOKEN")
  , domain = "default"
)

## force API call 
system.time(
  getReadings(
    device_sn = "06-01185" 
    , start_time = "2022-03-20 00:00:00"
    , end_time = "2022-03-26 23:59:00"
    , force_api = TRUE
    , ignore_cache = FALSE
  )
)
#> [querying device settings]
#> [retrieving data]
#> [waiting to get next page]
#> Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■                              Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■                             Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■                            Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■                           Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■                          Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■                         Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■                        Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■                       Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■                      Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■                     Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■                    Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■                   Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■                  Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■                 Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■                Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■               Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■              Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 50s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                       [retrieving data]
#>    user  system elapsed 
#>   7.196   0.082  65.608

## get data from cache
system.time(
  getReadings(
    device_sn = "06-01185" 
    , start_time = "2022-03-20 00:00:00"
    , end_time = "2022-03-26 23:59:00" 
    , force_api = FALSE
    , ignore_cache = FALSE
  )
)
#> [querying device settings]
#> 
#> Waiting 59s to retry ■                               Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■                              Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■                             Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■                            Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■                           Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■                          Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■                         Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■                        Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■                       Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■                      Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■                     Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■                    Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■                   Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■                  Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■                 Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■                Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■               Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■              Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 59s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                       [retrieving data]
#> 
#> [waiting to get next page]
#> 
#> Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■                              Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■                             Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■                            Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■                           Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■                          Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■                         Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■                        Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■                       Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■                      Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■                     Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■                    Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■                   Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■                  Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■                 Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■                Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■               Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■              Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■             Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■            Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■           Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■          Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■         Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■        Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■       Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■      Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■     Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■    Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■   Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Waiting 48s to retry ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                       [retrieving data]
#>    user  system elapsed 
#>  12.266   0.159 123.948

More information

More detailed information on the package and all the functions can be found in the Get started vignette: