mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-11-01 23:19:25 +00:00
* Init services discovery * extend it * Add mqtt provider * Service support * More protocol stuff * Update validate.py * Update validate.py * Update API.md * Update API.md * update api * add API for services * fix lint * add security middleware * Add discovery layout * update * Finish discovery * improve discovery * fix * Update API * Update api * fix * Fix lint * Update API.md * Update __init__.py * Update API.md * Update interface.py * Update mqtt.py * Update discovery.py * Update const.py * Update validate.py * Update validate.py * Update mqtt.py * Update mqtt.py * Update discovery.py * Update discovery.py * Update discovery.py * Update interface.py * Update mqtt.py * Update mqtt.py * Update services.py * Update discovery.py * Update discovery.py * Update mqtt.py * Update discovery.py * Update services.py * Update discovery.py * Update discovery.py * Update mqtt.py * Update discovery.py * fix aiohttp * test * Update const.py * Update addon.py * Update homeassistant.py * Update const.py * Update addon.py * Update homeassistant.py * Update addon.py * Update security.py * Update const.py * Update validate.py * Update const.py * Update addon.py * Update API.md * Update addons.py * Update addon.py * Update validate.py * Update security.py * Update security.py * Update const.py * Update services.py * Update discovery.py * Update API.md * Update services.py * Update API.md * Update services.py * Update discovery.py * Update discovery.py * Update mqtt.py * Update discovery.py * Update discovery.py * Update __init__.py * Update mqtt.py * Update security.py * fix lint * Update core.py * Update API.md * Update services.py
90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
"""Provide MQTT Service."""
|
|
import logging
|
|
|
|
from .interface import ServiceInterface
|
|
from .validate import SCHEMA_SERVICE_MQTT
|
|
from ..const import (
|
|
ATTR_PROVIDER, SERVICE_MQTT, ATTR_HOST, ATTR_PORT, ATTR_USERNAME,
|
|
ATTR_PASSWORD, ATTR_PROTOCOL, ATTR_DISCOVERY_ID)
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class MQTTService(ServiceInterface):
|
|
"""Provide mqtt services."""
|
|
|
|
@property
|
|
def slug(self):
|
|
"""Return slug of this service."""
|
|
return SERVICE_MQTT
|
|
|
|
@property
|
|
def _data(self):
|
|
"""Return data of this service."""
|
|
return self._services.data.mqtt
|
|
|
|
@property
|
|
def schema(self):
|
|
"""Return data schema of this service."""
|
|
return SCHEMA_SERVICE_MQTT
|
|
|
|
@property
|
|
def provider(self):
|
|
"""Return name of service provider."""
|
|
return self._data.get(ATTR_PROVIDER)
|
|
|
|
@property
|
|
def hass_config(self):
|
|
"""Return Home-Assistant mqtt config."""
|
|
if not self.enabled:
|
|
return None
|
|
|
|
hass_config = {
|
|
'host': self._data[ATTR_HOST],
|
|
'port': self._data[ATTR_PORT],
|
|
'protocol': self._data[ATTR_PROTOCOL]
|
|
}
|
|
if ATTR_USERNAME in self._data:
|
|
hass_config['user']: self._data[ATTR_USERNAME]
|
|
if ATTR_PASSWORD in self._data:
|
|
hass_config['password']: self._data[ATTR_PASSWORD]
|
|
|
|
return hass_config
|
|
|
|
def set_service_data(self, provider, data):
|
|
"""Write the data into service object."""
|
|
if self.enabled:
|
|
_LOGGER.error("It is already a mqtt in use from %s", self.provider)
|
|
return False
|
|
|
|
self._data.update(data)
|
|
self._data[ATTR_PROVIDER] = provider
|
|
|
|
if provider == 'homeassistant':
|
|
_LOGGER.info("Use mqtt settings from Home-Assistant")
|
|
self.save()
|
|
return True
|
|
|
|
# discover mqtt to homeassistant
|
|
message = self._services.discovery.send(
|
|
provider, SERVICE_MQTT, None, self.hass_config)
|
|
|
|
self._data[ATTR_DISCOVERY_ID] = message.uuid
|
|
self.save()
|
|
return True
|
|
|
|
def del_service_data(self, provider):
|
|
"""Remove the data from service object."""
|
|
if not self.enabled:
|
|
_LOGGER.warning("Can't remove not exists services.")
|
|
return False
|
|
|
|
discovery_id = self._data.get(ATTR_DISCOVERY_ID)
|
|
if discovery_id:
|
|
self._services.discovery.remove(
|
|
self._services.discovery.get(discovery_id))
|
|
|
|
self._data.clear()
|
|
self.save()
|
|
return True
|