Compare commits

..
7 Commits
Author SHA1 Message Date
Linus DietzandGitHub 9359896a68 Update README.md 2023-06-20 15:08:04 +02:00
Linus DietzandGitHub 2ebd1a30e3 Update README.md 2023-06-20 15:03:46 +02:00
Linus DietzandGitHub 0a13fd3bba Update README.md 2023-06-20 15:03:29 +02:00
Linus Dietz fcf8f968ab Fix #12 - Climate for multiple cars 2023-06-20 14:56:26 +02:00
Linus DietzandGitHub 07b144cc38 Update README.md 2023-06-20 13:36:51 +02:00
Linus Dietz 1eb635592d Fix charging system status 2023-06-20 13:31:18 +02:00
Linus DietzandGitHub c60ef48591 Update README.md 2023-06-20 13:16:18 +02:00
4 changed files with 26 additions and 18 deletions
+9 -8
View File
@@ -4,9 +4,10 @@ This component establishes a connection between the newer AAOS Volvo cars and Ho
Maybe this component works also with other Volvo cars. Please try out the native Volvo [integration](https://www.home-assistant.io/integrations/volvooncall/) before using this component! If the native component doesn't work for your car, try this mqtt bridge. Maybe this component works also with other Volvo cars. Please try out the native Volvo [integration](https://www.home-assistant.io/integrations/volvooncall/) before using this component! If the native component doesn't work for your car, try this mqtt bridge.
## Confirmed working with ## Confirmed working with
- Volvo XC40 BEV (2023) - XC40 BEV (2023)
- Volvo V60 T8 PHEV (2023) - V60 T8 PHEV (2023)
- Volvo C40 (2023) - C40 PHEV (2023)
- XC90 T8 PHEV (2023)
Please let me know if your car works with this addon so I can expand the list! Please let me know if your car works with this addon so I can expand the list!
@@ -21,12 +22,12 @@ Here is what every option means:
| Name | Type | Default | Description | | Name | Type | Default | Description |
| -------------------- | :-------: | :----------: | --------------------------------------------------------------- | | -------------------- | :-------: | :----------: | --------------------------------------------------------------- |
| `updateInterval` | `int` | **required** | Update intervall in seconds. | | `CONF_updateInterval` | `int` | **required** | Update intervall in seconds. |
| `babelLocale` | `string` | **required** | Select your country from this [list](https://www.ibm.com/docs/en/radfws/9.7?topic=overview-locales-code-pages-supported). "Locale name" is the column you need! | | `CONF_babelLocale` | `string` | **required** | Select your country from this [list](https://www.ibm.com/docs/en/radfws/9.7?topic=overview-locales-code-pages-supported). "Locale name" is the column you need! |
| `mqtt` | `json` | **required** | Broker = Mqtt Broker IP / Username and Passwort are optional! | | `CONF_mqtt` | `json` | **required** | Broker = Mqtt Broker IP / Username and Passwort are optional! |
| `volvoData` | `json` | **required** | Username and password are REQUIRED. Car vin can be a single vin or a list of multiple vins like `["vin1", "vin2"]`. If no vin is provided, <b>ALL</b> of your vehicles will be used. Vccapi key is REQUIRED. Get your Vccapi key from [here](https://developer.volvocars.com/account/). | | `CONF_volvoData` | `json` | **required** | Username and password are REQUIRED. Car vin can be a single vin or a list of multiple vins like `["vin1", "vin2"]`. If no vin is provided, <b>ALL</b> of your vehicles will be used. Vccapi key is REQUIRED. Get your Vccapi key from [here](https://developer.volvocars.com/account/). |
| `CONF_debug` | `string` | | Debug option (true/false) - optional! |
| `TZ` | `string` | | Container timezone eg "Europe/Berlin" | | `TZ` | `string` | | Container timezone eg "Europe/Berlin" |
| `debug` | `string` | | Debug option (True/False) - optional! |
If you like my work: If you like my work:
+2 -2
View File
@@ -1,4 +1,4 @@
VERSION = "v1.0.9" VERSION = "v1.0.11"
OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2" OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v1/vehicles" VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v1/vehicles"
@@ -12,7 +12,7 @@ CAR_UNLOCK_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles/{0}/co
RECHARGE_STATUS_URL = "https://api.volvocars.com/energy/v1/vehicles/{0}/recharge-status" RECHARGE_STATUS_URL = "https://api.volvocars.com/energy/v1/vehicles/{0}/recharge-status"
charging_system_states = {"CHARGING_SYSTEM_CHARGING": "Charging", "CHARGING_SYSTEM_IDLE": "Idle", charging_system_states = {"CHARGING_SYSTEM_CHARGING": "Charging", "CHARGING_SYSTEM_IDLE": "Idle",
"CHARGING_SYSTEM_FAULT": "Fault", "CHARGING_SYSTEM_UNSPECIFIED": "UNSPECIFIED"} "CHARGING_SYSTEM_FAULT": "Fault", "CHARGING_SYSTEM_UNSPECIFIED": "Unspecified"}
supported_sensors = [ supported_sensors = [
{"name": "Battery Charge Level", "id": "battery_charge_level", "unit": "%", "icon": "car-battery", "url": RECHARGE_STATUS_URL}, {"name": "Battery Charge Level", "id": "battery_charge_level", "unit": "%", "icon": "car-battery", "url": RECHARGE_STATUS_URL},
+5 -5
View File
@@ -12,7 +12,7 @@ from const import VEHICLE_DETAILS_URL, CLIMATE_START_URL, CLIMATE_STOP_URL, CAR_
mqtt_client: mqtt.Client mqtt_client: mqtt.Client
subscribed_topics = [] subscribed_topics = []
assumed_climate_state = "OFF" assumed_climate_state = {}
last_data_update = None last_data_update = None
@@ -49,14 +49,14 @@ def on_message(client, userdata, msg):
if payload == "ON": if payload == "ON":
api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_START_URL, "POST", vin)) api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_START_URL, "POST", vin))
api_thread.start() api_thread.start()
assumed_climate_state = "ON" assumed_climate_state[vin] = "ON"
# Starting timer to disable climate after 30 mins # Starting timer to disable climate after 30 mins
threading.Timer(30 * 60, volvo.disable_climate).start() threading.Timer(30 * 60, volvo.disable_climate, (vin, )).start()
update_car_data() update_car_data()
elif payload == "OFF": elif payload == "OFF":
api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_STOP_URL, "POST", vin)) api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_STOP_URL, "POST", vin))
api_thread.start() api_thread.start()
assumed_climate_state = "OFF" assumed_climate_state[vin] = "OFF"
update_car_data() update_car_data()
elif "lock_status" in msg.topic: elif "lock_status" in msg.topic:
if payload == "LOCK": if payload == "LOCK":
@@ -92,7 +92,7 @@ def update_car_data():
for switch in supported_switches: for switch in supported_switches:
if switch["id"] == "climate_status": if switch["id"] == "climate_status":
state = assumed_climate_state state = assumed_climate_state[vin]
else: else:
state = "OFF" state = "OFF"
+10 -3
View File
@@ -95,11 +95,18 @@ def get_vehicles():
if len(vins) == 0: if len(vins) == 0:
raise Exception("No vehicle found, exiting application!") raise Exception("No vehicle found, exiting application!")
else: else:
initialize_climate(vins)
print("Vin: " + str(vins) + " found!") print("Vin: " + str(vins) + " found!")
def disable_climate(): def initialize_climate(vins):
mqtt.assumed_climate_state = "OFF" for vin in vins:
mqtt.assumed_climate_state[vin] = "OFF"
def disable_climate(vin):
print("Turning climate off by timer!")
mqtt.assumed_climate_state[vin] = "OFF"
mqtt.update_car_data() mqtt.update_car_data()
@@ -167,7 +174,7 @@ def parse_api_data(url, data, sensor_id=None):
else: else:
return "" return ""
elif sensor_id == "charging_system_status": elif sensor_id == "charging_system_status":
if "charging_system_status" in data["data"]: if "chargingSystemStatus" in data["data"]:
return charging_system_states[data["data"]["chargingSystemStatus"]["value"]] return charging_system_states[data["data"]["chargingSystemStatus"]["value"]]
else: else:
return "" return ""