#' @title Cálculo de consumo diario de energía activa
#'
#' @description Cálcula el consumo diario de energía activa por (inputs): dispositivo, fecha inicial y fecha final, y guarda telemetría con clave: consumo_diario_kWh
#'
#' @param ids, fecha_inicial, fecha_final
#'
#' @return json
#'
#' @examples calculo_consumo_diario_e_activa(ids="4be08700-28f0-11eb-b605-01af9c6dd825,33ebb700-28f0-11eb-b605-01af9c6dd825", fecha_inicial = "2022-01-01", fecha_final = "2022-01-16")
#'
#' @import httr
#' jsonlite
#' rjson
#' RCurl
#' dplyr
#'
#' @export
calculo_consumo_diario_e_activa <- function(ids, fecha_inicial, fecha_final){
# -----------------------------------------------------------------------------
# PETICIÓN TOKEN THB
# -----------------------------------------------------------------------------
cuerpo <- toJSON(list(username="kepa@techfriendly.es",password='kepa_tech'))
post <- httr::POST(url = "http://116.202.100.157:8080/api/auth/login",
add_headers("Content-Type"="application/json","Accept"="application/json"),
body = cuerpo,
encode = "json",verbose()
)
resultado_peticion_token <- httr::content(post)
auth_thb <- paste("Bearer",resultado_peticion_token$token)
# -----------------------------------------------------------------------------
# VARIABLES OBJETIVO
# -----------------------------------------------------------------------------
# Parseo fechas
fecha_inicial <- as.character(fecha_inicial)
fecha_final <- as.character(fecha_final)
t_ref <- "00:00:00"
fecha_inicial <- paste(fecha_inicial,t_ref,sep = " ")
fecha_final <- paste(fecha_final,t_ref,sep = " ")
fecha_inicial <- format(as.numeric(as.POSIXct(fecha_inicial))*1000,scientific = F) # Paso a unix ts con ms
fecha_final <- format(as.numeric(as.POSIXct(fecha_final))*1000,scientific = F) # Paso a unix ts con ms
# -----------------------------------------------------------------------------
# PETICIÓN DATOS Y PARSEO DATOS
# -----------------------------------------------------------------------------
ids_dispositivos_lista <- strsplit(ids,",")[[1]]
# Bucle por dispositivo
for(j in 1:length(ids_dispositivos_lista)){
keys <- URLencode(c("kwh"))
url_thb_fechas <- paste("http://116.202.100.157:8080/api/plugins/telemetry/DEVICE/",ids_dispositivos_lista[j],"/values/timeseries?limit=10000&keys=",keys,"&startTs=",fecha_inicial,"&endTs=",fecha_final,sep = "")
peticion <- GET(url_thb_fechas, add_headers("Content-Type"="application/json","Accept"="application/json","X-Authorization"=auth_thb))
# Tratamiento datos. De raw a dataframe
df <- jsonlite::fromJSON(rawToChar(peticion$content))
df <- as.data.frame(df)
colnames(df) <- c("ts","kWh")
df$fecha_time <- as.POSIXct(as.numeric(df$ts)/1000, origin = "1970-01-01")
df <- df[,c(1,3,2)]
df$kWh <- as.numeric(df$kWh)
df$fechas <- gsub("[ ].*","",df$fecha_time)
# -----------------------------------------------------------------------------
# CÁLCULO CONSUMO DIARIO
# -----------------------------------------------------------------------------
#consumo_diario <- round(max(df$kWh) - min(df$kWh),2)
df_consumo_por_fechas <- df %>%
dplyr::group_by(fechas) %>%
dplyr::summarise(consumo_diario = max(kWh) - min(kWh))
df_consumo_por_fechas$fechas_time <- paste(df_consumo_por_fechas$fechas, t_ref, sep = " ")
df_consumo_por_fechas$consumo_diario <- round(df_consumo_por_fechas$consumo_diario, 2)
# -----------------------------------------------------------------------------
# GUARDADO TELEMETRÍA EN DISPOSITIVO
# -----------------------------------------------------------------------------
# GET token del dispositivo
url <- paste("http://116.202.100.157:8080/api/device/",ids_dispositivos_lista[j],"/credentials",sep = "")
get_token <- httr::GET(url = url, add_headers("Content-Type"="application/json","Accept"="application/json","X-Authorization"=auth_thb))
token <- jsonlite::fromJSON(rawToChar(get_token$content))
token <- token$credentialsId
url <- paste("http://116.202.100.157:8080/api/v1/",token,"/telemetry",sep = "")
# Bucle for por cada registro
for(i in 1:nrow(df_consumo_por_fechas)){
json_consumo <- paste('{"consumo_diario_kWh":',df_consumo_por_fechas$consumo_diario[i],'}',sep = "")
unix_ts <- format(as.numeric(as.POSIXct((df_consumo_por_fechas$fechas_time[i])))*1000,scientific = F)
json_envio_plataforma <- paste('{"ts":',unix_ts,', "values":',json_consumo,"}",sep="")
post <- httr::POST(url = url,
add_headers("Content-Type"="application/json","Accept"="application/json","X-Authorization"=auth_thb),
body = json_envio_plataforma,
verify= FALSE,
encode = "json",verbose()
)
}
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.