Add myUplink integration (#86522)
* First checkin for myUplink * Refactored coordinator and sensor state classe * Updated .coveragerc * Update test_config_flow * Fix test_config_flow for myuplink * Only set state class for temperature sensor * PR comment updates * Type strong dict * use asyncio.timeouts * PR updates (part 1) * Updated to myuplink 0.0.9 * Add strict typing * Fix typing * Inherit CoordinatorEntity * Clean up coordinator and sensors * Use common base entity * Improve device point sensor * Exclude entity from coverage * Set device point entity name if there's no entity description * Update homeassistant/components/myuplink/sensor.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/myuplink/entity.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/myuplink/entity.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Remvoed firmware + connstate sensors * Always add device point parameter name * Removed MyUplinkDeviceSensor * Removed unused class * key="celsius", --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
c1faafc6a0
commit
2508b55b0f
21 changed files with 480 additions and 0 deletions
71
homeassistant/components/myuplink/__init__.py
Normal file
71
homeassistant/components/myuplink/__init__.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
"""The myUplink integration."""
|
||||
from __future__ import annotations
|
||||
|
||||
from myuplink.api import MyUplinkAPI
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers import (
|
||||
aiohttp_client,
|
||||
config_entry_oauth2_flow,
|
||||
device_registry as dr,
|
||||
)
|
||||
|
||||
from .api import AsyncConfigEntryAuth
|
||||
from .const import DOMAIN
|
||||
from .coordinator import MyUplinkDataCoordinator
|
||||
|
||||
PLATFORMS: list[Platform] = [Platform.SENSOR]
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
|
||||
"""Set up myUplink from a config entry."""
|
||||
hass.data.setdefault(DOMAIN, {})
|
||||
|
||||
implementation = (
|
||||
await config_entry_oauth2_flow.async_get_config_entry_implementation(
|
||||
hass, config_entry
|
||||
)
|
||||
)
|
||||
session = config_entry_oauth2_flow.OAuth2Session(hass, config_entry, implementation)
|
||||
auth = AsyncConfigEntryAuth(aiohttp_client.async_get_clientsession(hass), session)
|
||||
|
||||
# Setup MyUplinkAPI and coordinator for data fetch
|
||||
api = MyUplinkAPI(auth)
|
||||
coordinator = MyUplinkDataCoordinator(hass, api)
|
||||
await coordinator.async_config_entry_first_refresh()
|
||||
hass.data[DOMAIN][config_entry.entry_id] = coordinator
|
||||
|
||||
# Update device registry
|
||||
create_devices(hass, config_entry, coordinator)
|
||||
|
||||
await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Unload a config entry."""
|
||||
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
||||
hass.data[DOMAIN].pop(entry.entry_id)
|
||||
|
||||
return unload_ok
|
||||
|
||||
|
||||
@callback
|
||||
def create_devices(
|
||||
hass: HomeAssistant, config_entry: ConfigEntry, coordinator: MyUplinkDataCoordinator
|
||||
) -> None:
|
||||
"""Update all devices."""
|
||||
device_registry = dr.async_get(hass)
|
||||
|
||||
for device_id, device in coordinator.data.devices.items():
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=config_entry.entry_id,
|
||||
identifiers={(DOMAIN, device_id)},
|
||||
name=device.productName,
|
||||
manufacturer=device.productName.split(" ")[0],
|
||||
model=device.productName,
|
||||
sw_version=device.firmwareCurrent,
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue