Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Drivstoffpriser i HA


hjemmedude

Anbefalte innlegg

Er ikke noe problem å få tak i API nøkkelen som appen bruker, men dataen/oppsettet på json outputet er nytt. Bruk man in the middle proxy og overvåk mobilen.

 

Tipper de følger med her egentlig, selv om vi nok bare er en liten promille som bruker den slik.

 

EDIT:

Ser faktisk ut som de setter opp en unik API key per session på noe vis. 

 

Har to call fra appen til APIet deres:

GET /api/v1/authorization-sessions HTTP/1.1
Host: api.drivstoffappen.no
Content-Type: application/json
X-CLIENT-ID: com.raskebiler.drivstoff.appen.ios
X-API-KEY: <redacted>
Accept: */*
User-Agent: Drivstoffappen/3.0.0 (com.raskebiler.drivstoff.appen; build:305; iOS 17.2.1) Alamofire/5.4.4
Accept-Language: en-NO;q=1.0, nb-NO;q=0.9
Accept-Encoding: br;q=1.0, gzip;q=0.9, deflate;q=0.8
Connection: keep-alive
content-length: 0

 

GET /api/v1/stations?includeDeleted=1&includePending=1&minUpdatedAt=2024-01-12T23%3A08%3A30%2B0100&stationTypeId=1 HTTP/1.1
Host: api.drivstoffappen.no
Content-Type: application/json
X-CLIENT-ID: com.raskebiler.drivstoff.appen.ios
X-API-KEY: <redacted>
Accept: */*
User-Agent: Drivstoffappen/3.0.0 (com.raskebiler.drivstoff.appen; build:305; iOS 17.2.1) Alamofire/5.4.4
Accept-Language: en-NO;q=1.0, nb-NO;q=0.9
Accept-Encoding: br;q=1.0, gzip;q=0.9, deflate;q=0.8
Connection: keep-alive
content-length: 0

 

Endret av nle
Lenke til kommentar
Del på andre sider

/api/v1/authorization-sessions

er åpen og ser ut til å returnere en «global» token som erstattes av en ny etter noen få timer. Api nøkkelen er nok nå en hash av denne token’en og din bruker-id, og må re-beregnes når den rullerende token’en oppdateres.

 

Lenke til kommentar
Del på andre sider

@Ziggy Men får du en midlertidig API nøkkel som fungerer? Det er vel kun den nye hasha token som fungerer? Og som jeg antar blir gjort i appen lokalt på noe vis? Så lenge vi ikke har den, vil vi være avhengig av å sniffe trafikken "hele tiden" for å få ny key?

Lenke til kommentar
Del på andre sider

@Ziggy dersom dine observasjoner og konklusjoner riktige, - og det tror jeg de er - betyr dette da at man heller ikke kan kjøpe en "lovlig" API nøkkel ?  M.a.o. at Drivstoffappen aldri har tenkt til å åpne for betalte tredje-parts integrasjoner?

HA vil jo aldri kunne benytte seg av en hash nøkkel som oppdateres/endres dynamisk?

Lenke til kommentar
Del på andre sider

Da må man enten klare å reverse enginere det på noe vis, eller kjøre en enhet (f.eks en gammel telefon) med appen på, som man så sniffer trafikken til også oppdaterer keyen fortløpende i HA.

 

Men da skal du nok være over gjennomsnittet glad i drivstoffpriser i HA. Kanskje lettere å få til en open source konkurrent til Drivstoffpriser appen.

  • Thanks 1
Lenke til kommentar
Del på andre sider

8 hours ago, nle said:

@Ziggy Men får du en midlertidig API nøkkel som fungerer? Det er vel kun den nye hasha token som fungerer? Og som jeg antar blir gjort i appen lokalt på noe vis? Så lenge vi ikke har den, vil vi være avhengig av å sniffe trafikken "hele tiden" for å få ny key?

Ja til alt. 

Endret av Ziggy
Lenke til kommentar
Del på andre sider

18 minutes ago, nle said:

Ok, men da er det vel «bare» å bruke den midlertidige keyen? Og refreshe.

Ja, antar det.

 

8 hours ago, VikingOy said:

@Ziggy dersom dine observasjoner og konklusjoner riktige, - og det tror jeg de er - betyr dette da at man heller ikke kan kjøpe en "lovlig" API nøkkel ?  M.a.o. at Drivstoffappen aldri har tenkt til å åpne for betalte tredje-parts integrasjoner?

HA vil jo aldri kunne benytte seg av en hash nøkkel som oppdateres/endres dynamisk?

Vanskelig å vite. Tipper de ikke ser på HA brukere som hverken en stor mulighet eller trusssel, men at de har beskyttet API'et sitt mer for å unngå at noen begynner å bruke dataene på en mere kreativ måte. 

Lenke til kommentar
Del på andre sider

Jeg skrev og spurte om det med API nøkkel, siden vi er flere som ønsker tilgang til dataene deres og jeg tror at betalingsviljen er tilstede for å kunne kjøpe tilgang.

 

Fikk dette til svar

 

Det er flott å høre at dere ser verdien i å ha tilgang til pumpepriser for deres hjemmeautomatisering systemer.

 

Vi jobber med å tilrettelegge for dette, men jeg kan dessverre ikke gi en nøyaktig dato for når det vil være på plass. Det jeg kan si er at tilgangen vil bli begrenset til abonnenter av appen vår. I tillegg vil vi gjøre tilgjengelig integrasjoner for andre systemer, ikke kun for Home Assistant.

 

Vi setter pris på din interesse og tålmodighet mens vi jobber med å forbedre tjenesten vår.

.

Med andre ord så kan det være dette kommer i fremtiden... Men gud vet når.

  • Like 1
Lenke til kommentar
Del på andre sider

Jeg får ikke noe key som kan brukes iallefall, jeg får følgende output fra https://api.drivstoffappen.no/api/v1/authorization-sessions:

 

# curl -H 'Content-Type: application/json' -H 'X-CLIENT-ID: com.raskebiler.drivstoff.appen.ios' -H 'Accept: */*' -H 'User-Agent: Drivstoffappen/3.0.0 (com.raskebiler.drivstoff.appen; build:305; iOS 17.2.1) Alamofire/5.4.4' -H 'Accept-Language: en-NO;q=1.0, nb-NO;q=0.9' --compressed -H 'Connection: keep-alive' 'https://api.drivstoffappen.no/api/v1/authorization-sessions'

{"id":<tall ##>,"authorizationId":<tall ##>,"token":"<token ser slik ut: 237faA88-s90a-2eee-b31d-188244e6ce11">,"createdAt":"2024-01-13T13:25:03.000+0000","expiresAt":"2024-01-13T19:25:03.000+0000","deleted":0}%

 

Og "token" kan ikke brukes som ny API key (X-API-KEY). Noe jeg misser?

Endret av nle
Lenke til kommentar
Del på andre sider

1 hour ago, nle said:

Jeg får ikke noe key som kan brukes iallefall, jeg får følgende output fra https://api.drivstoffappen.no/api/v1/authorization-sessions:

 

# curl -H 'Content-Type: application/json' -H 'X-CLIENT-ID: com.raskebiler.drivstoff.appen.ios' -H 'Accept: */*' -H 'User-Agent: Drivstoffappen/3.0.0 (com.raskebiler.drivstoff.appen; build:305; iOS 17.2.1) Alamofire/5.4.4' -H 'Accept-Language: en-NO;q=1.0, nb-NO;q=0.9' --compressed -H 'Connection: keep-alive' 'https://api.drivstoffappen.no/api/v1/authorization-sessions'

{"id":<tall ##>,"authorizationId":<tall ##>,"token":"<token ser slik ut: 237faA88-s90a-2eee-b31d-188244e6ce11">,"createdAt":"2024-01-13T13:25:03.000+0000","expiresAt":"2024-01-13T19:25:03.000+0000","deleted":0}%

 

Og "token" kan ikke brukes som ny API key (X-API-KEY). Noe jeg misser?

token 237faA88-s90a-2eee-b31d-188244e6ce11 brukes av appen til å generere en ny API-nøkkel, man kan jo tippe vha en kryptografisk algoritme som ikke lett kan knekkes.

Lenke til kommentar
Del på andre sider

Jeg har også lenge brukt denne i HA. Har hatt et greit oppsett der HA alltid viser de stasjonene som er i nærheten av din aktuelle posisjon. Jeg har planer om å hente ut ny nøkkel, men ser at admin-nøkkelen (den som slutter på -A) ikke lenger ligger i koden. Var litt morsomt å se at den var hardkodet i koden og til og med kunne slette data 😄

 

Jobber med å reversere påloggingen det nye API'et. Tror jeg forstår hvordan X-API-KEY blir generert

  

15 hours ago, nle said:

Og "token" kan ikke brukes som ny API key (X-API-KEY). Noe jeg misser?


Nei, klienten gjør først et kall mot /authorization-sessions og får en token tilbake, neste kall er /users/USER_ID som er statisk med X-API-KEY satt. Appen bruker token for å genere X-API-KEY.

Endret av NeoID
  • Like 3
Lenke til kommentar
Del på andre sider

Jeg tror jeg har en løsning som fungerer, men må vente til nøkkelen jeg har nå utløper og se om koden min klarer å genere en ny som er gyldig. Det neste blir å se om jeg kan hente ut brukernavnet på en bedre måte. Vil helst ikke kjøre dette med samme bruker da det blir lett oppdaget. 🙂

Tidligere ver det enkelt å få ut all data fra ett endepunkt. noe som gjør det enkelt å konsumere direkte i HA (selv om datagrunnlaget var flere MB og HA klaget over det). Nå er API'et delt opp i større grad enn tidligere. Så du kan få en liste over stasjoner, men f.eks ikoner ligger nå i et egen spørring. Tester og skal gjøre en vurdering på hvordan dette best fåes inn i HA igjen.

image.png.d58516811789b93816cd8f2affc8b63d.png

Endret av NeoID
Lenke til kommentar
Del på andre sider

nle skrev (På 13.1.2024 den 11.11):

Kanskje lettere å få til en open source konkurrent til Drivstoffpriser appen.

Det hadde vært supert.

 

Abonnement på Drivstoffappen er helt uaktuelt for meg da det er kundene, altså de som legger jobb i å oppdatere priser, som er verdien i appen. En engangsbetaling på et par hundrelapper kunne vært ok men ikke kr 200/år så lenge Drivstoffappen ikke selv innhenter priser.

  • Like 1
Lenke til kommentar
Del på andre sider

Jeg kan bekrefte at jeg har en løsning som fungerer. Vet hjelp av brukernavn, password og token får jeg nå ut en gyldig X-API-KEY 🙂

 

Vil nok trenge noen dager, men vil som nevnt lage et eget API ut av dette, både så det blir enklere å patche når koden endrer seg igjen samt legge inn filtrering så ikke HA må gjøre det. Home Assistant har tidligere klaget på at jeg lagrer for mye data i attributes, så nå får man endelig muligheten til å fikse det.

 

Jeg har også reversert en rekke andre apper dersom andre er interessert. For dere som har barn i barnehagen så har jeg også gjort en jobb på Spireportalen og andre så jeg får bilder av mitt barn direkte inn i Synology PhotoStation.

Dersom dere har flere apper som har interessante data så send meg gjerne en PM.

Endret av NeoID
  • Like 5
Lenke til kommentar
Del på andre sider

Det som er vanskelig med en open source-løsning er å spre ordet og få folk til å faktisk bruke det. Det vil også være noen kostnader med tanke på publisering på app stores og serverhosting (om vi tenker at all utvikling skjer frivillig).

 

Jeg er ingen utvikler, men det er jo egentlig bare en relativt enkel database med et frontend som agerer med kart, lokasjon, etc.

 

@NeoID Bra jobba. Men du tenker altså å sette opp en egen API for alle på din kappe? 🙂

 

 

Endret av nle
Lenke til kommentar
Del på andre sider

  • 3 uker senere...

Er ikke helt ferdig med API'et enda pga sykdom og andre ting som må prioriteres, men her er koden for de av dere som er interessert. Det vil genere en gyldig X-API-KEY, helt uten brukernavn eller passord. 😛
 

def get_api_key():
    # Get the session token
    r = requests.get('https://api.drivstoffappen.no/api/v1/authorization-sessions')
    api_token = r.json().get('token')

    # Shift the string by one byte
    shifted_bytes = bytearray(api_token.encode('utf-8'))[1:] + bytearray([api_token.encode('utf-8')[0]])
    shifted_string = shifted_bytes.decode('utf-8')

    # Calculate the MD5 hash of the shifted string
    md5_hash = hashlib.md5(shifted_string.encode('utf-8')).hexdigest()

    return md5_hash


Så kan du gjøre spørring via:
 

@app.get('/api/v1/brands')
async def get_brands():
    headers = { 'X-API-KEY': get_api_key(), 'X-CLIENT-ID': APPLICATION_ID }
    r = requests.get('https://api.drivstoffappen.no/api/v1/brands', headers=headers)

    if not r.ok:
        return {"error": f"Request failed with status code {r.status_code}"}
    return r.json()


Jeg er ikke sikker på om jeg vil sette opp et åpent API til alle og enhver, men jeg kommer nok til å hive min docker kontainer ut på github så snart jeg er fornøyd med den. Så er det en smal sak å drifte sin egen eller konvertere den til en HA integrasjon.

Endret av NeoID
  • Like 6
  • Thanks 2
Lenke til kommentar
Del på andre sider

15 minutes ago, VikingOy said:

Hvordan kjører du denne koden?

I NodeRed?

 

Per i dag kjører jeg det som et eget API i Docker. Det er bare et "proof of concept" på det tidspunktet fordi flere har spurt meg om å poste koden. Jobber enda med å få alle endepunkter på plass og legge til filtre som er nyttige å ha. Har tidligere hatt det slik at HA viser nærmeste stasjoner i henhold til hvor man befinner seg. Når jeg først skriver et eget API vil jeg gjøre den spørringen enklere fordi HA er ikke designet til å holde på store datamengder i sensorer/attributter.

  • Like 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.