1 """The iskra integration."""
3 from __future__
import annotations
5 from pyiskra.adapters
import Modbus, RestAPI
6 from pyiskra.devices
import Device
7 from pyiskra.exceptions
import DeviceConnectionError, DeviceNotSupported, NotAuthorised
23 from .const
import DOMAIN, MANUFACTURER
24 from .coordinator
import IskraDataUpdateCoordinator
26 PLATFORMS: list[Platform] = [Platform.SENSOR]
29 type IskraConfigEntry = ConfigEntry[list[IskraDataUpdateCoordinator]]
33 """Set up iskra device from a config entry."""
37 if conf[CONF_PROTOCOL] ==
"modbus_tcp":
39 ip_address=conf[CONF_HOST],
42 modbus_address=conf[CONF_ADDRESS],
44 elif conf[CONF_PROTOCOL] ==
"rest_api":
46 if (username := conf.get(CONF_USERNAME))
is not None and (
47 password := conf.get(CONF_PASSWORD)
53 adapter = RestAPI(ip_address=conf[CONF_HOST], authentication=authentication)
57 base_device = await Device.create_device(adapter)
58 except DeviceConnectionError
as e:
60 except NotAuthorised
as e:
62 except DeviceNotSupported
as e:
66 await base_device.init()
69 if base_device.is_gateway:
71 device_registry = dr.async_get(hass)
72 device_registry.async_get_or_create(
73 config_entry_id=entry.entry_id,
74 identifiers={(DOMAIN, base_device.serial)},
75 manufacturer=MANUFACTURER,
76 name=base_device.model,
77 model=base_device.model,
78 sw_version=base_device.fw_version,
83 for child_device
in base_device.get_child_devices()
88 for coordinator
in coordinators:
89 await coordinator.async_config_entry_first_refresh()
91 entry.runtime_data = coordinators
93 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
99 """Unload a config entry."""
100 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_unload_entry(HomeAssistant hass, IskraConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, IskraConfigEntry entry)