Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
db5e7b3
Remove invalid color mode from philips_js (#164204)
joostlek Feb 26, 2026
802a7aa
Disable code interpreter with minimal reasoning for OpenAI (#164254)
Shulyaka Feb 26, 2026
cba69e7
Drop single-use service name constants in agent_dvr (#164149)
epenet Feb 26, 2026
1e807dc
Update reasoning options for gpt-5.3-codex (#164179)
Shulyaka Feb 26, 2026
b651e62
Drop single-use service name constants in advantage_air (#164148)
epenet Feb 26, 2026
39dce8e
Drop single-use service name constants in androidtv (#164153)
epenet Feb 26, 2026
1b5eea5
Drop single-use service name constants in amberelectric (#164152)
epenet Feb 26, 2026
d4aa52e
Drop single-use service name constants in alarmdecoder (#164150)
epenet Feb 26, 2026
f9ffaad
Drop single-use service name constants in abode (#164146)
epenet Feb 26, 2026
7a6a479
Rename local constants in device_automation test (#164143)
epenet Feb 26, 2026
23ec28b
Simplify portainer entity initialisation (#164256)
epenet Feb 26, 2026
dd44b15
Update frontend to 20260226.0 (#164262)
bramkragten Feb 26, 2026
8a621e6
Remove kw arg for Portainer (#164260)
erwindouna Feb 26, 2026
d94f15b
Update IQS for AWS S3 (#164117)
mik-laj Feb 26, 2026
bf60d57
Update state labels to use common keys in compit (#164261)
jwillemsen Feb 26, 2026
51acdeb
Add config flow support to Orvibo legacy integration (#155115)
peteS-UK Feb 26, 2026
ab9c809
Add services for managing Schlage door codes (#151014)
tykeal Feb 26, 2026
5ad7145
Bump uiprotect to version 10.2.2 (#164269)
RaHehl Feb 26, 2026
e7cf6cb
Create reauth flow for Anthropic for auth errors during conversation …
Shulyaka Feb 26, 2026
28b950c
Simplify entity init in Proxmox (#164265)
erwindouna Feb 26, 2026
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
13 changes: 3 additions & 10 deletions homeassistant/components/abode/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@

from .const import DOMAIN, DOMAIN_DATA, LOGGER

SERVICE_SETTINGS = "change_setting"
SERVICE_CAPTURE_IMAGE = "capture_image"
SERVICE_TRIGGER_AUTOMATION = "trigger_automation"

ATTR_SETTING = "setting"
ATTR_VALUE = "value"

Expand Down Expand Up @@ -75,16 +71,13 @@ def async_setup_services(hass: HomeAssistant) -> None:
"""Home Assistant services."""

hass.services.async_register(
DOMAIN, SERVICE_SETTINGS, _change_setting, schema=CHANGE_SETTING_SCHEMA
DOMAIN, "change_setting", _change_setting, schema=CHANGE_SETTING_SCHEMA
)

hass.services.async_register(
DOMAIN, SERVICE_CAPTURE_IMAGE, _capture_image, schema=CAPTURE_IMAGE_SCHEMA
DOMAIN, "capture_image", _capture_image, schema=CAPTURE_IMAGE_SCHEMA
)

hass.services.async_register(
DOMAIN,
SERVICE_TRIGGER_AUTOMATION,
_trigger_automation,
schema=AUTOMATION_SCHEMA,
DOMAIN, "trigger_automation", _trigger_automation, schema=AUTOMATION_SCHEMA
)
4 changes: 1 addition & 3 deletions homeassistant/components/advantage_air/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@

from .const import DOMAIN

ADVANTAGE_AIR_SERVICE_SET_TIME_TO = "set_time_to"


@callback
def async_setup_services(hass: HomeAssistant) -> None:
Expand All @@ -20,7 +18,7 @@ def async_setup_services(hass: HomeAssistant) -> None:
service.async_register_platform_entity_service(
hass,
DOMAIN,
ADVANTAGE_AIR_SERVICE_SET_TIME_TO,
"set_time_to",
entity_domain=SENSOR_DOMAIN,
schema={vol.Required("minutes"): cv.positive_int},
func="set_time_to",
Expand Down
16 changes: 5 additions & 11 deletions homeassistant/components/agent_dvr/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,12 @@

from .const import DOMAIN

_DEV_EN_ALT = "enable_alerts"
_DEV_DS_ALT = "disable_alerts"
_DEV_EN_REC = "start_recording"
_DEV_DS_REC = "stop_recording"
_DEV_SNAP = "snapshot"

CAMERA_SERVICES = {
_DEV_EN_ALT: "async_enable_alerts",
_DEV_DS_ALT: "async_disable_alerts",
_DEV_EN_REC: "async_start_recording",
_DEV_DS_REC: "async_stop_recording",
_DEV_SNAP: "async_snapshot",
"enable_alerts": "async_enable_alerts",
"disable_alerts": "async_disable_alerts",
"start_recording": "async_start_recording",
"stop_recording": "async_stop_recording",
"snapshot": "async_snapshot",
}


Expand Down
7 changes: 2 additions & 5 deletions homeassistant/components/alarmdecoder/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@

from .const import DOMAIN

SERVICE_ALARM_TOGGLE_CHIME = "alarm_toggle_chime"

SERVICE_ALARM_KEYPRESS = "alarm_keypress"
ATTR_KEYPRESS = "keypress"


Expand All @@ -26,7 +23,7 @@ def async_setup_services(hass: HomeAssistant) -> None:
service.async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_ALARM_TOGGLE_CHIME,
"alarm_toggle_chime",
entity_domain=ALARM_CONTROL_PANEL_DOMAIN,
schema={
vol.Required(ATTR_CODE): cv.string,
Expand All @@ -37,7 +34,7 @@ def async_setup_services(hass: HomeAssistant) -> None:
service.async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_ALARM_KEYPRESS,
"alarm_keypress",
entity_domain=ALARM_CONTROL_PANEL_DOMAIN,
schema={
vol.Required(ATTR_KEYPRESS): cv.string,
Expand Down
2 changes: 0 additions & 2 deletions homeassistant/components/amberelectric/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
LOGGER = logging.getLogger(__package__)
PLATFORMS = [Platform.BINARY_SENSOR, Platform.SENSOR]

SERVICE_GET_FORECASTS = "get_forecasts"

GENERAL_CHANNEL = "general"
CONTROLLED_LOAD_CHANNEL = "controlled_load"
FEED_IN_CHANNEL = "feed_in"
Expand Down
3 changes: 1 addition & 2 deletions homeassistant/components/amberelectric/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
DOMAIN,
FEED_IN_CHANNEL,
GENERAL_CHANNEL,
SERVICE_GET_FORECASTS,
)
from .coordinator import AmberConfigEntry
from .helpers import format_cents_to_dollars, normalize_descriptor
Expand Down Expand Up @@ -101,7 +100,7 @@ async def handle_get_forecasts(call: ServiceCall) -> ServiceResponse:

hass.services.async_register(
DOMAIN,
SERVICE_GET_FORECASTS,
"get_forecasts",
handle_get_forecasts,
GET_FORECASTS_SCHEMA,
supports_response=SupportsResponse.ONLY,
Expand Down
4 changes: 2 additions & 2 deletions homeassistant/components/androidtv/media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
SIGNAL_CONFIG_ENTITY,
)
from .entity import AndroidTVEntity, adb_decorator
from .services import ATTR_ADB_RESPONSE, ATTR_HDMI_INPUT, SERVICE_LEARN_SENDEVENT
from .services import ATTR_ADB_RESPONSE, ATTR_HDMI_INPUT

_LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -271,7 +271,7 @@ async def learn_sendevent(self) -> None:
self.async_write_ha_state()

msg = (
f"Output from service '{SERVICE_LEARN_SENDEVENT}' from"
f"Output from service 'learn_sendevent' from"
f" {self.entity_id}: '{output}'"
)
persistent_notification.async_create(
Expand Down
13 changes: 4 additions & 9 deletions homeassistant/components/androidtv/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@
ATTR_HDMI_INPUT = "hdmi_input"
ATTR_LOCAL_PATH = "local_path"

SERVICE_ADB_COMMAND = "adb_command"
SERVICE_DOWNLOAD = "download"
SERVICE_LEARN_SENDEVENT = "learn_sendevent"
SERVICE_UPLOAD = "upload"


@callback
def async_setup_services(hass: HomeAssistant) -> None:
Expand All @@ -29,23 +24,23 @@ def async_setup_services(hass: HomeAssistant) -> None:
service.async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_ADB_COMMAND,
"adb_command",
entity_domain=MEDIA_PLAYER_DOMAIN,
schema={vol.Required(ATTR_COMMAND): cv.string},
func="adb_command",
)
service.async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_LEARN_SENDEVENT,
"learn_sendevent",
entity_domain=MEDIA_PLAYER_DOMAIN,
schema=None,
func="learn_sendevent",
)
service.async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_DOWNLOAD,
"download",
entity_domain=MEDIA_PLAYER_DOMAIN,
schema={
vol.Required(ATTR_DEVICE_PATH): cv.string,
Expand All @@ -56,7 +51,7 @@ def async_setup_services(hass: HomeAssistant) -> None:
service.async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_UPLOAD,
"upload",
entity_domain=MEDIA_PLAYER_DOMAIN,
schema={
vol.Required(ATTR_DEVICE_PATH): cv.string,
Expand Down
5 changes: 5 additions & 0 deletions homeassistant/components/anthropic/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,11 @@ async def _async_handle_chat_log(
]
)
messages.extend(new_messages)
except anthropic.AuthenticationError as err:
self.entry.async_start_reauth(self.hass)
raise HomeAssistantError(
"Authentication error with Anthropic API, reauthentication required"
) from err
except anthropic.AnthropicError as err:
raise HomeAssistantError(
f"Sorry, I had a problem talking to Anthropic: {err}"
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/aws_s3/quality_scale.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ rules:
docs-installation-parameters: done
entity-unavailable: done
integration-owner: done
log-when-unavailable: todo
log-when-unavailable: done
parallel-updates: done
reauthentication-flow: todo
test-coverage: done
Expand Down
8 changes: 4 additions & 4 deletions homeassistant/components/compit/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -329,8 +329,8 @@
"nano_nr_3": "Nano 3",
"nano_nr_4": "Nano 4",
"nano_nr_5": "Nano 5",
"off": "Off",
"on": "On",
"off": "[%key:common::state::off%]",
"on": "[%key:common::state::on%]",
"summer": "Summer",
"winter": "Winter"
}
Expand Down Expand Up @@ -368,8 +368,8 @@
"pump_status": {
"name": "Pump status",
"state": {
"off": "Off",
"on": "On"
"off": "[%key:common::state::off%]",
"on": "[%key:common::state::on%]"
}
},
"return_circuit_temperature": {
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/frontend/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@
"integration_type": "system",
"preview_features": { "winter_mode": {} },
"quality_scale": "internal",
"requirements": ["home-assistant-frontend==20260225.0"]
"requirements": ["home-assistant-frontend==20260226.0"]
}
11 changes: 8 additions & 3 deletions homeassistant/components/openai_conversation/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,11 @@ async def async_step_model(
options.pop(CONF_WEB_SEARCH_REGION, None)
options.pop(CONF_WEB_SEARCH_COUNTRY, None)
options.pop(CONF_WEB_SEARCH_TIMEZONE, None)
if (
user_input.get(CONF_CODE_INTERPRETER)
and user_input.get(CONF_REASONING_EFFORT) == "minimal"
):
errors[CONF_CODE_INTERPRETER] = "code_interpreter_minimal_reasoning"

options.update(user_input)
if not errors:
Expand Down Expand Up @@ -539,15 +544,15 @@ def _get_reasoning_options(self, model: str) -> list[str]:
if not model.startswith(("o", "gpt-5")) or model.startswith("gpt-5-pro"):
return []

MODELS_REASONING_MAP = {
models_reasoning_map: dict[str | tuple[str, ...], list[str]] = {
"gpt-5.2-pro": ["medium", "high", "xhigh"],
"gpt-5.2": ["none", "low", "medium", "high", "xhigh"],
("gpt-5.2", "gpt-5.3"): ["none", "low", "medium", "high", "xhigh"],
"gpt-5.1": ["none", "low", "medium", "high"],
"gpt-5": ["minimal", "low", "medium", "high"],
"": ["low", "medium", "high"], # The default case
}

for prefix, options in MODELS_REASONING_MAP.items():
for prefix, options in models_reasoning_map.items():
if model.startswith(prefix):
return options
return [] # pragma: no cover
Expand Down
2 changes: 2 additions & 0 deletions homeassistant/components/openai_conversation/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
},
"entry_type": "AI task",
"error": {
"code_interpreter_minimal_reasoning": "[%key:component::openai_conversation::config_subentries::conversation::error::code_interpreter_minimal_reasoning%]",
"model_not_supported": "[%key:component::openai_conversation::config_subentries::conversation::error::model_not_supported%]",
"web_search_minimal_reasoning": "[%key:component::openai_conversation::config_subentries::conversation::error::web_search_minimal_reasoning%]"
},
Expand Down Expand Up @@ -93,6 +94,7 @@
},
"entry_type": "Conversation agent",
"error": {
"code_interpreter_minimal_reasoning": "Code interpreter is not supported with minimal reasoning effort",
"model_not_supported": "This model is not supported, please select a different model",
"web_search_minimal_reasoning": "Web search is currently not supported with minimal reasoning effort"
},
Expand Down
52 changes: 51 additions & 1 deletion homeassistant/components/orvibo/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,51 @@
"""The orvibo component."""
"""The orvibo integration."""

import logging

from orvibo.s20 import S20, S20Exception

from homeassistant import core
from homeassistant.const import CONF_HOST, CONF_MAC, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady

from .const import DOMAIN
from .models import S20ConfigEntry

PLATFORMS = [Platform.SWITCH]

_LOGGER = logging.getLogger(__name__)


async def async_setup_entry(hass: core.HomeAssistant, entry: S20ConfigEntry) -> bool:
"""Set up platform from a ConfigEntry."""

try:
s20 = await hass.async_add_executor_job(
S20,
entry.data[CONF_HOST],
entry.data[CONF_MAC],
)
_LOGGER.debug("Initialized S20 at %s", entry.data[CONF_HOST])
except S20Exception as err:
_LOGGER.debug("S20 at %s couldn't be initialized", entry.data[CONF_HOST])

raise ConfigEntryNotReady(
translation_domain=DOMAIN,
translation_key="init_error",
translation_placeholders={
"host": entry.data[CONF_HOST],
},
) from err

entry.runtime_data = s20

await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

return True


async def async_unload_entry(hass: HomeAssistant, entry: S20ConfigEntry) -> bool:
"""Unload a config entry."""

return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
Loading
Loading