Hi.
I'm trying to extract some SoC information from the Cerbo using a Raspberry Pi running Python. I'm able to get a token but when I try and use the token it is returning "errors":"Login required","error_code":"invalid_credentials"
Surely if it's giving me a token, the credentials aren't invalid.
Any help greatly appreciated.
- import requests
- USERNAME = 'my username'
- PASSWORD = 'my password'
- # VRM API endpoints
- LOGIN_URL = 'https://vrmapi.victronenergy.com/v2/auth/login'
- DATA_URL_TEMPLATE = 'https://vrmapi.victronenergy.com/v2/installations/{installation_id}/stats/latest'
- def get_auth_token(username, password):
- # Authenticate and obtain an authorization token
- headers = {'Content-Type': 'application/json'}
- payload = {'username': username, 'password': password}
- response = requests.post(LOGIN_URL, headers=headers, json=payload)
- if response.status_code == 200:
- token = response.json().get('token')
- return token
- else:
- print(f'Failed to authenticate: {response.status_code} - {response.text}')
- return None
- def get_current_soc(token, installation_id):
- # Get current State of Charge (SoC) using the obtained token
- headers = {
- 'Authorization':f'Bearer {token}',
- 'Content-Type':'application/json'
- }
- url = DATA_URL_TEMPLATE.format(installation_id=installation_id)
- response = requests.get(url, headers=headers)
- if response.status_code == 200:
- data = response.json()
- soc = data.get('battery', {}).get('stateOfCharge')
- if soc is not None:
- return soc
- else:
- print('State of Charge (SoC) not found in response.')
- return None
- else:
- print(f'Failed to fetch SoC: {response.status_code} - {response.text}')
- return None
- if __name__ == '__main__':
- installation_id = 'my installation ID'
- # Authenticate and get token
- token = get_auth_token(USERNAME, PASSWORD)
- if token:
- # Get current SoC
- print(token)
- soc = get_current_soc(token, installation_id)
- if soc is not None:
- print(f'Current State of Charge (SoC): {soc}%')
- else:
- print('Failed to fetch State of Charge (SoC)..')
- else:
- print('Authentication failed.')