Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e9b4b8e
Modbus Fix message_wait_milliseconds is no longer applied (#153709)
peetersch Oct 7, 2025
33c6775
Update nhc to 0.6.1 (#153962)
VandeurenGlenn Oct 7, 2025
de6c61a
Bump psutil 7.1.0 (#153954)
gjohansson-ST Oct 7, 2025
1a0abe2
Remove deprecated conductivity constants (#153942)
davet2001 Oct 7, 2025
6dd26ba
Bump aioesphomeapi to 41.13.0 (#153974)
jesserockz Oct 8, 2025
3701d88
Bump env-canada to 0.11.3 (#153967)
michaeldavie Oct 8, 2025
80fd07c
Add GPT-5 Pro and GPT-5 Codex support (#153936)
Shulyaka Oct 8, 2025
c0ac329
FIx brightness always 100% when toggling the light (#153765)
VandeurenGlenn Oct 8, 2025
ac676e1
Remove has_mean from suez_water external statistics (#153986)
emontnemery Oct 8, 2025
8bd0ff7
Replace has_mean with mean_type in mill external statistics (#153985)
emontnemery Oct 8, 2025
142daf5
Call async_track_template_result with template without hass now fails…
gjohansson-ST Oct 8, 2025
cbf1b39
Portainer add sensor platform (#153059)
erwindouna Oct 8, 2025
65540a3
Update mypy dev to 1.19.0a4 (#153995)
cdce8p Oct 8, 2025
b5f163c
Update Tuya fixture for product ID IAYz2WK1th0cMLmL (#154000)
epenet Oct 8, 2025
2ba5728
Enable Shelly binary input sensors by default (#154001)
thecode Oct 8, 2025
7b6ccb0
Bump github/codeql-action from 3.30.6 to 4.30.7 (#153979)
dependabot[bot] Oct 8, 2025
2d9f14c
Add 3rd maintainer to `sharkiq` (#153961)
funkybunch Oct 8, 2025
fe4eb87
Don't mark ZHA coordinator as via_device with itself (#154004)
joostlek Oct 8, 2025
56d953a
Use contants in climate set_temperature (#154008)
epenet Oct 8, 2025
26437bb
Adds ConfigFlow for London Underground (#152050)
HarvsG Oct 8, 2025
abc3604
Add diagnostics to Volvo integration (#153997)
thomasddn Oct 8, 2025
438c4c7
Limit SimpliSafe websocket connection attempts during startup (#153853)
bachya Oct 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,7 @@ jobs:
- name: Generate partial mypy restore key
id: generate-mypy-key
run: |
mypy_version=$(cat requirements_test.txt | grep mypy | cut -d '=' -f 3)
mypy_version=$(cat requirements_test.txt | grep 'mypy.*=' | cut -d '=' -f 3)
echo "version=$mypy_version" >> $GITHUB_OUTPUT
echo "key=mypy-${{ env.MYPY_CACHE_VERSION }}-$mypy_version-${{
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ jobs:
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

- name: Initialize CodeQL
uses: github/codeql-action/init@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
uses: github/codeql-action/init@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
with:
languages: python

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
uses: github/codeql-action/analyze@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
with:
category: "/language:python"
4 changes: 2 additions & 2 deletions CODEOWNERS

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 11 additions & 4 deletions homeassistant/components/aprilaire/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from pyaprilaire.const import Attribute

from homeassistant.components.climate import (
ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW,
FAN_AUTO,
FAN_ON,
PRESET_AWAY,
Expand All @@ -16,7 +18,12 @@
HVACAction,
HVACMode,
)
from homeassistant.const import PRECISION_HALVES, PRECISION_WHOLE, UnitOfTemperature
from homeassistant.const import (
ATTR_TEMPERATURE,
PRECISION_HALVES,
PRECISION_WHOLE,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback

Expand Down Expand Up @@ -232,15 +239,15 @@ async def async_set_temperature(self, **kwargs: Any) -> None:
cool_setpoint = 0
heat_setpoint = 0

if temperature := kwargs.get("temperature"):
if temperature := kwargs.get(ATTR_TEMPERATURE):
if self.coordinator.data.get(Attribute.MODE) == 3:
cool_setpoint = temperature
else:
heat_setpoint = temperature
else:
if target_temp_low := kwargs.get("target_temp_low"):
if target_temp_low := kwargs.get(ATTR_TARGET_TEMP_LOW):
heat_setpoint = target_temp_low
if target_temp_high := kwargs.get("target_temp_high"):
if target_temp_high := kwargs.get(ATTR_TARGET_TEMP_HIGH):
cool_setpoint = target_temp_high

if cool_setpoint == 0 and heat_setpoint == 0:
Expand Down
16 changes: 9 additions & 7 deletions homeassistant/components/bryant_evolution/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
from evolutionhttp import BryantEvolutionLocalClient

from homeassistant.components.climate import (
ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW,
ClimateEntity,
ClimateEntityFeature,
HVACAction,
HVACMode,
)
from homeassistant.const import UnitOfTemperature
from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.device_registry import DeviceInfo
Expand Down Expand Up @@ -208,24 +210,24 @@ async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:

async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
if kwargs.get("target_temp_high"):
temp = int(kwargs["target_temp_high"])
if value := kwargs.get(ATTR_TARGET_TEMP_HIGH):
temp = int(value)
if not await self._client.set_cooling_setpoint(temp):
raise HomeAssistantError(
translation_domain=DOMAIN, translation_key="failed_to_set_clsp"
)
self._attr_target_temperature_high = temp

if kwargs.get("target_temp_low"):
temp = int(kwargs["target_temp_low"])
if value := kwargs.get(ATTR_TARGET_TEMP_LOW):
temp = int(value)
if not await self._client.set_heating_setpoint(temp):
raise HomeAssistantError(
translation_domain=DOMAIN, translation_key="failed_to_set_htsp"
)
self._attr_target_temperature_low = temp

if kwargs.get("temperature"):
temp = int(kwargs["temperature"])
if value := kwargs.get(ATTR_TEMPERATURE):
temp = int(value)
fn = (
self._client.set_heating_setpoint
if self.hvac_mode == HVACMode.HEAT
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/environment_canada/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/environment_canada",
"iot_class": "cloud_polling",
"loggers": ["env_canada"],
"requirements": ["env-canada==0.11.2"]
"requirements": ["env-canada==0.11.3"]
}
2 changes: 1 addition & 1 deletion homeassistant/components/esphome/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"mqtt": ["esphome/discover/#"],
"quality_scale": "platinum",
"requirements": [
"aioesphomeapi==41.12.0",
"aioesphomeapi==41.13.0",
"esphome-dashboard-api==1.3.0",
"bleak-esphome==3.4.0"
],
Expand Down
9 changes: 7 additions & 2 deletions homeassistant/components/evohome/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,12 @@
ClimateEntityFeature,
HVACMode,
)
from homeassistant.const import ATTR_MODE, PRECISION_TENTHS, UnitOfTemperature
from homeassistant.const import (
ATTR_MODE,
ATTR_TEMPERATURE,
PRECISION_TENTHS,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback
Expand Down Expand Up @@ -243,7 +248,7 @@ def max_temp(self) -> float:
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set a new target temperature."""

temperature = kwargs["temperature"]
temperature = kwargs[ATTR_TEMPERATURE]

if (until := kwargs.get("until")) is None:
if self._evo_device.mode == EvoZoneMode.TEMPORARY_OVERRIDE:
Expand Down
6 changes: 3 additions & 3 deletions homeassistant/components/homekit/accessories.py
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ def available(self) -> bool:
return self._available

@ha_callback
@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def run(self) -> None:
"""Handle accessory driver started event."""
if state := self.hass.states.get(self.entity_id):
Expand Down Expand Up @@ -725,7 +725,7 @@ def __init__(
self._entry_title = entry_title
self.iid_storage = iid_storage

@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def pair(
self, client_username_bytes: bytes, client_public: str, client_permissions: int
) -> bool:
Expand All @@ -735,7 +735,7 @@ def pair(
async_dismiss_setup_message(self.hass, self.entry_id)
return cast(bool, success)

@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def unpair(self, client_uuid: UUID) -> None:
"""Override super function to show setup message if unpaired."""
super().unpair(client_uuid)
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/doorbell.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
self.async_update_doorbell_state(None, state)

@ha_callback
@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def run(self) -> None:
"""Handle doorbell event."""
if self._char_doorbell_detected:
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/type_air_purifiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ def should_add_preset_mode_switch(self, preset_mode: str) -> bool:
return preset_mode.lower() != "auto"

@callback
@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def run(self) -> None:
"""Handle accessory driver started event.

Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/type_cameras.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ def __init__(
)
self._async_update_motion_state(None, state)

@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
@callback
def run(self) -> None:
"""Handle accessory driver started event.
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/type_covers.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def __init__(self, *args: Any) -> None:
self.async_update_state(state)

@callback
@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def run(self) -> None:
"""Handle accessory driver started event.

Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/type_humidifiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ def __init__(self, *args: Any) -> None:
self._async_update_current_humidity(humidity_state)

@callback
@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
def run(self) -> None:
"""Handle accessory driver started event.

Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/type_triggers.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ async def async_attach(self) -> None:
_LOGGER.log,
)

@pyhap_callback # type: ignore[misc]
@pyhap_callback # type: ignore[untyped-decorator]
@callback
def run(self) -> None:
"""Run the accessory."""
Expand Down
35 changes: 35 additions & 0 deletions homeassistant/components/london_underground/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,36 @@
"""The london_underground component."""

from __future__ import annotations

from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession

from .const import DOMAIN as DOMAIN
from .coordinator import LondonTubeCoordinator, LondonUndergroundConfigEntry, TubeData

PLATFORMS: list[Platform] = [Platform.SENSOR]


async def async_setup_entry(
hass: HomeAssistant, entry: LondonUndergroundConfigEntry
) -> bool:
"""Set up London Underground from a config entry."""

session = async_get_clientsession(hass)
data = TubeData(session)
coordinator = LondonTubeCoordinator(hass, data, config_entry=entry)
await coordinator.async_config_entry_first_refresh()

entry.runtime_data = coordinator
# Forward the setup to the sensor platform
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

return True


async def async_unload_entry(
hass: HomeAssistant, entry: LondonUndergroundConfigEntry
) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
Loading
Loading