Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
785c4c4
Add STIPS IR Remote integration (climate platform)
hanyNaji Apr 15, 2026
6db750b
Fix STIPS IR Remote core CI issues
hanyNaji Apr 15, 2026
454b7b9
Refactor stips_iru1 auth, availability, and config flow
hanyNaji Apr 15, 2026
9a5cf5e
Fix STIPS core PR CI regressions
hanyNaji Apr 15, 2026
bf6061b
Merge branch 'dev' into stips-ir-remote-climate
hanyNaji Apr 15, 2026
cd9eecc
Update homeassistant/components/stips_iru1/config_flow.py
hanyNaji Apr 15, 2026
b2d0953
Update homeassistant/components/stips_iru1/const.py
hanyNaji Apr 15, 2026
b108696
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 15, 2026
ab8e472
Update tests/components/stips_iru1/test_init.py
hanyNaji Apr 15, 2026
a071c19
Update tests/components/stips_iru1/test_config_flow.py
hanyNaji Apr 15, 2026
1d35997
Fix STIPS manifest quality scale and config flow typing
hanyNaji Apr 15, 2026
e30d6df
Update homeassistant/components/stips_iru1/api.py
hanyNaji Apr 15, 2026
2b4710d
Merge branch 'dev' into stips-ir-remote-climate
hanyNaji Apr 15, 2026
7bfad75
Add STIPS quality scale metadata
hanyNaji Apr 15, 2026
910fd2f
Fix stips iru1 hassfest and requirements check failures
hanyNaji Apr 15, 2026
f82ae4b
Add runtime_data and setup validation for stips iru1
hanyNaji Apr 15, 2026
d5ac509
Apply prek formatting fixes for stips iru1 files
hanyNaji Apr 15, 2026
5712dcd
Use climate component root import in stips helper test
hanyNaji Apr 15, 2026
3576263
Stabilize stips exception handling for ruff format
hanyNaji Apr 15, 2026
f46bea2
Update homeassistant/components/stips_iru1/strings.json
hanyNaji Apr 15, 2026
015e0e5
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 15, 2026
2bb670f
Address stips review feedback on safety typing and tests
hanyNaji Apr 15, 2026
80cd6ea
Fix stips iot_class manifest value
hanyNaji Apr 15, 2026
238358a
Add MockConfigEntry type annotations in stips tests
hanyNaji Apr 15, 2026
030659d
Merge branch 'dev' into stips-ir-remote-climate
hanyNaji Apr 15, 2026
01baf90
Initialize stips climate control host cache attrs
hanyNaji Apr 15, 2026
1cfcf40
Sync stips generated integrations iot class
hanyNaji Apr 15, 2026
8e7e951
Fix stips_iru1 test failures: add translation descriptions and valida…
hanyNaji Apr 15, 2026
29a06a9
Add comprehensive test coverage for stips_iru1 climate entities
hanyNaji Apr 15, 2026
1e9cb22
Add HTTP failure and edge case tests for climate entities
hanyNaji Apr 15, 2026
1075b94
Fix stips test lint/syntax regressions from coverage patch
hanyNaji Apr 16, 2026
7cc5eca
Refactor test formatting and context managers
hanyNaji Apr 16, 2026
bbfc61c
Combine nested withs into single context
hanyNaji Apr 16, 2026
471088f
Use Platform enum in stips_iru1 test
hanyNaji Apr 16, 2026
fb696e1
Update homeassistant/components/stips_iru1/manifest.json
hanyNaji Apr 16, 2026
8ef6f04
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 16, 2026
7bae788
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 16, 2026
f5ef2a5
Update homeassistant/components/stips_iru1/quality_scale.yaml
hanyNaji Apr 16, 2026
f603123
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 16, 2026
2ac6cb1
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 16, 2026
8fc2fbd
Update homeassistant/components/stips_iru1/climate.py
hanyNaji Apr 16, 2026
9bd7217
Fix mypy error by explicitly constructing DeviceInfo in StipsIruClima…
hanyNaji Apr 16, 2026
7ef5fac
Merge branch 'dev' into stips-ir-remote-climate
hanyNaji Apr 16, 2026
d0b905b
Fix PR 168264: Replace corrupted climate.py with verified correct ver…
hanyNaji Apr 16, 2026
bcad7db
Fix mypy errors and typing issues in climate.py (PR tests)
hanyNaji Apr 16, 2026
4dfeb1a
Fix remaining STIPS review issues
hanyNaji Apr 16, 2026
cf97e21
Apply prek formatting for STIPS climate
hanyNaji Apr 16, 2026
04d0b70
Fix final ruff whitespace issue in STIPS climate
hanyNaji Apr 16, 2026
c219e62
Fix pylint imports in STIPS climate
hanyNaji Apr 16, 2026
25a58e9
Apply ruff import cleanup for STIPS climate
hanyNaji Apr 16, 2026
1db3ea6
Fix remaining STIPS test failures
hanyNaji Apr 16, 2026
f96d40f
Add STIPS coverage tests
hanyNaji Apr 16, 2026
ab8165e
Fix STIPS coverage test regressions
hanyNaji Apr 16, 2026
485d733
Merge branch 'dev' into stips-ir-remote-climate
hanyNaji Apr 16, 2026
aa99044
Cover remaining STIPS error handling paths
hanyNaji Apr 16, 2026
66219b6
Expand STIPS climate coverage paths
hanyNaji Apr 16, 2026
eeab1a7
Stabilize Google all-day calendar sync tests
hanyNaji Apr 16, 2026
0308d2d
Cover remaining STIPS patch coverage paths
hanyNaji Apr 17, 2026
2cc2a1b
Merge branch 'dev' into stips-ir-remote-climate
hanyNaji Apr 17, 2026
bdb22f1
Handle template timeout thread races
hanyNaji Apr 17, 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
2 changes: 2 additions & 0 deletions CODEOWNERS

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

72 changes: 72 additions & 0 deletions homeassistant/components/stips_iru1/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
"""STIPS IRU1 Home Assistant integration."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Any

from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryError
from homeassistant.helpers import device_registry as dr

from .catalog import normalize_device_mac
from .const import DOMAIN, PLATFORMS


@dataclass(slots=True)
class StipsIru1RuntimeData:
"""Runtime data for the STIPS IRU1 integration."""

devices: list[dict[str, Any]]


type StipsIru1ConfigEntry = ConfigEntry[StipsIru1RuntimeData]


def _register_catalog_devices(hass: HomeAssistant, entry: StipsIru1ConfigEntry) -> None:
"""Ensure every IR unit in the catalog has a device registry entry.

Units with only protocol-AC remotes create no signal-based remote entities; without this,
Home Assistant would not list them under the integration.
"""
reg = dr.async_get(hass)
for device in entry.data.get("devices", []):
uid = device.get("uniqueName")
if not uid:
continue
name = device.get("name") or uid
Comment thread
hanyNaji marked this conversation as resolved.
sw = device.get("buildVersion")
kwargs: dict[str, Any] = {
"config_entry_id": entry.entry_id,
"identifiers": {(DOMAIN, str(uid))},
"name": name,
"manufacturer": "STIPS",
"model": "IRU1",
"sw_version": str(sw) if sw is not None else None,
}
mac = normalize_device_mac(device)
if mac:
kwargs["connections"] = {(dr.CONNECTION_NETWORK_MAC, mac)}
area_name = device.get("areaName")
if area_name:
kwargs["suggested_area"] = str(area_name)
reg.async_get_or_create(**kwargs)


async def async_setup_entry(hass: HomeAssistant, entry: StipsIru1ConfigEntry) -> bool:
"""Set up STIPS IRU1 from a config entry."""
devices = entry.data.get("devices", [])
if not isinstance(devices, list):
raise ConfigEntryError("Invalid devices data in config entry")

entry.runtime_data = StipsIru1RuntimeData(devices=devices)

_register_catalog_devices(hass, entry)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True


async def async_unload_entry(hass: HomeAssistant, entry: StipsIru1ConfigEntry) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
19 changes: 19 additions & 0 deletions homeassistant/components/stips_iru1/api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""Compatibility wrapper for STIPS API client.

Core-bound integration code should consume communication logic from the standalone
`stips_api_bridge` package for dependency transparency.
"""

from stips_api_bridge.api import (
StipsApiAuthError,
StipsApiClient,
StipsApiError,
StipsApiPermissionError,
)

__all__ = [
"StipsApiAuthError",
"StipsApiClient",
"StipsApiError",
"StipsApiPermissionError",
]
27 changes: 27 additions & 0 deletions homeassistant/components/stips_iru1/catalog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""Compatibility wrapper for STIPS catalog helpers."""

from stips_api_bridge.catalog import (
async_enrich_remote_model,
async_fetch_catalog_devices,
iter_device_host_candidates,
iter_model_read_type_keys,
iter_model_read_type_keys_union,
model_has_ir_signals,
model_read_name_or_id,
normalize_device_ip,
normalize_device_mac,
normalize_device_online,
)

__all__ = [
"async_enrich_remote_model",
"async_fetch_catalog_devices",
"iter_device_host_candidates",
"iter_model_read_type_keys",
"iter_model_read_type_keys_union",
"model_has_ir_signals",
"model_read_name_or_id",
"normalize_device_ip",
"normalize_device_mac",
"normalize_device_online",
]
Loading
Loading