R/calculo_consumo_diario_e_activa.R

Defines functions calculo_consumo_diario_e_activa

Documented in calculo_consumo_diario_e_activa

#' @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()
      )
    }
  }
}
KepaAmigoTECHFriendly/prediccionesPresencia documentation built on Sept. 14, 2022, 4:09 p.m.