usda-hass-config/custom_components/remote_homeassistant/sensor.py

65 lines
2.4 KiB
Python

"""Sensor platform for connection status.."""
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_VERIFY_SSL
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import DeviceInfo, Entity
from .const import DOMAIN, CONF_ENTITY_PREFIX, CONF_SECURE, CONF_MAX_MSG_SIZE, DEFAULT_MAX_MSG_SIZE
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up sensor based ok config entry."""
async_add_entities([ConnectionStatusSensor(config_entry)])
class ConnectionStatusSensor(Entity):
"""Representation of a remote_homeassistant sensor."""
def __init__(self, config_entry):
"""Initialize the remote_homeassistant sensor."""
self._state = None
self._entry = config_entry
proto = 'http' if config_entry.data.get(CONF_SECURE) else 'https'
host = config_entry.data[CONF_HOST]
port = config_entry.data[CONF_PORT]
self._attr_name = f"Remote connection to {host}:{port}"
self._attr_unique_id = config_entry.unique_id
self._attr_should_poll = False
self._attr_device_info = DeviceInfo(
name="Home Assistant",
configuration_url=f"{proto}://{host}:{port}",
identifiers={(DOMAIN, f"remote_{self._attr_unique_id}")},
)
@property
def state(self):
"""Return sensor state."""
return self._state
@property
def extra_state_attributes(self):
"""Return device state attributes."""
return {
"host": self._entry.data[CONF_HOST],
"port": self._entry.data[CONF_PORT],
"secure": self._entry.data.get(CONF_SECURE, False),
"verify_ssl": self._entry.data.get(CONF_VERIFY_SSL, False),
"max_msg_size": self._entry.data.get(CONF_MAX_MSG_SIZE, DEFAULT_MAX_MSG_SIZE),
"entity_prefix": self._entry.options.get(CONF_ENTITY_PREFIX, ""),
"uuid": self.unique_id,
}
async def async_added_to_hass(self):
"""Subscribe to events."""
await super().async_added_to_hass()
def _update_handler(state):
"""Update entity state when status was updated."""
self._state = state
self.schedule_update_ha_state()
signal = f"remote_homeassistant_{self._entry.unique_id}"
self.async_on_remove(
async_dispatcher_connect(self.hass, signal, _update_handler)
)