homeassistant/custom_components/browser_mod/helpers.py

97 lines
2.5 KiB
Python

import logging
from homeassistant.helpers.entity import Entity, async_generate_entity_id
from .const import (
DOMAIN,
DATA_DEVICES,
DATA_ALIASES,
DATA_ADDERS,
CONFIG_DEVICES,
DATA_CONFIG,
CONFIG_PREFIX,
CONFIG_DISABLE,
CONFIG_DISABLE_ALL,
DATA_SETUP_COMPLETE,
)
_LOGGER = logging.getLogger(__name__)
def get_devices(hass):
return hass.data[DOMAIN][DATA_DEVICES]
def get_alias(hass, deviceID):
for k, v in hass.data[DOMAIN][DATA_ALIASES].items():
if v == deviceID:
return k
return None
def get_config(hass, deviceID):
config = hass.data[DOMAIN][DATA_CONFIG].get(CONFIG_DEVICES, {})
return config.get(deviceID, config.get(deviceID.replace('-', '_'), {}))
def create_entity(hass, platform, deviceID, connection):
conf = get_config(hass, deviceID)
if conf and (platform in conf.get(CONFIG_DISABLE, [])
or CONFIG_DISABLE_ALL in conf.get(CONFIG_DISABLE, [])):
return None
if not conf and \
(platform in hass.data[DOMAIN][DATA_CONFIG].get(CONFIG_DISABLE, [])
or CONFIG_DISABLE_ALL in
hass.data[DOMAIN][DATA_CONFIG].get(CONFIG_DISABLE, [])):
return None
adder = hass.data[DOMAIN][DATA_ADDERS][platform]
entity = adder(hass, deviceID, connection, get_alias(hass, deviceID))
return entity
def setup_platform(hass, config, async_add_devices, platform, cls):
def adder(hass, deviceID, connection, alias=None):
entity = cls(hass, connection, deviceID, alias)
async_add_devices([entity])
return entity
hass.data[DOMAIN][DATA_ADDERS][platform] = adder
return True
def is_setup_complete(hass):
return hass.data[DOMAIN][DATA_SETUP_COMPLETE]
class BrowserModEntity(Entity):
def __init__(self, hass, connection, deviceID, alias=None):
self.hass = hass
self.connection = connection
self.deviceID = deviceID
self._data = {}
prefix = hass.data[DOMAIN][DATA_CONFIG].get(CONFIG_PREFIX, '')
self.entity_id = async_generate_entity_id(
self.domain+".{}",
alias or f"{prefix}{deviceID}",
hass=hass
)
def updated(self):
pass
@property
def data(self):
return self._data
@data.setter
def data(self, data):
self._data = data
self.updated()
@property
def device_id(self):
return self.deviceID
def send(self, command, **kwargs):
self.connection.send(command, **kwargs)