## Pre-Requirements
1) Own a Mercedes Benz Car with Mercedes me installed and working.
2) Create an application in https://developer.mercedes-benz.com/
-3) Register to the following APIs:
+3) Register to the following APIs (all of them):
- [Electric Vehicle Status](https://developer.mercedes-benz.com/products/electric_vehicle_status)
- [Fuel Status](https://developer.mercedes-benz.com/products/fuel_status)
- [Pay As You Drive Insurance](https://developer.mercedes-benz.com/products/pay_as_you_drive_insurance)
where CLIENT_ID and CLIENT_SECRET referring to the application information that can be found in [Mercedes Developer Console](https://developer.mercedes-benz.com/console) and VEHICLE_ID is the VIN of your car.
+## First Token Creation
+To create the first token it's necessary to perform the following steps:
+1) Create the APP and register it to all APIs as describe in the Pre-Requirements paragraph
+2) Logout in all browser from Mercedes Me (Developer site included)
+3) Execute the shell or python script with -t parameter to obrain the first token
+4) Open with a browser the link provided by the script: a login page will be shown
+5) Using your Mercedes Me credential log in: a new web-page will ask to authorize the APP created in the step 1 to access to the personal information associated to the APIs registered
+6) Enable all information and press Allow
+7) An error page will appear: check the URI: it's something like https://localhost/?code=DQ8htZSw4WtJ27r7sTrVJwszGWxrCx9emy5FDUFa
+8) Copy the part of the URI after code= (in this case DQ8htZSw4WtJ27r7sTrVJwszGWxrCx9emy5FDUFa) and paste into the running script
+
### Python Usage
To execute the script read below:
```bash
# Read Configuration
########################
def ReadConfig(self):
- needToRefresh = False
-
# Read Config from file
if not os.path.isfile(self.config_file):
_LOGGER.error(f"Credential File {self.config_file} not found")
# Software Name & Version
NAME = "Mercedes Me API"
DOMAIN = "mercedesmeapi"
-VERSION = "0.10"
+VERSION = "0.11"
# Software Parameters
TOKEN_FILE = ".mercedesme_token"
CONFIG_FILE = ".mercedesme_config"
# Software Name & Version
NAME = "Mercedes Me API"
DOMAIN = "mercedesmeapi"
-VERSION = "0.10"
+VERSION = "0.11"
# Software Parameters
TOKEN_FILE = ".mercedesme_token"
RESOURCES_FILE = ".mercedesme_resources"
def ReadToken(self):\r
\r
found = False\r
- needToRefresh = False\r
\r
# Read Token\r
if not os.path.isfile(self.token_file):\r
- # Token File not present - Creating new one\r
- _LOGGER.error("Token File missing - Creating a new one")\r
+ # Token File not present\r
+ _LOGGER.error("Token File missing")\r
found = False\r
else:\r
with open(self.token_file, "r") as file:\r
else:\r
found = True\r
except ValueError:\r
- _LOGGER.error("Error reading token file - Creating a new one")\r
+ _LOGGER.error("Error reading token file")\r
found = False\r
\r
- if not found:\r
- # Not valid or file missing\r
- #if (not self.CreateToken()): GRGR -> to be fixed\r
- if (True):\r
- _LOGGER.error("Error creating token")\r
- return False\r
- else:\r
+ if found:\r
# Valid: just import\r
self.access_token = token["access_token"]\r
self.refresh_token = token["refresh_token"]\r
self.token_expires_in = token["expires_in"]\r
- needToRefresh = True\r
\r
- if needToRefresh:\r
+ # Refreshing\r
if not self.RefreshToken():\r
_LOGGER.error("Error refreshing token")\r
return False\r
########################\r
def RefreshToken(self):\r
\r
+ if self.access_token == "":\r
+ _LOGGER.error("Error: Token not found or not valid")\r
+ return False\r
+\r
data = f"grant_type=refresh_token&refresh_token={self.refresh_token}"\r
token = GetToken(URL_OAUTH_TOKEN, self.headers, data, refresh=True)\r
\r
found = False
resources = None
+ if self.mercedesConfig.token.access_token == "":
+ _LOGGER.error("Error: Token not found or not valid")
+ return False
+
if self.mercedesConfig.enable_resources_file == True:
if not os.path.isfile(self.resources_file):
# Resources File not present - Retrieving new one from server
## Pre-Requirements
1) Own a Mercedes Benz Car with Mercedes me installed and working.
2) Create an application in https://developer.mercedes-benz.com/
-3) Register to the following APIs:
+3) Register to the following APIs (all of them):
- [Electric Vehicle Status](https://developer.mercedes-benz.com/products/electric_vehicle_status)
- [Fuel Status](https://developer.mercedes-benz.com/products/fuel_status)
- [Pay As You Drive Insurance](https://developer.mercedes-benz.com/products/pay_as_you_drive_insurance)
custom_components.mercedesmeapi: debug
```
+## First Token Creation
+To create the first token it's necessary to perform the following steps:
+1) Create the APP and register it to all APIs as describe in the Pre-Requirements paragraph
+2) Logout in all browser from Mercedes Me (Developer site included)
+3) Execute the shell or python script with -t parameter to obrain the first token
+4) Open with a browser the link provided by the script: a login page will be shown
+5) Using your Mercedes Me credential log in: a new web-page will ask to authorize the APP created in the step 1 to access to the personal information associated to the APIs registered
+6) Enable all information and press Allow
+7) An error page will appear: check the URI: it's something like https://localhost/?code=DQ8htZSw4WtJ27r7sTrVJwszGWxrCx9emy5FDUFa
+8) Copy the part of the URI after code= (in this case DQ8htZSw4WtJ27r7sTrVJwszGWxrCx9emy5FDUFa) and paste into the running script
+
## Change Log
You can find change log under [releases][releases-url]
exit(1)
# Read Resources
- if not data.mercedesResources.ReadResources():
- _LOGGER.error("Error initializing resources")
- exit(1)
+ if (args.resources == True) | (args.status == True):
+ if not data.mercedesResources.ReadResources():
+ _LOGGER.error("Error initializing resources")
+ exit(1)
# Print Available Resources
- if args.resources:
+ if args.resources == True:
data.mercedesResources.PrintAvailableResources()
# Print Resources State
def ReadToken(self):
found = False
- needToRefresh = False
# Read Token
if not os.path.isfile(self.token_file):
- # Token File not present - Creating new one
- _LOGGER.error("Token File missing - Creating a new one")
+ # Token File not present
+ _LOGGER.error("Token File missing")
found = False
else:
with open(self.token_file, "r") as file:
else:
found = True
except ValueError:
- _LOGGER.error("Error reading token file - Creating a new one")
+ _LOGGER.error("Error reading token file")
found = False
- if not found:
- # Not valid or file missing
- if not self.CreateToken():
- _LOGGER.error("Error creating token")
- return False
- else:
+ if found:
# Valid: just import
self.access_token = token["access_token"]
self.refresh_token = token["refresh_token"]
self.token_expires_in = token["expires_in"]
- needToRefresh = True
- if needToRefresh:
+ # Refreshing
if not self.RefreshToken():
_LOGGER.error("Error refreshing token")
return False
########################
def RefreshToken(self):
+ if self.access_token == "":
+ _LOGGER.error("Error: Token not found or not valid")
+ return False
+
data = f"grant_type=refresh_token&refresh_token={self.refresh_token}"
token = GetToken(URL_OAUTH_TOKEN, self.headers, data, refresh=True)
found = False
resources = None
+ if self.mercedesConfig.token.access_token == "":
+ _LOGGER.error("Error: Token not found or not valid")
+ return False
+
if self.mercedesConfig.enable_resources_file == True:
if not os.path.isfile(self.resources_file):
# Resources File not present - Retrieving new one from server