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

BMW Connected Drive script


Gjelsvik

Anbefalte innlegg

Bmw`s connected drive har et API, som det finnes noe dokumentasjon på. Jeg har ikke klart å finne plugin eller scripts til Homeseer, men har funnet ett til OpenHab.

(Creds til denne mannen: https://github.com/jupe76/bmwcdapi )

 

Dette har jeg gjort om littegrann på, slik at det henter verdiene fra json, og lagrer til en txt fil. Deretter bruker jeg Jon00 Datascrapper for å lese textfilen.

 

Prereq:

- Python runtime: https://www.python.org/downloads/

- Jon00 Datascrapper: http://www.jon00.me.uk/hs.html (alternativ link: http://sensys.no/hs3/Jon00DataScraperHS3.zip )

- Script for tilkobling mot ConnectedDrive : http://sensys.no/hs3/bmwcdapi.py 

 

Installer python, legg scriptet i en mappe du har skrivetilgang til (f.eks c:\bmw\)

 

Rediger scriptet slik at linjene 45,46,47 inneholder dine påloggingsdetaljer for Connected Drive, samt VIN nummer for den bilen du ønsker å hente data fra

Quote

       self.bmwUsername = "[email protected]"
        self.bmwPassword = "XXXXXXXXXXXXXXX"
        self.bmwVin = "WBYXXXXXXXXXXXXX"

 

Sett opp en scheduled task (cronjob for de på linux) som kjører scripet med jevne mellomrom. 

 

bmw-pyton.PNG.ec5748ae9a36dd16cebb271297257a78.PNG

 

(OBS: Jeg har ikke klart å finne ut hvordan man kan lagre aut-token, og sjekke om det er utløpt eller ikke, derfor foretas en ny autentisering hver gang scriptet kjøres, for å være litt snille med BMWs servere så tenker jeg en gang i halvtimen er passe)

 

Når scriptet er ferdig kjørt sitter du med filen bmw.txt (Kjør script med parameter "-p" for å dumpe hele json settet til egne filer)

Den skal se slik ut: 

Quote

Bmw_doorLockState:UNLOCKED<end>
Bmw_Chargelevel:100.0<end>
Bmw_beRemainingRangeElectric:191.0<end>
Bmw_mileage:2354<end>
Bmw_updateTimeConverted:03.04.2018 19:50<end>
Bmw_chargingSystemStatus:CHARGINGENDED<end>
Bmw_connectorstatus:CONNECTED<end>
Bmw_remainingFuel:0<end>
Bmw_socMax:29.699997<end>
Bmw_lat:99.1309<end>
Bmw_long:99.101317<end>
Bmw_lastTripDistance:38.0<end>
Bmw_lastTripAvgConsum:16.5<end>

 

Man kunne sikkert brukt http kall i python mot http://hs3ip/json?JSON?request=controldevicebyvalue&ref=xxx&value=yyy for å unngå veien om Jon00 sit script men men.. 

 

Installer Jon00 Datascrapper og sett opp filen: C:\Program Files (x86)\HomeSeer HS3\Config\Jon00DataScraper.ini slik:

Quote

[Grab1]
Path=c:\bmw\bmw.txt
TextFile=0
Encoding=
Username=
Password=
Options=
UserAgent=
Devicemode=0
StripHTML=1

Pattern1=(?<=Bmw_doorLockState:)(.*)(?=<end>)
Pattern2=(?<=Bmw_Chargelevel:)(.*)(?=<end>)
Pattern3=(?<=Bmw_beRemainingRangeElectric:)(.*)(?=<end>)
Pattern4=(?<=Bmw_mileage:)(.*)(?=<end>)
Pattern5=(?<=Bmw_updateTimeConverted:)(.*)(?=<end>)
Pattern6=(?<=Bmw_chargingSystemStatus:)(.*)(?=<end>)
Pattern7=(?<=Bmw_connectorstatus:)(.*)(?=<end>)
Pattern8=(?<=Bmw_chargingTimeRemaining:)(.*)(?=<end>)
Pattern9=(?<=Bmw_socMax:)(.*)(?=<end>)

DeviceName1=BMW DoorLockState
DeviceText1=Doors: [0]
DeviceValue1=[0]
DeviceImage1=
Speakbutton1=0
TriggerString1=
SearchMode1=1
TriggerEvent1=

DeviceName2=BMW Chargelevel
DeviceText2=[100] %
DeviceValue2=[100]
DeviceImage2=
Speakbutton2=0
TriggerString2=
SearchMode2=1
TriggerEvent2=

DeviceName3=BMW Range
DeviceText3=[200] km
DeviceValue3=[200]
DeviceImage3=
Speakbutton3=
TriggerString3=
SearchMode3=1
TriggerEvent3=

DeviceName4=BMW Mileage
DeviceText4=[300] km
DeviceValue4=[300]
DeviceImage4=
Speakbutton4=0
TriggerString4=
SearchMode4=1
TriggerEvent4=

DeviceName5=BMW Updated
DeviceText5=[400]
DeviceValue5=
DeviceImage5=
Speakbutton5=0
TriggerString5=
SearchMode5=1
TriggerEvent5=

DeviceName6=BMW Charging Status
DeviceText6=[500]
DeviceValue6=
DeviceImage6=
Speakbutton6=0
TriggerString6=
SearchMode6=1
TriggerEvent6=

DeviceName7=BMW Connector Status
DeviceText7=[600]
DeviceValue7=
DeviceImage7=
Speakbutton7=0
TriggerString7=
SearchMode7=1
TriggerEvent7=

DeviceName8=BMW Charging Time Remaining
DeviceText8=[700] minutes
DeviceValue8=[700]
DeviceImage8=
Speakbutton8=0
TriggerString8=
SearchMode8=1
TriggerEvent8=

DeviceName9=BMW SOCMAX
DeviceText9=[800]
DeviceValue9=[800]
DeviceImage9=
Speakbutton9=0
TriggerString9=
SearchMode9=1
TriggerEvent9=

[Grab2]
Path=c:\bmw\bmw.txt
TextFile=1
Encoding=
Username=
Password=
Options=
UserAgent=
Devicemode=0
StripHTML=1

Pattern1=(?<=Bmw_lat:)(.*)(?=<end>)
Pattern2=(?<=Bmw_long:)(.*)(?=<end>)
Pattern3=(?<=Bmw_lastTripDistance:)(.*)(?=<end>)
Pattern4=(?<=Bmw_lastTripAvgConsum:)(.*)(?=<end>)


DeviceName1=BMW Latitude
DeviceText1=[0]
DeviceValue1=[0]
DeviceImage1=
Speakbutton1=0
TriggerString1=
SearchMode1=1
TriggerEvent1=

DeviceName2=BMW Longtitude
DeviceText2=[100] 
DeviceValue2=[100]
DeviceImage2=
Speakbutton2=0
TriggerString2=
SearchMode2=1
TriggerEvent2=


DeviceName3=BMW LastTripDist
DeviceText3=[200] km
DeviceValue3=[200]
DeviceImage3=
Speakbutton3=0
TriggerString3=
SearchMode3=1
TriggerEvent3=

DeviceName4=BMW LastTripAvgConsum
DeviceText4=[300] 
DeviceValue4=[300]
DeviceImage4=
Speakbutton4=0
TriggerString4=
SearchMode4=1
TriggerEvent3=

 

 

Lag så en event som du trigger litt oftere enn det du kjører pythonscriptet, som kaller Jon00 datascrapper scriptet. (Denne leser bare bmw.txt, og er det ingen endringer så gjør den ingen ting)

 

jon00datascarperimg.thumb.PNG.615600bea6c226adf51d36a0ab3261f5.PNG

 

Når textfilen er ferdig parset så skal du ha disse nye devicene:

bmw-devices.thumb.PNG.09295993b9ed83c254a4c0cbae74f61b.PNG

 

Scriptet har muligheter for følgende parametre.

 

Quote
--execservice <service> -e execute service service may be one of
  • climate,
  • lock,
  • unlock,
  • light,
  • horn
--sendmesg <subject> <message> -s send a message to the car

 

Om noen vet hvordan man kan lage en virtuell device med actions, der hver action kan kjøre dette scriptet med disse parametrene så blir jeg veldig glad.

Er kanskje mulig å få til med 

hs.DeviceButtonAdd

 

Endret av Gjelsvik
  • Like 2
Lenke til kommentar
Del på andre sider

10 minutes ago, Salvesen said:

Hva med å bare lage en device med knapper manuelt og så bare få den til å trigge en del av scriptet ditt? 

 

Hvordan gjør man det da?

 

Det å kjøre kun aktuell del av scriptet styres med parameter.. Men lage knapper manuelt vet jeg ikke hvordan man skulle gjort.

 

Mulig like greit å lage events, en for hver kommando for parameteren "-e"

Lenke til kommentar
Del på andre sider

2 minutter siden, Gjelsvik skrev:

 

Hvordan gjør man det da?

 

Det å kjøre kun aktuell del av scriptet styres med parameter.. Men lage knapper manuelt vet jeg ikke hvordan man skulle gjort.

 

Mulig like greit å lage events, en for hver kommando for parameteren "-e"

 

Bruk den grønne + knappen. 

 

image.png.292475337069cbba9083b14c568b6b5f.png

 

Så går du inn på devicen og på status graphics, her velger du control eller both

 

image.png.4174da393976402857c22d48fc6d2897.png

 

Så fyller du ut. 

 

I scriptet kan du lage sub funksjoner feks og trigge disse ved knapp på osv

Lenke til kommentar
Del på andre sider

12 timer siden, Gjelsvik skrev:

Takk, fant ut hvordan man lager disse knappene nå, men de gjør ikke annet enn å sette verdien på den virtuelle devicen. Ser ikke hvor jeg kobler en knapp til et script.

 

Det @Moskus sa, så kan du kjøre en sub i scriptet med inn parameter om nødvendig. Eller eget script så klart, opp til deg :)Ikke glem å oppdatere statusen i funksjonen også, IE om du skrur på AC i bilen, sjekk at bilen svarer at det er på osv så dytter du dette tilbake til device :)

Lenke til kommentar
Del på andre sider

Når jeg tenker meg om så er knappene egentlig ubrukelige.. Jeg vil jo trigge handlinger fra automatikk, eller manuelt fra frontend (for øyeblikket imperihome og jon00webpage) Og da er eventer like bra.

Lenke til kommentar
Del på andre sider

  • 9 måneder senere...

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.