Last Updated on : 2024-03-04 08:46:23
A data point (DP) is the smallest unit used to describe a device feature in device information. Each DP has two parts: DP configuration in product information and DP value in device information. Certain types of DP might possess extended properties.
Tuya categorizes the DP into three types based on their functionality: quick toggle, display, and operation. This topic describes how to use the device or group model to get DPs for displaying data and operating features on a custom app UI.
You can configure quick toggles and common functions to present them on the device or group card.
val plugin = PluginManager.service(IAppDpParserPlugin::class.java)
The DP parsing module does not listen for changes in the properties of the device or group. To use this module, call the update
method at least once before requesting the cache DP model with API calls. The DP model IDeviceDpParser
contains information about all DPs of the current device or group.
It is recommended to call the update
method to update the cache when:
/**
* Update group information.
* @param groupBean The group model data to update.
* @return The group DP model after parsing.
*/
fun update(groupBean: GroupBean): IDeviceDpParser
/**
* Update device information.
* @param deviceBean The device model data to update.
* @return The device DP model after parsing.
*/
fun update(deviceBean: DeviceBean): IDeviceDpParser
After the update
method is called, the respective DP model will be cached for use by other business logic.
/**
* Get the parsed DP model data.
* @param id The [DeviceBean.getDevId] of the device model or the [GroupBean.getId] of the group model.
* @return Return the cache if it exists. Otherwise, return null.
*/
fun getParser(id: String): IDeviceDpParser?
When a device or group is longer needed, manually call the delete method to clear the existing cache DP model.
/**
* Remove the cache of the respective ID.
* @param id The [DeviceBean.getDevId] of the device model or the [GroupBean.getId] of the group model.
*/
fun remove(id: String)
/**
* Remove all the caches of the respective IDs in the list.
* @param ids The IDs of the caches to remove.
*/
fun removeAll(ids: List<String>)
interface IDeviceDpParser {
/**
* The display DP.
* @return Return all the parsed display DPs of the current device or group. Return an empty list if no display DP exists.
*/
fun getDisplayDp(): List<IDpParser<Any>>
/**
* The operation DP.
* @return Return all the parsed operation DPs of the current device or group. Return an empty list if no operation DP exists.
*/
fun getOperableDp(): List<IDpParser<Any>>
/**
* All DPs of the current device. Only some methods are supported.
* Supported methods: [IDpParser.getDpId], [IDpParser.getSchema], [IDpParser.getStandardSchema], and [IDpParser.getValue].
*
* If the value of the DP does not exist in the current device or group, [IDpParser.getValue] returns [NoValue].
*
*If you call any methods not listed above, [UnsupportedOperationException] will be thrown.
*@return Return all the DPs configured in the product information of the current device.
*/
fun getAllDp(): List<IDpParser<Any>>
/**
* Quick toggle
* @return Return the quick toggle of the current device. If no quick toggle exists, return null.
*/
fun getSwitchDp(): ISwitch?
}
A generic DP refers to a single feature, such as on/off, temperature, and brightness. On the Tuya IoT Development Platform, you can configure whether to control or show them on the mobile app. Most DP values are displayed after being concatenated with a unit or converted.
interface IDpParser<T> {
/**
* The iconfont value of the current DP. It can be empty.
*/
fun getIconFont(): String?
/**
* The name of the current DP.
*/
fun getDisplayTitle(): String
/**
* The content displayed in the quick access area for the current operation DP.
*/
fun getDisplayStatusForQuickOp(): String
/**
* The content displayed in the status view area for the current display DP.
*/
fun getDisplayStatus(): String
/**
* The ID of the DP.
*/
fun getDpId(): String
/**
* The UI style, such as percent, percent1, countdown, and countdown1.
*/
fun getDpShowType(): String
/**
* The DP data type, such as Boolean, enum, number, and string.
*/
fun getType(): String
/**
* The original DP configurations.
*/
fun getSchema(): SchemaBean
/**
* The original DP configurations.
*/
fun getStandardSchema(): FunctionSchemaBean?
/**
* This is used to generate the commands sent to the device.
* @param status The target value to be sent to the device, which must match the DP data type.
*/
fun getCommands(status: T): String
/**
* The current DP value.
*/
fun getValue(): T
}
Below are the derived methods for different types of generic DPs.
This section describes the features of these derived methods.
It indicates the on/off feature, with the value being either true
or false
.
interface IBoolDp : IDpParser<Boolean> {
/**
* Return the display text configured in the product information for the corresponding status. For example, true => "On", false => "Off"
*/
fun getDisplayMessageForStatus(value: Boolean): String
}
The command sent to the device is one of the values returned by the getRange()
method.
interface IEnumDp : IDpParser<String> {
/**
* The value range of the DP.
*/
fun getRange(): List<String>
/**
* The display text for the DP value.
*/
fun getNames(): List<String>
}
You can set the value range, step, and scale for a DP of number type on the Tuya IoT Development Platform.
The DP display type determines the display value, and the calculation rule varies by display type.
interface INumDp : IDpParser<Int> {
/**
* The minimum value.
*/
fun getMin(): Int
/**
* The maximum value.
*/
fun getMax(): Int
/**
* The step.
*/
fun getStep(): Int
/**
* The scale.
*/
fun getScale(): Int
/**
* The unit.
*/
fun getUnit(): String
}
interface ILightDp : IDpParser<String> {
companion object {
// The dpCode for legacy colored lights. 14-bit HSV value. The standard dpCode is colour_data.
const val STRING_STANDARD_CODE_COLOUR_DATA_V1 = "colour_data"
// The dpCode for new colored lights. 12-bit HSV value. The standard dpCode is colour_data_v2.
const val STRING_STANDARD_CODE_COLOUR_DATA_V2 = "colour_data_v2"
}
// The light color, with values ranging from the minimum to the maximum.
fun getLightColorRange(): IntArray
// The description of the current color, for example: red, green, and blue. If the description is not available, the key of the respective multilingual text is returned instead, which starts with color_, such as color_red, color_indigo, and color_cyan_green.
fun getLightColorDesc(context: Context): String
//The minimum value: [0] saturation, [1] brightness
fun getColorMin(): IntArray
//The maximum value: [0] saturation, [1] brightness
fun getColorMax(): IntArray
//The converted light color data: [0] hue, [1] saturation, [2] brightness.
fun getColorCurrent(): FloatArray
//Check the version of the data type. The parsing rule varies by version.
fun isNewColorData(): Boolean
//Convert color data to string.
fun getStringColorHSV(hsvPoint: FloatArray, hsvValue: IntArray): String
}
The DP of string type has no additional properties.
interface IStringDp : IDpParser<String>
A quick toggle can consist of one or more DPs. It can be used to turn on or off multiple Boolean
DPs at once.
You can set the data transfer type for a DP to report only, send only, or send and report.
A quick toggle is used to control devices, so the report only type does not apply. There are two types of quick toggle:
If one of the DPs in a quick toggle is set to send only, this quick toggle will be parsed as the without status type.
interface ISwitch {
companion object {
const val SWITCH_TYPE_NORMAL = -1
const val SWITCH_TYPE_WRITE_ONLY = -2
const val SWITCH_STATUS_ON = 1
const val SWITCH_STATUS_OFF = 2
}
/**
* All the DP IDs included in the current quick toggle.
*/
fun getSwitchDpIds(): List<String>
/**
* The current status of the quick toggle. If the quick toggle consists of multiple DPs, setting any one of them to true will return true. False is returned when all DP values are set to false.
*/
fun getValue(dpId: String): Boolean
/**
* The type of the quick toggle. Send and report: [SWITCH_TYPE_NORMAL]
* Send only: [SWITCH_TYPE_WRITE_ONLY]
*/
fun getSwitchType(): Int
/**
* The status of the quick toggle, either [SWITCH_STATUS_ON] or [SWITCH_STATUS_OFF]
*/
fun getSwitchStatus(): Int
/**
* This is used to generate the commands sent to the device.
* @param obj The DP of the "send only" type does not use the Boolean parameter.
*/
fun getCommands(obj: Any): String
}
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback