Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 homeassistant/components/prusalink/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
PrusaLinkConfigEntry,
PrusaLinkUpdateCoordinator,
StatusCoordinator,
VersionUpdateCoordinator,
)

PLATFORMS: list[Platform] = [
Expand Down Expand Up @@ -54,6 +55,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: PrusaLinkConfigEntry) ->
"status": StatusCoordinator(hass, entry, api),
"job": JobUpdateCoordinator(hass, entry, api),
"info": InfoUpdateCoordinator(hass, entry, api),
"version": VersionUpdateCoordinator(hass, entry, api),
}
for coordinator in coordinators.values():
await coordinator.async_config_entry_first_refresh()
Expand Down
11 changes: 10 additions & 1 deletion homeassistant/components/prusalink/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
PrinterInfo,
PrinterStatus,
PrusaLink,
VersionInfo,
)
from pyprusalink.types import InvalidAuth, PrusaLinkError
Comment thread
heikkih marked this conversation as resolved.

Expand All @@ -32,7 +33,7 @@
# rapidly-changing metrics.
_MINIMUM_REFRESH_INTERVAL = 1.0

T = TypeVar("T", PrinterStatus, LegacyPrinterStatus, JobInfo)
T = TypeVar("T", PrinterStatus, LegacyPrinterStatus, JobInfo, PrinterInfo, VersionInfo)


type PrusaLinkConfigEntry = ConfigEntry[dict[str, PrusaLinkUpdateCoordinator]]
Expand Down Expand Up @@ -124,3 +125,11 @@ class InfoUpdateCoordinator(PrusaLinkUpdateCoordinator[PrinterInfo]):
async def _fetch_data(self) -> PrinterInfo:
"""Fetch the printer data."""
return await self.api.get_info()


class VersionUpdateCoordinator(PrusaLinkUpdateCoordinator[VersionInfo]):
"""Version update coordinator."""

async def _fetch_data(self) -> VersionInfo:
"""Fetch the version data."""
return await self.api.get_version()
5 changes: 5 additions & 0 deletions homeassistant/components/prusalink/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,14 @@ class PrusaLinkEntity(CoordinatorEntity[PrusaLinkUpdateCoordinator]):
@property
def device_info(self) -> DeviceInfo:
"""Return device information about this PrusaLink device."""
coordinators = self.coordinator.config_entry.runtime_data
info_data = coordinators["info"].data or {}
version_data = coordinators["version"].data or {}
return DeviceInfo(
identifiers={(DOMAIN, self.coordinator.config_entry.entry_id)},
name=self.coordinator.config_entry.title,
manufacturer="Prusa",
serial_number=info_data.get("serial"),
sw_version=version_data.get("firmware"),
configuration_url=self.coordinator.api.client.host,
)
1 change: 1 addition & 0 deletions tests/components/prusalink/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def mock_version_api() -> Generator[dict[str, str]]:
"server": "2.1.2",
"text": "PrusaLink",
"hostname": "PrusaXL",
"firmware": "6.1.2+11023",
}
with patch("pyprusalink.PrusaLink.get_version", return_value=resp):
yield resp
Expand Down
18 changes: 17 additions & 1 deletion tests/components/prusalink/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,30 @@
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
from homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers import issue_registry as ir
from homeassistant.helpers import device_registry as dr, issue_registry as ir
from homeassistant.util.dt import utcnow

from tests.common import MockConfigEntry, async_fire_time_changed

pytestmark = pytest.mark.usefixtures("mock_api")


async def test_device_info(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
device_registry: dr.DeviceRegistry,
) -> None:
"""Test device info is populated with serial number and firmware version."""
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)

device = device_registry.async_get_device(
identifiers={(DOMAIN, mock_config_entry.entry_id)}
)
assert device is not None
assert device.serial_number == "serial-1337"
assert device.sw_version == "6.1.2+11023"


async def test_unloading(
hass: HomeAssistant,
mock_config_entry: ConfigEntry,
Expand Down
Loading