Microsoft BI Professionals Denmark

Please login or click SIGN UP FOR FREE to create your PowerBIUG account to join this user group.
Expand all | Collapse all

OAuth2 til Eloverblik /datahub

  • 1.  OAuth2 til Eloverblik /datahub

    Posted May 27, 2020 10:00 AM
    Hej

    Jeg er rimelig ny i Power bi API connections. Efter jeg med success fik implementeret DMI's nye API, fik jeg blod på tanden til at også at trække eldata fra eloverblik.dk. Det er dog noget mere kompliceret, synes jeg, da det kræver et refesh token og et data token.

    Derfor håber jeg at skyde genvej, ved at nogle af jer allerede har lavet en connector til Power bi som I er villige til at dele.

    Jeg håber nogle af jer kan hjælpe mig.

    Her kan I læse lidt mere om, hvad det er for et API:

    Nyt Eloverblik
    Energinet remove preview
    Nyt Eloverblik
    Vi arbejder fortsat på at få rettet mindre fejl og mangler, man skal derfor forvente løbende ændringer på eloverblik.dk Hvis der er spørgsmål, gode forslag eller andet kan i sende en email til datahub@energinet.dk
    View this on Energinet >
    https://energinet.dk/El/Elmarkedet/MDA---Ny-loesning


    ------------------------------
    Esben Søndergaard
    Technical manager
    ------------------------------


  • 2.  RE: OAuth2 til Eloverblik /datahub

    Silver Contributor
    Posted May 29, 2020 07:20 AM
    Hej Esben

    Det er desværre ikke lige så simpelt og ikke en funktionalitet, som du får "ud af boksen" med Power BI. Men med "lidt" M kode, så kan du godt trække en refresh/access token, som så kan anvendes efterfølgende. Her er et eksempel med Microsoft Graph API:

    let
    token_url = "https://login.microsoftonline.com/dccf6c20-4d49-4fea-bd7c-6fb5ba4a2670/oauth2/v2.0/token",
    base_url = "https://graph.microsoft.com/v1.0/groups",

    qry_str = "filter=startswith(displayName,'AAD-Vendor_')",
    body = "grant_type=client_credentials&scope=https://graph.microsoft.com/.default&client_id=[XXX]&client_secret=[YYY]",

    access_token_response = Json.Document(Web.Contents(
    token_url,
    [
    Headers = [#"Content-Type"="application/x-www-form-urlencoded"],
    Content = Text.ToBinary(body)
    ]
    )),
    token = access_token_response[access_token],
    api_url = Text.Combine({base_url,"?$",qry_str}),
    api_headers = [#"Content-Type" = "application/json", Authorization = "Bearer " & token],

    response = Json.Document(Web.Contents(
    base_url,
    [
    RelativePath = "?$filter=startswith(displayName,'AAD-Vendor_')",
    Headers = api_headers
    ]
    )),
    value = response[value],
    #"Converted to Table" = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    Det skal siges, at jeg på ingen måde har skrevet denne kode helt fra bunden. Jeg har ladet mig inspirere - bl.a. fra blog post fra Chris Webb.

    Venligst
    Just

    ------------------------------
    Just Thorning Blindbæk
    Aarhus N
    ------------------------------



  • 3.  RE: OAuth2 til Eloverblik /datahub

    Posted May 29, 2020 08:24 AM
    Hej Just

    Det var det jeg frygtede:)
    Jeg er ikke sikker på jeg har niveauet til at omskrive din fine kode til at virke med eloverblik API.
    Jeg tror, jeg forsætter med at trække det manuelt for nu. Så må vi se, om jeg får nogle aftener, hvor jeg kan få sat mig ordenligt ind i det.
    Du får tak for svaret.

    ------------------------------
    Esben Søndergaard
    Technical manager
    Sunds
    ------------------------------



  • 4.  RE: OAuth2 til Eloverblik /datahub

    Posted Jun 01, 2020 04:09 PM
    Hej Just

    Nu pirre det lidt til min nysgerrighed, at jeg er gået fra at være ubevist indkompetent til at være bevist inkompetent:)

    Jeg er faktisk kommet et stykke hen af vejen, men er gået lidt fast, hvor jeg skal have sat lidt information ind om min måler:
    Koden der skal ind ser sådan her ud:
    {
    "meteringPoints": {
    "meteringPoint": [
    "5713131353003XXXX"
    ]
    }
    }

    Jeg kan ikke lige finde ud af, hvordan den skal sættet ind i din kode.
    Herunder kan det ses i Curl:

    curl -X POST "https://api.eloverblik.dk/CustomerApi/api/MeterData/GetMeterReadings/2020-01-01/2020-05-01" -H "accept: application/json" -H "Authorization: Bearer "Token" -H "Content-Type: application/json-patch+json" -d "{ \"meteringPoints\": { \"meteringPoint\": [ \"String\" ] }}"

    Jeg håber du kan lede mig på rette vej.

    Mvh Esben

    ------------------------------
    Esben Søndergaard
    Technical manager
    Sunds
    ------------------------------



  • 5.  RE: OAuth2 til Eloverblik /datahub

    Posted 29 days ago
    Så lykkes det mig at lave en løsning. Hvis andre kan få glæde af  det. Kan I se den her:

    let

    Token_url = "https://api.eloverblik.dk" & "/CustomerApi" & "/api" & "/Token",
    Refresh_token = "Your_API_Refresh_Token",
    Metering_Point = "Your_metering_point",
    Refresh_token_Headers = [Authorization = "Bearer " & Refresh_token],
    access_token_response = Json.Document(Web.Contents(Token_url, [Headers= Refresh_token_Headers])),
    Data_Token = access_token_response[result],
    base_url = "https://api.eloverblik.dk" & "/CustomerApi" & "/api" & "/MeterData/GetMeterReadings",
    From_date = "2015-01-01",
    To_date = Date.ToText(DateTime.Date(DateTime.LocalNow()),"yyyy-MM-dd"),
    Aggregation = "Day",
    api_url = Text.Combine({base_url,"/",From_date,"/",To_date}),
    api_headers = [Authorization = "Bearer " & Data_Token, #"Content-Type"="application/json"],
    body = "{
    ""meteringPoints"": {
    ""meteringPoint"": [
    "& Metering_Point &"
    ]
    }
    }",

    Source = Json.Document(Web.Contents(api_url, [Headers= api_headers, Content=Text.ToBinary(body)])),
    #"Converted to Table" = Record.ToTable(Source),
    #"Expanded Value" = Table.ExpandListColumn(#"Converted to Table", "Value"),
    #"Expanded Value1" = Table.ExpandRecordColumn(#"Expanded Value", "Value", {"result", "success", "errorCode", "errorText", "id", "stackTrace"}, {"Value.result", "Value.success", "Value.errorCode", "Value.errorText", "Value.id", "Value.stackTrace"}),
    #"Expanded Value.result" = Table.ExpandRecordColumn(#"Expanded Value1", "Value.result", {"meteringPointId", "readings"}, {"Value.result.meteringPointId", "Value.result.readings"}),
    #"Expanded Value.result.readings" = Table.ExpandListColumn(#"Expanded Value.result", "Value.result.readings"),
    #"Expanded Value.result.readings1" = Table.ExpandRecordColumn(#"Expanded Value.result.readings", "Value.result.readings", {"readingDate", "registrationDate", "meterNumber", "meterReading", "measurementUnit"}, {"Value.result.readings.readingDate", "Value.result.readings.registrationDate", "Value.result.readings.meterNumber", "Value.result.readings.meterReading", "Value.result.readings.measurementUnit"})
    in
    #"Expanded Value.result.readings1"

    ------------------------------
    Esben Søndergaard
    Technical manager
    Sunds
    ------------------------------