HTTP msg - Er det mulig å bruke variabler fra en flyt i response mapping?

Noen som har erfaring med å bruke variabler i HTTP msg? Jeg lurer på:

  1. Er det mulig å bruke variabler i feltet Path in response i Respons mapping?
  2. Hvordan er syntaksen?

Jeg har koblet meg til api.met.no for å hente ut værmelding. Denne er delt opp i timeseries for hver time, og jeg ønsker å filtrere søket slik at jeg kun henter ut data for nærmeste hele time. Jeg har en variabel i flyten min som heter hourUTCstring.

Jeg har satt opp en sti for å hente ut temperatur som ser ut som følger: $.properties.timeseries[0].data.instant.details.air_temperature
Jeg ønsker derfor å bytte ut 0 med en variabel som har det tidspunktet jeg ønsker å hente ut: $.properties.timeseries[?(@.time == (hourUTCstring))].data.instant.details.air_temperature

@alivinco @KetilH @espen

Jeg bruker det som følger for å hente ut værmelding neste 12 timer. Så kan du bytte ut next_12_hours med instant og hente ut temperatur på samme måte. (ref. https://api.met.no/doc/ForecastJSON)

{

      "Id": "2",
      "Type": "rest_action",
      "Label": "Requesting from met.api.no",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "User-Agent",
            "Value": "tpflow/0.1"
          }
        ],
        "LogResponse": false,
        "Method": "GET",
        "RequestPayloadType": "json",
        "RequestTemplate": "",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "",
            "Path": "$.properties.timeseries[0].data.next_12_hours.summary.symbol_code",
            "PathType": "json",
            "TargetVariableName": "weather_summary",
            "TargetVariableType": "string"
          }
        ],
        "Url": "https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=59.916288&lon=10.72169"
      },
      "Ui": {
        "nodeType": "",
        "x": 255,
        "y": 446
      },
      "TypeAlias": "HTTP msg"
    } ,```

Takk for svar! Jeg har også fått det til å fungere med timeseries[0]. Problemet er at den første timen i værvarselet ikke alltid er neste time, men første time etter at varselet sist ble oppdatert. Jeg får derfor ofte opp en eller to timer tilbake i tid. Det er jo ikke et stort problem dersom du er ute etter 12-timers varsel, men jeg ønsker å hente ut vindkast og skydekke, og det er kun tilgjengelig under instant.

Jeg har testet å hente ut timeseries[2024-4-5T12:00:00Z] og det funker. Jeg har også fått til å mekke en måte å få nærmeste hele time inn som en variabel i flyten via et script. Så det jeg mangler er å få til å hente variabelen inn i Jason path uttrykket…

Hei @pgrodem!
Har aldri testet dette, men kunne du prøvd {{variable "hourUTCstring" false}} ?
hvor hourUTCstring er variabel navnet og false i dette eksempelet er om variabelen er global eller ei. Dersom variabelen er global bruk true.

Har satt opp responsmapping slik (navnet på variabelen er endret til tidUTC):

$.properties.timeseries[?(@.time == {{variable "tidUTC" false}})].data.instant.details.air_temperature

Får ikke hentet ut air_temperature. Dersom jeg erstatter {{variable "tidUTC" false}} med ‘2024-05-06T11:00:00Z’ så får jeg respons. Har prøvd å kjøre variabelen med og uten enkle anførselstegn, men med samme resultat.

Kan du sjekke i sourcecode der variabelen er skrevet om den har escape character \ foran quotes. Er usikker på om variabel er støttet i det feltet.

Her er utdrag fra koden:

        "LogResponse": true,
        "Method": "GET",
        "RequestPayloadType": "json",
        "RequestTemplate": "",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "air_temperature",
            "Path": "$.properties.timeseries[?(@.time == {{variable \"tidUTC\" false}})].data.instant.details.air_temperature",
            "PathType": "json",
            "TargetVariableName": "metDataAirTemperature",
            "TargetVariableType": "float"
          }
        ],
        "Url": "https://api.met.no/weatherapi/locationforecast/2.0/complete?altitude=65&lat=58.7912&lon=05.7246"

Takker.
Har testet litt og det ser ikke ut som variabel er støttet i det feltet dessverre.

Takk for svar. Synd at variabler ikke støttes her. Tror det ville vært et veldig godt verktøy i mange situasjoner. Man slipper å hente ned og behandle store mengder data når man kan hente nøyaktig det man trenger via jsonpath med variabel.

Jeg har gått tilbake og testet litt vi videre med å hente ut timeseries 0 fra api.met.no. Det ser ut til at værmeldingen som regel oppdateres 10 over halv. Tidligere hentet jeg værmeldingen litt før hel, for å være i forkant, men da ble timeseries 0 forrige time. Nå henter jeg timeseries 0 noen minutter over hel, og det ser ut til å gi rett data så langt. Satser på at det løser behovet for denne gang. Jeg får hvertfall hentet ned skydekke og vindkast, så går vi se om jeg får laget en fornuftig algoritme for styring av solskjerming.

1 Like

Har du undersøkt om timeseries[1] kanskje kan være like greit?
Bra du fant en midlertidig løsning uansett :slight_smile: