def test_deprecated_logger_with_one_config_attribute(caplog):
    """Test if the logger outputs the correct message if only one of line and file attribute is available in config."""
    file: str = "configuration.yaml"
    line: int = 54
    replacement = f"'mars' option near {file}:{line} is deprecated"
    config = OrderedDict([("mars", "blah")])
    setattr(config, "__config_file__", file)

    cv.deprecated("mars", replacement_key="jupiter", default=False)(config)

    assert len(caplog.records) == 1
    assert replacement not in caplog.text
    assert ("The 'mars' option is deprecated, please replace it with 'jupiter'"
            ) in caplog.text

    caplog.clear()
    assert len(caplog.records) == 0

    config = OrderedDict([("mars", "blah")])
    setattr(config, "__line__", line)

    cv.deprecated("mars", replacement_key="jupiter", default=False)(config)

    assert len(caplog.records) == 1
    assert replacement not in caplog.text
    assert ("The 'mars' option is deprecated, please replace it with 'jupiter'"
            ) in caplog.text

    caplog.clear()
    assert len(caplog.records) == 0
def test_deprecated_cant_find_module():
    """Test if the current module cannot be inspected."""
    with patch("inspect.getmodule", return_value=None):
        # This used to raise.
        cv.deprecated(
            "mars",
            replacement_key="jupiter",
            default=False,
        )
def test_deprecated_with_replacement_key_and_default(caplog, schema):
    """
    Test deprecation with a replacement key and default.

    Expected behavior:
        - Outputs the appropriate deprecation warning if key is detected
        - Processes schema moving the value from key to replacement_key
        - Processes schema changing nothing if only replacement_key provided
        - No warning if only replacement_key provided
        - No warning if neither key nor replacement_key are provided
            - Adds replacement_key with default value in this case
    """
    deprecated_schema = vol.All(
        cv.deprecated("mars", replacement_key="jupiter", default=False),
        schema)

    test_data = {"mars": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 1
    assert ("The 'mars' option is deprecated, please replace it with 'jupiter'"
            ) in caplog.text
    assert {"jupiter": True} == output

    caplog.clear()
    assert len(caplog.records) == 0

    test_data = {"jupiter": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 0
    assert test_data == output

    test_data = {"venus": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 0
    assert {"venus": True, "jupiter": False} == output

    deprecated_schema_with_default = vol.All(
        vol.Schema({
            "venus": cv.boolean,
            vol.Optional("mars", default=False): cv.boolean,
            vol.Optional("jupiter", default=False): cv.boolean,
        }),
        cv.deprecated("mars", replacement_key="jupiter", default=False),
    )

    test_data = {"mars": True}
    output = deprecated_schema_with_default(test_data.copy())
    assert len(caplog.records) == 1
    assert ("The 'mars' option is deprecated, please replace it with 'jupiter'"
            ) in caplog.text
    assert {"jupiter": True} == output
def test_deprecated_with_replacement_key(caplog, schema):
    """
    Test deprecation behaves correctly when only a replacement key is provided.

    Expected behavior:
        - Outputs the appropriate deprecation warning if key is detected
        - Processes schema moving the value from key to replacement_key
        - Processes schema changing nothing if only replacement_key provided
        - No warning if only replacement_key provided
        - No warning or difference in output if neither key nor
            replacement_key are provided
    """
    deprecated_schema = vol.All(
        cv.deprecated("mars", replacement_key="jupiter"), schema)

    test_data = {"mars": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 1
    assert ("The 'mars' option is deprecated, please replace it with 'jupiter'"
            ) in caplog.text
    assert {"jupiter": True} == output

    caplog.clear()
    assert len(caplog.records) == 0

    test_data = {"jupiter": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 0
    assert test_data == output

    test_data = {"venus": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 0
    assert test_data == output
def test_deprecated_with_default(caplog, schema):
    """
    Test deprecation behaves correctly with a default value.

    This is likely a scenario that would never occur.

    Expected behavior:
        - Behaves identically as when the default value was not present
    """
    deprecated_schema = vol.All(cv.deprecated("mars", default=False), schema)

    test_data = {"mars": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 1
    assert caplog.records[0].name == __name__
    assert (
        "The 'mars' option is deprecated, please remove it from your configuration"
    ) in caplog.text
    assert test_data == output

    caplog.clear()
    assert len(caplog.records) == 0

    test_data = {"venus": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 0
    assert test_data == output
def test_deprecated_with_no_optionals(caplog, schema):
    """
    Test deprecation behaves correctly when optional params are None.

    Expected behavior:
        - Outputs the appropriate deprecation warning if key is detected
        - Processes schema without changing any values
        - No warning or difference in output if key is not provided
    """
    deprecated_schema = vol.All(cv.deprecated("mars"), schema)

    test_data = {"mars": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 1
    assert caplog.records[0].name in [
        __name__,
        "openpeerpower.helpers.config_validation",
    ]
    assert (
        "The 'mars' option is deprecated, please remove it from your configuration"
    ) in caplog.text
    assert test_data == output

    caplog.clear()
    assert len(caplog.records) == 0

    test_data = {"venus": True}
    output = deprecated_schema(test_data.copy())
    assert len(caplog.records) == 0
    assert test_data == output
示例#7
0
PI_HOLE_SCHEMA = vol.Schema(
    vol.All(
        {
            vol.Required(CONF_HOST): cv.string,
            vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
            vol.Optional(CONF_API_KEY): cv.string,
            vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
            vol.Optional(CONF_LOCATION, default=DEFAULT_LOCATION): cv.string,
            vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean,
        },
    )
)

CONFIG_SCHEMA = vol.Schema(
    vol.All(
        cv.deprecated(DOMAIN),
        {DOMAIN: vol.Schema(vol.All(cv.ensure_list, [PI_HOLE_SCHEMA]))},
    ),
    extra=vol.ALLOW_EXTRA,
)


async def async_setup(opp, config):
    """Set up the Pi-hole integration."""

    opp.data[DOMAIN] = {}

    # import
    if DOMAIN in config:
        for conf in config[DOMAIN]:
            opp.async_create_task(
示例#8
0
    cv.boolean,
    vol.Optional(CONF_ZIGPY):
    dict,
    vol.Optional(CONF_RADIO_TYPE):
    cv.enum(RadioType),
    vol.Optional(CONF_USB_PATH):
    cv.string,
    vol.Optional(CONF_CUSTOM_QUIRKS_PATH):
    cv.isdir,
}
CONFIG_SCHEMA = vol.Schema(
    {
        DOMAIN:
        vol.Schema(
            vol.All(
                cv.deprecated(CONF_USB_PATH),
                cv.deprecated(CONF_BAUDRATE),
                cv.deprecated(CONF_RADIO_TYPE),
                ZHA_CONFIG_SCHEMA,
            ), ),
    },
    extra=vol.ALLOW_EXTRA,
)

# Zigbee definitions
CENTICELSIUS = "C-100"

# Internal definitions
_LOGGER = logging.getLogger(__name__)

示例#9
0
def ensure_unique_hosts(value):
    """Validate that all configs have a unique host."""
    vol.Schema(vol.Unique("duplicate host entries found"))(
        [entry[CONF_HOST] for entry in value]
    )
    return value


PLATFORMS = [MP_DOMAIN]

CONFIG_SCHEMA = vol.Schema(
    {
        DOMAIN: vol.All(
            cv.ensure_list,
            [
                cv.deprecated(CONF_PORT),
                vol.Schema(
                    {
                        vol.Required(CONF_HOST): cv.string,
                        vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
                        vol.Optional(CONF_PORT): cv.port,
                        vol.Optional(CONF_ON_ACTION): cv.SCRIPT_SCHEMA,
                    }
                ),
            ],
            ensure_unique_hosts,
        )
    },
    extra=vol.ALLOW_EXTRA,
)
示例#10
0
from openpeerpower.util import Throttle

from .const import (
    CONF_FFMPEG_ARGUMENTS,
    DATA_COORDINATOR,
    DEFAULT_FFMPEG_ARGUMENTS,
    DEFAULT_TIMEOUT,
    DOMAIN,
    MANUFACTURER,
)
from .coordinator import CanaryDataUpdateCoordinator

MIN_TIME_BETWEEN_SESSION_RENEW: Final = timedelta(seconds=90)

PLATFORM_SCHEMA: Final = vol.All(
    cv.deprecated(CONF_FFMPEG_ARGUMENTS),
    PARENT_PLATFORM_SCHEMA.extend({
        vol.Optional(CONF_FFMPEG_ARGUMENTS, default=DEFAULT_FFMPEG_ARGUMENTS):
        cv.string
    }),
)


async def async_setup_entry(
    opp: OpenPeerPower,
    entry: ConfigEntry,
    async_add_entities: AddEntitiesCallback,
) -> None:
    """Set up Canary sensors based on a config entry."""
    coordinator: CanaryDataUpdateCoordinator = opp.data[DOMAIN][
        entry.entry_id][DATA_COORDINATOR]
示例#11
0
STATUS_WAIT = 3

PORT_CLEANUP_CHECK_INTERVAL_SECS = 1


def _has_all_unique_names_and_ports(bridges):
    """Validate that each homekit bridge configured has a unique name."""
    names = [bridge[CONF_NAME] for bridge in bridges]
    ports = [bridge[CONF_PORT] for bridge in bridges]
    vol.Schema(vol.Unique())(names)
    vol.Schema(vol.Unique())(ports)
    return bridges


BRIDGE_SCHEMA = vol.All(
    cv.deprecated(CONF_ZEROCONF_DEFAULT_INTERFACE),
    cv.deprecated(CONF_SAFE_MODE),
    cv.deprecated(CONF_AUTO_START),
    vol.Schema(
        {
            vol.Optional(CONF_HOMEKIT_MODE, default=DEFAULT_HOMEKIT_MODE):
            vol.In(HOMEKIT_MODES),
            vol.Optional(CONF_NAME, default=BRIDGE_NAME):
            vol.All(cv.string, vol.Length(min=3, max=25)),
            vol.Optional(CONF_PORT, default=DEFAULT_PORT):
            cv.port,
            vol.Optional(CONF_IP_ADDRESS):
            vol.All(ipaddress.ip_address, cv.string),
            vol.Optional(CONF_ADVERTISE_IP):
            vol.All(ipaddress.ip_address, cv.string),
            vol.Optional(CONF_AUTO_START, default=DEFAULT_AUTO_START):
示例#12
0
                      | SUPPORT_VOLUME_MUTE
                      | SUPPORT_SELECT_SOURCE
                      | SUPPORT_NEXT_TRACK
                      | SUPPORT_PREVIOUS_TRACK
                      | SUPPORT_PLAY_MEDIA
                      | SUPPORT_BROWSE_MEDIA
                      | SUPPORT_PLAY
                      | SUPPORT_PAUSE
                      | SUPPORT_STOP)

CONF_ON_ACTION = "turn_on_action"

DEFAULT_API_VERSION = 1

PLATFORM_SCHEMA = vol.All(
    cv.deprecated(CONF_HOST),
    cv.deprecated(CONF_NAME),
    cv.deprecated(CONF_API_VERSION),
    cv.deprecated(CONF_ON_ACTION),
    PLATFORM_SCHEMA.extend({
        vol.Required(CONF_HOST):
        cv.string,
        vol.Remove(CONF_NAME):
        cv.string,
        vol.Optional(CONF_API_VERSION, default=DEFAULT_API_VERSION):
        vol.Coerce(int),
        vol.Remove(CONF_ON_ACTION):
        cv.SCRIPT_SCHEMA,
    }),
)
示例#13
0
    vol.Schema(
        {
            vol.Required(CONF_HOST, default=DEFAULT_HOST): cv.string,
            vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
            vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
            vol.Optional(CONF_USERNAME): cv.string,
            vol.Optional(CONF_PASSWORD): cv.string,
            vol.Optional(CONF_SSL, default=False): cv.boolean,
            vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
            vol.Optional(CONF_VERSION, default=DEFAULT_VERSION): vol.In([2, 3]),
        }
    )
)

CONFIG_SCHEMA = vol.Schema(
    vol.All(cv.deprecated(DOMAIN), {DOMAIN: vol.All(cv.ensure_list, [GLANCES_SCHEMA])}),
    extra=vol.ALLOW_EXTRA,
)


async def async_setup(opp: OpenPeerPower, config: ConfigType) -> bool:
    """Configure Glances using config flow only."""
    if DOMAIN in config:
        for entry in config[DOMAIN]:
            opp.async_create_task(
                opp.config_entries.flow.async_init(
                    DOMAIN, context={"source": SOURCE_IMPORT}, data=entry
                )
            )

    return True
示例#14
0
_LOGGER: Final = logging.getLogger(__name__)

DEFAULT_DEVELOPMENT: Final = "0"
# Cast to be able to load custom cards.
# My to be able to check url and version info.
DEFAULT_CORS: Final[list[str]] = ["https://cast.openpeerpower.io"]
NO_LOGIN_ATTEMPT_THRESHOLD: Final = -1

MAX_CLIENT_SIZE: Final = 1024**2 * 16

STORAGE_KEY: Final = DOMAIN
STORAGE_VERSION: Final = 1
SAVE_DELAY: Final = 180

HTTP_SCHEMA: Final = vol.All(
    cv.deprecated(CONF_BASE_URL),
    vol.Schema({
        vol.Optional(CONF_SERVER_HOST):
        vol.All(cv.ensure_list, vol.Length(min=1), [cv.string]),
        vol.Optional(CONF_SERVER_PORT, default=SERVER_PORT):
        cv.port,
        vol.Optional(CONF_BASE_URL):
        cv.string,
        vol.Optional(CONF_SSL_CERTIFICATE):
        cv.isfile,
        vol.Optional(CONF_SSL_PEER_CERTIFICATE):
        cv.isfile,
        vol.Optional(CONF_SSL_KEY):
        cv.isfile,
        vol.Optional(CONF_CORS_ORIGINS, default=DEFAULT_CORS):
        vol.All(cv.ensure_list, [cv.string]),
示例#15
0
文件: fan.py 项目: OpenPeerPower/core
CONF_OSCILLATING_TEMPLATE = "oscillating_template"
CONF_DIRECTION_TEMPLATE = "direction_template"
CONF_ON_ACTION = "turn_on"
CONF_OFF_ACTION = "turn_off"
CONF_SET_PERCENTAGE_ACTION = "set_percentage"
CONF_SET_SPEED_ACTION = "set_speed"
CONF_SET_OSCILLATING_ACTION = "set_oscillating"
CONF_SET_DIRECTION_ACTION = "set_direction"
CONF_SET_PRESET_MODE_ACTION = "set_preset_mode"

_VALID_STATES = [STATE_ON, STATE_OFF]
_VALID_OSC = [True, False]
_VALID_DIRECTIONS = [DIRECTION_FORWARD, DIRECTION_REVERSE]

FAN_SCHEMA = vol.All(
    cv.deprecated(CONF_ENTITY_ID),
    cv.deprecated(CONF_SPEED_LIST),
    cv.deprecated(CONF_SPEED_TEMPLATE),
    cv.deprecated(CONF_SET_SPEED_ACTION),
    vol.Schema({
        vol.Optional(CONF_FRIENDLY_NAME):
        cv.string,
        vol.Required(CONF_VALUE_TEMPLATE):
        cv.template,
        vol.Optional(CONF_SPEED_TEMPLATE):
        cv.template,
        vol.Optional(CONF_PERCENTAGE_TEMPLATE):
        cv.template,
        vol.Optional(CONF_PRESET_MODE_TEMPLATE):
        cv.template,
        vol.Optional(CONF_OSCILLATING_TEMPLATE):
示例#16
0
            vol.All(
                {
                    vol.Required(CONF_USERNAME):
                    cv.string,
                    vol.Required(CONF_PASSWORD):
                    cv.string,
                    vol.Optional(CONF_FEEDERS):
                    vol.All(cv.ensure_list, [cv.positive_int]),
                    vol.Optional(CONF_FLAPS):
                    vol.All(cv.ensure_list, [cv.positive_int]),
                    vol.Optional(CONF_PETS):
                    vol.All(cv.ensure_list, [cv.positive_int]),
                    vol.Optional(CONF_SCAN_INTERVAL):
                    cv.time_period,
                },
                cv.deprecated(CONF_FEEDERS),
                cv.deprecated(CONF_FLAPS),
                cv.deprecated(CONF_PETS),
                cv.deprecated(CONF_SCAN_INTERVAL),
            ))
    },
    extra=vol.ALLOW_EXTRA,
)


async def async_setup(opp: OpenPeerPower, config: dict) -> bool:
    """Set up the Sure Petcare integration."""
    conf = config[DOMAIN]
    opp.data.setdefault(DOMAIN, {})

    try:
示例#17
0
CONF_LEVEL_TEMPLATE = "level_template"
CONF_TEMPERATURE_TEMPLATE = "temperature_template"
CONF_TEMPERATURE_ACTION = "set_temperature"
CONF_COLOR_TEMPLATE = "color_template"
CONF_COLOR_ACTION = "set_color"
CONF_WHITE_VALUE_TEMPLATE = "white_value_template"
CONF_WHITE_VALUE_ACTION = "set_white_value"
CONF_EFFECT_ACTION = "set_effect"
CONF_EFFECT_LIST_TEMPLATE = "effect_list_template"
CONF_EFFECT_TEMPLATE = "effect_template"
CONF_MAX_MIREDS_TEMPLATE = "max_mireds_template"
CONF_MIN_MIREDS_TEMPLATE = "min_mireds_template"
CONF_SUPPORTS_TRANSITION = "supports_transition_template"

LIGHT_SCHEMA = vol.All(
    cv.deprecated(CONF_ENTITY_ID),
    vol.Schema(
        {
            vol.Required(CONF_ON_ACTION): cv.SCRIPT_SCHEMA,
            vol.Required(CONF_OFF_ACTION): cv.SCRIPT_SCHEMA,
            vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
            vol.Optional(CONF_ICON_TEMPLATE): cv.template,
            vol.Optional(CONF_ENTITY_PICTURE_TEMPLATE): cv.template,
            vol.Optional(CONF_AVAILABILITY_TEMPLATE): cv.template,
            vol.Optional(CONF_LEVEL_ACTION): cv.SCRIPT_SCHEMA,
            vol.Optional(CONF_LEVEL_TEMPLATE): cv.template,
            vol.Optional(CONF_FRIENDLY_NAME): cv.string,
            vol.Optional(CONF_ENTITY_ID): cv.entity_ids,
            vol.Optional(CONF_TEMPERATURE_TEMPLATE): cv.template,
            vol.Optional(CONF_TEMPERATURE_ACTION): cv.SCRIPT_SCHEMA,
            vol.Optional(CONF_COLOR_TEMPLATE): cv.template,
示例#18
0
)
from .legacy import DeviceScanner  # noqa: F401 pylint: disable=unused-import

SERVICE_SEE = "see"

SOURCE_TYPES = (
    SOURCE_TYPE_GPS,
    SOURCE_TYPE_ROUTER,
    SOURCE_TYPE_BLUETOOTH,
    SOURCE_TYPE_BLUETOOTH_LE,
)

NEW_DEVICE_DEFAULTS_SCHEMA = vol.Any(
    None,
    vol.All(
        cv.deprecated(CONF_AWAY_HIDE, invalidation_version="0.107.0"),
        vol.Schema({
            vol.Optional(CONF_TRACK_NEW, default=DEFAULT_TRACK_NEW):
            cv.boolean,
            vol.Optional(CONF_AWAY_HIDE, default=DEFAULT_AWAY_HIDE):
            cv.boolean,
        }),
    ),
)
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_SCAN_INTERVAL):
    cv.time_period,
    vol.Optional(CONF_TRACK_NEW):
    cv.boolean,
    vol.Optional(CONF_CONSIDER_HOME, default=DEFAULT_CONSIDER_HOME):
    vol.All(cv.time_period, cv.positive_timedelta),
示例#19
0
CONF_X10_SCHEMA = vol.All(
    vol.Schema(
        {
            vol.Required(CONF_HOUSECODE): cv.string,
            vol.Required(CONF_UNITCODE): vol.Range(min=1, max=16),
            vol.Required(CONF_PLATFORM): cv.string,
            vol.Optional(CONF_DIM_STEPS): vol.Range(min=2, max=255),
        }
    )
)


CONFIG_SCHEMA = vol.Schema(
    {
        DOMAIN: vol.All(
            cv.deprecated(CONF_X10_ALL_UNITS_OFF),
            cv.deprecated(CONF_X10_ALL_LIGHTS_ON),
            cv.deprecated(CONF_X10_ALL_LIGHTS_OFF),
            vol.Schema(
                {
                    vol.Exclusive(
                        CONF_PORT, "plm_or_hub", msg=CONF_PLM_HUB_MSG
                    ): cv.string,
                    vol.Exclusive(
                        CONF_HOST, "plm_or_hub", msg=CONF_PLM_HUB_MSG
                    ): cv.string,
                    vol.Optional(CONF_IP_PORT): cv.port,
                    vol.Optional(CONF_HUB_USERNAME): cv.string,
                    vol.Optional(CONF_HUB_PASSWORD): cv.string,
                    vol.Optional(CONF_HUB_VERSION, default=2): vol.In([1, 2]),
                    vol.Optional(CONF_OVERRIDE): vol.All(
示例#20
0
    vol.Optional(CONF_PICTURE):
    cv.template,
    vol.Optional(CONF_AVAILABILITY):
    cv.template,
    vol.Optional(CONF_ATTRIBUTES):
    vol.Schema({cv.string: cv.template}),
    vol.Optional(CONF_UNIT_OF_MEASUREMENT):
    cv.string,
    vol.Optional(CONF_DEVICE_CLASS):
    DEVICE_CLASSES_SCHEMA,
    vol.Optional(CONF_UNIQUE_ID):
    cv.string,
})

LEGACY_SENSOR_SCHEMA = vol.All(
    cv.deprecated(ATTR_ENTITY_ID),
    vol.Schema({
        vol.Required(CONF_VALUE_TEMPLATE):
        cv.template,
        vol.Optional(CONF_ICON_TEMPLATE):
        cv.template,
        vol.Optional(CONF_ENTITY_PICTURE_TEMPLATE):
        cv.template,
        vol.Optional(CONF_FRIENDLY_NAME_TEMPLATE):
        cv.template,
        vol.Optional(CONF_AVAILABILITY_TEMPLATE):
        cv.template,
        vol.Optional(CONF_ATTRIBUTE_TEMPLATES, default={}):
        vol.Schema({cv.string: cv.template}),
        vol.Optional(CONF_FRIENDLY_NAME):
        cv.string,
示例#21
0
CONF_SLOTS = "slots"

SWITCH_SCHEMA = vol.Schema({
    vol.Required(CONF_NAME): cv.string,
    vol.Optional(CONF_COMMAND_OFF): data_packet,
    vol.Optional(CONF_COMMAND_ON): data_packet,
})

OLD_SWITCH_SCHEMA = vol.Schema({
    vol.Optional(CONF_COMMAND_OFF): data_packet,
    vol.Optional(CONF_COMMAND_ON): data_packet,
    vol.Optional(CONF_FRIENDLY_NAME): cv.string,
})

PLATFORM_SCHEMA = vol.All(
    cv.deprecated(CONF_HOST),
    cv.deprecated(CONF_SLOTS),
    cv.deprecated(CONF_TIMEOUT),
    cv.deprecated(CONF_TYPE),
    PLATFORM_SCHEMA.extend({
        vol.Required(CONF_MAC):
        mac_address,
        vol.Optional(CONF_HOST):
        cv.string,
        vol.Optional(CONF_SWITCHES, default=[]):
        vol.Any(
            cv.schema_with_slug_keys(OLD_SWITCH_SCHEMA),
            vol.All(cv.ensure_list, [SWITCH_SCHEMA]),
        ),
    }),
)
示例#22
0
BASE_SCHEMA = vol.Schema(
    {
        vol.Optional(CONF_DEBUG): cv.boolean,
        vol.Optional(CONF_AUTOMATIC_ADD, default=False): cv.boolean,
        vol.Optional(CONF_DEVICES, default={}): {cv.string: _ensure_device},
    },
)

DEVICE_SCHEMA = BASE_SCHEMA.extend({vol.Required(CONF_DEVICE): cv.string})

PORT_SCHEMA = BASE_SCHEMA.extend(
    {vol.Required(CONF_PORT): cv.port, vol.Optional(CONF_HOST): cv.string}
)

CONFIG_SCHEMA = vol.Schema(
    {DOMAIN: vol.All(cv.deprecated(CONF_DEBUG), vol.Any(DEVICE_SCHEMA, PORT_SCHEMA))},
    extra=vol.ALLOW_EXTRA,
)

PLATFORMS = ["switch", "sensor", "light", "binary_sensor", "cover"]


async def async_setup(opp, config):
    """Set up the RFXtrx component."""
    if DOMAIN not in config:
        return True

    data = {
        CONF_HOST: config[DOMAIN].get(CONF_HOST),
        CONF_PORT: config[DOMAIN].get(CONF_PORT),
        CONF_DEVICE: config[DOMAIN].get(CONF_DEVICE),
示例#23
0

def embedded_broker_deprecated(value):
    """Warn user that embedded MQTT broker is deprecated."""
    _LOGGER.warning(
        "The embedded MQTT broker has been deprecated and will stop working"
        "after June 5th, 2019. Use an external broker instead. For"
        "instructions, see https://www.openpeerpower.io/docs/mqtt/broker")
    return value


CONFIG_SCHEMA = vol.Schema(
    {
        DOMAIN:
        vol.All(
            cv.deprecated(CONF_TLS_VERSION),
            vol.Schema({
                vol.Optional(CONF_CLIENT_ID):
                cv.string,
                vol.Optional(CONF_KEEPALIVE, default=DEFAULT_KEEPALIVE):
                vol.All(vol.Coerce(int), vol.Range(min=15)),
                vol.Optional(CONF_BROKER):
                cv.string,
                vol.Optional(CONF_PORT, default=DEFAULT_PORT):
                cv.port,
                vol.Optional(CONF_USERNAME):
                cv.string,
                vol.Optional(CONF_PASSWORD):
                cv.string,
                vol.Optional(CONF_CERTIFICATE):
                vol.Any("auto", cv.isfile),
示例#24
0
_LOGGER = logging.getLogger(__name__)

ATTR_FAN_ACTION = "fan_action"

CONF_COOL_AWAY_TEMPERATURE = "away_cool_temperature"
CONF_HEAT_AWAY_TEMPERATURE = "away_heat_temperature"
CONF_DEV_ID = "thermostat"
CONF_LOC_ID = "location"

DEFAULT_COOL_AWAY_TEMPERATURE = 88
DEFAULT_HEAT_AWAY_TEMPERATURE = 61

ATTR_PERMANENT_HOLD = "permanent_hold"

PLATFORM_SCHEMA = vol.All(
    cv.deprecated(CONF_REGION),
    PLATFORM_SCHEMA.extend({
        vol.Required(CONF_USERNAME):
        cv.string,
        vol.Required(CONF_PASSWORD):
        cv.string,
        vol.Optional(CONF_COOL_AWAY_TEMPERATURE,
                     default=DEFAULT_COOL_AWAY_TEMPERATURE):
        vol.Coerce(int),
        vol.Optional(CONF_HEAT_AWAY_TEMPERATURE,
                     default=DEFAULT_HEAT_AWAY_TEMPERATURE):
        vol.Coerce(int),
        vol.Optional(CONF_REGION):
        cv.string,
        vol.Optional(CONF_DEV_ID):
        cv.string,
示例#25
0
from openpeerpower import config_entries
from openpeerpower.const import CONF_NAME
from openpeerpower.core import OpenPeerPower
import openpeerpower.helpers.config_validation as cv

from .const import ATTR_TARIFF, DEFAULT_NAME, DEFAULT_TARIFF, DOMAIN, PLATFORMS, TARIFFS

UI_CONFIG_SCHEMA = vol.Schema({
    vol.Required(CONF_NAME, default=DEFAULT_NAME):
    str,
    vol.Required(ATTR_TARIFF, default=DEFAULT_TARIFF):
    vol.In(TARIFFS),
})
CONFIG_SCHEMA = vol.Schema(
    vol.All(cv.deprecated(DOMAIN), {DOMAIN: cv.ensure_list(UI_CONFIG_SCHEMA)}),
    extra=vol.ALLOW_EXTRA,
)


async def async_setup(opp: OpenPeerPower, config: dict):
    """
    Set up the electricity price sensor from configuration.yaml.

    ```yaml
    pvpc_hourly_pricing:
      - name: PVPC manual ve
        tariff: electric_car
      - name: PVPC manual nocturna
        tariff: discrimination
        timeout: 3
示例#26
0
from openpeerpower.core import OpenPeerPower, callback
import openpeerpower.helpers.config_validation as cv
from openpeerpower.helpers.device_registry import CONNECTION_NETWORK_MAC
from openpeerpower.helpers.dispatcher import async_dispatcher_connect
from openpeerpower.helpers.typing import ConfigType

from .common import FritzBoxTools, FritzDevice
from .const import DATA_FRITZ, DEFAULT_DEVICE_NAME, DOMAIN

_LOGGER = logging.getLogger(__name__)

YAML_DEFAULT_HOST = "169.254.1.1"
YAML_DEFAULT_USERNAME = "******"

PLATFORM_SCHEMA = vol.All(
    cv.deprecated(CONF_HOST),
    cv.deprecated(CONF_USERNAME),
    cv.deprecated(CONF_PASSWORD),
    PARENT_PLATFORM_SCHEMA.extend({
        vol.Optional(CONF_HOST, default=YAML_DEFAULT_HOST):
        cv.string,
        vol.Optional(CONF_USERNAME, default=YAML_DEFAULT_USERNAME):
        cv.string,
        vol.Optional(CONF_PASSWORD):
        cv.string,
    }),
)


async def async_get_scanner(opp: OpenPeerPower, config: ConfigType):
    """Import legacy FRITZ!Box configuration."""
示例#27
0
    cv.string,
    vol.Required(CONF_USERNAME):
    cv.string,
    vol.Required(CONF_PASSWORD):
    cv.string,
    vol.Required(CONF_TOKEN):
    cv.string,
    vol.Optional(CONF_EVENTS, default=[]):
    vol.All(cv.ensure_list, [cv.string]),
    vol.Optional(CONF_CUSTOM_URL):
    cv.string,
    vol.Optional(CONF_NAME):
    cv.string,
})

CONFIG_SCHEMA = cv.deprecated(DOMAIN)


async def async_setup(opp: OpenPeerPower, config: dict):
    """Set up the DoorBird component."""
    opp.data.setdefault(DOMAIN, {})

    # Provide an endpoint for the doorstations to call to trigger events
    opp.http.register_view(DoorBirdRequestView)

    def _reset_device_favorites_handler(event):
        """Handle clearing favorites on device."""
        token = event.data.get("token")

        if token is None:
            return
示例#28
0
_TRIGGER_SCHEMA = vol.All(
    cv.ensure_list,
    [
        vol.All(
            vol.Schema({vol.Required(CONF_PLATFORM): str},
                       extra=vol.ALLOW_EXTRA),
            _platform_validator,
        )
    ],
)

_CONDITION_SCHEMA = vol.All(cv.ensure_list, [cv.CONDITION_SCHEMA])

PLATFORM_SCHEMA = vol.All(
    cv.deprecated(CONF_HIDE_ENTITY, invalidation_version="0.107"),
    vol.Schema({
        # str on purpose
        CONF_ID:
        str,
        CONF_ALIAS:
        cv.string,
        vol.Optional(CONF_DESCRIPTION):
        cv.string,
        vol.Optional(CONF_INITIAL_STATE):
        cv.boolean,
        vol.Optional(CONF_HIDE_ENTITY, default=DEFAULT_HIDE_ENTITY):
        cv.boolean,
        vol.Required(CONF_TRIGGER):
        _TRIGGER_SCHEMA,
        vol.Optional(CONF_CONDITION):
示例#29
0
from . import config_flow, const
from .common import (
    _LOGGER,
    WithingsLocalOAuth2Implementation,
    async_get_data_manager,
    async_remove_data_manager,
    get_data_manager_by_webhook_id,
    json_message_response,
)

DOMAIN = const.DOMAIN

CONFIG_SCHEMA = vol.Schema(
    {
        DOMAIN: vol.All(
            cv.deprecated(const.CONF_PROFILES),
            vol.Schema(
                {
                    vol.Required(CONF_CLIENT_ID): vol.All(cv.string, vol.Length(min=1)),
                    vol.Required(CONF_CLIENT_SECRET): vol.All(
                        cv.string, vol.Length(min=1)
                    ),
                    vol.Optional(const.CONF_USE_WEBHOOK, default=False): cv.boolean,
                    vol.Optional(const.CONF_PROFILES): vol.All(
                        cv.ensure_list,
                        vol.Unique(),
                        vol.Length(min=1),
                        [vol.All(cv.string, vol.Length(min=1))],
                    ),
                }
            ),
示例#30
0
        vol.Optional(CONF_NAME, default=DEFAULT_NAME):
        cv.string,
        vol.Optional(CONF_PORT, default=DEFAULT_API_PORT):
        cv.port,
        vol.Optional(CONF_VERIFY_SSL, default=False):
        cv.boolean,
        vol.Optional(CONF_ARP_PING, default=False):
        cv.boolean,
        vol.Optional(CONF_FORCE_DHCP, default=False):
        cv.boolean,
        vol.Optional(CONF_DETECTION_TIME, default=DEFAULT_DETECTION_TIME):
        cv.time_period,
    }))

CONFIG_SCHEMA = vol.Schema(
    vol.All(cv.deprecated(DOMAIN),
            {DOMAIN: vol.All(cv.ensure_list, [MIKROTIK_SCHEMA])}),
    extra=vol.ALLOW_EXTRA,
)


async def async_setup(opp, config):
    """Import the Mikrotik component from config."""

    if DOMAIN in config:
        for entry in config[DOMAIN]:
            opp.async_create_task(
                opp.config_entries.flow.async_init(
                    DOMAIN, context={"source": SOURCE_IMPORT}, data=entry))

    return True