Compartir vía


Cómo escribir una extensión meteorológica

En esta sección, verá una guía paso a paso para escribir su propia extensión meteorológica.

¿Qué es una extensión meteorológica?

Una extensión meteorológica en Data Manager for Agriculture es un archivo de manifiesto (JSON) que proporciona los detalles completos de las API y una plantilla para cada respuesta de API (salida). Por lo tanto, el archivo de extensión es básicamente una estructura de plantilla de API tal como se define en Data Manager for Agriculture, para que comprenda las características de entrada (solicitud) y salida (respuesta) de API.

Estructura de las extensiones meteorológicas

En un nivel alto, el archivo de extensión es un JSON que consta de dos cosas:

  • Metadatos del proveedor (objeto JSON)
  • Información de API (matriz JSON)

Metadatos del proveedor

Es un objeto JSON que proporciona los detalles de los campos siguientes necesarios para identificar de manera única una extensión y su información de control de versiones. Los detalles proporcionados en esta sección de la extensión se muestran a los clientes externos en el marketplace de Data Manager for Agriculture. Por lo tanto, extensionId y extensionName (para facilitar la identificación) y description (para la propuesta de valor) deben centrarse en el cliente.

Metadatos del proveedor de ejemplo

"provider": {
    "extensionId": "abc.weather", 
    "extensionName": "ABC weather",
    "description": "Get Weather data from ABC weather into Azure Data Manager for Agriculture platform using this extension",
    "dataCategory": "Weather",
    "farmBeatsSchemaVersion": "1.0",
    "extensionVersion": "1.0",
    "supportUrl": "www.abc.com/support",
    "supportEmail": "support@abc.com"
  }
Detalles de los metadatos del proveedor
Nombre Escribir Descripción
extensionId string El id. proporcionado en la forma de nombre de la organización (Contoso) y servicio (clima) Por ejemplo: org.service. extensionId es el identificador único de la extensión y el que usan los usuarios en la plataforma de Data Manager for Agriculture para interactuar con las API de extensión.
extensionName string Nombre de la extensión que se va a usar en el marketplace de extensiones de Data Manager for Agriculture.
descripción string Descripción que indica las funcionalidades y los servicios ofrecidos por la extensión.
dataCategory string Para las extensiones meteorológicas, use weather.
farmBeatsSchemaVersion string Versión del archivo de manifiesto en el lado de Data Manager for Agriculture. Cualquier actualización del archivo de manifiesto existente conduce a una nueva actualización de versión en este campo.
extensionVersion string Versión del archivo de extensión. A partir de 1.0. Las actualizaciones de su archivo de extensión incrementan este número de versión según la convención de las actualizaciones principales y secundarias.
supportUrl string Vínculo al sitio web para generar consultas de soporte técnico y preguntas más frecuentes
supportEmail string Correo electrónico para enviar en las consultas de soporte técnico.

Información de API

La matriz JSON de información de la API (apiInfos) se puede dividir aún más en los siguientes elementos estructurales.

  • Metadatos de API
  • Parámetros de autenticación
  • Parámetros de entrada de la API
  • Parámetros de entrada de la API extraídos
  • Parámetros funcionales
  • Sistema de unidades
  • Parámetros de plataforma y personalizados
  • Plantilla de plataforma y personalizada

Metadatos de API

Esta sección consta de información básica sobre la API que usa Data Manager for Agriculture para identificar apiName (llamada explícitamente por los usuarios) y redirigir la solicitud de API al endpoint correcto en función del requestType adecuado.

Metadatos de API de ejemplo
"apiInfos": [
    {
          "apiName": "dailyforecast",
          "description": "The Daily Forecast API",
          "endpoint": "https://ag.us.clearapis.com/v1.1/forecast/daily",
          "requestType": "GET",
          "isLoadAPI": "false",
          "typeOfData": "forecast",
          "granularity": "daily",
          "defaultUnitSystem": "us"
    }
]
Detalles de metadatos de la API
Nombre Escribir Descripción
apiInfos array Matriz de objetos JSON, donde cada API es un objeto dentro de la matriz apiInfos.
apiName string El nombre de la API como lo admite la extensión es el nombre exacto con el que los usuarios llamarían a las API de extensión. Siga la misma convención de nomenclatura que se mencionó en la documentación de la API.
descripción string Descripción de API
endpoint string Punto de conexión de API para que Data Manager for Agriculture llame a apiName.
requestType string GET o POST o el tipo de solicitud PUT como lo admite apiName.
isLoadAPI boolean Si apiName es una API de paso a través como los datos meteorológicos actuales, convierta esta clave como false. Para todas las API de carga (histórico y previsión), mantenga este campo como true. Cuando la clave isLoadAPI es false, la respuesta de la API se enviaría directamente al usuario y no se almacenaría en el servicio de almacenamiento de Data Manager for Agriculture.
typeOfData string Los valores admitidos actualmente son Historical y Forecast.
granularidad string Los valores admitidos actualmente son Daily y Hourly.
defaultUnitSystem string Proporcione el nombre del sistema de unidades predeterminado admitido por apiName.

Parámetros de autenticación

En esta sección se toman los parámetros relacionados con la autenticación como compatibles con apiName. Como Data Manager for Agriculture admite dos tipos de claves relacionadas con la autenticación (x-ms-farmBeats-data-provider-id y x-ms-farmBeats-data-provider-key) en la sección de encabezado de API, el archivo de extensión debe proporcionar explícitamente el nombre de clave de sus respectivas claves de autenticación según sea necesario para apiName.

Como Data Manager for Agriculture recopila la información de autenticación a través del encabezado de API (en la API crear trabajo de clima). La asignación de parámetros de autenticación se realiza para asegurarse de que Data Manager for Agriculture pueda pasar la clave en consecuencia a la extensión según sea necesario.

Parámetros de autenticación de ejemplo
"apiInfos": [
    "authInputParameters": [
        {
          "farmBeatsAuthMapping": "x-ms-farmBeats-data-provider-id",
          "name": "app_id",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "Provide the APP ID, username etc. that your API supports",
          "location": "apiQuery"
        },
        {
          "farmBeatsAuthMapping": "x-ms-farmBeats-data-provider-key",
          "name": "app_key",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "Provide the API Key or password etc. that your API supports",
          "location": "apiQuery"
        }
      ]
]
Detalles de los parámetros de autenticación
Nombre Escribir Descripción
authInputParameters array Matriz JSON de los parámetros de autenticación, donde cada objeto significa un tipo de autenticación admitido. Use la clave en función del tipo de autenticación admitido por la extensión.
farmBeatsAuthMapping string Actualmente se admiten dos tipos de claves relacionadas con la autenticación. En el caso de la autenticación basada en claves de API, use solo el objeto x-ms-farmBeats-data-provider-key, mientras que para la autenticación basada en id. de la aplicación y clave de la aplicación, use ambos objetos x-ms-farmBeats-data-provider-id y x-ms-farmBeats-data-provider-key.
nombre string Nombre de la clave de autenticación compatible con apiName.
isRequired boolean ¿Este nombre es un parámetro necesario para apiName? Proporcione valores true o false.
providerDataType string Proporcione el tipo de datos del parámetro name.
descripción string Descripción de Data Manager for Agriculture de qué significa cada una de las farmBeatsAuthMapping dentro de cada objeto.
ubicación string En qué parte de la API debe enviarse el parámetro name. Los valores admitidos actualmente son apiQuery y apiHeader.

Parámetros de entrada de la API

En esta sección se proporcionan los detalles sobre la signatura de API (parámetros de entrada) para llamar correctamente a apiName.

Parámetros de entrada de la API de ejemplo
"apiInfos": [
    "apiInputParameters": [
        {
          "name": "start",
          "isRequired": "true",
          "providerDataType": "double",
          "description": "Start of time range. Valid start values range from zero to nine. Day zero represents the current day.",
          "location": "apiQuery"
        },
        {
          "name": "end",
          "isRequired": "true",
          "providerDataType": "double",
          "description": "End of time range. Valid end values range from zero to nine.",
          "location": "apiQuery"
        },
        {
          "name": "location",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "User-provided latitude and longitude coordinates. Formatted as location=[(<lat_1>,<lon_1>)].",
          "location": "apiQuery"
        },
        {
          "name": "unitcode",
          "isRequired": "false",
          "providerDataType": "string",
          "description": "Unit conversion set to be used. Default is us-std. Valid values are us-std, si-std.",
          "location": "apiQuery"
        },
      ]
]
Detalles de los parámetros de entrada de la API
Nombre Escribir Descripción
apiInputParameters array Matriz JSON de parámetros de entrada de API, donde cada objeto significa un parámetro de entrada admitido por apiName.
nombre string Nombre del parámetro de entrada como lo admite apiName.
isRequired boolean ¿Este nombre es un parámetro necesario para apiName? Proporcione valores true o false.
providerDataType string Proporcione el tipo de datos del parámetro name.
descripción string Proporcione una descripción de lo que significa el parámetro name.
ubicación string En qué parte de la API debe enviarse el parámetro name. Los valores admitidos actualmente son apiQuery y apiHeader.

Parámetros de entrada de la API extraídos

Esta sección sirve para que Data Manager extraiga los parámetros de entrada pasados en la solicitud de API para el cálculo y el almacenamiento. En este ejemplo, Data Manager for Agriculture extraería la información de ubicación (latitud y longitud) de la solicitud de entrada de API y la almacenaría como parte de cada salida meteorológica en Data Manager for Agriculture.

Por lo tanto, la extensión debe proporcionar una plantilla HandleBars sobre cómo extraer información de ubicación. En el ejemplo siguiente se sugiere que la API de extensión recopila información de ubicación como "lat" para "latitude" y "lon" para "longitude".

Parámetros de entrada de API extraídos de ejemplo
"extractedApiInputParameters": [
        {
          "name": "location",
          "template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\"  } "
        }
      ]
Detalles de los parámetros de entrada de API extraídos
Nombre Escribir Descripción
extractedApiInputParameters array Matriz JSON de las funcionalidades de extracción, donde cada objeto indica qué información se debe extraer. Actualmente, location es una extracción de este tipo.
nombre string Nombre de la extracción, actualmente el valor admitido es location.
template string Plantilla HandleBars que muestra cómo se recopila la información de latitud y longitud en los parámetros de entrada de la API.

Parámetros funcionales

Esta sección está dedicada a las funcionalidades y capacidades creadas por Data Manager for Agriculture. Para la extensión meteorológica, el cálculo del centroide es una de estas funciones.

Cuando los usuarios no proporcionan las coordenadas de latitud y longitud, Data Manager for Agriculture usa la geometría principal del campo (id. pasado por el usuario) para calcular el centroide. Las coordenadas calculadas del centroide se pasan como la latitud y la longitud a la extensión (proveedor de datos). Por lo tanto, para que Data Manager for Agriculture pueda comprender el uso de las coordenadas de ubicación, se usa la sección de parámetros funcionales.

Para que Data Manager for Agriculture comprenda el uso de latitudes y longitudes en los parámetros de entrada de apiName, se espera que la extensión proporcione el name de la clave usada para recopilar información de ubicación seguida de una plantilla HandleBar para implicar cómo se deben pasar los valores de latitud y longitud.

Parámetros funcionales de ejemplo
"apiInfos": [
    "functionalParameters": [
        {
          "name": "CentroidCalculation",
          "description": "Provide names of the parameters used to collect latitude and longitude information",
          "functionalParameterEntities": [
            {
              "name": "lat",
              "template": "{ \"lat\": \"{{latitude}}\" } "
            },
            {
              "name": "lon",
              "template": "{ \"lon\": \"{{longitude}}\" } "
            }
          ]
        }
      ],
]
Detalles de los parámetros funcionales
Nombre Escribir Descripción
functionalParameters array Matriz de funcionalidades JSON, donde cada objeto significa una funcionalidad compatible con Data Manager for Agriculture. Actualmente, CentroidCalculation es una de estas funcionalidades.
nombre string Nombre de la funcionalidad, actualmente el valor admitido es CentroidCalculation.
descripción string Descripción de la funcionalidad de Data Manager for Agriculture.
functionalParameterEntities array Matriz de objetos JSON, donde cada objeto es específico de la latitud y la longitud.

Sistema de unidades

Data Manager for Agriculture usa esta sección para comprender los distintos tipos de sistemas de unidades admitidos por la extensión. Por lo tanto, la extensión debe proporcionar el nombre de la key usado para recopilar información de unidades en las entradas de la API y seguido de los distintos nombres de los sistemas de unidades (por ejemplo: us-std) como los admite apiName.

Sistema de unidades de ejemplo
"unitSystems": 
    {
        "key": "unitcode",
        "values": [
            "us-std",
            "si-std",
            "us-std-precise",
            "si-std-precise"
            ]
    }
Detalles del sistema de unidades
Nombre Escribir Descripción
unitSystems objeto Objeto JSON para recopilar la información del sistema de unidades.
key string Nombre del parámetro usado para recopilar la información de las unidades en la entrada de la API.
valores string Lista de nombres de los sistemas de unidades compatibles con la extensión.

Parámetros de plataforma y personalizados

En cada respuesta de la API meteorológica, las medidas meteorológicas, que se envían como parte de la salida (por ejemplo, temperatura, punto de rocío, etc.) ,se denominan parámetros.

Por lo tanto, cuando se trata de parámetros, Data Manager for Agriculture admite internamente el siguiente conjunto de parámetros y los trata como Platform parameters.

  • cloudCover
  • dateTime
  • dewPoint
  • growingDegreeDay
  • precipitation
  • presión
  • relativeHumidity
  • soilMoisture
  • soilTemperature
  • temperatura
  • visibility
  • wetBulbTemperature
  • windChill
  • windDirection
  • windGust
  • windSpeed

Por lo tanto, cualquier extensión que envíe parámetros meteorológicos, que no se encuentren en los parámetros de la plataforma, los envía como parte de los Custom parameters. La diferencia clave entre los parámetros de plataforma y de cliente es que los usuarios que usan las API meteorológicas de Data Manager for Agriculture pueden consultar y filtrar los parámetros de plataforma (por ejemplo: temperatura > 30) pero no los parámetros personalizados. Sin embargo, los parámetros personalizados se envían como parte de la salida de la consulta meteorológica.

En esta sección, la extensión proporciona la información de unidades para cada uno de los parámetros de cada sistema de unidades que se admite. El uso de Data Manager for Agriculture sabe cuál es la unidad de medición subyacente para cada parámetro meteorológico en función de la información proporcionada en esta sección de la extensión.

Nota:

  • Para un parámetro determinado, si las unidades no son aplicables, no mencione las unidades para este (por ejemplo: weatherDescriptor)
  • Para un parámetro determinado, si las unidades son iguales para todos los sistemas de unidades, mencione lo mismo en todos los sistemas de unidades. (Por ejemplo, cloudCover)
Parámetro de plataforma y personalizados de ejemplo
"apiInfos": [
     "platformParameters": [
        {
          "farmBeatsName": "cloudCover",
          "farmBeatsDataType": "double",
          "description": "The average percentage of sky covered by clouds.",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "%"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "%"
            },
            {
              "unitSystem": "si-std",
              "unit": "%"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "%"
            }
          ]
        },
        {
          "farmBeatsName": "dewPoint",
          "farmBeatsDataType": "double",
          "description": "The air temperature at which the air will become saturated, and dew moisture will condense into fog (or dew).",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "F"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "F"
            },
            {
              "unitSystem": "si-std",
              "unit": "C"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "C"
            }
          ]
        },
    "customParameters": [
        {
          "providerName": "weatherDescriptor",
          "providerDataType": "string",
          "description": "General weather descriptor data"
        },
        {
          "providerName": "airTempMax",
          "providerDataType": "double",
          "description": "Maximum daily air temperature at two meters above ground level.",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "F"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "F"
            },
            {
              "unitSystem": "si-std",
              "unit": "C"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "C"
            }
          ]
        },
]
Detalles de los parámetros de plataforma
Nombre Escribir Descripción
platformParameters array Matriz JSON de los parámetros de plataforma donde cada objeto es un parámetro de plataforma.
farmBeatsName string Nombre del parámetro tal como lo proporciona Data Manager for Agriculture.
farmBeatsDataType string Tipo de datos del parámetro tal como lo proporciona Data Manager for Agriculture.
descripción string Descripción del parámetro tal como lo proporciona Data Manager for Agriculture.
measurementUnits string Matriz de unidades JSON para cada uno de los values del sistema de unidades admitidos por la extensión.
unitSystem string value del sistema de unidades compatible con la extensión.
unidad string Unidad de medida para el parámetro meteorológico específico Por ejemplo: F para dewPoint.
Detalles de los parámetros personalizados
Nombre Escribir Descripción
customParameters objeto Matriz de parámetros personalizados JSON donde cada objeto es un parámetro personalizado.
providerName string Nombre del parámetro tal como lo proporciona la extensión.
providerDataType string Tipo de datos del parámetro tal como lo proporciona la extensión.
descripción string Descripción del parámetro tal como lo proporciona la extensión.
measurementUnits string Matriz de unidades JSON para cada uno de los values del sistema de unidades admitidos por la extensión.
unitSystem string value del sistema de unidades compatible con la extensión.
unidad string Unidad de medida para el parámetro meteorológico específico. Por ejemplo: F para airTempMax.

Plantilla de plataforma y personalizada

La plantilla es la información de asignación proporcionada por la extensión para convertir la salida de la API de extensión (respuesta JSON) al formato que espera Data Manager for Agriculture. El uso de estos diferentes formatos de salida de API ahora se puede asignar o convertir uniformemente a un solo formato.

Se considera que la solución de plantilla es una de las maneras más eficaces de analizar la salida JSON proporcionada por la extensión. En el caso de una extensión meteorológica, Data Manager for Agriculture espera que la extensión se escriba mediante la plantilla HandleBars. HandleBars es un lenguaje de plantillas de código abierto con expresiones sencillas de usar.

Nota:

Se recomienda probar la plantilla HandleBars con los ejemplos proporcionados y aprender a usar las funciones auxiliares para crear su propia lógica de análisis si Data Manager for Agriculture no la proporciona aún.

En un nivel alto, esta es la manera en que funcionan las plantillas: toman la respuesta de la API como entrada y generan la salida en el formato esperado por Data Manager for Agriculture.

Captura de pantalla del flujo de plantilla.

Como se muestra en la ilustración anterior, valide la plantilla con la respuesta de API correspondiente y use la plantilla validada en la extensión. A continuación se muestra un ejemplo de una respuesta de API y su plantilla de plataforma y personalizada respectivas.

Respuesta de API de ejemplo
{
    "47,-97": {
        "2016-12-15": {
            "overall": {
                "air_temp_avg": {
                    "unit": "F",
                    "value": -3.0
                },
                "air_temp_max": {
                    "unit": "F",
                    "value": 5.0
                },
                "air_temp_min": {
                    "unit": "F",
                    "value": -11.0
                },
                "cloud_cover_avg": {
                    "unit": "%",
                    "value": 26.4
                },
                "descriptors": {
                    "cloud_cover_descriptor": {
                        "code": 21107,
                        "icon": "https://.../cover_partlycloudyday.png",
                        "text": "Increasing Clouds"
                    },
                    "precipitation_descriptor": {
                        "code": 61113,
                        "icon": "https://.../precip_flurries.png",
                        "text": "Slight Chance of Flurries"
                    },
                    "weather_descriptor": {
                        "code": 61113,
                        "icon": "https://.../precip_flurries.png",
                        "text": "Slight Chance of Flurries"
                    },
                    "wind_direction_descriptor": {
                        "code": 51600,
                        "icon": "https://.../direction_sw.png",
                        "text": "Southwest"
                    },
                    "wind_trend_descriptor": {
                        "code": 10500,
                        "icon": "https://.../error_none.png",
                        "text": "None"
                    }
                },
                "dew_point_avg": {
                    "unit": "F",
                    "value": -11.0
                },
                "dew_point_max": {
                    "unit": "F",
                    "value": -4.0
                },
                "dew_point_min": {
                    "unit": "F",
                    "value": -19.0
                },
                "ice_acc_period": {
                    "unit": "in",
                    "value": 0.0
                },
                "liquid_acc_period": {
                    "unit": "in",
                    "value": 0.0
                },
                "long_wave_radiation_avg": {
                    "unit": "W/m^2",
                    "value": 170.0
                },
                "pet_period": {
                    "unit": "in",
                    "value": 0.009
                },
                "precip_acc_period": {
                    "unit": "in",
                    "value": 0.001
                },
                "precip_prob": {
                    "unit": "%",
                    "value": 10.0
                },
                "relative_humidity_avg": {
                    "unit": "%",
                    "value": 68.0
                },
                "relative_humidity_max": {
                    "unit": "%",
                    "value": 77.0
                },
                "relative_humidity_min": {
                    "unit": "%",
                    "value": 61.0
                },
                "short_wave_radiation_avg": {
                    "unit": "W/m^2",
                    "value": 70.0
                },
                "snow_acc_period": {
                    "unit": "in",
                    "value": 0.02
                },
                "sunshine_duration": {
                    "unit": "hours",
                    "value": 6
                },
                "wind_gust_max": {
                    "unit": "n/a",
                    "value": "n/a"
                },
                "wind_speed_2m_avg": {
                    "unit": "mph",
                    "value": 6.0
                },
                "wind_speed_2m_max": {
                    "unit": "mph",
                    "value": 8.0
                },
                "wind_speed_2m_min": {
                    "unit": "mph",
                    "value": 2.0
                },
                "wind_speed_avg": {
                    "unit": "mph",
                    "value": 8.0
                },
                "wind_speed_max": {
                    "unit": "mph",
                    "value": 11.0
                },
                "wind_speed_min": {
                    "unit": "mph",
                    "value": 3.0
                }
            }
        }
    }
}
Plantilla de plataforma y personalizada de ejemplo para la respuesta de API anterior
{
"apiInfos": {
    "platformTemplate": "{ {{#each .}}\"value\": [{{#each .}} {\"cloudCover\": \"{{overall.cloud_cover_avg.value}}\" ,\"dewPoint\": \"{{overall.dew_point_avg.value}}\" ,\"precipitation\": \"{{overall.precip_acc_period.value}}\" ,\"relativeHumidity\": \"{{overall.relative_humidity_avg.value}}\" ,\"dateTime\": \"{{convertDateInYYYYMMDDToDateTime @key}}\",      \"temperature\": \"{{overall.air_temp_avg.value}}\" ,\"windSpeed\": \"{{overall.wind_speed_avg.value}}\" ,   },{{/each}}]{{/each}} }",
    "customTemplate": "{ {{#each .}}\"value\": [{{#each .}} {\"air_temp_max\": \"{{overall.air_temp_max.value}}\",\"air_temp_min\": \"{{overall.air_temp_min.value}}\",\"cloudCoverDescriptor\": \"{{overall.descriptors.cloud_cover_descriptor.text}}\",\"precipitationDescriptor\": \"{{overall.descriptors.precipitation_descriptor.text}}\",\"weatherDescriptor\": \"{{overall.descriptors.weather_descriptor.text}}\",\"windDirectionDescriptor\": \"{{overall.descriptors.wind_direction_descriptor.text}}\",\"windTrendDescriptor\": \"{{overall.descriptors.wind_trend_descriptor.text}}\",\"dewPointMax\": \"{{overall.dew_point_max.value}}\",\"dewPointMin\": \"{{overall.dew_point_min.value}}\",\"iceAccPeriod\": \"{{overall.ice_acc_period.value}}\",\"liquidAccPeriod\": \"{{overall.liquid_acc_period.value}}\",\"longWaveRadiationAvg\": \"{{overall.long_wave_radiation_avg.value}}\",\"petPeriod\": \"{{overall.pet_period.value}}\",\"precipProb\": \"{{overall.precip_prob.value}}\",\"relativeHumidityMax\": \"{{overall.relative_humidity_max.value}}\",\"relativeHumidityMin\": \"{{overall.relative_humidity_min.value}}\",\"shortWaveRadiationAvg\": \"{{overall.short_wave_radiation_avg.value}}\",\"snowAccPeriod\": \"{{overall.snow_acc_period.value}}\",\"sunshineDuration\": \"{{overall.sunshine_duration.value}}\",\"windSpeed2mAvg\": \"{{overall.wind_speed_2m_avg.value}}\",\"windSpeed2mMax\": \"{{overall.wind_speed_2m_max.value}}\",\"windSpeed2mMin\": \"{{overall.wind_speed_2m_min.value}}\",\"windSpeedMax\": \"{{overall.wind_speed_max.value}}\",\"windSpeedMin\": \"{{overall.wind_speed_min.value}}\",},{{/each}}]{{/each}} }"
}
}

Nota:

La plantilla generada a partir de HandleBars se encadena agregando \"<text>\" para que sea compatible con el formato JSON.

Funciones auxiliares

Las plantillas usan las funciones auxiliares para realizar una transformación específica en los datos, que no se admiten de manera nativa. Estas son las funciones auxiliares compatibles con Data Manager for Agriculture.

Funciones auxiliares de ejemplo
Handlebars.registerHelper('splitAndTake', function(title, char, index) {
  var t = title.split(char);
  return t[index];
});
Handlebars.registerHelper('converttime', function(timestamp) {
    return new Date(timestamp);
});
Handlebars.registerHelper('convertunixtime', function(unix_timestamp) {
    return new Date(unix_timestamp * 1000);
});

¿Qué acciones realizan estas funciones auxiliares?

  • SplitAndTake(object valueObject, string separator, int index): esta función se usa para dividir una cadena (por ejemplo: "47,-97") en función de un separador (por ejemplo, ",") y toma el elemento en el índice determinado (por ejemplo, index=0 da "47")
  • ConvertDateInFormatToDateTime(object dateObject, string format): esta función se usa para analizar una fecha en un formato dado (por ejemplo: 2016-12-15) a una cadena DateTime.
  • ConvertUnixTimeToDateTime(object unixTimeStamp): esta función se usa para convertir la marca de tiempo de unix (por ejemplo, 1392267600) en una cadena datetime.
  • GetObjectFromListWithKeyValuePair(Array listOfObjects, string key, string value): en función de una lista de objetos, captura el objeto en función del par clave (type) valor (RAIN). En el ejemplo siguiente, se usa esta función para elegir la precipitación de "type": "RAIN".
{
"precipitation": [
      {
        "type": "SNOW",
        "amount": 0
      },
      {
        "type": "RAIN",
        "amount": 0.01
      }
    ]
}
  • GetValueFromObject(string jsonString, string key): en función de un objeto JSON como cadena, obtiene el valor en función de la clave.

Nota:

Si la extensión que está escribiendo requiere funciones auxiliares adicionales para analizar la respuesta de la API, póngase en contacto con nosotros mediante la creación de una incidencia de soporte técnico.