mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-06-25 03:16:30 +00:00

* Improve gdbus error handling * Fix logging type * Detect no dbus * Fix issue with complex * Update hassio/dbus/__init__.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/hostname.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/rauc.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/systemd.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Fix black
82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
"""Provide the MQTT Service."""
|
|
import logging
|
|
from typing import Any, Dict
|
|
|
|
from hassio.addons.addon import Addon
|
|
from hassio.exceptions import ServicesError
|
|
from hassio.validate import NETWORK_PORT
|
|
import voluptuous as vol
|
|
|
|
from ..const import (
|
|
ATTR_ADDON,
|
|
ATTR_HOST,
|
|
ATTR_PASSWORD,
|
|
ATTR_PORT,
|
|
ATTR_PROTOCOL,
|
|
ATTR_SSL,
|
|
ATTR_USERNAME,
|
|
SERVICE_MQTT,
|
|
)
|
|
from ..interface import ServiceInterface
|
|
|
|
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
|
|
|
|
|
# pylint: disable=no-value-for-parameter
|
|
SCHEMA_SERVICE_MQTT = vol.Schema(
|
|
{
|
|
vol.Required(ATTR_HOST): vol.Coerce(str),
|
|
vol.Required(ATTR_PORT): NETWORK_PORT,
|
|
vol.Optional(ATTR_USERNAME): vol.Coerce(str),
|
|
vol.Optional(ATTR_PASSWORD): vol.Coerce(str),
|
|
vol.Optional(ATTR_SSL, default=False): vol.Boolean(),
|
|
vol.Optional(ATTR_PROTOCOL, default="3.1.1"): vol.All(
|
|
vol.Coerce(str), vol.In(["3.1", "3.1.1"])
|
|
),
|
|
}
|
|
)
|
|
|
|
SCHEMA_CONFIG_MQTT = SCHEMA_SERVICE_MQTT.extend(
|
|
{vol.Required(ATTR_ADDON): vol.Coerce(str)}
|
|
)
|
|
|
|
|
|
class MQTTService(ServiceInterface):
|
|
"""Provide MQTT services."""
|
|
|
|
@property
|
|
def slug(self) -> str:
|
|
"""Return slug of this service."""
|
|
return SERVICE_MQTT
|
|
|
|
@property
|
|
def _data(self) -> Dict[str, Any]:
|
|
"""Return data of this service."""
|
|
return self.sys_services.data.mqtt
|
|
|
|
@property
|
|
def schema(self) -> vol.Schema:
|
|
"""Return data schema of this service."""
|
|
return SCHEMA_SERVICE_MQTT
|
|
|
|
def set_service_data(self, addon: Addon, data: Dict[str, Any]) -> None:
|
|
"""Write the data into service object."""
|
|
if self.enabled:
|
|
_LOGGER.error("It is already a MQTT in use from %s", self._data[ATTR_ADDON])
|
|
raise ServicesError()
|
|
|
|
self._data.update(data)
|
|
self._data[ATTR_ADDON] = addon.slug
|
|
|
|
_LOGGER.info("Set %s as service provider for mqtt", addon.slug)
|
|
self.save()
|
|
|
|
def del_service_data(self, addon: Addon) -> None:
|
|
"""Remove the data from service object."""
|
|
if not self.enabled:
|
|
_LOGGER.warning("Can't remove not exists services")
|
|
raise ServicesError()
|
|
|
|
self._data.clear()
|
|
self.save()
|