The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Tesla::Vehicle - Access information and command Tesla automobiles via the API

Coverage Status

SYNOPSIS

    use Tesla::Vehicle;

    my $car = Tesla::Vehicle->new;

    $car->wake if ! $car->online;

    if ($car->locked) {
        $car->doors_unlock;
        $car->climate_on;

        if ($car->temperature_outside < 0) { # Freezing!
            $car->climate_defrost_max;
        }
    }

    printf(
        "%s is at %d%% charge, is moving %d MPH and is using %.2f kWh per mile\n",
        $car->name,
        $car->battery_level,
        $car->speed,
        $car->power
    );

    my $physical_address_hashref = $car->address;

DESCRIPTION

This distribution provides methods for accessing and updating aspects of your Tesla vehicle. Not all attributes available through Tesla's API have methods listed here yet, but more will be added as time goes on.

To access attributes that we don't have methods for, see the "AGGREGATE DATA METHODS" section, pull that data, then extract out the info you want. If we don't have an aggregate data method for something you want yet, see Tesla::API to be able to get this yourself.

As always, requests for updates to my software is encouraged. Please just open an issue.

IMPORTANT

The parent module Tesla::API that we inherit the Tesla API access code from has a complex caching mechanism in place that you ought to know about. Please do read through the Tesla API Caching documentation.

OBJECT MANAGEMENT METHODS

new(%params)

Instantiates and returns a new Tesla::Vehicle object. We subclass Tesla::API so there are several things inherited.

Parameters:

All parameters are sent in as a hash. See the documentation for Tesla::API for further parameters that can be sent into this method.

    id

Optional, Integer: The ID of the vehicle you want to associate this object with. Most methods require this to be set. You can send it in after instantiation by using the id() method. If you don't know what the ID is, you can instantiate the object, and dump the returned hashref from a call to list().

As a last case resort, we will try to figure out the ID by ourselves. If we can't, and no ID has been set, methods that require an ID will croak().

    auto_wake

Optional, Bool: If set, we will automatically wake up your vehicle on calls that require the car to be in an online state to retrieve data (via a call to wake()). If not set and the car is asleep, we will print a warning and exit. You can set this after instantiation by a call to auto_wake().

Default: False.

    api_cache_time

Optional, Integer: The number of seconds to cache data returned from Tesla's API.

Default: 2

    warn

Enables or disables the warnings that we receive from Tesla if there's a failure to execute one of the "COMMAND METHODS".

If enabled, we print these warnings to STDOUT.

Optional, Bool: True (1) to enable, false (0) to disable the warnings.

Default: True

auto_wake($bool)

Informs this software if we should automatically wake a vehicle for calls that require it online, and the vehicle is currently offline.

Send in a true value to allow us to do this.

Default: False

warn($bool)

Enables or disables the warnings that we receive from Tesla if there's a failure to execute one of the "COMMAND METHODS".

If enabled, we print these warnings to STDOUT.

Parameters:

    $bool

Optional, Bool: True (1) to enable, false (0) to disable the warnings.

Default: True

VEHICLE IDENTIFICATION METHODS

id($id)

Sets/gets your primary vehicle ID. If set, we will use this in all API calls that require it.

Parameters:

    $id

Optional, Integer: The vehicle ID you want to use in all API calls that require one. This can be set as a parameter in new(). If you attempt an API call that requires and ID and one isn't set, we croak().

If you only have a single Tesla vehicle registered under your account, we will set id() to that ID when you instantiate the object.

You can also have this auto-populated in new() by sending it in with the id => $id parameter.

If you don't know the ID of the vehicle you want to use, make a call to list(), and it will return a hash reference where each key is a vehice ID, and the value is the name you've assigned your vehicle.

name

Returns the name you associated with your vehicle under your Tesla account.

NOTE:"id($id)" must have already been set, either through the id() method, or in new().

list

Returns a hash reference of your listed vehicles. The key is the vehicle ID, and the value is the name you've assigned to that vehicle.

Example:

    {
        1234567891011 => "Dream machine",
        1234567891012 => "Steve's Model S",
    }

VEHICLE SUMMARY METHODS

in_service

Returns a bool whether your vehicle is in service mode or not.

options

NOTE: The Tesla API, since 2019, has been returning wrong information about vehicle option codes, so do not trust them. For my Model X, I'm getting returned option codes for a Model 3. Several people I've spoken to about the issue see the same thing for their Model S.

Returns a hash reference of the options available on your vehicle. The key is the option code, and the value is the option description.

    {
        'APH3' => 'Autopilot 2.5 Hardware',
        'RENA' => 'Region: North America',
        'MR31' => 'Uplevel Mirrors',
        'GLFR' => 'Final Assembly Fremont',
    }

vehicle_id

Returns an integer of Tesla's representation of the vehicle identification of your vehicle. This is not the same as the ID you use to access the API.

vin

Returns an alpha-numeric string that contains the actual Vehicle Identification Number of your vehicle. This value is located on a stamped plate on the driver's side bottom on the outside of your windshield.

LOCATION METHODS

Alongside "latitude" and "longitude", we provide a convenience method to return human readable address location data for your vehicle.

address

Takes no parameters. If the "latitude" and "longitude" information for the vehicle is available, we will return a hash reference containing the street address information of the vehicle.

The return hash reference may have additional keys depending on the specific location.

Example return:

    {
        'state'             => 'British Columbia',
        'city'              => 'Kelowna',
        'road'              => 'Old Vernon Road',
        'postcode'          => 'V1X 7T8',
        'village'           => 'Ellison',
        'country'           => 'Canada',
        'ISO3166-2-lvl4'    => 'CA-BC',
        'leisure'           => 'Ellison Dog Park',
        'country_code'      => 'ca',
        'county'            => 'Regional District of Central Okanagan'
    }

COMMAND METHODS

All command methods return a true value (1)if the operation was successful, and a false value (0) if the command failed.

We will also print to STDOUT the reason for the failure if one occurred. This warning includes the message we received from Tesla.

You can disable these warnings from being displayed by sending in a false value to warn(), or instantiate the object with new(warn = 0)>.

Example warning:

    $vehicle->media_volume_up;

    # Output

    Couldn't turn volume up: 'user_not_present'

bioweapon_mode_toggle

Toggles the HVAC Bio Weapon mode on or off.

Returns true on success, false on failure.

climate_on

Turns the climate system on to whatever settings they last had.

Returns true on success.

Follow up with a call to is_climate_on() to verify.

climate_off

Turns the climate system off.

Returns true on success.

Follow up with a call to is_climate_on() to verify.

climate_defrost_max

Returns true if the call was successful, false otherwise.

doors_lock

Locks the car doors. Returns true on success.

Follow up with a call to locked() to verify.

doors_unlock

Unlocks the car doors. Returns true on success.

Follow up with a call to locked() to verify.

horn_honk

Honks the horn once. Returns true on success.

lights_flash

Flashes the exterior lights of the vehicle.

Returns true on success.

media_playback_toggle

Play/Pause the currently loaded audio in the vehicle.

Returns true on success, false on failure.

NOTE: Most often reason for fail is "User Not Present".

media_track_next

Skips to the next audio track.

Returns true on success, false on failure.

NOTE: Most often reason for fail is "User Not Present".

media_track_previous

Skips to the previous audio track.

Returns true on success, false on failure.

NOTE: Most often reason for fail is "User Not Present".

media_volume_down

Turns down the audio volume by one notch.

Returns true on success, false on failure.

NOTE: Most often reason for fail is "User Not Present".

media_volume_up

Turns up the audio volume by one notch.

Returns true on success, false on failure.

NOTE: Most often reason for fail is "User Not Present".

charge_limit_set($percent)

Sets the limit in percent the battery can be charged to.

Returns true if the operation was successful, and false if not.

Follow up with a call to battery_level().

trunk_rear_actuate

Opens or closes the rear trunk.

Returns true if the operation was successful, and false if not.

You must give time for the trunk to shut before checking its status with the trunk_rear() call.

trunk_front_actuate

Opens or closes the rear trunk.

Returns true if the operation was successful, and false if not.

You must give time for the trunk to shut before checking its status with the trunk_front() call.

wake

Attempt to wake the vehicle up from sleep mode. Most method calls against this object require the vehicle to be awake.

We don't return anything; the vehicle will be woken up, or it won't and your next method call will fail.

By default, this software does not wake up the car automatically, it just croaks if the car isn't awake and you attempt something it can't do while sleeping.

Set auto_wake => 1 in new() or auto_wake(1) to allow us to automatically wake the vehicle up.

AGGREGATE DATA METHODS

These methods aggregate all attributes of the vehicle that relate to a specific aspect of the vehicle. Methods that allow access to individual attributes of these larger aggregates are listed below. For example, charge_state() will return the battery_level attribute, but so will battery_level(). By using the aggregate method, you'll have to fish that attribute out yourself.

data

Returns a hash reference containing all available API data that Tesla provides for your vehicles.

croak()s if you haven't specified a vehicle ID through new() or id(), and we weren't able to figure one out automatically.

This data will be retained and re-used for a period of two (2) seconds to reduce API calls through the Tesla API. This timing can be overridden in the new() method by specifying the refresh => $seconds parameter, or by a call to the object's delay($seconds) method.

Return: Hash reference. Contains every attribute Tesla has available through their API for their vehicles.

The data accessor methods listed below use this data, simply selecting out individual parts of it.

summary

Returns an important list of information about your vehicle, and Tesla's API access.

The most important piece of information is the vehicle's state, which shows whether the car is online or not. Other information includes in_service, vin, the display_name etc.

Return: Hash reference.

state

Returns the vehicle_state section of Tesla's vehicle data. This includes things like whether the car is locked, whether there is media playing, the odometer reading, whether sentry mode is enabled or not etc.

Return: Hash reference.

charge_state

Returns information regarding battery and charging information of your vehicle.

Return: Hash reference.

climate_state

Returns information regarding the climate state of the vehicle.

Return: Hash reference.

drive_state

Returns the information about the operation of the vehicle.

Return: Hash reference.

vehicle_config

Returns attributes related to the actual configuration of your vehicle.

Return: Hash reference.

VEHICLE STATE ATTRIBUTE METHODS

dashcam

Returns a string of the state of the dashcam (eg. "Recording").

locked

Returns true if the doors are locked, false if not.

online

Returns true if the vehicle is online and ready to communicate, and false if

odometer

Returns the number of miles the vehicle is traveled since new, as a floating point number.

sentry_mode

Returns a bool indicating whether the vehicle is in sentry mode or not.

santa_mode

Returns a bool whether the vehicle is in "Santa" mode or not.

trunk_front

Returns true if the front trunk (ie. Frunk) is open, and false if it's closed.

trunk_rear

Returns true if the rear trunk is open, and false if it's closed.

user_present

Returns a bool indicating whether someone with a valid FOB key is in proximity of the vehicle.

DRIVE STATE ATTRIBUTE METHODS

Retrieves information regarding the actual operation and location of the vehicle.

gear

Returns a single alpha character representing the gear the vehicle is in.

One of P for parked, N for Neutral, D for Drive and R for reverse.

This value is very often retured as undefined by Tesla, so a custom value of U is returned if the Tesla API doesn't return a valid value after API_RETRIES attempts to get one.

gps_as_of

Returns an integer that is the timestamp that the GPS data was last refreshed from the vehicle.

heading

Returns an integer between 0 and 360 which is the current compass heading of the vehicle.

latitude

Returns a signed float of the current Latitude of the vehicle.

longitude

Returns a signed float of the current Longitude of the vehicle.

power

Returns a signed float that contains the current kWh (Kilowatt-hours) per mile the car is currently consuming in its operation.

A negative value indicates that either the car is plugged in and charging, or that the regenerative brakes are engaged and are replenishing the battery (eg. the car is going downhill and the car is decelerating).

speed

Returns a float of the vehicle's speed in MPH.

CHARGE STATE ATTRIBUTE METHODS

battery_level

Returns an integer of the percent that the battery is charged to.

charge_amps

Returns a float indicating how many Amps the vehicle is set to draw through the current charger connection.

charge_actual_current

Returns a float indicating how many Amps are actually being drawn through the charger.

charge_limit_soc

Returns an integer stating what percentage of battery level you've indicated the charging will be cut off at.

"soc" stands for "State of Charge"

charge_limit_soc_std

Returns an integer stating Tesla's default charge_limit_soc is set to.

charge_limit_soc_min

Returns an integer stating what the minimum number you can set as the Charge Limit SOC (charge_limit_soc).

charge_limit_soc_max

Returns an integer stating what the maximum number you can set as the Charge Limit SOC (charge_limit_soc).

charge_port_color

Returns a string containing the color of the vehicle's charge port (eg. "Green Flashing" etc).

charger_voltage

Returns a float containing the actual Voltage level that the charger is connected through.

charging_sites_nearby

Returns a hash reference of arrays. The keys are super_chargers and destination_chargers. Under each key is an array of charging station details, each in a hash reference. The hash references are sorted in the array as closest first, farthest last. All stations with no available stalls have been removed. Each station has the following properties:

    {
        total_stalls     => 8,
        site_closed      => $VAR1->{'super_chargers'}[0]{'site_closed'},
        location => {
            long => '-119.429277',
            lat  => '49.885799'
        },
        name             => 'Kelowna, BC',
        type             => 'supercharger',
        distance_miles   => '26.259798',
        available_stalls => 4
    }

charging_state

Returns a string that identifies the state of the vehicle's charger. Eg. "Disconnected", "Connected" etc.

minutes_to_full_charge

Returns an integer containing the estimated number of minutes to fully charge the batteries, taking into consideration voltage level, Amps requested and drawn etc.

CLIMATE STATE ATTRIBUTE METHODS

bioweapon_mode

Yes, this is truly a thing. At least my Tesla vehicle has a mode that seals the vehicle from all outside air, and puts positive pressure inside the cabin to ensure that no contaminents can enter the vehicle.

This method returns a bool to indicate whether this mode is enabled or not.

defroster_front

Is the front windshield defroster on or not

defroster_rear

Is the rear window defroster on or not.

fan_status

Returns an integer that represents the climate fan speed.

heater_battery

Is the battery warmer on or not.

heater_seat_driver

Is the driver's seat warmer on.

heater_seat_passenger

Is the passenger's seat warmer on.

heater_side_mirrors

Is the wing mirror heater on.

heater_steering_wheel

Is the steering wheel warmer on or not

heater_wipers

Is the windshield wiper warmer on.

is_climate_on

Is the climate system currently active.

is_air_conditioning_on

Is the air conditioning unit active.

temperature_inside

The current temperature inside of the vehicle cabin.

temperature_outside

The temperature outside of the vehicle.

temperature_setting_driver

What the driver's side temperature setting is set to.

temperature_setting_passenger

What the passenger's side temperature setting is set to.

AUTHOR

Steve Bertrand, <steveb at cpan.org>

LICENSE AND COPYRIGHT

Copyright 2022 Steve Bertrand.

This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at:

http://www.perlfoundation.org/artistic_license_2_0