Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
zabuldon committed Aug 29, 2017
0 parents commit 4fe78e9
Show file tree
Hide file tree
Showing 15 changed files with 571 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.py python
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
*.pyc
*.pyo
app.db
search.db
flask
/.idea/
/tmp/
SeedUpload.db
/db_repository/
*log
/storage/
env/
env
build/
dist/
*.egg-info/
14 changes: 14 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004

Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. You just DO WHAT THE FUCK YOU WANT TO.

2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include LICENSE
recursive-include teslajsonpy *
6 changes: 6 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
teslajsonpy
===============

Python module for Tesla API

This is a work in progress.
21 changes: 21 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from setuptools import setup
setup(
name='teslajsonpy',
version='0.0.5',
packages=['teslajsonpy'],
include_package_data=True,
license='WTFPL',
description='A library to work with Tesla API.',
long_description='A library to work with Tesla car API.',
url='https://github.com/zabuldon/teslajsonpy',
author='Sergey Isachenko',
author_email='sergey.isachenkol@bool.by',
classifiers=[
'Intended Audience :: Developers',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Topic :: Internet',
],
)
31 changes: 31 additions & 0 deletions teslajsonpy/BatterySensor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from teslajsonpy.vehicle import Vehicle


class Battery(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__controller = controller
self.__battery_level = 0
self.__charging_state = None
self.__charge_port_door_open = None

self.type = 'battery sensor'
self.measurement = '%'
self.hass_type = 'sensor'
self.na
self.update()

def update(self):
self.__controller.update(self.__id)
data = self.__controller.get_charging_params(self.__id)
self.__battery_level = data['battery_level']
self.__charging_state = data['charging_state']

@staticmethod
def has_battery():
return False

def battery_level(self):
return self.__battery_level
57 changes: 57 additions & 0 deletions teslajsonpy/BinarySensor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from teslajsonpy.vehicle import Vehicle


class ParkingSensor(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__vin = data['vin']
self.controller = controller
self.__logger = self.controller.get_logger()
self.__state = False
self.type = 'parking sensor'
self.update()

def update(self):
self.controller.update(self.__id)
data = self.controller.get_drive_params(self.__id)
if not data['shift_state'] or data['shift_state'] == 'P':
self.__state = True
else:
self.__state = False

def get_value(self):
return self.__state

@staticmethod
def has_battery():
return False


class ChargerConnectionSensor(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__vin = data['vin']
self.controller = controller
self.__logger = self.controller.get_logger()
self.__state = False
self.type = 'charger sensor'
self.update()

def update(self):
self.controller.update(self.__id)
data = self.controller.get_charging_params(self.__id)
if data['charging_state'] in ["Disconnected", "Stopped", "NoPower"]:
self.__state = False
else:
self.__state = True

def get_value(self):
return self.__state

@staticmethod
def has_battery():
return False
123 changes: 123 additions & 0 deletions teslajsonpy/Climate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
from teslajsonpy.vehicle import Vehicle
import time


class Climate(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__vin = data['vin']
self.__state = data['state']
self.__remote_start_enabled = data['remote_start_enabled']
self.__in_service = data['in_service']
self.controller = controller
self.__logger = self.controller.get_logger()

self.__is_auto_conditioning_on = False
self.__inside_temp = 0
self.__outside_temp = 0
self.__driver_temp_setting = 0
self.__passenger_temp_setting = 0
self.__is_climate_on = False
self.__fan_status = 0
self.__manual_update_time = 0
self.type = 'climate'
self.update()

def is_hvac_enabled(self):
return self.__is_climate_on

def get_current_temp(self):
return self.__inside_temp

def get_goal_temp(self):
return self.__driver_temp_setting

def get_fan_status(self):
return self.__fan_status

def update(self):
self.__logger.debug("Updating climate params started. Vehicle ID: %s Sensor type is: %s"
% (self.__id, self.type))
self.controller.update(self.__id)

data = self.controller.get_climate_params(self.__id)
self.__logger.debug(data)
if time.time() - self.__manual_update_time > 60:
self.__is_auto_conditioning_on = data['is_auto_conditioning_on']
self.__is_climate_on = data['is_climate_on']
self.__driver_temp_setting = data['driver_temp_setting'] \
if data['driver_temp_setting'] else self.__driver_temp_setting
self.__passenger_temp_setting = data['passenger_temp_setting'] \
if data['passenger_temp_setting'] else self.__passenger_temp_setting
self.__inside_temp = data['inside_temp'] if data['inside_temp'] else self.__inside_temp
self.__outside_temp = data['outside_temp'] if data['outside_temp'] else self.__outside_temp
self.__fan_status = data['fan_status']
self.__logger.debug("Updating climate params finished. Vehicle ID: %s Sensor type is: %s"
% (self.__id, self.type))

def set_temperature(self, temp):
temp = round(temp, 1)
self.__manual_update_time = time.time()
self.__logger.debug("Updating goal temperature. Temperature is %s" % temp)
data = self.controller.command(self.__id, 'set_temps', {"driver_temp": temp, "passenger_temp": temp})
if data['response']['result']:
self.__driver_temp_setting = temp
self.__passenger_temp_setting = temp

def set_status(self, enabled):
self.__manual_update_time = time.time()
if enabled:
data = self.controller.command(self.__id, 'auto_conditioning_start')
if data['response']['result']:
self.__is_auto_conditioning_on = True
self.__is_climate_on = True
else:
data = self.controller.command(self.__id, 'auto_conditioning_stop')
if data['response']['result']:
self.__is_auto_conditioning_on = False
self.__is_climate_on = False
self.update()

def set_fan_status(self, status):
return self

@staticmethod
def has_battery():
return False


class TempSensor(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__vin = data['vin']
self.controller = controller
self.__inside_temp = 0
self.__outside_temp = 0
self.type = 'temp sensor'
self.__logger = self.controller.get_logger()
self.update()

def get_inside_temp(self):
return self.__inside_temp

def get_outside_temp(self):
return self.__outside_temp

def update(self):
self.__logger.debug("Updating climate params started. Vehicle ID: %s Sensor type is: %s"
% (self.__id, self.type))
self.controller.update(self.__id)
data = self.controller.get_climate_params(self.__id)
self.__logger.debug(data)
self.__inside_temp = data['inside_temp'] if data['inside_temp'] else self.__inside_temp
self.__outside_temp = data['outside_temp'] if data['outside_temp'] else self.__outside_temp
self.__logger.debug("Updating climate params finished. Vehicle ID: %s Sensor type is: %s"
% (self.__id, self.type))

@staticmethod
def has_battery():
return False
43 changes: 43 additions & 0 deletions teslajsonpy/GPS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from teslajsonpy.vehicle import Vehicle


class GPS(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__vin = data['vin']
self.controller = controller
self.type = 'device tracker'
self.__logger = self.controller.get_logger()
self.__longitude = 0
self.__latitude = 0
self.__heading = 0
self.__location = {}
self.last_seen = 0
self.last_updated = 0
self.update()

def get_location(self):
return self.__location

def update(self):
self.__logger.debug("Updating positioning params started. Vehicle ID: %s Sensor type is: %s"
% (self.__id, self.type))
self.controller.update(self.__id)
data = self.controller.get_drive_params(self.__id)
self.__logger.debug(data)
self.__longitude = data['longitude']
self.__latitude = data['latitude']
self.__heading = data['heading']
if data['latitude'] and data['longitude'] and data['heading']:
self.__location = {'longitude': self.__longitude,
'latitude': self.__latitude,
'heading': self.__heading}
self.last_updated
self.__logger.debug("Updating positioning params finished. Vehicle ID: %s Sensor type is: %s"
% (self.__id, self.type))

@staticmethod
def has_battery():
return False
51 changes: 51 additions & 0 deletions teslajsonpy/Lock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
from teslajsonpy.vehicle import Vehicle
import time


class Lock(Vehicle):
def __init__(self, data, controller):
Vehicle.__init__(self, data, controller)
self.__id = data['id']
self.__vehicle_id = data['vehicle_id']
self.__vin = data['vin']
self.__state = data['state']
self.controller = controller
self.__logger = self.controller.get_logger()

self.__manual_update_time = 0
self.__lock_state = False
self.type = 'lock'
self.update()

def update(self):
self.__logger.debug('Updating lock state started. Vehicle ID: %s' % self.__id)
self.controller.update(self.__id)
data = self.controller.get_state_params(self.__id)
if time.time() - self.__manual_update_time > 60:
self.__lock_state = data['locked']
self.__logger.debug(data)
self.__logger.debug('Updating lock state finished. Vehicle ID: %s' % self.__id)

def lock(self):
if not self.__lock_state:
data = self.controller.command(self.__id, 'door_lock')
print(data)

if data['response']['result']:
self.__lock_state = True
self.__manual_update_time = time.time()

def unlock(self):
if self.__lock_state:
data = self.controller.command(self.__id, 'door_unlock')
print(data)
if data['response']['result']:
self.__lock_state = False
self.__manual_update_time = time.time()

def is_locked(self):
return self.__lock_state

@staticmethod
def has_battery():
return False
Empty file added teslajsonpy/__init__.py
Empty file.
Loading

0 comments on commit 4fe78e9

Please sign in to comment.