GĂ„ til innhold
  • Bli medlem
StĂžtt hjemmeautomasjon! đŸ„‡đŸ„ˆđŸ„‰

Anbefalte innlegg

Skrevet

Hei - noen som har fÄtt inn drivstoffpriser fra drivstoffappen i HA? Jeg prÞver med denne; Home Assistant - Hente billigste bensin · GitHub 

Via facebook ser jeg diverse lÞsninger i Node Red, prÞver Ä unngÄ node red siden jeg ikke bruker det.

Per nÄ trÞbler det litt for prisen for 98 og 95 vises og ikke prisen for diesel. 

Fant alle bensinstasjoner her;

https://api.drivstoffappen.no/api/stations?stationType=0&countryCode=NO

  • Like 1
Skrevet (endret)

Det er enkelt  Ä fÄ til uten node-red. Jeg har ferdig konfigurasjon til dette, men utilgjengelig grunnet systemkrasj.

 

Du henter priser via REST, lager template sensor for hvert drivstoff pr stasjon.

Endret av MrE
Skrevet
17 minutes ago, MrE said:

Det er enkelt  Ä fÄ til uten node-red. Jeg har ferdig konfigurasjon til dette, men utilgjengelig grunnet systemkrasj.

 

Du henter priser via REST, lager template sensor for hvert drivstoff pr stasjon.

Alt er enkelt nĂ„r man kan det 🙂 Legg gjerne ut noen hint til oss andre nĂ„r systemet ditt er oppe Ă„ gĂ„r igjen.

Skrevet
MrE skrev (16 timer siden):

Det er enkelt  Ä fÄ til uten node-red. Jeg har ferdig konfigurasjon til dette, men utilgjengelig grunnet systemkrasj.

 

Du henter priser via REST, lager template sensor for hvert drivstoff pr stasjon.

NĂ„r du er tilbake fra krĂŠsj ser jeg gjerne lĂžsningen din ogsĂ„ 😊 

Koden over henter via curl oppdatering hver time og jeg merker pÄ HA at alt blir tregt under Development tools og states siden den skal laste inn alle stasjoner i Norge. For min og sikkert de fleste er det kun 4-6 stasjoner i nÊrheten som er aktuelle.

I tillegg sliter jeg med 98 bensin pris og ikke diesel selv om jeg ser i koden at det bes om price_diesel

Skrevet

Etter Ä ha juster litt pÄ utvalget, endte jeg opp med dette i HA:

image.png.56952e540314ed298133cd0cf08f1da3.png

Jeg opplever ingen forsinkelser eller pÄvirkning av andre funksjoner hverken i HA eller pÄ annen programmvare som kjÞrer.

 

Skrevet
VikingOy skrev (13 timer siden):

Jeg la inn NodeRed Flow'en som lÄ pÄ FaceBook,

Kan du dele til flowen til oss som ikke er pÄ Fakebook?

Skrevet

Takker og bukker @VikingOy

 

Mye bedre Ă„ dele NodeRed flows som compact JSON tagget som "Kode" slik som dette:

[{"id":"9103052baf82e5d0","type":"inject","z":"2447f70b5f1095ba","name":"Hvert 10 min","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":360,"y":130,"wires":[["687284b792794184"]]},{"id":"687284b792794184","type":"http request","z":"2447f70b5f1095ba","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/stations?stationType=0&countryCode=NO","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"application/json"},{"keyType":"other","keyValue":"X-API-KEY","valueType":"other","valueValue":"2CD114509703F6E0A976C32FCB79C4F62966EEC6"},{"keyType":"other","keyValue":"User-Agent","valueType":"other","valueValue":"Drivstoffappen/1.3.8 (com.raskebiler.drivstoff.appen; build:130; iOS 15.2.1) Alamofire/5.4.4"}],"x":550,"y":130,"wires":[["18ec6499f1fefde8","e7e0a907d77667f2","283d51c6efeddbb7","85dd9827b7d9a90c"]]},{"id":"18ec6499f1fefde8","type":"function","z":"2447f70b5f1095ba","name":"Esso Avaldsnes","func":"msg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == 'Esso Avaldsnes');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":130,"wires":[["0e5b02362818c9c1"]]},{"id":"e7e0a907d77667f2","type":"function","z":"2447f70b5f1095ba","name":"Uno-X Avaldsnes","func":"msg.payload = msg.payload.filter(e => e.discountInfo == 'Uno-X Avaldsnes');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":190,"wires":[["0e5b02362818c9c1"]]},{"id":"283d51c6efeddbb7","type":"function","z":"2447f70b5f1095ba","name":"YX 7-Eleven Norheim","func":"msg.payload = msg.payload.filter(e => e.discountInfo == 'YX 7-Eleven Norheim');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":250,"wires":[["0e5b02362818c9c1"]]},{"id":"85dd9827b7d9a90c","type":"function","z":"2447f70b5f1095ba","name":"Tanken Helganes - Flyplassvegen","func":"msg.payload = msg.payload.filter(e => e.discountInfo == 'Tanken Helganes - Flyplassvegen');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":310,"wires":[["0e5b02362818c9c1"]]},{"id":"0e5b02362818c9c1","type":"debug","z":"2447f70b5f1095ba","name":"debug 88","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1090,"y":130,"wires":[]}]

 

Skrevet

Min forstÄelse er at dette API'et ikke er Äpent og fritt tilgjengelig. 
Det er nok en eller annen IT-dyktig luring som har funnet det og gjort en eksperimentell reverse engineering.

Det kan bety at API'et nÄr som helt kan forandres og slutte Ä virke.  Det er en del av gamet.

 

Men, sÄ er det gjerne slik at selskapet bak ofte velger Ä se gjennom fingrene med at det alltid vil vÊre noen som "finner" frem til slike API'er fordi de som bruker slike for det fÞrste ofte er i veldig fÄtall (nerdene som oss), og dernest sÄ er all markedsfÞring, god markedsfÞring. Vi er med Ä sprer info om eksistensen til Drivstoffappen.no. Og sist, men ikke minst - vi bidrar nok ogsÄ med en del verdifull tilbakemelding dersom Drivstoffappen.no gidder Ä ta seg bryet med fÞlge litt med pÄ forumene vÄre.  Kall oss gjerne gratis betatestere.

  • Like 3
Skrevet

Appen er og en del data er gratis Ä bruke i appen, med betaltjenestene i app unlockes en del ekstra. 
Var nok ikke deres intensjon at datane kunne brukes av oss, men enn sÄ lenge er det Äpent. 

Skrevet (endret)

Hei,

 

Her er slik jeg har gjort det, uten bruk av Node-Red etc. Jeg bruker Auto-Entities kortet i HA, og sorterer pÄ pris lavest - hÞyest. Ett kort for bensin, og ett for diesel. Jeg hadde en del planer for hvordan jeg skulle ha dette, blant annet med bilde som ikon, kart som viste de forskjellige stasjonene, legge inn nÄr den ble sist oppdatert etc.. Tiden strekker dessverre ikke til, sÄ det har blitt lagt pÄ is inntil videre. Anyways, her er det jeg har sÄ langt:

 

I configuration.yaml har jeg lagt inn restsensor som henter stasjoner fra json filen som ble linket til lenger oppe.

Tipset for Ä fÄ den lett leselig er Ä legge den inn i en JSON formatter, da blir filen mye renere Ä lese.

Edit: Noen ganger nÄr man gÄr inn pÄ JSON filen uten Ä bruka api-key, fÄr man authorization denied. Da mÄ man bruke Postman API explorer og X-API-KEY for Ä hente JSON filen. 

 

JSON filen ligger vedlagt.

 

Jeg bruker Notepad++ og brukte sĂžkefunksjon for Ă„ finne stasjonene jeg vil ha inn i oppsettet.

 

For Ă„ legge til stasjonen du Ăžnsker gjĂžr du fĂžlgende:

 

1. Finner stasjonen i JSON filen

2. Kopierer DiscountInfo navnet som du finner i JSON filen

3. endrer 3 ting under rest-sensor i configuration.yaml

 - Name - Valgfritt navn, men legg merke til at navnet har bensin i seg. Det er fordi value_template henter bensin-prisen

 - json attributes path discount info mÄ endres til stasjonsnavnet slik den stÄr i JSON filen.

 - og value_template mÄ endres til samme navnet som du valgte pÄ Þverste linje.

 

 

Under template sensor mÄ du endre navn pÄ sensor (valgfritt), men state_attr mÄ henvise til sensor som du har laget under rest-sensor.

 

Shell bryne diesel henter altsÄ dieselprisen fra sensoren som heter shell bryne bensin...

 

 

Nedenfor er YAMLkoden for REST og for template sensor. Begge skal i configuration.yaml (ihvertfall hos meg 🙂🙂 )

I RESTsensoren er det name: som sier hva sensoren skal hette, og value_template er verdien til sensoren som blir opprettet. Sensorene som ligger i restsensoren blir da bensinprisen (pÄ grunn av [0] i value template). Hvis det Þnskes diesel her sÄ mÄ du sjekke hva som stÄr i JSON fila. [0] er Þverste avsnitt, [1] blir neste osv.. Se utklipp nedenfor, kanskje det ga mer mening.

 

image.thumb.png.e57a83183c9e4c9de03a2bda3939b4bf.png

 

configuration.yaml

 
rest:
  - scan_interval: 600
    method: GET
    headers:
        Content-Type: application/json
        X-API-KEY: 2CD114509703F6E0A976C32FCB79C4F62966EEC6
        User-Agent: Drivstoffappen/1.3.8 (com.raskebiler.drivstoff.appen; build:130; iOS 15.2.1) Alamofire/5.4.4
        Accept-Language: nb-NO;q=1.0, en-GB;q=0.9
        Accept-Encoding: br;q=1.0, gzip;q=0.9, deflate;q=0.8
        Connection: keep-alive
    sensor:
      - name: "Shell Bryne Bensin"
        json_attributes_path: "$..[?(@.discountInfo=='Shell Bryne')]"
        value_template: "{{ state_attr('sensor.shell_bryne_bensin', 'stationDetails')[0].price }}"
        force_update: true
        json_attributes:
          - "id"
          - "location"
          - "latitude"
          - "longitude"
          - "pictureUrl"
          - "discountInfo"
          - "lastUpdated"
          - "stationDetails"
 
      - name: "Circle K LagÄrdsveien Bensin"
        json_attributes_path: "$..[?(@.discountInfo=='Circle K LagÄrdsveien')]"
        force_update: true
        value_template: "{{ state_attr('sensor.circle_k_lagardsveien_bensin', 'stationDetails')[0].price }}"
        json_attributes:
          - "id"
          - "location"
          - "latitude"
          - "longitude"
          - "pictureUrl"
          - "discountInfo"
          - "lastUpdated"
          - "stationDetails"
 
      - name: "Uno-X Bryne Bensin"
        json_attributes_path: "$..[?(@.discountInfo=='Uno-X Bryne')]"
        force_update: true
        value_template: "{{ state_attr('sensor.uno_x_bryne_bensin', 'stationDetails')[0].price }}"
        json_attributes:
          - "id"
          - "location"
          - "latitude"
          - "longitude"
          - "pictureUrl"
          - "discountInfo"
          - "lastUpdated"
          - "stationDetails"
 
      - name: "Esso Bryne Bensin"
        json_attributes_path: "$..[?(@.discountInfo=='Esso Bryne')]"
        force_update: true
        value_template: "{{ state_attr('sensor.esso_bryne_bensin', 'stationDetails')[0].price }}"
        json_attributes:
          - "id"
          - "location"
          - "latitude"
          - "longitude"
          - "pictureUrl"
          - "discountInfo"
          - "lastUpdated"
          - "stationDetails"
 
      - name: "Circle K Klepp Bensin"
        json_attributes_path: "$..[?(@.discountInfo=='Circle K Klepp')]"
        force_update: true
        value_template: "{{ state_attr('sensor.circle_k_klepp_bensin', 'stationDetails')[0].price }}"
        json_attributes:
          - "id"
          - "location"
          - "latitude"
          - "longitude"
          - "pictureUrl"
          - "discountInfo"
          - "lastUpdated"
          - "stationDetails"

 

 

For Ä lage diesel sensorene er det hentet samme sensor, men brukt neste avsnitt i JSON fila ( [1] ). Noen ganger har stasjonene avgiftsfri diesel eller 98 bensin pÄ 2. avsnitt, sÄ da mÄ det brukes [2] eller [3] alt etter hvordan JSON ser ut pÄ aktuell stasjon.

 

Merk at sensorene henter attribut fra sensor.shell_bryne_bensin. Det er fordi i restsensoren henter vi bensinprisen, og hele stasjonen som vi henter inn i HA blir da kalt for shell bryne bensin. For Ä hente dieselpris bruker vi altsÄ attribute under bensinsensoren, hvis det ga mening.

 

Her er for Ä hente diesel pÄ de samme stasjonene:

 

 
template:
  - sensor:
 
########## DIESELPRISER ############################
 
    - name: Shell Bryne Diesel
      state: "{{ state_attr('sensor.shell_bryne_bensin', 'stationDetails')[1].price }}"
      device_class: monetary
      unit_of_measurement: NOK
 
    - name: Circle K LagÄrdsveien Diesel
      state:  "{{ state_attr('sensor.circle_k_lagardsveien_bensin', 'stationDetails')[1].price }}"
      device_class: monetary
      unit_of_measurement: NOK
 
    - name: Uno-X Bryne Diesel
      state: "{{ state_attr('sensor.uno_x_bryne_bensin', 'stationDetails')[1].price }}"
      device_class: monetary
      unit_of_measurement: NOK
 
    - name: Esso Bryne Diesel
      state:  "{{ state_attr('sensor.esso_bryne_bensin', 'stationDetails')[1].price }}"
      device_class: monetary
      unit_of_measurement: NOK
 
    - name: Circle K Klepp Diesel
      state:  "{{ state_attr('sensor.circle_k_klepp_bensin', 'stationDetails')[1].price }}"
      device_class: monetary
      unit_of_measurement: NOK

 

 

Blir altsĂ„ mye manuelt arbeid, men er forholdsvis enkelt. Knotet en del med dette fĂžr jeg fikk det til. HĂ„per det fungerer for dere ogsĂ„ 🙂

 

Slik ser kortet ut i HA:

 

image.thumb.png.43952451c96383ed54e0b37f86d907ba.png

 

 

Hvor konfigurasjonen til auto-entities kortet for diesel ser slik ut:

 

type: custom:auto-entities
card:
  type: entities
  title: Diesel - sortert pÄ pris
filter:
  include:
    - name: '*Diesel*'
  exclude: []
sort:
  method: state
  numeric: true
 

 

DS appen.json

Endret av MrE
  • Like 2
  • Thanks 1
Skrevet (endret)
MrE skrev (23 minutter siden):

Hei,

 

Her er slik jeg har gjort det, uten bruk av Node-Red etc. Jeg bruker Auto-Entities kortet i HA, og sorterer pÄ pris lavest - hÞyest. Ett kort for bensin, og ett for diesel. Jeg hadde en del planer for hvordan jeg skulle ha dette, blant annet med bilde som ikon, kart som viste de forskjellige stasjonene, legge inn nÄr den ble sist oppdatert etc.. Tiden strekker dessverre ikke til, sÄ det har blitt lagt pÄ is inntil videre. Anyways, her er det jeg har sÄ langt:

FYI:

Har en ukvalifisert oppfatning av at Uno-X pÄ Orstad / Øksnevad ville sortert hÞyt opp pÄ listen din. Det er kanskje interessant siden den ligger i det samme omrÄdet som de andre du har.

Endret av stigvi
  • Thanks 1
Skrevet (endret)
hjemmedude skrev (20 timer siden):

For Ăžyeblikket ingen data, noen som opplever det samme?

"You are not authorized" 😛

Da antar jeg du mÄ endre X-api-key. Du finner ny ved hjelp av Postman API explorer

 

2CD114509703F6E0A976C32FCB79C4F62966EEC6

 

Edit: X-API-KEY fungerer hos meg, sÄ da tenker jeg den skal fungere hos deg ogsÄ.

 

Edit2:

  

hjemmedude skrev (20 timer siden):

For Ăžyeblikket ingen data, noen som opplever det samme?

"You are not authorized" 😛

hvor fÄr du den feilmeldingen?

Endret av MrE
  • Like 1
Skrevet (endret)

Takk skal prÞve med postman api explorer, har ikke brukt det fÞr men har konto nÄ.

NĂ„r jeg trykker pĂ„ linken til drivstoppappen.no/api sĂ„ fĂ„r jeg det som tilbakemelding, you are not authorized. 🙂

edit: Ok, la inn data i postman og da returneres informasjon som Þnsket, sÄ da er det kanskje bare hos meg det klusser.

La koden din rett i configuration.yaml og da spiller det fint, sĂ„ er noe jeg klusser til, tydeligvis 🙂

 

Det blir opprettet flere _bensin sensorer ettervhert som tiden gÄr, er oppe i 7 stk pÄ Bryne per nÄ. Skjer dette hos deg?

Endret av hjemmedude
Skrevet

Jeg har redigert mitt innlegg noe, og har inkludert JSON filen.

 

@hjemmedude Nei du skal ikke fÄ mange flere av samme sensor plutselig. REST sensor oppretter 1 sensor for 1 stasjon. Template sensor henter dieselpris fra samme stasjon. Har du utklipp av hvordan det ser ut hos deg?

 

Vedrþrende not authorized har dette skjedd fra tid til annen, uten at jeg vet hvorfor. Jeg bruker Postman med api key, da kommer json fila med en gang 🙂

Skrevet

@MrEdet var kanskje i en testperiode at det ble generert nye sensorer for hver yaml restart, nĂ„ er det 2-3 sensorer (development tools -> states ) for hver stasjon, det er nok riktig 🙂

Takk for god hjelp! NĂ„ kan jeg spore prisen og virkelig handle fuel pĂ„ rett tid og sted 🙂

 

Skrevet (endret)

Det virker litt "overkill" Ă„ lage en sensor for hver eneste besinstasjon.

Jeg har isteden gjort alt ferdig i NodeRed med bruk av JavaScript og ender opp med kun en enkel sensor som jeg sÄ sender til Home Assistant.

Enkelt, rent og ryddig.

FĂžrst trekkes alle de Ăžnskede stasjonene ut og samles i en felles array (eksempelet her har kun 3 stasjoner):

 

var stasjoner = [];
var temp = msg.payload.filter(e => e.discountInfo == 'Shell Marienlyst');
temp[0].stationDetails = temp[0].stationDetails.filter(e => e.type == 'D');
temp[0].stationDetails = temp[0].stationDetails[0];
stasjoner[0] = temp[0];

var temp = msg.payload.filter(e => e.discountInfo == 'Shell Frogner');
temp[0].stationDetails = temp[0].stationDetails.filter(e => e.type == 'D');
temp[0].stationDetails = temp[0].stationDetails[0];
stasjoner[1] = temp[0];

var temp = msg.payload.filter(e => e.discountInfo == 'Shell Vinderen');
temp[0].stationDetails = temp[0].stationDetails.filter(e => e.type == 'D');
temp[0].stationDetails = temp[0].stationDetails[0];
stasjoner[2] = temp[0];

msg.payload = stasjoner;
return msg;

 

Deretter sorteres tabellen og den billigste trekkes ut:

 

var billigst = msg.payload[0];
msg.payload.forEach(FinnBilligst);

function FinnBilligst(stasjon){
    if(stasjon.stationDetails.price < billigst.stationDetails.price) {
        billigst = stasjon;
    }
}
msg.payload = billigst;
return msg;

 

Resultatet sendes til HA som én sensor:

image.png.88c64da45ed9a989863e8e5b86c1b4ec.png

 

Og presenteres i Lovelace:

image.png.ba07a3d05bc410e108c73af026524e84.png

Endret av VikingOy

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.