Værvarsel fra api.met.no

Er dårlig på denne type programmering, så kan noen bistå?

Jeg har tidligere hatt en fungerende flow som kunne gi meg værvarsel, men api-met.no er oppgradert, så den fungerer ikke lenger.
Jeg har forsøkt, men får ikke til. Finner heller ingen gammel dokumentasjon som jeg kan sammenligne med.

Det eneste jeg trenger er værrapport.

Ingen som har peiling?

Have you tried yr.no API ?

its the same as api-met.no
Ans I cant figure out how to extract weather forecast

The api returns a lot of data, not sure which one you need but this example makes request, extracts a summary for the next 6 hours, and saves into the variable. You need to set your coordinates in the request.

{
  "Id": "Woot7h6vPXuKn3X",
  "ClassId": "Woot7h6vPXuKn3X",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2021-04-05T20:43:44.385194+02:00",
  "UpdatedAt": "2021-04-05T20:43:44.385194+02:00",
  "Name": "Weather forecast",
  "Group": "weather",
  "Description": "Extracts weather forecast from api.met.no",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Test trigger",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:flow/ad:1/sv:out_bin_switch/ad:Woot7h6vPXuKn3X_0",
      "Service": "out_bin_switch",
      "ServiceInterface": "cmd.binary.set",
      "Config": {
        "Timeout": 0,
        "ConnectorID": "",
        "ValueFilter": {
          "Value": null,
          "ValueType": "bool"
        },
        "PropFilterName": "",
        "PropFilterValue": "",
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "RegisterAsVirtualService": false,
        "LookupServiceNameAndLocation": false,
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "x": 291,
        "y": 175,
        "nodeType": ""
      },
      "TypeAlias": "Trigger",
      "LastValue": true
    },
    {
      "Id": "2",
      "Type": "rest_action",
      "Label": "Requesting from met.api.no",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "SuccessTransition": "",
      "ErrorTransition": "",
      "Config": {
        "Url": "https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=51.5&lon=0",
        "Method": "GET",
        "RequestPayloadType": "json",
        "RequestTemplate": "",
        "LogResponse": false,
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "User-Agent",
            "Value": "tpflow/0.1"
          }
        ],
        "ResponseMapping": [
          {
            "Name": "",
            "PathType": "json",
            "Path": "$.properties.timeseries[0].data.next_6_hours.summary.symbol_code",
            "TargetVariableName": "weather_summary",
            "IsVariableGlobal": true,
            "TargetVariableType": "string"
          }
        ],
        "Auth": {
          "Enabled": false,
          "GrantType": "password",
          "Url": "http://",
          "ClientID": "",
          "ClientSecret": "",
          "Scope": "",
          "Username": "",
          "Password": ""
        }
      },
      "Ui": {
        "x": 255,
        "y": 446,
        "nodeType": ""
      },
      "TypeAlias": "HTTP msg"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": ""
}
3 Likes

I will try this, thanks alot​:+1::+1:

Worked perfect. Thanks again :grinning: :grinning:

1 Like

Hvordan ser dette ut i app?

Det er bare en variabel som rapporterer værvarsel for de neste 6 timer

Hei, dette fungerer veldig bra. Men hvordan gjør jeg for å hente ut noen av de andre verdiene som ikke er string? For eksempel “wind_speed_of_gust”. Jeg endrer TargetVariableType til float, og stien i “Path”, men jeg får ikke ut noen verdi. Må jeg har @value eller lignende som i xml-eksempelet her: Værmelding lokalt - #4 by KetilH ?

Ser at det er en stund siden dette innlegget ble lagt til, men siden jeg ikke fant noen andre beskrivelser som svarer på dette, og jeg akkurat har satt det opp selv, så svarer jeg her.

Det finnes flere versjoner av api-et med ulik mengde data. wind_speed_of_gust finnes kun i fullversjonen - den kalles for complete. Vindstyrke er en datatype som ikke er med i 6-timersvarselet, så du må hente den fra timevarselet. For å få det med må du gjøre ett par endringer:
1)Først må du endre URL-en. Bytt ut compact i siste delen med complete. Da får du med data for wind of gust i datasettet du henter inn. URLen blir da slik (husk å legge inn dine egne tall for lat og lon, evt. også altitude): https://api.met.no/weatherapi/locationforecast/2.0/complete?lat=51.5&lon=0
2) I responsmapping må du endre stien slik at du henter data fra timevarsel og ikke neste 6 timer. Jeg har valgt å kjøre flyten fem på hel, hver time. Da henter jeg alltid det første timevarselet under timeseries (altså timeseries [0]). Stien blir slik: $properties.timeseries[0].data.instant.details.wind_speed_of_gust

Timesvarselet oppdateres hver time, ca. ti over halv ser det ut til. Jeg har valgt å kjøre flyten på en timer fem på hver time. Jeg lagrer hver responsmapping som jeg bruker (for min del air_temperature, cloud_area_fraction, wind_speed_of_gust og updated_at) som globale variabler, slik at jeg kan bruke dette i f.eks. styring av solskjerming.

Anbefaler å sjekke dokumentasjonen til Yr her: Locationforecast (met.no) Det går an å lese seg til en del, selv for oss som ikke er så stødige i programering :slight_smile:

1 Like

En utfordring jeg ikke har klart å løse selv er at selv om api.met.no kun oppdateres ved endringer. I en del tilfeller blir derfor et værvarsel liggende en stund. Dersom jeg henter værvarselet kl. 07:55, og siste oppdatering var 05:40, så vil timeseries[0] være kl. 06:00, og ikke kl 08:00.

En måte å omgå dette på, vil være å filtrere timeseries på nåværende tidspunkt rundet av til hele timer. Jeg har forsøkt litt med å hente inn tidspunkt i flyten, men Yr bruker UTC og Futurehome bruker den tidssonen jeg har satt opp i systemet.

Er det noen som kan litt mer om programering som kan hjelpe meg med følgende:

  1. Hvordan får jeg hentet nåværende tid i UTC, avrundet til nærmeste hele time? Antar at det går an å få til med en run script-node hvor man bruker time-modulen i golang, f.eks. Noen som har erfaring med scripting og har et forslag?

  2. Går det an å bruke variabler til å filtrere jason-stien i HTTP-request noden? Gitt at jeg har variabelen “tidspunkt” fra en run script-node, kan jeg da bruke den i $properties.timeseries[? @.time = (tidspunkt)], eller hvordan blir syntaxen her?

@alivinco