---
title: "data_collection"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{data_collection}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE,
  purl = FALSE
)
library(httptest2)
start_vignette("data_collection")
```

```{r setup}
library(microinverterdata)
```

# Data Collection

For inverters that do not collect historical data, you may want to do this collection with R. 

Here are some ideas to achieve it. 


## Use `pins` storage

- Initialize the board dataset maned "inverter_data" (only once)
We can choose the most simpler board to be the local board
```{r}
library(pins)
board <- board_local()
if (!"inverter_data" %in% pin_list(board)) {
  initial_data <- tibble::tibble(
    date = lubridate::now(), get_output_data(c("192.168.0.175"))
    )
  board |> pin_write(initial_data, name = "inverter_data", versioned = TRUE)
}

```


- Read the {pins} local board content for dataset "inverter_data"
```{r}
history <- board |> pin_read("inverter_data")
```

- Read new data from the inverter and append it to the dataset : 

```{r}
new_data <- tibble::tibble(
  date = lubridate::now(), get_output_data(c("192.168.0.175"))
  )
board |> pin_write(rbind(history, new_data), name = "inverter_data", versioned = TRUE)

```

- look at recorded versions
```{r}
board |> pin_versions("inverter_data")
```

## All-in-one in a script

As we know the dynamic behavior, we can move that to a R script and run it on a regular basis with system tools like crontab for linux : 

```{bash}
crontab -l
```
 
and you can use and edit the following file
```{r}
system.file("inverter_data.R", package = "microinverterdata")
```

and setup (or remove) the environment variables required for the script to run, then put that script in the crontab 
to run it every 30 min like in the following crontab entry

```
# m h dom mon dow command
0,30 * * * * R CMD BATCH inverter_data.R
```


```{r, include=FALSE}
end_vignette()
```
