예제 #1
0
    def resolve_data(self, value: ZwaveValue) -> NumericSensorDataTemplateData:
        """Resolve helper class data for a discovered value."""

        if value.command_class == CommandClass.BATTERY:
            return NumericSensorDataTemplateData(ENTITY_DESC_KEY_BATTERY, PERCENTAGE)

        if value.command_class == CommandClass.METER:
            meter_scale_type = get_meter_scale_type(value)
            unit = self.find_key_from_matching_set(meter_scale_type, METER_UNIT_MAP)
            # We do this because even though these are energy scales, they don't meet
            # the unit requirements for the energy device class.
            if meter_scale_type in (
                ElectricScale.PULSE_COUNT,
                ElectricScale.KILOVOLT_AMPERE_HOUR,
                ElectricScale.KILOVOLT_AMPERE_REACTIVE_HOUR,
            ):
                return NumericSensorDataTemplateData(
                    ENTITY_DESC_KEY_TOTAL_INCREASING, unit
                )
            # We do this because even though these are power scales, they don't meet
            # the unit requirements for the power device class.
            if meter_scale_type == ElectricScale.KILOVOLT_AMPERE_REACTIVE:
                return NumericSensorDataTemplateData(ENTITY_DESC_KEY_MEASUREMENT, unit)

            return NumericSensorDataTemplateData(
                self.find_key_from_matching_set(
                    meter_scale_type, METER_DEVICE_CLASS_MAP
                ),
                unit,
            )

        if value.command_class == CommandClass.SENSOR_MULTILEVEL:
            sensor_type = get_multilevel_sensor_type(value)
            multilevel_sensor_scale_type = get_multilevel_sensor_scale_type(value)
            unit = self.find_key_from_matching_set(
                multilevel_sensor_scale_type, MULTILEVEL_SENSOR_UNIT_MAP
            )
            if sensor_type == MultilevelSensorType.TARGET_TEMPERATURE:
                return NumericSensorDataTemplateData(
                    ENTITY_DESC_KEY_TARGET_TEMPERATURE, unit
                )
            key = self.find_key_from_matching_set(
                sensor_type, MULTILEVEL_SENSOR_DEVICE_CLASS_MAP
            )
            if key:
                return NumericSensorDataTemplateData(key, unit)

        return NumericSensorDataTemplateData()
    def resolve_data(self, value: ZwaveValue) -> str | None:
        """Resolve helper class data for a discovered value."""

        if value.command_class == CommandClass.BATTERY:
            return ENTITY_DESC_KEY_BATTERY

        if value.command_class == CommandClass.METER:
            scale_type = get_meter_scale_type(value)
            # We do this because even though these are energy scales, they don't meet
            # the unit requirements for the energy device class.
            if scale_type in (
                    ElectricScale.PULSE_COUNT,
                    ElectricScale.KILOVOLT_AMPERE_HOUR,
                    ElectricScale.KILOVOLT_AMPERE_REACTIVE_HOUR,
            ):
                return ENTITY_DESC_KEY_TOTAL_INCREASING
            # We do this because even though these are power scales, they don't meet
            # the unit requirements for the power device class.
            if scale_type == ElectricScale.KILOVOLT_AMPERE_REACTIVE:
                return ENTITY_DESC_KEY_MEASUREMENT

            for key, scale_type_set in METER_DEVICE_CLASS_MAP.items():
                if scale_type in scale_type_set:
                    return key

        if value.command_class == CommandClass.SENSOR_MULTILEVEL:
            sensor_type = get_multilevel_sensor_type(value)
            if sensor_type == MultilevelSensorType.TARGET_TEMPERATURE:
                return ENTITY_DESC_KEY_TARGET_TEMPERATURE
            for (
                    key,
                    sensor_type_set,
            ) in MULTILEVEL_SENSOR_DEVICE_CLASS_MAP.items():
                if sensor_type in sensor_type_set:
                    return key

        return None