Schreiben einer Wettererweiterung
In diesem Abschnitt sehen Sie eine schrittweise Anleitung zum Schreiben Ihrer eigenen Wettererweiterung.
Was ist eine Wettererweiterung?
Die Wettererweiterung in Data Manager for Agriculture ist eine Manifestdatei (JSON), die alle Details zu den APIs und eine Vorlage für jede API-Antwort (Ausgabe) enthält. Daher ist die Erweiterungsdatei im Wesentlichen eine API-Vorlagenstruktur, wie sie von Data Manager for Agriculture definiert wird, damit sie die Merkmale der API-Eingabe (Anforderung) und -Ausgabe (Antwort) versteht.
Struktur der Wettererweiterung
Auf einer hohen Ebene ist die Erweiterungsdatei eine JSON, die aus zwei Elementen besteht:
- Anbietermetadaten (JSON-Objekt)
- API-Informationen (JSON-Array)
Anbietermetadaten
Es handelt sich um ein JSON-Objekt, das die Details zu den unten aufgeführten Feldern enthält, die zur eindeutigen Identifizierung einer Erweiterung und ihrer Versionsverwaltungsinformationen erforderlich sind. Die in diesem Abschnitt der Erweiterung angegebenen Details werden externen Kunden im Marketplace von Data Manager for Agriculture angezeigt. Daher müssen extensionId
und extensionName
(zur einfachen Identifizierung) und description
(für das Nutzenversprechen) kundenorientiert sein.
Beispiele für Anbietermetadaten
"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"
}
Details zu Anbietermetadaten
Name | Typ | Beschreibung |
---|---|---|
extensionId | Zeichenfolge | Die ID in Form des Organisationsnamens (Contoso) und des Dienstes (Wetter), z. B. org.service . „extensionId“ ist der eindeutige Bezeichner der Erweiterung und derjenige, den Benutzer auf der Data Manager for Agriculture-Plattform für die Interaktion mit den Erweiterungs-APIs verwenden. |
extensionName | Zeichenfolge | Name der Erweiterung, die im Erweiterungs-Marketplace von Data Manager for Agriculture verwendet werden soll. |
Beschreibung | string | Beschreibung der Funktionen und Dienste, die von der Erweiterung angeboten werden. |
dataCategory | Zeichenfolge | Verwenden Sie für Wettererweiterungen weather . |
farmBeatsSchemaVersion | Zeichenfolge | Die Version der Manifestdatei auf der Seite von Data Manager for Agriculture. Jedes Update der vorhandenen Manifestdatei führt zu einer neuen Version in diesem Feld. |
extensionVersion | Zeichenfolge | Die Version der Erweiterungsdatei. Beginnt mit 1.0 . Bei Updates Ihrer Erweiterungsdatei wird diese Versionsnummer entsprechend der Konvention für Updates der Haupt- und Nebenversion erhöht. |
supportUrl | Zeichenfolge | Websitelink zum Einreichen von Supportanfragen und zu häufig gestellten Fragen |
supportEmail | Zeichenfolge | E-Mail zum Einsenden der Supportanfragen. |
API-Informationen
Das JSON-Array für API-Informationen (apiInfos
) kann weiter in die folgenden Strukturelemente unterteilt werden.
- API-Metadaten
- Authentifizierungsparameter
- API-Eingabeparameter
- Extrahierte API-Eingabeparameter
- Funktionale Parameter
- Einheitensystem
- Plattformparameter und benutzerdefinierte Parameter
- Plattformvorlage und benutzerdefinierte Vorlage
API-Metadaten
Dieser Abschnitt enthält grundlegende Informationen über die API, die von Data Manager for Agriculture verwendet wird, um apiName
(explizit von Benutzern aufgerufen) zu identifizieren und die API-Anforderung basierend auf dem entsprechenden requestType
-Element an das richtige endpoint
-Element umzuleiten.
Beispiel-API-Metadaten
"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"
}
]
API-Metadatendetails
Name | Typ | Beschreibung |
---|---|---|
apiInfos | array | Das JSON-Array von Objekten, wobei jede API ein Objekt innerhalb des apiInfos -Arrays ist. |
apiName | Zeichenfolge | Der API-Name, wie er von der Erweiterung unterstützt wird. Es ist der genaue Name, mit dem die Benutzer die APIs der Erweiterung aufrufen. Halten Sie sich an die gleiche Namenskonvention wie in Ihrer API-Dokumentation angegeben. |
Beschreibung | string | API Beschreibung |
endpoint | Zeichenfolge | API-Endpunkt für Data Manager for Agriculture zum Aufrufen von apiName . |
requestType | Zeichenfolge | Anforderungstyp GET oder POST oder PUT , wie von apiName unterstützt. |
isLoadAPI | boolean | Handelt es sich bei apiName um eine Passthrough-API, wie z. B. aktuelle Wetterdaten, ist dieser Schlüssel auf false zu setzen. Für alle Last-APIs (Verlauf und Vorhersage) ist dieses Feld auf true zu setzen. Wenn der isLoadAPI -Schlüssel false ist, wird die API-Antwort direkt an Benutzer gesendet und nicht im Speicherdienst von Data Manager for Agriculture gespeichert. |
typeOfData | Zeichenfolge | Derzeit werden die Werte Historical und Forecast unterstützt. |
Granularität | Zeichenfolge | Derzeit werden die Werte Daily und Hourly unterstützt. |
defaultUnitSystem | Zeichenfolge | Geben Sie den Namen des Standardeinheitensystems an, das von apiName unterstützt wird. |
Authentifizierungsparameter
Dieser Abschnitt enthält die authentifizierungsbezogenen Parameter, die von apiName
unterstützt werden. Da Data Manager for Agriculture zwei Arten von Authentifizierungsschlüsseln (x-ms-farmBeats-data-provider-id
und x-ms-farmBeats-data-provider-key
) im API-Headerabschnitt unterstützt, muss die Erweiterungsdatei explizit den Schlüsselnamen ihrer jeweiligen Authentifizierungsschlüssel bereitstellen, wie es apiName
erfordert.
Da Data Manager for Agriculture die Authentifizierungsinformationen über den API-Header sammelt (in der API „Create Weather Job“), erfolgt die Zuordnung der Authentifizierungsparameter, um sicherzustellen, dass Data Manager for Agriculture den Schlüssel bei Bedarf entsprechend an die Erweiterung weitergeben kann.
Beispielauthentifizierungsparameter
"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"
}
]
]
Details zu Authentifizierungsparametern
Name | Typ | Beschreibung |
---|---|---|
authInputParameters | array | JSON-Array von Authentifizierungsparametern, wobei jedes Objekt einen unterstützten Authentifizierungtyp bezeichnet. Verwenden Sie den Schlüssel basierend auf dem von Ihrer Erweiterung unterstützten Authentifizierungtyp. |
farmBeatsAuthMapping | Zeichenfolge | Derzeit werden zwei Typen von Authentifizierungsschlüsseln unterstützt. Für die auf dem API-Schlüssel basierende Authentifizierung verwenden Sie nur das x-ms-farmBeats-data-provider-key -Objekt, während Sie für die auf der APP-ID und dem APP-Schlüssel basierende Authentifizierung sowohl die Objekte x-ms-farmBeats-data-provider-id als auch x-ms-farmBeats-data-provider-key verwenden. |
name | Zeichenfolge | Name des Authentifizierungsschlüssels, wie von apiName unterstützt. |
isRequired | boolean | Ist dieser Name ein erforderlicher Parameter für „apiName“? Geben Sie „true“- oder „false“-Werte an. |
providerDataType | Zeichenfolge | Geben Sie den Datentyp des name -Parameters an. |
Beschreibung | string | Die Beschreibung der Bedeutung der einzelnen farmBeatsAuthMapping -Elemente innerhalb der einzelnen Objekte durch Data Manager for Agriculture. |
location | Zeichenfolge | An welche Stelle in der API der name -Parameter name gesendet werden soll. Derzeit unterstützte Werte sind apiQuery und apiHeader . |
API-Eingabeparameter
Dieser Abschnitt enthält die Details zur API-Signatur (Eingabeparameter), um apiName
erfolgreich aufzurufen.
Beispiel-API-Eingabeparameter
"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"
},
]
]
Details zu API-Eingabeparametern
Name | Typ | Beschreibung |
---|---|---|
apiInputParameters | array | JSON-Array von API-Eingabeparametern, wobei jedes Objekt einen von apiName unterstützten Eingabeparameter bezeichnet. |
name | Zeichenfolge | Name des Eingabeparameters, wie von apiName unterstützt. |
isRequired | boolean | Ist dieser Name ein erforderlicher Parameter für „apiName“? Geben Sie „true“- oder „false“-Werte an. |
providerDataType | Zeichenfolge | Geben Sie den Datentyp des name -Parameters an. |
Beschreibung | string | Geben Sie eine Beschreibung der Bedeutung des name -Parameters an. |
location | Zeichenfolge | An welche Stelle in der API der name -Parameter name gesendet werden soll. Derzeit unterstützte Werte sind apiQuery und apiHeader . |
Extrahierte API-Eingabeparameter
In diesem Abschnitt extrahiert Data Manager die in der API-Anforderung übergebenen Eingabeparameter für die Berechnung und Speicherung. In diesem Beispiel würde Data Manager for Agriculture die Standortinformationen (Breiten- und Längengrad) aus der API-Eingabeanforderung extrahieren und sie als Teil jeder Wetterausgabe in Data Manager for Agriculture speichern.
Daher muss die Erweiterung eine HandleBars-Vorlage für die Extraktion von Standortinformationen bereitstellen. Das folgende Beispiel zeigt, dass die Erweiterungs-API Standortinformationen als "lat"
für "latitude"
und "lon"
für "longitude"
erfasst.
Beispiele für extrahierte API-Eingabeparameter
"extractedApiInputParameters": [
{
"name": "location",
"template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\" } "
}
]
Details zu extrahierten API-Eingabeparametern
Name | Typ | Beschreibung |
---|---|---|
extractedApiInputParameters | array | JSON-Array von Extraktionsfunktionalitäten, wobei jedes Objekt angibt, welche Informationen extrahiert werden müssen. Derzeit ist location eine solche Extraktion. |
name | Zeichenfolge | Name der Extraktion, derzeit wird der Wert location unterstützt. |
Vorlage | Zeichenfolge | HandleBars-Vorlage, die zeigt, wie Breiten- und Längengradinformationen in den API-Eingabeparametern erfasst werden. |
Funktionale Parameter
Dieser Abschnitt ist den Funktionalitäten/Fähigkeiten gewidmet, die Data Manager for Agriculture bietet. Bei der Wettererweiterung ist die Schwerpunktberechnung eine solche Funktionalität.
Wenn Benutzer keine Breiten-/Längenkoordinaten angibt, verwendet Data Manager for Agriculture die primäre Geometrie des Felds (von Benutzern übergebene ID) zur Berechnung des Schwerpunkts. Die berechneten Schwerpunktkoordinaten werden als Breiten- und Längengrad an die Erweiterung (Datenanbieter) weitergegeben. Damit Data Manager for Agriculture die Verwendung von Standortkoordinaten verstehen kann, wird der Abschnitt „Funktionale Parameter“ verwendet.
Damit Data Manager for Agriculture die Verwendung von Breiten- und Längengraden in den apiName
-Eingabeparametern versteht, wird von der Erweiterung erwartet, dass sie name
des Schlüssels angibt, der für die Erfassung von Standortinformationen verwendet wird, gefolgt von einer Handlebar-Vorlage, die angibt, wie die Werte für Breiten- und Längengrade übergeben werden müssen.
Beispiele für funktionale Parameter
"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}}\" } "
}
]
}
],
]
Details zu funktionalen Parametern
Name | Typ | Beschreibung |
---|---|---|
functionalParameters | array | JSON-Array von Funktionalitäten, wobei jedes Objekt eine von Data Manager for Agriculture unterstützte Funktionalität bezeichnet. Derzeit ist CentroidCalculation eine solche Funktionalität. |
name | Zeichenfolge | Name der Funktionalität, derzeit wird der Wert CentroidCalculation unterstützt. |
Beschreibung | string | Beschreibung der Funktionalität von Data Manager for Agriculture. |
functionalParameterEntities | array | JSON-Array von Objekten, wobei jedes Objekt spezifisch für den Breitengrad und den Längengrad ist. |
Einheitensystem
Dieser Abschnitt wird von Data Manager for Agriculture zum Verständnis der verschiedenen Arten von Einheitensystemen verwendet, die von der Erweiterung unterstützt werden. Daher muss die Erweiterung in den API-Eingaben den key
-Namen angeben, der für die Erfassung der Einheiteninformationen verwendet wird, gefolgt von den verschiedenen Namen der Einheitensysteme (z. B. „us-std“), die von apiName
unterstützt werden.
Beispiel für Einheitensystem
"unitSystems":
{
"key": "unitcode",
"values": [
"us-std",
"si-std",
"us-std-precise",
"si-std-precise"
]
}
Details des Einheitensystems
Name | Typ | Beschreibung |
---|---|---|
unitSystems | Objekt | JSON-Objekt zum Sammeln der Einheitensysteminformationen. |
Schlüssel | Zeichenfolge | Name des Parameters, der zum Sammeln der Einheiteninformationen in der API-Eingabe verwendet wird. |
values | Zeichenfolge | Liste der Einheitensystemnamen, die von der Erweiterung unterstützt werden. |
Plattformparameter und benutzerdefinierte Parameter
In jeder Antwort der Wetter-API werden die Wetterdaten, die als Teil der Ausgabe gesendet werden (z. B. Temperatur, Taupunkt usw.), als Parameter aufgerufen.
Daher unterstützt Data Manager for Agriculture intern die folgenden Parameter und behandelt sie als Platform parameters
.
- cloudCover
- dateTime
- dewPoint
- growingDegreeDay
- precipitation
- pressure
- relativeHumidity
- soilMoisture
- soilTemperature
- Temperatur
- Sichtbarkeit
- wetBulbTemperature
- windChill
- windDirection
- windGust
- windSpeed
Daher sendet jede Erweiterung, die Wetterparameter sendet, die nicht unter die Plattformparameter fallen, diese als Teil von Custom parameters
. Der Hauptunterschied zwischen Plattform- und Kundenparametern besteht darin, dass Benutzer der Data Manager for Agriculture Weather-APIs die Plattformparameter abfragen und filtern können (z. B. Temperatur > 30) und nicht die benutzerdefinierten Parameter. Die benutzerdefinierten Parameter werden jedoch als Teil der Ausgabe der Wetterabfrage gesendet.
In diesem Abschnitt stellt die Erweiterung die Einheiteninformationen für jeden der Parameter für jedes unterstützte Einheitensystem bereit. Auf diese Weise weiß Data Manager for Agriculture, welche Maßeinheit den einzelnen Wetterparametern zugrunde liegt, und zwar anhand der in diesem Abschnitt der Erweiterung enthaltenen Informationen.
Hinweis
- Wenn für einen bestimmten Parameter keine Einheiten anwendbar sind, dann geben Sie die Einheiten für diesen Parameter nicht an. (Beispiel: weatherDescriptor)
- Wenn für einen bestimmten Parameter die Einheiten für alle Einheitensysteme gleich sind, dann geben Sie sie in allen Einheitensystemen an. (Beispiel: cloudCover)
Beispiel für Plattformparameter und benutzerdefinierte Parameter
"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"
}
]
},
]
Details zu Plattformparametern
Name | Typ | Beschreibung |
---|---|---|
platformParameters | array | JSON-Array von Plattformparametern, wobei jedes Objekt ein Plattformparameter ist. |
farmBeatsName | Zeichenfolge | Name des Parameters wie von Data Manager for Agriculture angegeben. |
farmBeatsDataType | Zeichenfolge | Datentyp des Parameters, wie von Data Manager for Agriculture bereitgestellt. |
Beschreibung | string | Beschreibung des Parameters, wie von Data Manager for Agriculture bereitgestellt. |
measurementUnits | Zeichenfolge | JSON-Array von Einheiten für jeden der von der Erweiterung unterstützten Einheitensystem-values . |
unitSystem | Zeichenfolge | Einheitensystem-value , wie von der Erweiterung unterstützt. |
unit | Zeichenfolge | Maßeinheit für den spezifischen Wetterparameter, z. B. F für „dewPoint“. |
Details zu benutzerdefinierten Parametern
Name | Typ | Beschreibung |
---|---|---|
customParameters | Objekt | JSON-Array von benutzerdefinierten Parametern, wobei jedes Objekt ein benutzerdefinierter Parameter ist. |
providerName | Zeichenfolge | Name des Parameters, wie von der Erweiterung angegeben. |
providerDataType | Zeichenfolge | Datentyp des Parameters, wie von der Erweiterung angegeben. |
Beschreibung | string | Beschreibung des Parameters, wie von der Erweiterung angegeben. |
measurementUnits | Zeichenfolge | JSON-Array von Einheiten für jeden der von der Erweiterung unterstützten Einheitensystem-values . |
unitSystem | Zeichenfolge | Einheitensystem-value , wie von der Erweiterung unterstützt. |
unit | Zeichenfolge | Maßeinheit für den spezifischen Wetterparameter, z. B. F für „airTempMax“. |
Plattformvorlage und benutzerdefinierte Vorlage
Eine Vorlage ist die Zuordnungsinformation, die von der Erweiterung bereitgestellt wird, um die API-Ausgabe der Erweiterung (JSON-Antwort) in das Format zu konvertieren, das Data Manager for Agriculture erwartet. Damit können verschiedene API-Ausgabeformate einheitlich einem einzigen Format zugeordnet bzw. in ein solches konvertiert werden.
Die Vorlagenlösung hat sich als eine der effektivsten Möglichkeiten erwiesen, die von der Erweiterung bereitgestellte JSON-Ausgabe zu parsen. Im Falle der Wettererweiterung erwartet Data Manager for Agriculture, dass die Erweiterung mit der HandleBars-Vorlage geschrieben wird. HandleBars ist eine Open Source-Vorlagensprache mit einfach zu verwendenden Ausdrücken.
Hinweis
Es wird dringend empfohlen, die HandleBars-Vorlage mit den bereitgestellten Beispielen auszuprobieren und zu lernen, wie Sie die Hilfsfunktionen nutzen können, um Ihre eigene Parsinglogik zu erstellen, wenn diese nicht bereits von Data Manager for Agriculture bereitgestellt wird.
Im Großen und Ganzen funktionieren Vorlagen so: Sie nehmen die API-Antwort als Eingabe und generieren die Ausgabe in dem Format, das von Data Manager for Agriculture erwartet wird.
Wie in der obigen Abbildung gezeigt, validieren Sie Ihre Vorlage anhand der jeweiligen API-Antwort und verwenden die validierte Vorlage in der Erweiterung. Nachfolgend finden Sie ein Beispiel für eine API-Antwort und die dazugehörige Plattform und benutzerdefinierte Vorlage.
API-Beispielantwort
{
"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
}
}
}
}
}
Beispiele für Plattformvorlage und benutzerdefinierte Vorlage für die obige API-Antwort
{
"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}} }"
}
}
Hinweis
Die aus der HandleBars-Vorlage generierte Vorlage wird durch Hinzufügen von \"<text>\"
in eine Zeichenfolge umgewandelt, um sie mit dem JSON-Format kompatibel zu machen.
Hilfsfunktionen
Hilfsfunktionen werden von den Vorlagen verwendet, um bestimmte Transformationen für die Daten durchzuführen, die nicht nativ unterstützt werden. Hier finden Sie Hilfsfunktionen, die von Data Manager for Agriculture unterstützt werden.
Beispielhilfsfunktionen
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);
});
Welche Aktion führen diese Hilfsfunktionen aus?
- SplitAndTake(object valueObject, string separator, int index): Diese Funktion wird verwendet, um eine Zeichenfolge (z. B. „47,-97“) anhand eines Trennzeichens (z. B. „,“) aufzuteilen und nimmt das Element am angegebenen Index (z. B. index=0 ergibt „47“) auf.
- ConvertDateInFormatToDateTime(object dateObject, string format): Diese Funktion wird verwendet, um ein Datum im angegebenen Format (z. B. 2016-12-15) in eine DateTime-Zeichenfolge umzuwandeln.
- ConvertUnixTimeToDateTime(object unixTimeStamp): Diese Funktion wird verwendet, um einen Unix-Zeitstempel (z. B. 1392267600) in eine datetime-Zeichenfolge umzuwandeln.
- GetObjectFromListWithKeyValuePair(Array listOfObjects, string key, string value): Bei einer Liste von Objekten wird das Objekt basierend auf einem Schlüssel(
type
)-Wert(RAIN
)-Paar abgerufen. Im folgenden Beispiel wird diese Funktion zum Auswählen des Niederschlags"type": "RAIN"
verwendet.
{
"precipitation": [
{
"type": "SNOW",
"amount": 0
},
{
"type": "RAIN",
"amount": 0.01
}
]
}
- GetValueFromObject(string jsonString, string key): Bei Angabe eines JSON-Objekts als Zeichenfolge wird der Wert basierend auf dem Schlüssel ermittelt.
Hinweis
Wenn die von Ihnen geschriebene Erweiterung zusätzliche Hilfsfunktionen erfordert, um die API-Antwort zu parsen, wenden Sie sich an uns, indem Sie ein Supportticket erstellen.