Gjelsvik Skrevet 3. april 2018 Skrevet 3. april 2018 (endret) 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. (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) Når textfilen er ferdig parset så skal du ha disse nye devicene: 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 3. april 2018 av Gjelsvik 2 Siter
Salvesen Skrevet 3. april 2018 Skrevet 3. april 2018 Hva med å bare lage en device med knapper manuelt og så bare få den til å trigge en del av scriptet ditt? Siter
Gjelsvik Skrevet 3. april 2018 Forfatter Skrevet 3. april 2018 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" Siter
Salvesen Skrevet 3. april 2018 Skrevet 3. april 2018 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. Så går du inn på devicen og på status graphics, her velger du control eller both Så fyller du ut. I scriptet kan du lage sub funksjoner feks og trigge disse ved knapp på osv Siter
Gjelsvik Skrevet 3. april 2018 Forfatter Skrevet 3. april 2018 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. Siter
Moskus Skrevet 4. april 2018 Skrevet 4. april 2018 10 timer siden, Gjelsvik skrev: Ser ikke hvor jeg kobler en knapp til et script. Event: IF device set to SOME_STATUS THEN run script (eller Run program) Siter
Salvesen Skrevet 4. april 2018 Skrevet 4. april 2018 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 Siter
Moskus Skrevet 4. april 2018 Skrevet 4. april 2018 Du kan selvfølgelig også få scriptet til å lage devicer med knapper. Gjelsvik har spurt før. Siter
Gjelsvik Skrevet 4. april 2018 Forfatter Skrevet 4. april 2018 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. Siter
Blodstrupmoen Skrevet 7. januar 2019 Skrevet 7. januar 2019 Prøvde å sette opp dette, men får feilmelding i linje 23 i scriptet. Noen som har tips? Siter
Blodstrupmoen Skrevet 7. januar 2019 Skrevet 7. januar 2019 Fant løsningen, måtte kjøre: C:\Python35\Scripts\pip install requests for å installere denne modulen. Siter
Anbefalte innlegg
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.