Esempio n. 1
0
def test_setup_platform(hass, mock_openzwave):
    """Test invalid device config."""
    mock_device = MagicMock()
    hass.data[DATA_NETWORK] = MagicMock()
    hass.data[zwave.DATA_DEVICES] = {456: mock_device}
    async_add_devices = MagicMock()

    result = yield from zwave.async_setup_platform(
        hass, None, async_add_devices, None)
    assert not result
    assert not async_add_devices.called

    result = yield from zwave.async_setup_platform(
        hass, None, async_add_devices, {const.DISCOVERY_DEVICE: 123})
    assert not result
    assert not async_add_devices.called

    result = yield from zwave.async_setup_platform(
        hass, None, async_add_devices, {const.DISCOVERY_DEVICE: 456})
    assert result
    assert async_add_devices.called
    assert len(async_add_devices.mock_calls) == 1
    assert async_add_devices.mock_calls[0][1][0] == [mock_device]
Esempio n. 2
0
def test_setup_platform(hass, mock_openzwave):
    """Test invalid device config."""
    mock_device = MagicMock()
    hass.data[DATA_NETWORK] = MagicMock()
    hass.data[zwave.DATA_DEVICES] = {456: mock_device}
    async_add_devices = MagicMock()

    result = yield from zwave.async_setup_platform(hass, None,
                                                   async_add_devices, None)
    assert not result
    assert not async_add_devices.called

    result = yield from zwave.async_setup_platform(
        hass, None, async_add_devices, {const.DISCOVERY_DEVICE: 123})
    assert not result
    assert not async_add_devices.called

    result = yield from zwave.async_setup_platform(
        hass, None, async_add_devices, {const.DISCOVERY_DEVICE: 456})
    assert result
    assert async_add_devices.called
    assert len(async_add_devices.mock_calls) == 1
    assert async_add_devices.mock_calls[0][1][0] == [mock_device]
Esempio n. 3
0
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
    """Set up the Z-Wave Lock platform."""
    yield from zwave.async_setup_platform(
        hass, config, async_add_devices, discovery_info)

    network = hass.data[zwave.const.DATA_NETWORK]

    def set_usercode(service):
        """Set the usercode to index X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)
        usercode = service.data.get(ATTR_USERCODE)

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            if len(str(usercode)) < 4:
                _LOGGER.error("Invalid code provided: (%s) "
                              "usercode must be atleast 4 and at most"
                              " %s digits",
                              usercode, len(value.data))
                break
            value.data = str(usercode)
            break

    def get_usercode(service):
        """Get a usercode at index X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            _LOGGER.info("Usercode at slot %s is: %s", value.index, value.data)
            break

    def clear_usercode(service):
        """Set usercode to slot X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)
        data = ''

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            for i in range(len(value.data)):
                data += '\0'
                i += 1
            _LOGGER.debug('Data to clear lock: %s', data)
            value.data = data
            _LOGGER.info("Usercode at slot %s is cleared", value.index)
            break

    hass.services.async_register(
        DOMAIN, SERVICE_SET_USERCODE, set_usercode,
        schema=SET_USERCODE_SCHEMA)
    hass.services.async_register(
        DOMAIN, SERVICE_GET_USERCODE, get_usercode,
        schema=GET_USERCODE_SCHEMA)
    hass.services.async_register(
        DOMAIN, SERVICE_CLEAR_USERCODE, clear_usercode,
        schema=CLEAR_USERCODE_SCHEMA)
Esempio n. 4
0
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
    """Set up the Z-Wave Lock platform."""
    yield from zwave.async_setup_platform(hass, config, async_add_devices,
                                          discovery_info)

    descriptions = load_yaml_config_file(
        path.join(path.dirname(__file__), 'services.yaml'))
    network = hass.data[zwave.const.DATA_NETWORK]

    def set_usercode(service):
        """Set the usercode to index X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)
        usercode = service.data.get(ATTR_USERCODE)

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            if len(str(usercode)) < 4:
                _LOGGER.error(
                    "Invalid code provided: (%s) "
                    "usercode must be atleast 4 and at most"
                    " %s digits", usercode, len(value.data))
                break
            value.data = str(usercode)
            break

    def get_usercode(service):
        """Get a usercode at index X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            _LOGGER.info("Usercode at slot %s is: %s", value.index, value.data)
            break

    def clear_usercode(service):
        """Set usercode to slot X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)
        data = ''

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            for i in range(len(value.data)):
                data += '\0'
                i += 1
            _LOGGER.debug('Data to clear lock: %s', data)
            value.data = data
            _LOGGER.info("Usercode at slot %s is cleared", value.index)
            break

    hass.services.async_register(DOMAIN,
                                 SERVICE_SET_USERCODE,
                                 set_usercode,
                                 descriptions.get(SERVICE_SET_USERCODE),
                                 schema=SET_USERCODE_SCHEMA)
    hass.services.async_register(DOMAIN,
                                 SERVICE_GET_USERCODE,
                                 get_usercode,
                                 descriptions.get(SERVICE_GET_USERCODE),
                                 schema=GET_USERCODE_SCHEMA)
    hass.services.async_register(DOMAIN,
                                 SERVICE_CLEAR_USERCODE,
                                 clear_usercode,
                                 descriptions.get(SERVICE_CLEAR_USERCODE),
                                 schema=CLEAR_USERCODE_SCHEMA)
Esempio n. 5
0
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
    """Generic Z-Wave platform setup."""
    yield from zwave.async_setup_platform(
        hass, config, async_add_devices, discovery_info)

    descriptions = load_yaml_config_file(
        path.join(path.dirname(__file__), 'services.yaml'))
    network = hass.data[zwave.ZWAVE_NETWORK]

    def set_usercode(service):
        """Set the usercode to index X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)
        usercode = service.data.get(ATTR_USERCODE)

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            if len(str(usercode)) > 4:
                _LOGGER.error('Invalid code provided: (%s)'
                              ' usercode must %s or less digits',
                              usercode, len(value.data))
                break
            value.data = str(usercode)
            break

    def get_usercode(service):
        """Get a usercode at index X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            _LOGGER.info('Usercode at slot %s is: %s', value.index, value.data)
            break

    def clear_usercode(service):
        """Set usercode to slot X on the lock."""
        node_id = service.data.get(zwave.const.ATTR_NODE_ID)
        lock_node = network.nodes[node_id]
        code_slot = service.data.get(ATTR_CODE_SLOT)
        data = ''

        for value in lock_node.get_values(
                class_id=zwave.const.COMMAND_CLASS_USER_CODE).values():
            if value.index != code_slot:
                continue
            for i in range(len(value.data)):
                data += '\0'
                i += 1
            _LOGGER.debug('Data to clear lock: %s', data)
            value.data = data
            _LOGGER.info('Usercode at slot %s is cleared', value.index)
            break

    hass.services.async_register(DOMAIN,
                                 SERVICE_SET_USERCODE,
                                 set_usercode,
                                 descriptions.get(SERVICE_SET_USERCODE),
                                 schema=SET_USERCODE_SCHEMA)
    hass.services.async_register(DOMAIN,
                                 SERVICE_GET_USERCODE,
                                 get_usercode,
                                 descriptions.get(SERVICE_GET_USERCODE),
                                 schema=GET_USERCODE_SCHEMA)
    hass.services.async_register(DOMAIN,
                                 SERVICE_CLEAR_USERCODE,
                                 clear_usercode,
                                 descriptions.get(SERVICE_CLEAR_USERCODE),
                                 schema=CLEAR_USERCODE_SCHEMA)