コード例 #1
0
async def async_setup_entry(opp: OpenPeerPower, entry: ConfigEntry,
                            async_add_entities):
    """Set up for AlarmDecoder alarm panels."""
    options = entry.options
    arm_options = options.get(OPTIONS_ARM, DEFAULT_ARM_OPTIONS)
    client = opp.data[DOMAIN][entry.entry_id][DATA_AD]

    entity = AlarmDecoderAlarmPanel(
        client=client,
        auto_bypass=arm_options[CONF_AUTO_BYPASS],
        code_arm_required=arm_options[CONF_CODE_ARM_REQUIRED],
        alt_night_mode=arm_options[CONF_ALT_NIGHT_MODE],
    )
    async_add_entities([entity])

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SERVICE_ALARM_TOGGLE_CHIME,
        {
            vol.Required(ATTR_CODE): cv.string,
        },
        "alarm_toggle_chime",
    )

    platform.async_register_entity_service(
        SERVICE_ALARM_KEYPRESS,
        {
            vol.Required(ATTR_KEYPRESS): cv.string,
        },
        "alarm_keypress",
    )
コード例 #2
0
ファイル: switch.py プロジェクト: OpenPeerPower/core
async def async_setup_platform(
    opp: OpenPeerPower, config: ConfigType, async_add_entities, discovery_info=None
) -> None:
    """Set up the Genius Hub switch entities."""
    if discovery_info is None:
        return

    broker = opp.data[DOMAIN]["broker"]

    async_add_entities(
        [
            GeniusSwitch(broker, z)
            for z in broker.client.zone_objs
            if z.data["type"] == GH_ON_OFF_ZONE
        ]
    )

    # Register custom services
    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SVC_SET_SWITCH_OVERRIDE,
        SET_SWITCH_OVERRIDE_SCHEMA,
        "async_turn_on",
    )
コード例 #3
0
ファイル: climate.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp: OpenPeerPower, entry: ConfigEntry,
                            async_add_entities):
    """Set up MelCloud device climate based on config_entry."""
    mel_devices = opp.data[DOMAIN][entry.entry_id]
    async_add_entities(
        [
            AtaDeviceClimate(mel_device, mel_device.device)
            for mel_device in mel_devices[DEVICE_TYPE_ATA]
        ] + [
            AtwDeviceZoneClimate(mel_device, mel_device.device, zone)
            for mel_device in mel_devices[DEVICE_TYPE_ATW]
            for zone in mel_device.device.zones
        ],
        True,
    )

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SERVICE_SET_VANE_HORIZONTAL,
        {vol.Required(CONF_POSITION): cv.string},
        "async_set_vane_horizontal",
    )
    platform.async_register_entity_service(
        SERVICE_SET_VANE_VERTICAL,
        {vol.Required(CONF_POSITION): cv.string},
        "async_set_vane_vertical",
    )
コード例 #4
0
ファイル: vacuum.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(
    opp: OpenPeerPower,
    entry: ConfigEntry,
    async_add_entities: AddEntitiesCallback,
) -> None:
    """Set up Litter-Robot cleaner using config entry."""
    hub: LitterRobotHub = opp.data[DOMAIN][entry.entry_id]

    entities = []
    for robot in hub.account.robots:
        entities.append(
            LitterRobotCleaner(robot=robot, entity_type=TYPE_LITTER_BOX, hub=hub)
        )

    async_add_entities(entities, True)

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SERVICE_RESET_WASTE_DRAWER,
        {},
        "async_reset_waste_drawer",
    )
    platform.async_register_entity_service(
        SERVICE_SET_SLEEP_MODE,
        {
            vol.Required("enabled"): cv.boolean,
            vol.Optional("start_time"): cv.time,
        },
        "async_set_sleep_mode",
    )
    platform.async_register_entity_service(
        SERVICE_SET_WAIT_TIME,
        {vol.Required("minutes"): vol.All(vol.Coerce(int), vol.In(VALID_WAIT_TIMES))},
        "async_set_wait_time",
    )
コード例 #5
0
ファイル: sensor.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Create the Elk-M1 sensor platform."""
    elk_data = opp.data[DOMAIN][config_entry.entry_id]
    entities = []
    elk = elk_data["elk"]
    create_elk_entities(elk_data, elk.counters, "counter", ElkCounter, entities)
    create_elk_entities(elk_data, elk.keypads, "keypad", ElkKeypad, entities)
    create_elk_entities(elk_data, [elk.panel], "panel", ElkPanel, entities)
    create_elk_entities(elk_data, elk.settings, "setting", ElkSetting, entities)
    create_elk_entities(elk_data, elk.zones, "zone", ElkZone, entities)
    async_add_entities(entities, True)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SENSOR_COUNTER_REFRESH,
        {},
        "async_counter_refresh",
    )
    platform.async_register_entity_service(
        SERVICE_SENSOR_COUNTER_SET,
        ELK_SET_COUNTER_SERVICE_SCHEMA,
        "async_counter_set",
    )
    platform.async_register_entity_service(
        SERVICE_SENSOR_ZONE_BYPASS,
        ELK_USER_CODE_SERVICE_SCHEMA,
        "async_zone_bypass",
    )
    platform.async_register_entity_service(
        SERVICE_SENSOR_ZONE_TRIGGER,
        {},
        "async_zone_trigger",
    )
コード例 #6
0
ファイル: water_heater.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, entry, async_add_entities):
    """Set up Hive thermostat based on a config entry."""

    hive = opp.data[DOMAIN][entry.entry_id]
    devices = hive.session.deviceList.get("water_heater")
    entities = []
    if devices:
        for dev in devices:
            entities.append(HiveWaterHeater(hive, dev))
    async_add_entities(entities, True)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_BOOST_HOT_WATER,
        {
            vol.Optional(ATTR_TIME_PERIOD, default="00:30:00"): vol.All(
                cv.time_period,
                cv.positive_timedelta,
                lambda td: td.total_seconds() // 60,
            ),
            vol.Required(ATTR_ONOFF): vol.In(WATER_HEATER_MODES),
        },
        "async_hot_water_boost",
    )
コード例 #7
0
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up the Rachio switches."""
    zone_entities = []
    has_flex_sched = False
    entities = await opp.async_add_executor_job(_create_entities, opp,
                                                config_entry)
    for entity in entities:
        if isinstance(entity, RachioZone):
            zone_entities.append(entity)
        if isinstance(entity,
                      RachioSchedule) and entity.type == SCHEDULE_TYPE_FLEX:
            has_flex_sched = True

    async_add_entities(entities)
    _LOGGER.info("%d Rachio switch(es) added", len(entities))

    def start_multiple(service):
        """Service to start multiple zones in sequence."""
        zones_list = []
        person = opp.data[DOMAIN_RACHIO][config_entry.entry_id]
        entity_id = service.data[ATTR_ENTITY_ID]
        duration = iter(service.data[ATTR_DURATION])
        default_time = service.data[ATTR_DURATION][0]
        entity_to_zone_id = {
            entity.entity_id: entity.zone_id
            for entity in zone_entities
        }

        for (count, data) in enumerate(entity_id):
            if data in entity_to_zone_id:
                # Time can be passed as a list per zone,
                # or one time for all zones
                time = int(next(duration, default_time)) * 60
                zones_list.append({
                    ATTR_ID: entity_to_zone_id.get(data),
                    ATTR_DURATION: time,
                    ATTR_SORT_ORDER: count,
                })

        if len(zones_list) != 0:
            person.start_multiple_zones(zones_list)
            _LOGGER.debug("Starting zone(s) %s", entity_id)
        else:
            raise OpenPeerPowerError(
                "No matching zones found in given entity_ids")

    opp.services.async_register(
        DOMAIN_RACHIO,
        SERVICE_START_MULTIPLE_ZONES,
        start_multiple,
        schema=START_MULTIPLE_ZONES_SCHEMA,
    )

    if has_flex_sched:
        platform = entity_platform.async_get_current_platform()
        platform.async_register_entity_service(
            SERVICE_SET_ZONE_MOISTURE,
            {vol.Required(ATTR_PERCENT): cv.positive_int},
            "set_moisture_percent",
        )
コード例 #8
0
ファイル: media_player.py プロジェクト: OpenPeerPower/core
async def async_setup_platform(opp, config, async_add_entities, discovery_info=None):
    """Set up the Openhome platform."""

    if not discovery_info:
        return

    openhome_data = opp.data.setdefault(DATA_OPENHOME, set())

    name = discovery_info.get("name")
    description = discovery_info.get("ssdp_description")

    _LOGGER.info("Openhome device found: %s", name)
    device = await opp.async_add_executor_job(Device, description)
    await device.init()

    # if device has already been discovered
    if device.uuid() in openhome_data:
        return True

    entity = OpenhomeDevice(opp, device)

    async_add_entities([entity])
    openhome_data.add(device.uuid())

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_INVOKE_PIN,
        {vol.Required(ATTR_PIN_INDEX): cv.positive_int},
        "async_invoke_pin",
    )
コード例 #9
0
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up climate for a Nexia device."""

    nexia_data = opp.data[DOMAIN][config_entry.entry_id]
    nexia_home = nexia_data[NEXIA_DEVICE]
    coordinator = nexia_data[UPDATE_COORDINATOR]

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SET_HUMIDIFY_SETPOINT,
        SET_HUMIDITY_SCHEMA,
        SERVICE_SET_HUMIDIFY_SETPOINT,
    )
    platform.async_register_entity_service(SERVICE_SET_AIRCLEANER_MODE,
                                           SET_AIRCLEANER_SCHEMA,
                                           SERVICE_SET_AIRCLEANER_MODE)

    entities = []
    for thermostat_id in nexia_home.get_thermostat_ids():
        thermostat = nexia_home.get_thermostat_by_id(thermostat_id)
        for zone_id in thermostat.get_zone_ids():
            zone = thermostat.get_zone_by_id(zone_id)
            entities.append(NexiaZone(coordinator, zone))

    async_add_entities(entities, True)
コード例 #10
0
async def async_setup_platform(opp,
                               opp_config,
                               async_add_entities,
                               discovery_info=None):
    """Create the ViCare climate devices."""
    if discovery_info is None:
        return
    vicare_api = opp.data[VICARE_DOMAIN][VICARE_API]
    heating_type = opp.data[VICARE_DOMAIN][VICARE_HEATING_TYPE]
    async_add_entities([
        ViCareClimate(
            f"{opp.data[VICARE_DOMAIN][VICARE_NAME]} Heating",
            vicare_api,
            heating_type,
        )
    ])

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SET_VICARE_MODE,
        {
            vol.Required(SERVICE_SET_VICARE_MODE_ATTR_MODE):
            vol.In(VICARE_TO_HA_HVAC_HEATING)
        },
        "set_vicare_mode",
    )
コード例 #11
0
ファイル: switch.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up the Flo switches from config entry."""
    devices: list[FloDeviceDataUpdateCoordinator] = opp.data[FLO_DOMAIN][
        config_entry.entry_id
    ]["devices"]
    entities = []
    for device in devices:
        if device.device_type != "puck_oem":
            entities.append(FloSwitch(device))
    async_add_entities(entities)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SET_AWAY_MODE, {}, "async_set_mode_away"
    )
    platform.async_register_entity_service(
        SERVICE_SET_HOME_MODE, {}, "async_set_mode_home"
    )
    platform.async_register_entity_service(
        SERVICE_RUN_HEALTH_TEST, {}, "async_run_health_test"
    )
    platform.async_register_entity_service(
        SERVICE_SET_SLEEP_MODE,
        {
            vol.Required(ATTR_SLEEP_MINUTES, default=120): vol.In(SLEEP_MINUTE_OPTIONS),
            vol.Required(ATTR_REVERT_TO_MODE, default=SYSTEM_MODE_HOME): vol.In(
                SYSTEM_REVERT_MODES
            ),
        },
        "async_set_mode_sleep",
    )
コード例 #12
0
ファイル: lock.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up Z-Wave lock from config entry."""

    @callback
    def async_add_lock(value):
        """Add Z-Wave Lock."""
        lock = ZWaveLock(value)

        async_add_entities([lock])

    opp.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
        async_dispatcher_connect(opp, f"{DOMAIN}_new_{LOCK_DOMAIN}", async_add_lock)
    )

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SET_USERCODE,
        {
            vol.Required(ATTR_CODE_SLOT): vol.Coerce(int),
            vol.Required(ATTR_USERCODE): cv.string,
        },
        "async_set_usercode",
    )

    platform.async_register_entity_service(
        SERVICE_CLEAR_USERCODE,
        {vol.Required(ATTR_CODE_SLOT): vol.Coerce(int)},
        "async_clear_usercode",
    )
コード例 #13
0
async def async_setup_entry(opp, entry, async_add_entities):
    """Set up Neato vacuum with config entry."""
    dev = []
    neato = opp.data.get(NEATO_LOGIN)
    mapdata = opp.data.get(NEATO_MAP_DATA)
    persistent_maps = opp.data.get(NEATO_PERSISTENT_MAPS)
    for robot in opp.data[NEATO_ROBOTS]:
        dev.append(NeatoConnectedVacuum(neato, robot, mapdata, persistent_maps))

    if not dev:
        return

    _LOGGER.debug("Adding vacuums %s", dev)
    async_add_entities(dev, True)

    platform = entity_platform.async_get_current_platform()
    assert platform is not None

    platform.async_register_entity_service(
        "custom_cleaning",
        {
            vol.Optional(ATTR_MODE, default=2): cv.positive_int,
            vol.Optional(ATTR_NAVIGATION, default=1): cv.positive_int,
            vol.Optional(ATTR_CATEGORY, default=4): cv.positive_int,
            vol.Optional(ATTR_ZONE): cv.string,
        },
        "neato_custom_cleaning",
    )
コード例 #14
0
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up Roon MediaPlayer from Config Entry."""
    roon_server = opp.data[DOMAIN][config_entry.entry_id]
    media_players = set()

    # Register entity services
    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SERVICE_TRANSFER,
        {vol.Required(ATTR_TRANSFER): cv.entity_id},
        "async_transfer",
    )

    @callback
    def async_update_media_player(player_data):
        """Add or update Roon MediaPlayer."""
        dev_id = player_data["dev_id"]
        if dev_id not in media_players:
            # new player!
            media_player = RoonDevice(roon_server, player_data)
            media_players.add(dev_id)
            async_add_entities([media_player])
        else:
            # update existing player
            async_dispatcher_send(
                opp, f"room_media_player_update_{dev_id}", player_data
            )

    # start listening for players to be added or changed by the server component
    async_dispatcher_connect(opp, "roon_media_player", async_update_media_player)
コード例 #15
0
async def async_setup_entry(opp: OpenPeerPower, config_entry: ConfigEntry,
                            async_add_entities) -> None:
    """Set up songpal media player."""
    name = config_entry.data[CONF_NAME]
    endpoint = config_entry.data[CONF_ENDPOINT]

    device = Device(endpoint)
    try:
        async with async_timeout.timeout(
                10):  # set timeout to avoid blocking the setup process
            await device.get_supported_methods()
    except (SongpalException, asyncio.TimeoutError) as ex:
        _LOGGER.warning("[%s(%s)] Unable to connect", name, endpoint)
        _LOGGER.debug("Unable to get methods from songpal: %s", ex)
        raise PlatformNotReady from ex

    songpal_entity = SongpalEntity(name, device)
    async_add_entities([songpal_entity], True)

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SET_SOUND_SETTING,
        {
            vol.Required(PARAM_NAME): cv.string,
            vol.Required(PARAM_VALUE): cv.string
        },
        "async_set_sound_setting",
    )
コード例 #16
0
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up AdvantageAir sensor platform."""

    instance = opp.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]

    entities = []
    for ac_key, ac_device in instance["coordinator"].data["aircons"].items():
        entities.append(AdvantageAirTimeTo(instance, ac_key, "On"))
        entities.append(AdvantageAirTimeTo(instance, ac_key, "Off"))
        for zone_key, zone in ac_device["zones"].items():
            # Only show damper sensors when zone is in temperature control
            if zone["type"] != 0:
                entities.append(
                    AdvantageAirZoneVent(instance, ac_key, zone_key))
            # Only show wireless signal strength sensors when using wireless sensors
            if zone["rssi"] > 0:
                entities.append(
                    AdvantageAirZoneSignal(instance, ac_key, zone_key))
    async_add_entities(entities)

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        ADVANTAGE_AIR_SERVICE_SET_TIME_TO,
        {vol.Required("minutes"): cv.positive_int},
        "set_time_to",
    )
コード例 #17
0
async def async_setup_entry(opp, entry, async_add_entities):
    """Set up the Netatmo camera platform."""
    if "access_camera" not in entry.data["token"]["scope"]:
        _LOGGER.info(
            "Cameras are currently not supported with this authentication method"
        )

    data_handler = opp.data[DOMAIN][entry.entry_id][DATA_HANDLER]

    await data_handler.register_data_class(
        CAMERA_DATA_CLASS_NAME, CAMERA_DATA_CLASS_NAME, None
    )
    data_class = data_handler.data.get(CAMERA_DATA_CLASS_NAME)

    if not data_class or not data_class.raw_data:
        raise PlatformNotReady

    all_cameras = []
    for home in data_class.cameras.values():
        for camera in home.values():
            all_cameras.append(camera)

    entities = [
        NetatmoCamera(
            data_handler,
            camera["id"],
            camera["type"],
            camera["home_id"],
            DEFAULT_QUALITY,
        )
        for camera in all_cameras
    ]

    for person_id, person_data in data_handler.data[
        CAMERA_DATA_CLASS_NAME
    ].persons.items():
        opp.data[DOMAIN][DATA_PERSONS][person_id] = person_data.get(ATTR_PSEUDO)

    _LOGGER.debug("Adding cameras %s", entities)
    async_add_entities(entities, True)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SET_PERSONS_HOME,
        {vol.Required(ATTR_PERSONS): vol.All(cv.ensure_list, [cv.string])},
        "_service_set_persons_home",
    )
    platform.async_register_entity_service(
        SERVICE_SET_PERSON_AWAY,
        {vol.Optional(ATTR_PERSON): cv.string},
        "_service_set_person_away",
    )
    platform.async_register_entity_service(
        SERVICE_SET_CAMERA_LIGHT,
        {vol.Required(ATTR_CAMERA_LIGHT_MODE): vol.In(CAMERA_LIGHT_MODES)},
        "_service_set_camera_light",
    )
コード例 #18
0
def async_setup_light_services(opp: OpenPeerPower):
    """Create device-specific services for the ISY Integration."""
    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(SERVICE_SET_ON_LEVEL,
                                           SERVICE_SET_VALUE_SCHEMA,
                                           "async_set_on_level")
    platform.async_register_entity_service(SERVICE_SET_RAMP_RATE,
                                           SERVICE_SET_RAMP_RATE_SCHEMA,
                                           "async_set_ramp_rate")
コード例 #19
0
ファイル: media_player.py プロジェクト: OpenPeerPower/core
async def async_setup_platform(opp,
                               config,
                               async_add_entities,
                               discovery_info=None):
    """Set up the Yamaha platform."""

    # Keep track of configured receivers so that we don't end up
    # discovering a receiver dynamically that we have static config
    # for. Map each device from its zone_id .
    known_zones = opp.data.setdefault(DATA_YAMAHA, set())

    # Get the Infos for configuration from config (YAML) or Discovery
    config_info = YamahaConfigInfo(config=config,
                                   discovery_info=discovery_info)
    # Async check if the Receivers are there in the network
    receivers = await opp.async_add_executor_job(_discovery, config_info)

    entities = []
    for receiver in receivers:
        if receiver.zone in config_info.zone_ignore:
            continue

        entity = YamahaDevice(
            config_info.name,
            receiver,
            config_info.source_ignore,
            config_info.source_names,
            config_info.zone_names,
        )

        # Only add device if it's not already added
        if entity.zone_id not in known_zones:
            known_zones.add(entity.zone_id)
            entities.append(entity)
        else:
            _LOGGER.debug("Ignoring duplicate receiver: %s", config_info.name)

    async_add_entities(entities)

    # Register Service 'select_scene'
    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SERVICE_SELECT_SCENE,
        {vol.Required(ATTR_SCENE): cv.string},
        "set_scene",
    )
    # Register Service 'enable_output'
    platform.async_register_entity_service(
        SERVICE_ENABLE_OUTPUT,
        {
            vol.Required(ATTR_ENABLED): cv.boolean,
            vol.Required(ATTR_PORT): cv.string
        },
        "enable_output",
    )
コード例 #20
0
ファイル: media_player.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up the Monoprice 6-zone amplifier platform."""
    port = config_entry.data[CONF_PORT]

    monoprice = opp.data[DOMAIN][config_entry.entry_id][MONOPRICE_OBJECT]

    sources = _get_sources(config_entry)

    entities = []
    for i in range(1, 4):
        for j in range(1, 7):
            zone_id = (i * 10) + j
            _LOGGER.info("Adding zone %d for port %s", zone_id, port)
            entities.append(
                MonopriceZone(monoprice, sources, config_entry.entry_id,
                              zone_id))

    # only call update before add if it's the first run so we can try to detect zones
    first_run = opp.data[DOMAIN][config_entry.entry_id][FIRST_RUN]
    async_add_entities(entities, first_run)

    platform = entity_platform.async_get_current_platform()

    def _call_service(entities, service_call):
        for entity in entities:
            if service_call.service == SERVICE_SNAPSHOT:
                entity.snapshot()
            elif service_call.service == SERVICE_RESTORE:
                entity.restore()

    @service.verify_domain_control(opp, DOMAIN)
    async def async_service_handle(service_call):
        """Handle for services."""
        entities = await platform.async_extract_from_service(service_call)

        if not entities:
            return

        opp.async_add_executor_job(_call_service, entities, service_call)

    opp.services.async_register(
        DOMAIN,
        SERVICE_SNAPSHOT,
        async_service_handle,
        schema=cv.make_entity_service_schema({}),
    )

    opp.services.async_register(
        DOMAIN,
        SERVICE_RESTORE,
        async_service_handle,
        schema=cv.make_entity_service_schema({}),
    )
コード例 #21
0
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up the Motion Blind from a config entry."""
    entities = []
    motion_gateway = opp.data[DOMAIN][config_entry.entry_id][KEY_GATEWAY]
    coordinator = opp.data[DOMAIN][config_entry.entry_id][KEY_COORDINATOR]

    for blind in motion_gateway.device_list.values():
        if blind.type in POSITION_DEVICE_MAP:
            entities.append(
                MotionPositionDevice(coordinator, blind,
                                     POSITION_DEVICE_MAP[blind.type],
                                     config_entry))

        elif blind.type in TILT_DEVICE_MAP:
            entities.append(
                MotionTiltDevice(coordinator, blind,
                                 TILT_DEVICE_MAP[blind.type], config_entry))

        elif blind.type in TDBU_DEVICE_MAP:
            entities.append(
                MotionTDBUDevice(coordinator, blind,
                                 TDBU_DEVICE_MAP[blind.type], config_entry,
                                 "Top"))
            entities.append(
                MotionTDBUDevice(
                    coordinator,
                    blind,
                    TDBU_DEVICE_MAP[blind.type],
                    config_entry,
                    "Bottom",
                ))
            entities.append(
                MotionTDBUDevice(
                    coordinator,
                    blind,
                    TDBU_DEVICE_MAP[blind.type],
                    config_entry,
                    "Combined",
                ))

        else:
            _LOGGER.warning("Blind type '%s' not yet supported",
                            blind.blind_type)

    async_add_entities(entities)

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(
        SERVICE_SET_ABSOLUTE_POSITION,
        SET_ABSOLUTE_POSITION_SCHEMA,
        SERVICE_SET_ABSOLUTE_POSITION,
    )
コード例 #22
0
ファイル: camera.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, config, async_add_entities):
    """Set up a Blink Camera."""
    data = opp.data[DOMAIN][config.entry_id]
    entities = [
        BlinkCamera(data, name, camera)
        for name, camera in data.cameras.items()
    ]

    async_add_entities(entities)

    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(SERVICE_TRIGGER, {},
                                           "trigger_camera")
コード例 #23
0
ファイル: media_player.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, entry, async_add_entities):
    """Set up the Roku config entry."""
    coordinator = opp.data[DOMAIN][entry.entry_id]
    unique_id = coordinator.data.info.serial_number
    async_add_entities([RokuMediaPlayer(unique_id, coordinator)], True)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SEARCH,
        SEARCH_SCHEMA,
        "search",
    )
コード例 #24
0
ファイル: climate.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, entry, async_add_entities):
    """Set up the Netatmo energy platform."""
    data_handler = opp.data[DOMAIN][entry.entry_id][DATA_HANDLER]

    await data_handler.register_data_class(HOMEDATA_DATA_CLASS_NAME,
                                           HOMEDATA_DATA_CLASS_NAME, None)
    home_data = data_handler.data.get(HOMEDATA_DATA_CLASS_NAME)

    if not home_data or home_data.raw_data == {}:
        raise PlatformNotReady

    if HOMEDATA_DATA_CLASS_NAME not in data_handler.data:
        raise PlatformNotReady

    entities = []
    for home_id in get_all_home_ids(home_data):
        for room_id in home_data.rooms[home_id]:
            signal_name = f"{HOMESTATUS_DATA_CLASS_NAME}-{home_id}"
            await data_handler.register_data_class(HOMESTATUS_DATA_CLASS_NAME,
                                                   signal_name,
                                                   None,
                                                   home_id=home_id)
            home_status = data_handler.data.get(signal_name)
            if home_status and room_id in home_status.rooms:
                entities.append(
                    NetatmoThermostat(data_handler, home_id, room_id))

        opp.data[DOMAIN][DATA_SCHEDULES][home_id] = {
            schedule_id: schedule_data.get("name")
            for schedule_id, schedule_data in (
                data_handler.data[HOMEDATA_DATA_CLASS_NAME].schedules[home_id].
                items())
        }

    opp.data[DOMAIN][DATA_HOMES] = {
        home_id: home_data.get("name")
        for home_id, home_data in (
            data_handler.data[HOMEDATA_DATA_CLASS_NAME].homes.items())
    }

    _LOGGER.debug("Adding climate devices %s", entities)
    async_add_entities(entities, True)

    platform = entity_platform.async_get_current_platform()

    if home_data is not None:
        platform.async_register_entity_service(
            SERVICE_SET_SCHEDULE,
            {vol.Required(ATTR_SCHEDULE_NAME): cv.string},
            "_async_service_set_schedule",
        )
コード例 #25
0
ファイル: switch.py プロジェクト: OpenPeerPower/core
async def async_setup_platform(
    opp: OpenPeerPower,
    config: dict,
    async_add_entities: AddEntitiesCallback,
    discovery_info: dict,
) -> None:
    """Set up the switcher platform for the switch component."""
    if discovery_info is None:
        return

    async def async_set_auto_off_service(entity,
                                         service_call: ServiceCall) -> None:
        """Use for handling setting device auto-off service calls."""
        async with SwitcherV2Api(
                opp.loop,
                device_data.ip_addr,
                device_data.phone_id,
                device_data.device_id,
                device_data.device_password,
        ) as swapi:
            await swapi.set_auto_shutdown(service_call.data[CONF_AUTO_OFF])

    async def async_turn_on_with_timer_service(
            entity, service_call: ServiceCall) -> None:
        """Use for handling turning device on with a timer service calls."""
        async with SwitcherV2Api(
                opp.loop,
                device_data.ip_addr,
                device_data.phone_id,
                device_data.device_id,
                device_data.device_password,
        ) as swapi:
            await swapi.control_device(COMMAND_ON,
                                       service_call.data[CONF_TIMER_MINUTES])

    device_data = opp.data[DOMAIN][DATA_DEVICE]
    async_add_entities([SwitcherControl(opp.data[DOMAIN][DATA_DEVICE])])

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_SET_AUTO_OFF_NAME,
        SERVICE_SET_AUTO_OFF_SCHEMA,
        async_set_auto_off_service,
    )

    platform.async_register_entity_service(
        SERVICE_TURN_ON_WITH_TIMER_NAME,
        SERVICE_TURN_ON_WITH_TIMER_SCHEMA,
        async_turn_on_with_timer_service,
    )
コード例 #26
0
ファイル: binary_sensor.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up the Risco alarm control panel."""
    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(SERVICE_BYPASS_ZONE, {},
                                           "async_bypass_zone")
    platform.async_register_entity_service(SERVICE_UNBYPASS_ZONE, {},
                                           "async_unbypass_zone")

    coordinator = opp.data[DOMAIN][config_entry.entry_id][DATA_COORDINATOR]
    entities = [
        RiscoBinarySensor(coordinator, zone_id, zone)
        for zone_id, zone in coordinator.data.zones.items()
    ]
    async_add_entities(entities, False)
コード例 #27
0
async def async_setup_platform(opp,
                               config,
                               async_add_entities,
                               discovery_info=None):
    """Set up the Dyson fan components."""

    if discovery_info is None:
        return

    _LOGGER.debug("Creating new Dyson fans")
    if DYSON_FAN_DEVICES not in opp.data:
        opp.data[DYSON_FAN_DEVICES] = []

    # Get Dyson Devices from parent component
    has_purecool_devices = False
    device_serials = [device.serial for device in opp.data[DYSON_FAN_DEVICES]]
    for device in opp.data[DYSON_DEVICES]:
        if device.serial not in device_serials:
            if isinstance(device, DysonPureCool):
                has_purecool_devices = True
                dyson_entity = DysonPureCoolEntity(device)
                opp.data[DYSON_FAN_DEVICES].append(dyson_entity)
            elif isinstance(device, DysonPureCoolLink):
                dyson_entity = DysonPureCoolLinkEntity(device)
                opp.data[DYSON_FAN_DEVICES].append(dyson_entity)

    async_add_entities(opp.data[DYSON_FAN_DEVICES])

    # Register custom services
    platform = entity_platform.async_get_current_platform()
    platform.async_register_entity_service(SERVICE_SET_NIGHT_MODE,
                                           SET_NIGHT_MODE_SCHEMA,
                                           "set_night_mode")
    platform.async_register_entity_service(SERVICE_SET_AUTO_MODE,
                                           SET_AUTO_MODE_SCHEMA,
                                           "set_auto_mode")
    platform.async_register_entity_service(SERVICE_SET_DYSON_SPEED,
                                           SET_DYSON_SPEED_SCHEMA,
                                           "service_set_dyson_speed")
    if has_purecool_devices:
        platform.async_register_entity_service(SERVICE_SET_ANGLE,
                                               SET_ANGLE_SCHEMA, "set_angle")
        platform.async_register_entity_service(
            SERVICE_SET_FLOW_DIRECTION_FRONT,
            SET_FLOW_DIRECTION_FRONT_SCHEMA,
            "set_flow_direction_front",
        )
        platform.async_register_entity_service(SERVICE_SET_TIMER,
                                               SET_TIMER_SCHEMA, "set_timer")
コード例 #28
0
async def async_setup_entry(opp, entry, async_add_entities):
    """Set up Hive thermostat based on a config entry."""

    hive = opp.data[DOMAIN][entry.entry_id]
    devices = hive.session.deviceList.get("climate")
    entities = []
    if devices:
        for dev in devices:
            entities.append(HiveClimateEntity(hive, dev))
    async_add_entities(entities, True)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        "boost_heating",
        {
            vol.Required(ATTR_TIME_PERIOD):
            vol.All(
                cv.time_period,
                cv.positive_timedelta,
                lambda td: td.total_seconds() // 60,
            ),
            vol.Optional(ATTR_TEMPERATURE, default="25.0"):
            vol.Coerce(float),
        },
        "async_heating_boost",
    )

    platform.async_register_entity_service(
        SERVICE_BOOST_HEATING_ON,
        {
            vol.Required(ATTR_TIME_PERIOD):
            vol.All(
                cv.time_period,
                cv.positive_timedelta,
                lambda td: td.total_seconds() // 60,
            ),
            vol.Optional(ATTR_TEMPERATURE, default="25.0"):
            vol.Coerce(float),
        },
        "async_heating_boost_on",
    )

    platform.async_register_entity_service(
        SERVICE_BOOST_HEATING_OFF,
        {},
        "async_heating_boost_off",
    )
コード例 #29
0
async def async_setup_entry(opp, config_entry, async_add_entities):
    """Set up the Zigbee Home Automation Door Lock from config entry."""
    entities_to_create = opp.data[DATA_ZHA][DOMAIN]

    unsub = async_dispatcher_connect(
        opp,
        SIGNAL_ADD_ENTITIES,
        functools.partial(discovery.async_add_entities, async_add_entities,
                          entities_to_create),
    )
    opp.data[DATA_ZHA][DATA_ZHA_DISPATCHERS].append(unsub)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(  # type: ignore
        SERVICE_SET_LOCK_USER_CODE,
        {
            vol.Required("code_slot"): vol.Coerce(int),
            vol.Required("user_code"): cv.string,
        },
        "async_set_lock_user_code",
    )

    platform.async_register_entity_service(  # type: ignore
        SERVICE_ENABLE_LOCK_USER_CODE,
        {
            vol.Required("code_slot"): vol.Coerce(int),
        },
        "async_enable_lock_user_code",
    )

    platform.async_register_entity_service(  # type: ignore
        SERVICE_DISABLE_LOCK_USER_CODE,
        {
            vol.Required("code_slot"): vol.Coerce(int),
        },
        "async_disable_lock_user_code",
    )

    platform.async_register_entity_service(  # type: ignore
        SERVICE_CLEAR_LOCK_USER_CODE,
        {
            vol.Required("code_slot"): vol.Coerce(int),
        },
        "async_clear_lock_user_code",
    )
コード例 #30
0
ファイル: water_heater.py プロジェクト: OpenPeerPower/core
async def async_setup_entry(opp: OpenPeerPower, entry: ConfigEntry,
                            async_add_entities):
    """Set up the Tado water heater platform."""

    tado = opp.data[DOMAIN][entry.entry_id][DATA]
    entities = await opp.async_add_executor_job(_generate_entities, tado)

    platform = entity_platform.async_get_current_platform()

    platform.async_register_entity_service(
        SERVICE_WATER_HEATER_TIMER,
        WATER_HEATER_TIMER_SCHEMA,
        "set_timer",
    )

    if entities:
        async_add_entities(entities, True)