コード例 #1
0
    def get_value(self):
        value = 0
        attribute = None

        if CONF_ENTITY_PROPERTY_ATTRIBUTE in self.property_config:
            attribute = self.property_config.get(CONF_ENTITY_PROPERTY_ATTRIBUTE)

        if CONF_ENTITY_PROPERTY_ENTITY in self.property_config:
            property_entity_id = self.property_config.get(CONF_ENTITY_PROPERTY_ENTITY)
            entity = self.hass.states.get(property_entity_id)
            if entity is None:
                _LOGGER.error(f'Entity not found: {property_entity_id}')
                raise SmartHomeError(ERR_DEVICE_NOT_FOUND, "Entity not found")

            if attribute:
                value = entity.attributes.get(attribute)
            else:
                value = entity.state

            if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
                _LOGGER.error(f'Invalid value: {entity}')
                raise SmartHomeError(ERR_INVALID_VALUE, "Invalid value")
            return float(value) if self.type != PROPERTY_BOOL else self.bool_value(value)

        if attribute:
            value = self.state.attributes.get(attribute)

        return float(value) if self.type != PROPERTY_BOOL else self.bool_value(value)
コード例 #2
0
    def __init__(self, hass, state, entity_config, property_config):
        super().__init__(hass, state, entity_config)

        self.instance_unit = {
            'humidity': 'unit.percent',
            'temperature': 'unit.temperature.celsius',
            'pressure': self.config.settings[CONF_PRESSURE_UNIT],
            'water_level': 'unit.percent',
            'co2_level': 'unit.ppm',
            'power': 'unit.watt',
            'voltage': 'unit.volt',
            'battery_level': 'unit.percent',
            'amperage': 'unit.ampere'
        }

        self.property_config = property_config
        self.type = PROPERTY_FLOAT
        self.instance = property_config.get(CONF_ENTITY_PROPERTY_TYPE)

        if CONF_ENTITY_PROPERTY_ENTITY in self.property_config:
            property_entity_id = self.property_config.get(CONF_ENTITY_PROPERTY_ENTITY)
            entity = self.hass.states.get(property_entity_id)
            if entity is None:
                _LOGGER.error(f'Entity not found: {property_entity_id}')
                raise SmartHomeError(ERR_DEVICE_NOT_FOUND, "Entity not found")

            if entity.domain == binary_sensor.DOMAIN:
                self.type = PROPERTY_BOOL
コード例 #3
0
    def get_value(self):
        value = 0
        attribute = None

        if CONF_ENTITY_PROPERTY_ATTRIBUTE in self.property_config:
            attribute = self.property_config.get(
                CONF_ENTITY_PROPERTY_ATTRIBUTE)

        if CONF_ENTITY_PROPERTY_ENTITY in self.property_config:
            property_entity_id = self.property_config.get(
                CONF_ENTITY_PROPERTY_ENTITY)
            entity = self.hass.states.get(property_entity_id)
            if entity is None:
                _LOGGER.error(f'Entity not found: {property_entity_id}')
                raise SmartHomeError(ERR_DEVICE_NOT_FOUND, "Entity not found")

            if attribute:
                value = entity.attributes.get(attribute)
            else:
                value = entity.state

            if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
                _LOGGER.error(f'Invalid value: {entity}')
                raise SmartHomeError(ERR_INVALID_VALUE, "Invalid value")

            if self.instance == 'pressure':
                # Get a conversion multiplier to pascal
                unit = entity.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
                if not unit in PRESSURE_TO_PASCAL:
                    raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                         f"Unsupported pressure unit: {unit}")

                # Convert the value to pascal and then to the chosen Yandex unit
                value = float(
                    value) * PRESSURE_TO_PASCAL[unit] * PRESSURE_FROM_PASCAL[
                        self.config.settings[CONF_PRESSURE_UNIT]]
                return round(value, 2)
            else:
                return float(
                    value) if self.type != PROPERTY_BOOL else self.bool_value(
                        value)

        if attribute:
            value = self.state.attributes.get(attribute)

        return float(value) if self.type != PROPERTY_BOOL else self.bool_value(
            value)
コード例 #4
0
ファイル: prop.py プロジェクト: vtumi/home
    def parameters(self):
        if self.instance in self.instance_unit:
            unit = self.instance_unit[self.instance]
            return {'instance': self.instance, 'unit': unit}

        raise SmartHomeError(
            ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
            "unit not found for type: {}".format(self.instance))
コード例 #5
0
    def get_value(self):
        value = 0
        if self.state.domain == vacuum.DOMAIN:
            value = self.state.attributes.get(vacuum.ATTR_BATTERY_LEVEL)

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE, "Invalid value")

        return float(value)
コード例 #6
0
    def get_value(self):
        value = False
        if self.state.domain == binary_sensor.DOMAIN:
            value = self.state.state

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE, "Invalid value")

        return self.bool_value(value)
コード例 #7
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == fan.DOMAIN or self.state.domain == humidifier.DOMAIN:
            value = self.state.attributes.get('water_level')

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid water level property value")

        return float(value)
コード例 #8
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == air_quality.DOMAIN:
            value = self.state.attributes.get(air_quality.ATTR_PM_10)

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid pm10 density property value")

        return float(value)
コード例 #9
0
    def get_value(self):
        value = 0.0
        if self.state.domain == sensor.DOMAIN:
            value = self.state.state

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(
                ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                "Invalid value")

        # Get a conversion multiplier to pascal
        unit = self.state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
        if not unit in PRESSURE_TO_PASCAL:
            raise SmartHomeError(
                ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                f"Unsupported pressure unit: {unit}")

        # Convert the value to pascal and then to the chosen Yandex unit
        return float(value) * PRESSURE_TO_PASCAL[unit] * PRESSURE_FROM_PASCAL[self.config.settings[CONF_PRESSURE_UNIT]]
コード例 #10
0
    def get_value(self):
        value = 0
        if self.state.domain == sensor.DOMAIN:
            value = self.state.state
        elif self.state.domain == climate.DOMAIN:
            value = self.state.attributes.get(climate.ATTR_CURRENT_HUMIDITY)

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE, "Invalid value")

        return float(value)
コード例 #11
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == air_quality.DOMAIN:
            value = self.state.attributes.get(
                'total_volatile_organic_compounds')

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid tvoc property value")

        return float(value)
コード例 #12
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = False
        if self.state.domain == binary_sensor.DOMAIN:
            value = self.state.state

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(
                ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                "Invalid {} property value".format(self.instance))

        return self.event_value(value)
コード例 #13
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == sensor.DOMAIN:
            value = self.state.state
        elif self.state.domain == switch.DOMAIN or self.state.domain == light.DOMAIN:
            value = self.state.attributes.get('current')

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid amperage property value")

        return float(value)
コード例 #14
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0.0
        if self.state.domain == sensor.DOMAIN:
            value = self.state.state
        elif self.state.domain == climate.DOMAIN or self.state.domain == fan.DOMAIN or self.state.domain == humidifier.DOMAIN:
            value = self.state.attributes.get(climate.ATTR_CURRENT_TEMPERATURE)

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid temperature property value")

        return float(value)
コード例 #15
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == sensor.DOMAIN:
            value = self.state.state
        elif self.state.domain == air_quality.DOMAIN or self.state.domain == fan.DOMAIN:
            value = self.state.attributes.get(air_quality.ATTR_CO2)

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid co2 level property value")

        return float(value)
コード例 #16
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def __init__(self, hass, state, entity_config, property_config):
        super().__init__(hass, state, entity_config)

        self.instance_unit = {
            'humidity':
            'unit.percent',
            'temperature':
            'unit.temperature.celsius',
            'pressure':
            PRESSURE_UNITS_TO_YANDEX_UNITS[
                self.config.settings[CONF_PRESSURE_UNIT]],
            'water_level':
            'unit.percent',
            'co2_level':
            'unit.ppm',
            'power':
            'unit.watt',
            'voltage':
            'unit.volt',
            'battery_level':
            'unit.percent',
            'amperage':
            'unit.ampere',
            'illumination':
            'unit.illumination.lux',
            'tvoc':
            'unit.density.mcg_m3',
            'pm1_density':
            'unit.density.mcg_m3',
            'pm2.5_density':
            'unit.density.mcg_m3',
            'pm10_density':
            'unit.density.mcg_m3'
        }

        self.property_config = property_config
        self.type = PROPERTY_FLOAT
        self.instance = property_config.get(CONF_ENTITY_PROPERTY_TYPE)

        if CONF_ENTITY_PROPERTY_ENTITY in self.property_config:
            property_entity_id = self.property_config.get(
                CONF_ENTITY_PROPERTY_ENTITY)
            entity = self.hass.states.get(property_entity_id)
            if entity is None:
                _LOGGER.error(f'Entity not found: {property_entity_id}')
                raise SmartHomeError(ERR_DEVICE_NOT_FOUND, "Entity not found")

            if entity.domain == binary_sensor.DOMAIN and self.instance in EVENTS_VALUES.keys(
            ):
                self.type = PROPERTY_EVENT
                self.values = EVENTS_VALUES.get(self.instance)
コード例 #17
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def parameters(self):
        if self.instance in self.instance_unit:
            unit = self.instance_unit[self.instance]
            return {'instance': self.instance, 'unit': unit}
        elif self.type == PROPERTY_EVENT:
            return {
                'instance': self.instance,
                'events': [{
                    'value': v
                } for v in self.values]
            } if self.values else {}

        raise SmartHomeError(
            ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
            "Unit not found for type: {}".format(self.instance))
コード例 #18
0
ファイル: prop.py プロジェクト: Nemiroff/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == sensor.DOMAIN:
            value = self.state.state
        elif self.state.domain == switch.DOMAIN:
            if 'power' in self.state.attributes:
                value = self.state.attributes.get('power')
            elif 'load_power' in self.state.attributes:
                value = self.state.attributes.get('load_power')

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid power property value")

        return float(value)
コード例 #19
0
ファイル: prop.py プロジェクト: vvv279/yandex_smart_home
    def get_value(self):
        value = 0
        if self.state.domain == vacuum.DOMAIN:
            value = self.state.attributes.get(vacuum.ATTR_BATTERY_LEVEL)
        elif self.state.domain == sensor.DOMAIN or self.state.domain == binary_sensor.DOMAIN:
            if self.state.attributes.get(
                    ATTR_DEVICE_CLASS) == DEVICE_CLASS_BATTERY:
                value = self.state.state
            elif self.state.attributes.get(ATTR_BATTERY_LEVEL) is not None:
                value = self.state.attributes.get(ATTR_BATTERY_LEVEL)

        if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
            raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE,
                                 "Invalid battery property value")

        return float(value)
コード例 #20
0
ファイル: prop.py プロジェクト: VVi3ard/yandex_smart_home
    def __init__(self, hass, state, entity_config, property_config):
        super().__init__(hass, state, entity_config)

        self.hass = hass
        self.state = state
        self.entity_config = entity_config
        self.property_config = property_config
        self.type = PROPERTY_FLOAT
        self.instance = property_config.get(CONF_ENTITY_PROPERTY_TYPE)

        if CONF_ENTITY_PROPERTY_ENTITY in self.property_config:
            property_entity_id = self.property_config.get(
                CONF_ENTITY_PROPERTY_ENTITY)
            entity = self.hass.states.get(property_entity_id)
            if entity is None:
                _LOGGER.error(f'Entity not found: {property_entity_id}')
                raise SmartHomeError(ERR_DEVICE_NOT_FOUND, "Entity not found")

            if entity.domain == binary_sensor.DOMAIN:
                self.type = PROPERTY_BOOL
コード例 #21
0
 async def error(*args, **kwargs):
     raise SmartHomeError(ERR_INVALID_ACTION, '')
コード例 #22
0
 async def set_state(self, *args, **kwargs):
     raise SmartHomeError(ERR_INVALID_ACTION, '')