Secuencias de comandos de muestra para el Export Data Service

(Última actualización el 30 de enero de 2019)
A continuación, encontrará las secuencias de comandos de muestra de PowerShell y Shell que le permiten automatizar rápidamente el proceso de exportación de datos desde BEACON. Estas secuencias de comandos tienen el objetivo de mostrarle cómo manejar la interacción con las interfaces de programación de aplicaciones (application programming interfaces, API) del Export Data Service (EDS) y no incluyen el manejo de errores.

Muestra de PowerShell
ps_sample.ps1 llama a la terminal de consumo del EDS v1 para obtener un informe del consumo total, así como la cantidad de medidores que informan un flujo >0 en su sistema.

Muestras de Shell
Range.sh le permite usar rápidamente la API del Export Data Service de BEACON para obtener lecturas en un rango de fechas.

Flow.sh le permite usar rápidamente la API del Export Data Service de BEACON para obtener los datos de consumo (flujo) de sus medidores.

Leak.sh le permite usar rápidamente la API del Export Data Service de BEACON para obtener una lista de los medidores con fugas, así como la fecha de inicio de la fuga y la tasa de fuga actual.

Read.sh le permite usar rápidamente la API del Export Data Service de BEACON para obtener los datos de lecturas de facturación de una selección de medidores o de todos los medidores de su empresa de servicios públicos.


NOTA PARA LOS USUARIOS DE LA API DE BEACON EN CANADÁ
De acuerdo con las regulaciones canadienses sobre datos transfronterizos, sus datos de servicios públicos se trasladan o ya se trasladaron a Canadá. Como resultado, si inicia sesión en BEACON a través de beaconama.ca, deberá ajustar todas sus llamadas a la API para abordar las terminales en api.beaconama.ca.

Por ejemplo, cambie
https://api.beaconama.net/v1/eds/read/
a
https://api.beaconama.ca/v1/eds/read/

Este cambio afecta a todas las llamadas a la terminal de la API para las empresas de servicios públicos que inician sesión en beaconama.ca.


Cómo hacer llamadas a la API con PowerShell
PowerShell es un lenguaje de secuencias de comandos de automatización de tareas de Microsoft que simplifica la realización de llamadas a la API de REST y el manejo de datos en JSON y CSV. Powershell funciona en Windows, MacOS y Linux.
Antes de ejecutar las secuencias de comandos de Powershell:

Windows

    • Descargue e instale la última versión de PowerShell. (Actualmente, la última versión es 6.2.4)
    • Agregue C:\Program Files\PowerShell\6.2.4-1.rhel.7.x86_64.rpm\LK a la variable de entorno PATH.
    • Abra el Símbolo del sistema e inicie PowerShell al escribir pwsh.

MacOS

      • Descargue e instale el administrador de paquetes brew desde https://brew.sh.
      • Una vez instalado, escriba brew cask install powershell en una línea de comandos. Esto hará que se instale PowerShell.

Para obtener más detalles sobre cómo usar PowerShell, haga clic aquí.


Cómo usar ps_sample.ps1 para llamar a la terminal de consumo de la API del EDS v1

Copie y pegue la siguiente secuencia de comandos en un archivo y asígnele un nombre, por ejemplo ps_sample.ps1. Esta secuencia de comandos se ejecuta desde la línea de comandos y requiere que proporcione cuatro parámetros: start_date, end_date, username y password.

  • Ingrese una fecha inicial y, si lo desea, la hora en formato ISO en la línea 12 después de $start_date=“YYYY-MM-DD” o $start_date=“YYYY-MM-DDThh:mm:ssZ”.
  • Ingrese una fecha final y, si lo desea, la hora en formato ISO en la línea 12 después de $end_date=“YYYY-MM-DD” o $end_date=“YYYY-MM-DDThh:mm:ssZ”.
  • Ingrese $username y $password con sus credenciales de usuario.
  • Ingrese la unidad de medida deseada en la línea 12.
  • Si lo desea, cambie la resolución a alguna de las opciones, ya sea quarter_hourly, hourly o monthly.
  • Inicie el SÍMBOLO DEL SISTEMA (Windows) o desde la terminal (MacOS) escriba pwsh y presione ENTER.
  • Ejecute ps_sample.ps1.
param (
    [Parameter(Mandatory=$true)][string]$start_date,
    [Parameter(Mandatory=$true)][string]$end_date,
    [Parameter(Mandatory=$true)][string]$username,
    [Parameter(Mandatory=$true)][string]$password
)
$encoded_creds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($username):$($password)"))
$basic_auth = "Basic $($encoded_creds)"

$uri = 'https://api.beaconama.net/v1/eds/consumption'
$headers = @{'Authorization'=$basic_auth;'Content-Type'='application/x-www-form-urlencoded'}
$params = @{startDate=$start_date;endDate=$end_date;unit='cubicmeter';outputFormat='CSV';headerColumns='Flow_Time,Flow';resolution='daily'}

$r = Invoke-RestMethod -Uri $uri -Headers $headers -Method POST -Body $params
$status_url = 'https://api.beaconama.net'+$r.statusUrl
While ($true) {
    $r2 = Invoke-RestMethod -Uri $status_url -Headers $headers
    Write-Output $r2
    if ($r2.state -eq 'done') {
        $report_url = 'https://api.beaconama.net' + $r2.reportUrl
        $out_file = "report.csv"
        $result = Invoke-WebRequest -Uri $report_url -Headers $headers -MaximumRedirection 1 -ErrorAction SilentlyContinue -OutFile $out_file
        Break
    } else {
        Start-Sleep -Seconds 3
    }
}
#
#
#

Para ejecutar la secuencia de comandos denominada ps_sample.ps1 en Windows escriba:

c:\ pwsh -ExecutionPolicy Bypass -File ps_sample.ps1 -start_date 2017-12-01 -end_date 2017-12-19 -username ZZZ -password YYY

Para ejecutar la secuencia de comandos denominada ps_sample.ps1 en MacOS, escriba:

$ pwsh ./ps_sample.ps1 -start_date 2017-12-01 -end_date 2017-12-19 -username ZZZ -password YYY

Las secuencias de comandos crearán un archivo CSV llamado report.csv. Una vez que la secuencia de comandos haya terminado de ejecutarse, puede revisar el contenido de este archivo. Se verá así:

"Flow_Time","Flow"                                                                                                                                                                                                                 "2017-12-01","6140.00000"                                                                                                                                                                                                           
"2017-12-02","5652.40000"
"2017-12-03","5459.10000"
"2017-12-04","5289.20000"
"2017-12-05","5902.60000"
"2017-12-06","5426.50000"
"2017-12-07","5807.80000"

En PowerShell, si usted está detrás de un servidor proxy, proporcione los siguientes parámetros: start_date, end_date, su nombre de usuario y contraseña de BEACON, y su nombre de usuario y contraseña del proxy. Además, pase la siguiente información al realizar la solicitud de red utilizando Invoke-RestMethod o Invoke-WebRequest:

-Proxy '<server:port>' -ProxyUseDefaultCredentials '<proxy password>'

Vea la línea 19 en la secuencia de comandos de muestra a continuación.

Para ejecutar esta versión de ps_sample.ps1 detrás de un servidor proxy en Windows escriba:

c:\ pwsh -ExecutionPolicy Bypass -File ps_sample.ps1 -proxy '<server:port>' -start_date 2017-12-01 -end_date 2017-12-19 -username ZZZ -password YYY

Para ejecutar esta versión de ps_sample.ps1 detrás de un servidor proxy en MacOS escriba:

$ pwsh ./ps_sample.ps1 -proxy '<server:port>' -start_date 2017-12-01 -end_date 2017-12-19 -username ZZZ -password YYY
param (
    [Parameter(Mandatory=$true)][string]$start_date,
    [Parameter(Mandatory=$true)][string]$end_date,
    [Parameter(Mandatory=$true)][string]$username,
    [Parameter(Mandatory=$true)][string]$password,
    [Parameter(Mandatory=$true)][string]$proxy
)

$end_date = Get-Date -UFormat "%Y-%m-%d"
$end_date_for_file_name = Get-Date -UFormat "%Y%m%d-%H%m%S"
$out_file_name = "your-report-$($end_date)-report_$($end_date_for_file_name).csv"
$encoded_creds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($username):$($password)"))
$basic_auth = "Basic $($encoded_creds)"

$uri = 'https://api.beaconama.net/v1/eds/consumption'
$headers = @{'Authorization'=$basic_auth;'Content-Type'='application/x-www-form-urlencoded'}
$params = @{startDate=$start_date;endDate=$end_date;unit='cubicmeter';outputFormat='CSV';headerColumns='Flow_Time,Flow';resolution='daily'}

$r = Invoke-RestMethod -Uri $uri -Proxy $proxy -ProxyUseDefaultCredentials -Headers $headers -Method POST -Body $params
$headers = @{'Authorization'=$basic_auth;'Content-Type'='application/x-www-form-urlencoded'}
$status_url = 'https://api.beaconama.net'+$r.statusUrl

While ($true) {
    $r2 = Invoke-RestMethod -Uri $status_url -Proxy $proxy -ProxyUseDefaultCredentials -Headers $headers
    if ($r2.state -eq 'done') {
        $report_url = 'https://api.beaconama.net' + $r2.reportUrl
        $out_file = "report.csv"
        $result = Invoke-WebRequest -Uri $report_url -Proxy $proxy -ProxyUseDefaultCredentials -Headers $headers -MaximumRedirection 0 -ErrorAction SilentlyContinue
        if ($result.StatusCode -eq 302) {
            Invoke-WebRequest -Uri $result.Headers.Location -OutFile $out_file
            Write-Output "Report created in file: $($out_file)"
        }
        Break
    } else {
        Write-Output $r2.state
        Start-Sleep -Seconds 1
    }

Cómo realizar llamadas a la API con secuencias de comandos de Shell
Las secuencias de comandos de Shell son otra forma de realizar llamadas automatizadas a las API de servicios web. Ejecute estas secuencias de comandos de muestra en un sistema operativo basado en UNIX, como Linux o Mac OS X, o utilice Windows con un conjunto de herramientas de código abierto como Cygwin.

Asegúrese de estar ejecutando la versión 6.58.0 o más reciente de CURL. Al hacerlo, se asegura de no pasar el encabezado de autorización durante el redireccionamiento para obtener el REPORT_URL.


SUGERENCIA: Al pasar parámetros de exportación, p. ej. Meter_ID=1234, ya sea como parámetros de consulta o en el cuerpo de un método POST de HTTP, asegúrese de codificarlos en el localizador de recursos uniforme ​(uniform resource locator, URL).


Antes de ejecutar cualquiera de estas secuencias de comandos de Shell:

Linux y MacOS:

 

  • Descargue e instale el administrador de paquetes brew desde https://brew.sh.
  • Una vez instalado, escriba brew install jq en una línea de comandos. Esto instala un procesador de JSON llamado jq.

 

Windows

  • Consulte GitHub para obtener información sobre cómo instalar jq en Windows.

 


Cómo usar Range.sh
Obtenga lecturas de medidores de intervalo en un rango de fechas utilizando esta llamada a la API.

  • Copie y pegue la siguiente secuencia de comandos en un archivo y asígnele el nombre Range.sh.
  • Reemplace username:password en la línea 2 con sus credenciales de usuario de BEACON separadas por el símbolo de dos puntos (:). Asegúrese de incluir comillas («). Por ejemplo, CREDS=»yourname:yourpassword».
  • Ingrese una fecha inicial y, si lo desea, la hora en formato ISO en la línea 4 después de SDATE=«YYYY-MM-DD» o SDATE=«YYYY-MM-DDThh:mm:ssZ»
  • Ingrese una fecha final y, si lo desea, la hora en formato ISO en la línea 5 después de EDATE=«YYYY-MM-DD» o EDATE=«YYYY-MM-DDThh:mm:ssZ»
  • Ingrese los valores de los parámetros deseados en la línea 9. Por ejemplo,
    • después de resolution= ingrese alguna de las opciones, ya sea daily, hourly o monthly
    • después de unit= ingrese alguna de las opciones, ya sea acrefeet, ccf, cubicfeet, cubicmeter, gallons o liter
  • Busque la secuencia de comandos en su disco duro y escriba lo siguiente en una herramienta de línea de comandos:./Range.sh
  • Oprima ENTER para ejecutar la secuencia de comandos. Cuando se haya completado, copie y pegue los resultados en un nuevo archivo. Guarde el archivo y revíselo en una hoja de cálculo u otra aplicación que pueda leer archivos CSV.
#!/bin/bash
CREDS='username:password'

SDATE='2017-07-31'
EDATE='2017-07-31'
COLS='Account_ID,Meter_ID,Endpoint_SN,Flow,Flow_Unit,Flow_Time'
URL='https://api.beaconama.net/v1/eds/range'

REQ=`curl -s -X POST -u$CREDS -d "resolution=daily&startDate=$SDATE&endDate=$EDATE&unit=cubicmeter&headerColumns=$COLS" $URL`
EDS_UUID=`echo $REQ | jq -r .edsUUID`

# si el estado da como resultado EDS_UUID, entonces comprueba cada 10 segundos
# para ver si el informe está listo. Cuando se haya completado la exportación
# puede obtener el informe de exportación. Tenga en cuenta que la opción -L de curl se usa para
# permitir que curl siga automáticamente las redirecciones.

if [ '$EDS_UUID' != 'null' ]
then
  while true
  do
      sleep 10 # check status every 10 seconds.
      REQ=`curl -s -X GET -u$CREDS https://api.beaconama.net/v1/eds/status/$EDS_UUID`
      echo REQ=$REQ
      REPORT_URL=`echo $REQ | jq -r .reportUrl`
      
      if [[ $REPORT_URL != 'null' ]]
      then
          
          curl -L -s -X GET -u$CREDS https://api.beaconama.net/$REPORT_URL -o $OUTFILE
          
          break
      fi
  done
else
  echo 'ERROR: $REQ'
fi
#
#
#

Cómo usar Flow.sh
Antes de ejecutar la secuencia de comandos:

    • Copie y pegue la siguiente secuencia de comandos en un archivo y asígnele el nombre Flow.sh.
    • Reemplace username:password en la línea 2 con sus credenciales de usuario de BEACON separadas por el símbolo de dos puntos (:). Asegúrese de incluir comillas. Por ejemplo, CREDS=»yourname:yourpassword».
    • Ingrese una fecha inicial y, si lo desea, la hora en formato ISO en la línea 4 después de SDATE=«YYYY-MM-DD» o SDATE=»YYYY-MM-DDThh:mm:ssZ»
    • Ingrese una fecha final y, si lo desea, la hora en formato ISO en la línea 5 después de EDATE=«YYYY-MM-DD» o EDATE=«YYYY-MM-DDThh:mm:ssZ»
    • Ingrese los valores de los parámetros deseados en la línea 9. Por ejemplo,
      • después de resolution= ingrese alguna de las opciones, ya sea daily, hourly o monthly
      • después de unit= ingrese alguna de las opciones, ya sea acrefeet, ccf, cubicfeet, cubicmeter, gallons o liter
    • Guarde el archivo y asígnele el nombre Flow.sh.
    • Ubique la secuencia de comandos en su disco duro, dirija su herramienta de línea de comandos hacia ella y escriba lo siguiente en la línea de comandos:./Flow.sh
    • Oprima ENTER para ejecutar la secuencia de comandos. Cuando se haya completado, copie y pegue los resultados en un nuevo archivo. Guarde el archivo y revíselo en una hoja de cálculo u otra aplicación que pueda leer archivos CSV.
#!/bin/bash
CREDS="username:password"

SDATE="2017-07-31"
EDATE="2017-07-31"
COLS="Account_ID,Meter_ID,Endpoint_SN,Flow,Flow_Unit,Point_1_Read,Point_1_Read_Time,Point_2_Read,Point_2_Read_Time"
URL="https://api.beaconama.net/v1/eds/flow"

REQ=`curl -s -X POST -u$CREDS -d "resolution=daily&startDate=$SDATE&endDate=$EDATE&unit=cubicmeter&headerColumns=$COLS" $URL`
EDS_UUID=`echo $REQ | jq -r .edsUUID`

# si el estado da como resultado EDS_UUID, entonces comprueba cada 10 segundos
# para ver si el informe está listo. Cuando se haya completado la exportación
# puede obtener el informe de exportación. Tenga en cuenta que la opción -L de curl se usa para
# permitir que curl siga automáticamente las redirecciones.

if [ '$EDS_UUID' != 'null' ]
then
  while true
  do
      sleep 10 # check status every 10 seconds.
      REQ=`curl -s -X GET -u$CREDS https://api.beaconama.net/v1/eds/status/$EDS_UUID`
      echo REQ=$REQ
      REPORT_URL=`echo $REQ | jq -r .reportUrl`
      
      if [[ $REPORT_URL != 'null' ]]
      then
          
          curl -L -s -X GET -u$CREDS https://api.beaconama.net/$REPORT_URL -o $OUTFILE
          
          break
      fi
  done
else
  echo 'ERROR: $REQ'
fi
#
#
#

Cómo usar Leak.sh

Utilice esta secuencia de comandos de muestra para llamar a la terminal /v2/eds/leak y obtener una lista de los medidores con fugas, así como la fecha de inicio de la fuga y la tasa de fuga actual.

  • Copie y pegue el siguiente texto en un archivo de texto y asígnele el nombre Leak.sh.
  • Reemplace «username:password» con sus credenciales de usuario de BEACON.
  • Guarde el archivo.
  • Ubique la secuencia de comandos en su disco duro, dirija su herramienta de línea de comandos hacia ella y escriba lo siguiente en la línea de comandos:./Leak.sh
  • Oprima ENTER para ejecutar la secuencia de comandos. Cuando se haya completado, copie y pegue los resultados en un nuevo archivo. Guarde el archivo y revíselo en una hoja de cálculo u otra aplicación que pueda leer archivos CSV.
  • #!/bin/bash
    CREDS='username:password'
    
    COLS='Account_ID,Meter_ID,Current_Leak_Rate,Current_Leak_Start_Date'
    URL='https://api.beaconama.net/v2/eds/leak'
    
    REQ=`curl -s -X POST -u$CREDS -d 'Header_Columns=$COLS' $URL`
    EDS_UUID=`echo $REQ | jq -r .edsUUID`
    
    # si el estado da como resultado EDS_UUID, entonces comprueba cada 10 segundos
    # para ver si el informe está listo. Cuando se haya completado la exportación
    # puede obtener el informe de exportación. Tenga en cuenta que la opción -L de curl se usa para
    # permitir que curl siga automáticamente las redirecciones.
    
    if [ '$EDS_UUID' != 'null' ]
    then
      while true
      do
          sleep 10 # check status every 10 seconds.
          REQ=`curl -s -X GET -u$CREDS https://api.beaconama.net/v1/eds/status/$EDS_UUID`
          echo REQ=$REQ
          REPORT_URL=`echo $REQ | jq -r .reportUrl`
          
          if [[ $REPORT_URL != 'null' ]]
          then
              
              curl -L -s -X GET -u$CREDS https://api.beaconama.net/$REPORT_URL -o $OUTFILE
              
              break
          fi
      done
    else
      echo 'ERROR: $REQ'
    fi
    #
    #
    #
    

    Cómo usar Read.sh
    Obtenga los datos de lecturas de facturación de una selección de medidores o de todos los medidores de su empresa de servicios públicos al usar esta secuencia de comandos de muestra.

    • Copie y pegue esta secuencia de comandos en un archivo y asígnele el nombre Read.sh.
    • Reemplace username:password en la línea 2 con sus credenciales de usuario de BEACON separadas por el símbolo de dos puntos (:). Asegúrese de incluir comillas. Por ejemplo, CREDS=’yourname:yourpassword’.
    • Ingrese una fecha inicial y, si lo desea, la hora en formato ISO en la línea 4 después de SDATE=’YYYY-MM-DD’ o SDATE=’YYYY-MM-DDThh:mm:ssZ’
    • Reemplace los Meter_IDs de muestra en la línea 6 con Meter_IDs reales para cualquier cantidad de medidores. Utilice símbolos de unión (&) para separar los Meter_IDs.Recupere las lecturas de todos los medidores de su servicio público al eliminar la línea 6 de esta secuencia de comandos.
    • Guarde el archivo y asígnele el nombre Read.sh.
    • Ubique la secuencia de comandos en su disco duro, dirija su herramienta de línea de comandos hacia ella y escriba lo siguiente en la línea de comandos:./Read.sh
    • Oprima ENTER para ejecutar la secuencia de comandos. Cuando se haya completado, copie y pegue los resultados en un nuevo archivo. Guarde el archivo y revíselo en una hoja de cálculo u otra aplicación que pueda leer archivos CSV.
    #!/bin/bash
    CREDS='username:password'
    DATE='2019-11-07T00:00:00Z'
    URL='https://api.beaconama.net/v2/eds/read'
    COLUMNS='Location_ID,Service_Point_ID,Meter_ID,Meter_SN,Register_Number,Endpoint_SN,Billing_Read,Read_Unit,Read_Time'
    METERS='Meter_ID=11111111&Meter_ID=22222222&Meter_ID=33333333&Meter_ID=44444444'
    # ---------------------------------------------------------------------------------------
    REQ=`curl -s -u$CREDS -H "Content-Type: application/x-www-form-urlencoded" -d "Date=${DATE}&${METERS}&Header_Columns=${COLUMNS}" -X POST $URL`
    
    # echo ${REQ}
    
    EDS_UUID=`echo $REQ | jq -r .edsUUID`
    # si el estado da como resultado EDS_UUID, entonces comprueba cada 10 segundos
    # para ver si el informe está listo. Cuando se haya completado la exportación
    # puede obtener el informe de exportación. Tenga en cuenta que la opción -L de curl se usa para
    # permitir que curl siga automáticamente las redirecciones.
    if [ '$EDS_UUID' != 'null' ]
    then
      while true
      do
          sleep 10 # check status every 10 seconds.
          REQ=`curl -s -X GET -u$CREDS https://api.beaconama.net/v1/eds/status/$EDS_UUID`
          echo REQ=$REQ
          REPORT_URL=`echo $REQ | jq -r .reportUrl`
          if [[ $REPORT_URL != 'null' ]]
          then
              curl -L -s -X GET -u$CREDS https://api.beaconama.net/$REPORT_URL [-0] $OUTFILE
              break
          fi
      done
    else
      echo 'ERROR: $REQ'
    fi
    #
    #
    #
    
Knowledge Base

User Guide
Follow via Email

Enter your email address to get new content notifications by email.

A %d blogueros les gusta esto: