Skip to content

Commit

Permalink
Merge pull request #640 from alandtse/dev
Browse files Browse the repository at this point in the history
chore: release 2023-06-16
  • Loading branch information
alandtse authored Jun 17, 2023
2 parents aad667a + ff960f0 commit 708a7e6
Show file tree
Hide file tree
Showing 13 changed files with 884 additions and 695 deletions.
78 changes: 28 additions & 50 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -1,67 +1,45 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
name: "CodeQL"
name: "Code Scanning - Action"

on:
push:
branches: [dev, main]
branches: [main]
pull_request:
# The branches below must be a subset of the branches above
branches: [dev]
branches: [main]
schedule:
- cron: "0 19 * * 6"
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
- cron: "30 1 * * 0"

jobs:
analyze:
name: Analyze
CodeQL-Build:
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
# Override automatic language detection by changing the below list
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
language: ["python"]
# Learn more...
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
permissions:
# required for all workflows
security-events: write

# only required for workflows in private repositories
actions: read
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2

# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
uses: actions/checkout@v3

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main

# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1

# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl

# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
uses: github/codeql-action/init@v2
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java, ruby

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ repos:
- hooks:
- id: black
repo: https://github.com/psf/black
rev: 23.1.0
rev: 23.3.0
- repo: https://github.com/pre-commit/mirrors-prettier
hooks:
- id: prettier
Expand Down
43 changes: 43 additions & 0 deletions custom_components/tesla_custom/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ async def async_setup_entry(hass: HomeAssistant, config_entry, async_add_entitie
entities.append(TeslaCarChargerConnection(hass, car, coordinator))
entities.append(TeslaCarCharging(hass, car, coordinator))
entities.append(TeslaCarDoors(hass, car, coordinator))
entities.append(TeslaCarWindows(hass, car, coordinator))
entities.append(TeslaCarScheduledCharging(hass, car, coordinator))
entities.append(TeslaCarScheduledDeparture(hass, car, coordinator))
entities.append(TeslaCarUserPresent(hass, car, coordinator))
Expand Down Expand Up @@ -255,6 +256,48 @@ def _open_or_closed(self, door):
return "Closed"


class TeslaCarWindows(TeslaCarEntity, BinarySensorEntity):
"""Representation of a Tesla window door sensor."""

def __init__(
self,
hass: HomeAssistant,
car: TeslaCar,
coordinator: TeslaDataUpdateCoordinator,
) -> None:
"""Initialize car windows entity."""
super().__init__(hass, car, coordinator)
self.type = "windows"
self._attr_device_class = BinarySensorDeviceClass.WINDOW
self._attr_icon = "mdi:car-door"

@property
def is_on(self):
"""Return True if a car window is open."""
return (
self._car.window_fd
or self._car.window_fp
or self._car.window_rd
or self._car.window_rp
)

@property
def extra_state_attributes(self):
"""Return device state attributes."""
return {
"Driver Front": self._open_or_closed(self._car.window_fd),
"Driver Rear": self._open_or_closed(self._car.window_rd),
"Passenger Front": self._open_or_closed(self._car.window_fp),
"Passenger Rear": self._open_or_closed(self._car.window_rp),
}

def _open_or_closed(self, window):
"""Return string of 'Open' or 'Closed' when passed a window integer state."""
if window:
return "Open"
return "Closed"


class TeslaCarScheduledCharging(TeslaCarEntity, BinarySensorEntity):
"""Representation of a Tesla car scheduled charging binary sensor."""

Expand Down
4 changes: 3 additions & 1 deletion custom_components/tesla_custom/select.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ async def async_setup_entry(hass: HomeAssistant, config_entry, async_add_entitie
for vin, car in cars.items():
coordinator = coordinators[vin]
entities.append(TeslaCarCabinOverheatProtection(hass, car, coordinator))
entities.append(TeslaCarHeatedSteeringWheel(hass, car, coordinator))
if car.get_heated_steering_wheel_level() is not None:
# Only add steering wheel select if we have a variable heated steering wheel
entities.append(TeslaCarHeatedSteeringWheel(hass, car, coordinator))
for seat_name in SEAT_ID_MAP:
if "rear" in seat_name and not car.rear_seat_heaters:
continue
Expand Down
9 changes: 6 additions & 3 deletions custom_components/tesla_custom/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,7 @@ def __init__(
"""Initialize battery remaining entity."""
super().__init__(hass, energysite, coordinator)
self.type = "battery remaining"
self._attr_device_class = SensorDeviceClass.BATTERY
self._attr_device_class = SensorDeviceClass.ENERGY_STORAGE
self._attr_state_class = SensorStateClass.MEASUREMENT
self._attr_native_unit_of_measurement = ENERGY_WATT_HOUR

Expand Down Expand Up @@ -751,10 +751,13 @@ def __init__(
self._attr_icon = "mdi:timer"

@property
def native_value(self) -> float:
def native_value(self) -> datetime:
"""Return the last data update time."""
last_time = self._coordinator.controller.get_last_update_time(vin=self._car.vin)

utc_tz = dt.get_time_zone("UTC")
date_obj = datetime.fromtimestamp(last_time, utc_tz)
if not isinstance(last_time, datetime):
date_obj = datetime.fromtimestamp(last_time, utc_tz)
else:
date_obj = last_time.replace(tzinfo=utc_tz)
return date_obj
4 changes: 2 additions & 2 deletions custom_components/tesla_custom/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ def __init__(
super().__init__(hass, car, coordinator)
self.type = "heated steering"
self._attr_icon = "mdi:steering"
# Entity is disabled for new installs, as Select has been created.
self._enabled_by_default = False
# Entity is disabled for cars with variable heated steering wheel.
self._enabled_by_default = car.get_heated_steering_wheel_level() is not None

@property
def available(self) -> bool:
Expand Down
2 changes: 1 addition & 1 deletion hacs.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "Tesla",
"hacs": "1.6.0",
"homeassistant": "2023.1.0",
"homeassistant": "2023.4.0",
"zip_release": true,
"filename": "tesla_custom.zip"
}
Loading

0 comments on commit 708a7e6

Please sign in to comment.