diff --git a/README.md b/README.md index 0c66d6742..b710ca2de 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Featured in [PV Magazine](https://www.pv-magazine.de/2022/01/14/mit-open-source- - **sunspec**-compatible inverter or home battery devices - **mbmd**-compatible devices, see [volkszaehler/mbmd](https://github.com/volkszaehler/mbmd#supported-devices) for a complete list - [vehicle](https://docs.evcc.io/en/docs/devices/vehicles) integrations (state of charge, remote charge, battery and preconditioning status): - - Aiways, Audi, BMW, Citroën, Dacia, DS, Fiat, Ford, Hyundai, Jeep, Kia, Mercedes-Benz, MG, Mini, Nissan, NIU, Opel, Peugeot, Polestar, Renault, Seat, Skoda, Smart, Subaru, Tesla, Toyota, Volkswagen, Volvo, Zero Motorcycles. [Read more.](https://docs.evcc.io/en/docs/devices/vehicles) + - Aiways, Audi, BMW, Citroën, Dacia, DS, Fiat, Ford, Genesis, Hyundai, Jeep, Kia, Mercedes-Benz, MG, Mini, Nissan, NIU, Opel, Peugeot, Polestar, Renault, Seat, Skoda, Smart, Subaru, Tesla, Toyota, Volkswagen, Volvo, Zero Motorcycles. [Read more.](https://docs.evcc.io/en/docs/devices/vehicles) - **services:** OVMS, Tronity, evNotify, ioBroker.bmw, mg2mqtt, mz2mqtt, TeslaLogger, TeslaMate, Tessi, volvo2mqtt - [plugins](https://docs.evcc.io/en/docs/devices/plugins) for integrating with any charger, smartswitch, heatpump, electric heater, meter, solar- / battery-inverter or vehicle: - Modbus, HTTP, MQTT, JavaScript, WebSocket, Go and shell scripts diff --git a/templates/definition/vehicle/genesis.yaml b/templates/definition/vehicle/genesis.yaml new file mode 100644 index 000000000..879dd75d3 --- /dev/null +++ b/templates/definition/vehicle/genesis.yaml @@ -0,0 +1,18 @@ +template: genesis +products: + - brand: Genesis + description: + generic: Bluelink +requirements: + description: + en: | + Instead of your account's password, the password field needs to be filled with a `refresh_token` ([instructions](https://github.com/evcc-io/evcc/wiki/Hyundai-Kia:-Refresh-Token)). + de: | + Anstelle des Passworts muss in das Passwort-Feld ein `refresh_token` eingetragen werden ([Anleitung](https://github.com/evcc-io/evcc/wiki/Hyundai-Kia:-Refresh-Token)). +params: + - preset: vehicle-base + - preset: vehicle-language +render: | + type: genesis + {{ include "vehicle-base" . }} + {{ include "vehicle-language" . }} diff --git a/vehicle/bluelink.go b/vehicle/bluelink.go index 22c55f05e..0548ace9c 100644 --- a/vehicle/bluelink.go +++ b/vehicle/bluelink.go @@ -20,6 +20,7 @@ type Bluelink struct { func init() { registry.Add("kia", NewKiaFromConfig) registry.Add("hyundai", NewHyundaiFromConfig) + registry.Add("genesis", NewGenesisFromConfig) } // NewHyundaiFromConfig creates a new vehicle @@ -56,6 +57,24 @@ func NewKiaFromConfig(other map[string]any) (api.Vehicle, error) { return newBluelinkFromConfig("kia", other, settings) } +// NewGenesisFromConfig creates a new vehicle +// Constants sourced from hyundai_kia_connect_api (KiaUvoApiEU.py, BRAND_GENESIS, Europe) +func NewGenesisFromConfig(other map[string]any) (api.Vehicle, error) { + settings := bluelink.Config{ + URI: "https://prd-eu-ccapi.genesis.com:443", + CCSPServiceID: "3020afa2-30ff-412a-aa51-d28fbe901e10", + CCSPServiceSecret: "FKDdlef2ffdleFEweELFKERiLER2FED21sDdwdgQz6hFESE3", + CCSPApplicationID: "f11f2b86-e0e7-4851-90df-5600b01d8b70", + Cfb: "RFtoRq/vDXJmRndoZaZQyYo3/qFLtVReW8P7utRPcc0ZxOzOELm9mexvviBk/qqIp4A=", + BasicToken: "MzAyMGFmYTItMzBmZi00MTJhLWFhNTEtZDI4ZmJlOTAxZTEwOkZLRGRsZWYyZmZkbGVGRXdlRUxGS0VSaUxFUjJGRUQyMXNEZHdkZ1F6NmhGRVNFMw==", + PushType: "GCM", + LoginFormHost: "https://idpconnect-eu.genesis.com", + Brand: "genesis", + } + + return newBluelinkFromConfig("genesis", other, settings) +} + // newBluelinkFromConfig creates a new Vehicle func newBluelinkFromConfig(brand string, other map[string]any, settings bluelink.Config) (api.Vehicle, error) { cc := struct { diff --git a/vehicle/bluelink/identity.go b/vehicle/bluelink/identity.go index 13f712872..d7021b3b1 100644 --- a/vehicle/bluelink/identity.go +++ b/vehicle/bluelink/identity.go @@ -140,6 +140,7 @@ func (v *Identity) Login(user, password, language, brand string) (err error) { switch brand { case "kia": case "hyundai": + case "genesis": default: return fmt.Errorf("unknown brand (%s)", brand) }