Bluelink
๐ Control your Hyundai car via Python.
Install / Use
/learn @synchronizing/BluelinkREADME
๐ BlueLink
Unofficial Python API wrapper for Hyundai's Bluelinkยฎ. Allows you to remotely control your Hyundai car via Python.
Installing
pip install bluelink
Documentation
Documentation can be found below. See code for more details.
Using
You can use this module either through the built-in CLI, or directly through Python. lock, unlock, start, stop, find, and odometer are supported.
CLI
Note that every individual command will sign-in in to BlueLink. If you plan on chaining commands, you should use the Python API.
$ export BLUELINK_EMAIL=<email>
$ export BLUELINK_PASSWORD=<password>
$ export BLUELINK_PIN=<pin>
$ bluelink cars
Elantra - <vin>
Santa Fe - <vin>
$ bluelink <vin> lock
Locking...
$ bluelink <vin> unlock
Unlocking...
# 'dsh' stands for 'driver seat heat'
# 'psh' stands for 'passenger seat heat'
$ bluelink <vin> start --duration=10 --temp="LO" --defrost --dsh=4 --psh=4
Starting...
$ bluelink <vin> stop
Stopping...
$ bluelink <vin> find
Latitude: <latitude>
Longitude: <longitude>
$ bluelink <vin> odometer
7,643
Python
The Python wrapper comes with two classes: BlueLink and Car. The former is the main class that allows logging into the service, and the latter is a wrapper for specific cars linked to the account.
from bluelink import BlueLink
# Logins to BlueLink. You may also choose to set the username, password,
# and pin via environment variables (same convention as the CLI) and
# leave the arguments blank.
bl = BlueLink(email='<email>', password='<password>', pin='<pin>')
bl.login()
# Prints the BlueLink object.
print(bl) # BlueLink(email=<email>, is_logged=True)
# Print all of the cars in the account. 'cars' is a standard dictionary.
for vin, car in bl.cars.items():
print(vin, car) # <vin> Car(nickname=<nickname>, bluelink=<has_bluelink>)
# Gets the first car.
elantra = bl.cars['<vin>']
elantra.lock() # Returns True if successful.
elantra.unlock() # Returns True if successful.
elantra.start(
duration=10,
temp="LO",
defrost=True,
driver_seat_heat=4,
passenger_seat_heat=4,
) # Returns True if successful.
elantra.stop() # Returns True if successful.
elantra.find() # Returns a tuple of (latitude, longitude).
elantra.odometer # Returns an integer. Note this is a property, and not a method.
Related Skills
node-connect
349.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
109.8kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
109.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
349.9kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
