Hente inn pris og prisdato fra tibber til en map of floats (eller Object)

Hei folkens
Nå har jeg kommet noe lenger, og det begynner å bli gøy :slight_smile:
Men jeg sliter med å hente inn data fra Tibber om både pris og tidspunkt til samme variabel.

Her har jeg følgende del av en kode:

“LogResponse”: true,
“Method”: “POST”,
“RequestPayloadType”: “json”,
“RequestTemplate”: “{ “query”: “{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt} today {total energy tax startsAt} tomorrow {total energy tax startsAt}}}}}}” }\n”,
“ResponseMapping”: [
{
“IsVariableGlobal”: true,
“Name”: “Level”,
“Path”: “$.data.viewer.homes[0].currentSubscription.priceInfo.today.total”,
“PathType”: “json”,
“TargetVariableName”: “energy_prices”,
“TargetVariableType”: “object”

Og da får jeg en liste liste på energy:prices som følger:
Skjermbilde 2021-12-06 kl. 20.17.40

Og jeg kan endre til at jeg henter inn “startsAt” istedet for “total” - da får jeg dette inn i variabelen:
Skjermbilde 2021-12-06 kl. 20.20.10

I begge eksemplene har jeg valgt Object og ikke Map of Floats, men det ser ut til å gjøre omtrent samme nytten.

poenget mitt er - hva må jeg skrive i path:
“Path”: “$.data.viewer.homes[0].currentSubscription.priceInfo.today.total”,
for å hente BÅDE “total” og “startsAt” inn i samme variabel?

Det kan virke som om jeg må skrive hele path-en to ganger med ettellerannet skilletegn etter “total” og før neste “$.data.viewer…”, men jeg har ikke klart å finne ut hva dette må være.

Takknemlig for alle svar

/Petter

Skal flowen kjøre hver time og hente pris for den aktuelle timen eller skal du kjøre en flow som henter for hele dagen/x timer frem?

Jeg har en flow for førstnevnte. Henter pris 1min etter hel time og da lagres den jo i timen den gjelder for.

{
  "Id": "6CSKL7ssAXI3pOP",
  "ClassId": "hf1Ysemo50f5Fam",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2021-08-23T22:02:03.755877004+02:00",
  "UpdatedAt": "2021-11-28T00:19:23.01432227+01:00",
  "Name": "Tibber: Hente prisinfo, hver time",
  "Group": "variables",
  "Description": "Kaller Tibber API og henter stømpris og prisnivå hver hele time.",
  "Nodes": [
    {
      "Id": "1",
      "Type": "time_trigger",
      "Label": "1min past each our",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "1 * * * *",
            "Comments": "",
            "Expression": "1 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 43,
        "y": 226
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "2",
      "Type": "rest_action",
      "Label": "Get Energy Price Level from Tibber",
      "SuccessTransition": "25",
      "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": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "Level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.level",
            "PathType": "json",
            "TargetVariableName": "energy_level",
            "TargetVariableType": "string",
            "UpdateTriggerMessage": false
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 109,
        "y": 417
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "25",
      "Type": "transform",
      "Label": "transform tibber",
      "SuccessTransition": "26",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "energy_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energylevel_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber pricelevel is now: {{ .Variable }}\",\n      \"message_no\": \"Tibber prisnivå er nå: {{ .Variable }}\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 214,
        "y": 599
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "26",
      "Type": "action",
      "Label": "Publish timeline",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energylevel_output",
        "VariableType": "str_map",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 305,
        "y": 812
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "27",
      "Type": "time_trigger",
      "Label": "2min past each our",
      "SuccessTransition": "28",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "2 * * * *",
            "Comments": "",
            "Expression": "4 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 375,
        "y": 239
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "28",
      "Type": "rest_action",
      "Label": "Get Energy Price from Tibber",
      "SuccessTransition": "31",
      "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": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "price_level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.total",
            "PathType": "json",
            "TargetVariableName": "price_level",
            "TargetVariableType": "float"
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 417,
        "y": 427
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "30",
      "Type": "action",
      "Label": "Publish timeline",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energyprice_output",
        "VariableType": "string",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 584,
        "y": 815
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "31",
      "Type": "transform",
      "Label": "transform tibber price",
      "SuccessTransition": "30",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energyprice_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber price is now: {{ .Variable }} NOK\",\n      \"message_no\": \"Tibber pris er nå: {{ .Variable }} NOK\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 486,
        "y": 601
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "34",
      "Type": "transform",
      "Label": "Write price request to Influx",
      "SuccessTransition": "35",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "price_request_output",
        "TargetVariableType": "object",
        "Template": "{\n    \"proc_id\": 2,\n    \"bucket\": \"gen_default\",\n    \"dp\": [\n      {\n        \"name\": \"current_price\",\n        \"tags\": {},\n        \"fields\": {\n          \"val\": {{ .Variable }}\n        }\n      }\n    ]\n}",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 758,
        "y": 511
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "35",
      "Type": "action",
      "Label": "Write price to Influx",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:ecollector/ad:1",
      "Service": "ecollector",
      "ServiceInterface": "cmd.tsdb.write_data_points",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "object"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "price_request_output",
        "VariableType": "object",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 837,
        "y": 820
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "36",
      "Type": "time_trigger",
      "Label": "Every 3 min past hour",
      "SuccessTransition": "34",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comments": "",
            "Expression": "3 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 660,
        "y": 237
      },
      "TypeAlias": "Time trigger"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}

Edit: Ser vel nå at du var på jakt etter sistnevnte, det er jeg meget interessert i selv uten at jeg vet hvordan.

Kan dele at det kommer et oppdatert Tibber adapter som skal kunne støtte dette ut av boksen, men timeline er usikkert. Se post her: Starthjelp for ecollector og DBInflux - #27 by alivinco

Takk @Gjaevert
Den var jo ikke dum :slight_smile:

Men jeg tenker å hente dette hver dag etter kl 13:15 for da er både resten av dagens og morgendagens priser på plass.

Tanken er at jeg så skal lage en automatikk som bruker disse prisene til å planlegge når på dagen er det best å starte varmtvannsberederen.

1 Like

Hei!
På fritiden begynte jeg å undersøke dette segmentet selv i går kveld, uten å komme alt for langt. Er ikke utvikler selv så var litt nytt å holde på med GraphQL. Kunne du delt hele flowen din? (Husk å fjerne token så du ikke deler det med alle :wink: )

Jeg klarer å hente infoen du spør etter i NodeRED, og tenkte jeg skulle sende det inn til influxDB for å vise i Grafana, men må undersøke litt på hvordan en serie av data skal bli skrevet til Influx (jeg bruker V2.0 av influx, og ikke 1.x)

Hei @espen

Her er koden (uten token :slight_smile: )
Denne er nå for testbruk satt til å kjøre hvert minutt, men det kommer jeg til endre på når jeg har fått den til slik jeg vil.

Som du ser er det en kode som andre har delt tidligere som jeg så har gjort litt min egen

Hvis det har noe å si så har jeg siste versjon hub - som enn så lenge ikke snakker med Tibber.

{
  "Id": "d1aM0usMYymHGK1",
  "ClassId": "A2Pk5FBSH6xnzjH",
  "Author": "jonathse",
  "Version": 0,
  "CreatedAt": "2021-12-05T23:29:36.889326127+01:00",
  "UpdatedAt": "2021-12-06T19:02:21.165597572+01:00",
  "Name": "Test hente pris for idag og imorgen",
  "Group": "Test Tibber",
  "Description": "Test hente pris for idag og imorgen",
  "Nodes": [
    {
      "Id": "1",
      "Type": "time_trigger",
      "Label": "hvert minutt - etterhvert en gang pr døgn",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comments": "",
            "Expression": "1-59/1 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 46,
        "y": 205
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "2",
      "Type": "rest_action",
      "Label": "Hente min info fra Tibber",
      "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": "Authorization",
            "Value": "token"
          },
          {
            "Name": "Content-type",
            "Value": "text/xml"
          },
          {
            "Name": "Content-type",
            "Value": "application/json"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt} today {total energy tax startsAt} tomorrow {total energy tax startsAt}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "Level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.today.total",
            "PathType": "json",
            "TargetVariableName": "energy_level",
            "TargetVariableType": "float_array"
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 42,
        "y": 413
      },
      "TypeAlias": "HTTP msg"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}

hi Petter, i have tibber and i managed to get a token but im struggling massively with getting my head around this code / how to implement it. could you be so kind as to make an idiots guide for newbies like myself :slight_smile:

Hei, har du fått til dette? Jeg forsøker også å lage en tabell med nettleie, strømpris og timeverdi.

Hei @ErikH
Nei, jeg har ikke fått til dette ennå.

Hi,

a little off topic, but did anybody manage to read the power prices from this API yet? Seems to be an alternative to Tibber, for those who had to move away from Tibber.