Skip to content

Commit

Permalink
Aiways SoC module
Browse files Browse the repository at this point in the history
  • Loading branch information
Friedrich Fell committed Dec 15, 2024
1 parent 68533a7 commit 2623000
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
Empty file.
28 changes: 28 additions & 0 deletions packages/modules/vehicles/aiways/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from typing import Optional

"""
The attributes for configuration can be retrieved with this guide:
https://community.home-assistant.io/t/read-aiways-u5-state-of-charge/466441/5
"""


class AiwaysVehicleSocConfiguration:
def __init__(self, user_id: Optional[str] = None, vin: Optional[str] = None, device_id: Optional[str] = None,
register_id: Optional[str] = None, token: Optional[str] = None,
condition_url: Optional[str] = "https://coiapp-api-eu.ai-ways.com:10443/app/vc/getCondition") -> None:
self.user_id = user_id
self.vin = vin
self.device_id = device_id
self.register_id = register_id
self.token = token
self.condition_url = condition_url


class AiwaysVehicleSoc:
def __init__(self,
name: str = "Aiways SoC module",
type: str = "aiways",
configuration: AiwaysVehicleSocConfiguration = None) -> None:
self.name = name
self.type = type
self.configuration = configuration or AiwaysVehicleSocConfiguration()
56 changes: 56 additions & 0 deletions packages/modules/vehicles/aiways/soc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env python3
import logging

from modules.common import req
from modules.common.abstract_device import DeviceDescriptor
from modules.common.abstract_vehicle import VehicleUpdateData
from modules.common.component_state import CarState
from modules.common.configurable_vehicle import ConfigurableVehicle
from modules.vehicles.aiways.config import AiwaysVehicleSoc

log = logging.getLogger(__name__)

language = "de"
version = "1.3.0"
platform = "iOS"
apptimezone = "MEZ"
apptimezoneid = "Europe/Berlin"
content_type = "application/json; charset=utf-8"
accept_encoding = "gzip"
user_agent = "okhttp/4.3.1"


def fetch(vehicle_config: AiwaysVehicleSoc, vehicle_update_data: VehicleUpdateData) -> CarState:
response = req.get_http_session().post(vehicle_config.configuration.condition_url, timeout=10,
headers={"language": language,
"registerid": vehicle_config.configuration.register_id,
"deviceid": vehicle_config.configuration.device_id,
"version": version,
"platform": platform,
"token": vehicle_config.configuration.token,
"apptimezone": apptimezone,
"apptimezoneid": apptimezoneid,
"content-type": content_type,
"accept-encoding": accept_encoding,
"user-agent": user_agent},
json={"userId": vehicle_config.configuration.user_id,
"vin": vehicle_config.configuration.vin}, verify=False)
response.raise_for_status()
json = response.json()
soc = float(json['data']['vc']['soc'])
range = float(json['data']['vc']['drivingRange'])
soc_timestamp = float(json['data']['vc']['dataTimeTS'])
return CarState(soc, range, soc_timestamp)


def create_vehicle(vehicle_config: AiwaysVehicleSoc, vehicle: int):
def updater(vehicle_update_data: VehicleUpdateData) -> CarState:
return fetch(vehicle_config, vehicle_update_data)

return ConfigurableVehicle(vehicle_config=vehicle_config,
component_updater=updater,
vehicle=vehicle,
calc_while_charging=False)


device_descriptor = DeviceDescriptor(configuration_factory=AiwaysVehicleSoc)

0 comments on commit 2623000

Please sign in to comment.