更新时间:2024-01-09 05:42:52下载pdf
下文主要介绍场景模型的构建过程,包括条件和动作两个主体部分的构建。
类 | 功能说明 |
---|---|
GeofenceConditionBuilder |
创建 位置变化时 条件 |
WeatherConditionBuilder |
创建 气象变化时 条件 |
SunRiseSetConditionBuilder |
创建 气象变化时-日出日落前后时间点 条件 |
TimingConditionBuilder |
创建 定时 条件 |
DeviceConditionBuilder |
创建 设备状态变化时 或 家人回家 条件 |
类 | 功能说明 |
---|---|
DelayActionBuilder |
创建 延时执行 动作 |
NotifyActionBuilder |
创建 发送通知提醒 动作 |
LinkageRuleActionBuilder |
创建 选择已有智能场景 动作 |
DeviceActionBuilder |
创建 控制单个设备 动作 |
ConditionBase
属性 | 类型 | 说明 |
---|---|---|
id | String? | 条件 ID |
condType | Int? | 条件表达式匹配类型,参考 CondType.type |
entityType | Int | 条件类型,参考 ConditionEntityType.type |
entityId | String? | 条件内容 ID。
|
entitySubIds | String? | 条件相关功能内容 ID。
|
expr | MutableList<Any?>? | 条件表达式 |
extraInfo | MutableMap<String, Any?>? | 条件扩展信息 |
CondType
属性 | 类型 | 说明 |
---|---|---|
type | Int | 条件表达式的匹配类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
EXPR_MATCH | 1 | 表达式匹配 |
SIMPLE_MATCH | 2 | 简单匹配,说明:raw 类型和 string 类型的 DP 时, |
ConditionEntityType
属性 | 类型 | 说明 |
---|---|---|
type | Int | 条件类型 |
枚举实例 | 实例属性值(括号内是常量描述符) | 说明 |
---|---|---|
MANUAL | 99(CONDITION_TYPE_MANUAL ) |
一键执行 |
WEATHER | 3(CONDITION_TYPE_WEATHER ) |
天气(不包括日出日落前后时间点) |
SUN_RISE_SET | 16(CONDITION_TYPE_WEATHER_SUN ) |
日出日落前后时间点 |
TIMER | 6(CONDITION_TYPE_TIMER ) |
定时 |
DEVICE | 1(CONDITION_TYPE_DEVICE ) |
设备 |
PIR | 7(CONDITION_TYPE_PIR ) |
PIR 设备 |
CONDITION_CALCULATE | 13(CONDITION_TYPE_WITH_TIME ) |
持续时间 |
LOCK_MEMBER_GO_HOME | 11(CONDITION_TYPE_LOCK ) |
门锁设备家人回家 |
GEOFENCE | 10(CONDITION_TYPE_GEO_FENCING ) |
地理围栏 |
FACE_DETECT | 9(CONDITION_TYPE_FACE_DETECT ) |
人脸识别 |
KAFKA | 23(CONDITION_TYPE_KAFKA ) |
Kafka 消息类触发 |
ARMED_STATE | 12(CLIENT_INTERNAL_CONDITION_TYPE_ARM_CLEAR_CLIENT_BIT ) |
安防智能守护 |
ActionBase
属性 | 类型 | 说明 |
---|---|---|
id | String? | 动作 ID |
ruleId | String? | 归属的联动 ID |
actionExecutor | String? | 动作执行器 |
executorProperty | MutableMap<String, Any?>? | 动作执行内容 |
extraProperty | MutableMap<String, Any?>? | 动作附属信息 |
entityId | String? | 动作内容 ID |
类说明
class GeofenceConditionBuilder(radius: Int, lat: Double, lng: Double, address: String, geofenceType: String)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
raidus | Int | 设置地理围栏的半径,单位:米 |
lat | Double | 地理围栏中心坐标的纬度 |
lng | Double | 地理围栏中心坐标的经度 |
address | String | 围栏中心坐标描述 |
geofenceType | String | 地理围栏类型,参考 GeofencingType.type |
Kotlin 示例
// radius,lat,lon 和 address 可从地理围栏设置完成处取得
val radius = 100
val lat: Double = 30.30288959184809
val lon: Double = 120.0640840491766
val address = "XX 影视"
val geofenceType = GeofencingType.GEOFENCING_TYPE_ENTER.type
val geofenceConditionBuilder = GeofenceConditionBuilder(radius, lat, lon, address, geofenceType)
val conditionBase = geofenceConditionBuilder.build() as ConditionBase
val geoCondition = SceneCondition(conditionBase).apply {
this.entityName = address
}
相关数据模型
GeofencingType
属性 | 类型 | 说明 |
---|---|---|
type | String | 设置的地理围栏类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
GEOFENCING_TYPE_ENTER | "enter" |
到达 某地,即进入设定范围时 |
GEOFENCING_TYPE_EXIT | "exit" |
离开 某地,即离开设定范围时 |
GEOFENCING_TYPE_INSIDE | "inside" |
在某地,即在设定范围内 |
GEOFENCING_TYPE_OUTSIDE | "outside" |
不在某地,即不在设定范围内 |
注册场景地理围栏
接口说明
此方法提供一个注册场景地理围栏的能力。例如,当新增或编辑一个包含地理围栏的自动化保存并启用时执行。
fun addGeofence(geofenceCondition: SceneCondition, listener: IResultCallback<Unit>? = null)
参数说明
参数 | 类型 | 说明 |
---|---|---|
geofenceCondition | SceneCondition | 场景条件 |
listener | IResultCallback<Unit>? | 注册结果回调 |
Kotlin 示例
ThingHomeSdk.getSceneServiceInstance().extService().addGeofence(geofenceCondition)
批量注册场景地理围栏
接口说明
此方法提供一个重置并重新批量注册场景地理围栏的能力。例如,当获取自动化列表时执行。
目前仅支持注册的国际账号使用。
fun resetGeofence()
Kotlin 示例
ThingHomeSdk.getSceneServiceInstance().extService().resetGeofence()
移除地理围栏
接口说明
此方法提供一个从系统移除已注册成功的地理围栏的能力。例如,当新增或编辑一个包含地理围栏的自动化保存并禁用时执行,亦或是当删除一个包含地理围栏的自动化时执行。
目前仅支持注册的国际账号使用。
fun removeGeofence(geofenceId: String, listener: IResultCallback<Unit>? = null)
参数说明
参数 | 类型 | 说明 |
---|---|---|
geofenceId | String | 地理围栏 ID。 说明:取用条件数据模型的 |
listener | IResultCallback<Unit>? | 移除结果回调。 |
Kotlin 示例
ThingHomeSdk.getSceneServiceInstance().extService().removeGeofence(geofenceId)
移除所有地理围栏
接口说明
此方法提供一个移除所有已注册的地理围栏的能力。例如,当应用退出登录时执行。
目前仅支持注册的国际账号使用。
fun removeAllGeofence()
Kotlin 示例
ThingHomeSdk.getSceneServiceInstance().extService().removeAllGeofence()
类说明
class WeatherConditionBuilder(
cityId: String,
cityName: String,
entityType: Int,
weatherType: WeatherType,
operator: String? = "==",
chooseValue: Any)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
cityId | String | 城市 ID。 说明:可以采用 定位的经纬度信息 通过调用 根据经纬度查询城市信息,获得当前所在城市的 ID,取用 |
cityName | String | 城市名称。说明:与上述 |
entityType | Int | 条件类型,普通天气条件为 3 。说明:可以通过 查询条件列表,获取气象条件列表,即 |
weatherType | WeatherType |
气象类型,参考 WeatherType。 |
operator | String? | 操作符,例如:"<" ,"==" ,">" 。 说明:气象温度和气象风速 需要传入选择的操作符,其他气象类型传入 |
chooseValue | Any | 选择的值 |
可选参数说明
属性 | 类型 | 说明 |
---|---|---|
rule | Rule |
条件表达式,参考 Rule。 |
windSpeedUnit | String? | 风速单位。例如:"m/s" 。 |
originTempUnit | String? | 原始温度单位,"celsius" 或 "fahrenheit" 。 |
convertTemp | Map<String, Int>? | 温度单位转换。说明:仅气象-温度条件类型专用。 |
tempUnit | String? | 温度单位的偏好显示,"celsius" 或 "fahrenheit" 。说明:仅气象-温度条件类型专用,一般为应用内设置的温度显示单位。 |
dpScale | Int? | 华氏度与摄氏度转换系数。说明:仅气象-温度条件类型专用。 |
Kotlin 示例
// cityId,cityName 和 entityType 如上表中说明获得。
// weatherType,operator 和 chooseValue 根据用户选择的气象类型传入。
// windSpeedUnit 从 ConditionItemDetail.property?.property?.unit 取得
val weatherConditionBuilder = WeatherConditionBuilder(
cityId = cityId,
cityName = cityName,
entityType = entityType,
weatherType = WEATHER_TYPE_WIND,
operator = "<",
chooseValue = chooseValue,
)
.setWindSpeedUnit(data.unit)
val conditionBase = weatherConditionBuilder.build() as ConditionBase
val weatherCondition = SceneCondition(conditionBase).apply {
entityName = cityName
iconUrl = weatherData.icon // 选中气象类型的 icon
exprDisplay = exprDis // 条件表达式的可视化展示
}
相关数据模型
WeatherType
属性 | 类型 | 说明 |
---|---|---|
type | String | 气象类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
WEATHER_TYPE_TEMP | "temp" |
温度 |
WEATHER_TYPE_HUMIDITY | "humidity" |
湿度 |
WEATHER_TYPE_CONDITION | "condition" |
天气 |
WEATHER_TYPE_PM | "pm25" |
PM2.5 |
WEATHER_TYPE_AQI | "aqi" |
空气质量指数 |
WEATHER_TYPE_SUN | "sunsetrise" |
日出日落 |
WEATHER_TYPE_WIND | "windSpeed" |
风速 |
WEATHER_TYPE_SUN_TIMER | "sunsetriseTimer" |
日出日落前后时间点 |
类说明
class SunRiseSetConditionBuilder(
cityId: String,
sunType: SunSetRiseRule.SunType,
minutes: Int)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
cityId | String | 城市 ID |
sunType | SunSetRiseRule.SunType |
类型,日出或日落,参考 SunSetRiseRule.SunType |
minutes | Int | 分钟 |
Kotlin 示例
val conditionBase: ConditionBase = SunRiseSetConditionBuilder(
cityId,
SunSetRiseRule.SunType.SUNSET,
20
).build() as ConditionBase
val sunRiseSetCondition = SceneCondition(conditionBase).apply {
entityName = cityName
iconUrl = weatherData.icon // 选中气象类型的 icon
exprDisplay = exprDis // 条件表达式的可视化展示
}
相关数据模型
SunSetRiseRule.SunType
属性 | 类型 | 说明 |
---|---|---|
sunType | String | 类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
SUNRISE | "sunrise" |
日出 |
SUNSET | "sunset" |
日落 |
类说明
class TimingConditionBuilder(
timeZoneId: String?,
loops: String,
time: String,
date: String)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
timeZoneId | String? | 时区 ID。说明:可通过 |
loops | String | 重复,loops 中的每一位分别表示周日到周六的每一天,1 表示生效,0 表示不生效。例如:"0000000" 。 |
time | String | 时间,格式:%02d:%02d 。例如:"08:00" 。 |
date | String | 日期,格式:yyyyMMdd 。例如:"20230308" 。 |
Kotlin 示例
// timeZoneId 如上表中说明获得。
// loops,time 和 date 根据用户选择的内容传入。
val conditionBase: ConditionBase = TimingConditionBuilder(
timeZoneId,
loops,
time,
date,
).build() as ConditionBase
val timerCondition = SceneCondition(conditionBase).apply {
entityName = "定时"
exprDisplay = time
}
类说明
class DeviceConditionBuilder(
deviceId: String,
dpId: String,
entityType: Int,
deviceConditionData: DeviceConditionData? = null,
chooseValue: Any? = null)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
deviceId | String | 设备 ID。 |
dpId | String | DP ID。 说明:当创建 家人回家 条件时,直接从 ConditionItemDetail 中取用 |
entityType | Int | 条件实体类型,目前支持 1 ,7 ,11 和 13 。参考 ConditionEntityType.type。 |
deviceConditionData | DeviceConditionData? |
设备条件的数据模型。 说明:参考 DeviceConditionData,其从查询条件设备的 DP 列表 接口的数据模型 ConditionItemDetail 转化而来。当通过可选参数 |
chooseValue | Any? | 选中的值 |
可选参数说明
属性 | 类型 | 说明 |
---|---|---|
rule | Rule |
条件表达式,参考 Rule |
chooseValue | Any? | 选择的值 |
calType | String? | 红外设备自定义 持续时间 的条件类型标记 |
timeWindow | Long? | 红外设备自定义 持续时间 的条件设定数值 |
maxSeconds | Long? | 红外设备自定义 持续时间 的条件最大值 |
delayTime | String? | 红外设备预置 持续时间 条件设定数值 |
convertTemp | Map<String, Int>? | 温度单位转换说明:内含两个键值对,一个是原始的温度单位及对应值,另一个是温度偏好设置单位及其对应值 |
tempUnit | String? | 温度单位的偏好显示,"celsius" 或 "fahrenheit" 说明:一般为应用内设置的温度显示单位 |
originTempUnit | String? | 原始温度单位,"celsius" 或 "fahrenheit" |
dpScale | Int? | 华氏度与摄氏度转换系数 |
windSpeedUnit | String? | 风速单位,例如:"m/s" |
percent | Map<String, String>? | 0%-100% 条件类型 DP 及对应百分值 |
percent1 | Map<String, String>? | 1%-100% 条件类型 DP 及对应百分值 |
members | String? | 门锁设备 家人回家条件 的家庭成员列表,例如:"小明,小李" |
Kotlin 示例
// deviceId 为当前选择的设备。
// dpId,entityType 和 deviceConditionData 如上表说明获得。
// chooseValue 根据用户选择传入
val builder = DeviceConditionBuilder(
deviceId = conditionData.deviceId,
dpId = conditionData.datapointId.toString(),
entityType = conditionData.entityType ?: CONDITION_TYPE_DEVICE,
deviceConditionData = conditionData,
chooseValue = chooseValue
)
val conditionBase = builder.build() as ConditionBase
val deviceCondition = SceneCondition(conditionBase).apply {
entityName = deviceBean.name // 设备名称
entitySubIds = conditionData.datapointId.toString() // 设备功能 DP ID
iconUrl = deviceBean.getIconUrl()// 设备 icon
exprDisplay = displayString // 设备条件表达式的可视化展示
}
相关数据模型
DeviceConditionData
属性 | 类型 | 说明 |
---|---|---|
deviceId | String | 设备 ID |
datapointType | DatapointType |
DP 类型,参考 DatapointType |
datapointId | Long | DP ID |
datapointName | String | DP 名称 |
deviceIcon | String | 设备 icon |
valueTypeData | ValueTypeData? |
值类型(value) DP 的属性,参考 ValueTypeData |
otherTypeData | List<OtherTypeData>? | 其他类型 DP 的属性,参考 OtherTypeData |
entityType | Int? | 条件类型 |
extraInfo | ConditionExtraInfo? |
条件额外参数,参考 ConditionExtraInfo |
mcGroups | List<NewMCGroup>? | 多控组信息,参考 NewMCGroup |
DatapointType
属性 | 类型 | 说明 |
---|---|---|
type | String | DP 类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
DATAPOINT_TYPE_VALUE | "value" |
值类型 |
DATAPOINT_TYPE_BOOLEAN | "bool" |
布尔类型 |
DATAPOINT_TYPE_ENUM | "enum" |
枚举实例 |
DATAPOINT_TYPE_RAW | "raw" |
原始类型 |
DATAPOINT_TYPE_STRING | "string" |
字符串类型 |
ValueTypeData
值类型 DP 的属性
属性 | 类型 | 说明 |
---|---|---|
value | Int | 当前值,通常采用字段 min 的值 |
operators | List<Pair<String, Boolean>> | 操作符选项说明:默认标记第一个操作符为选中状态,即第一个 |
unit | String | 单位 |
min | Int | 最小值 |
max | Int | 最大值 |
scale | Int | 小数点转换系数说明: |
step | Int | 步长说明:当最大值为 100、步长为 10,则可取值为 min、min+10、min+20 等 |
OtherTypeData
属性 | 类型 | 说明 |
---|---|---|
datapointKey | String |
|
datapointOption | String |
|
checked | Boolean | 选中状态 |
virtualItem | Boolean? | 标记虚拟节点,传感 PIR 设备专用 |
durationTime | String? | 持续时间,PIR 设备专用 |
NewMCGroup
属性 | 类型 | 说明 |
---|---|---|
id | int | 多控组 ID |
groupName | String | 多控组名称 |
条件表达式的基类。
属性 | 类型 | 说明 |
---|---|---|
expr | MutableList<Any?> | 条件表达式,采用数组描述 |
相关数据模型
ExprType
表达式类型,不同条件类型的表达式描述的格式不同。
枚举实例 | 实例属性值 | 说明 |
---|---|---|
DEVICE | / | 设备 |
WEATHER | / | 天气 |
布尔型,完整条件表达式样例:
[["$dp2";"=="; true]]
。
接口说明
创建 Bool
类型的条件表达式。
fun newInstance(key: String, isTrue: Boolean, exprType: ExprType = ExprType.WEATHER): BoolRule
参数说明
参数 | 类型 | 说明 |
---|---|---|
key | String |
说明:目前仅启用 |
isTrue | Boolean | 开启或关闭,对应值 true 或 false |
exprType | ExprType | 表达式类型,参考 ExprType |
Kotlin 示例
val datapointId = "2"
val expr = mutableListOf(BoolRule.newInstance(datapointId, true, ExprType.DEVICE).expr)
枚举型,完整条件表达式样例:
[["$dp21";"==";"colour"]]
。
接口说明
创建 Enum
类型的条件表达式。
fun newInstance(key: String, chooseValue: String, exprType: ExprType = ExprType.WEATHER): EnumRule
参数说明
参数 | 类型 | 说明 |
---|---|---|
key | String |
|
chooseValue | String | 选择的枚举选项 |
exprType | ExprType | 表达式类型,参考 ExprType |
Kotlin 示例
val datapointId = "21"
val chooseValue = "colour"
val expr = mutableListOf(EnumRule.newInstance(datapointId, chooseValue, ExprType.DEVICE).expr)
值类型,完整条件表达式样例:
[["$dp3";"<";149]]
。
接口说明
创建 Value
类型的条件表达式。
fun newInstance(key: String, operator: String, value: Int, exprType: ExprType = ExprType.WEATHER): ValueRule
参数说明
参数 | 类型 | 说明 |
---|---|---|
key | String |
|
operator | String | 选择的操作符 |
value | Int | 选择的数值 |
exprType | ExprType | 表达式类型,参考 ExprType |
Kotlin 示例
val datapointId = "3"
val operator = "<"
val expr = mutableListOf(ValueRule.newInstance(datapointId, operator, 149, ExprType.DEVICE).expr)
raw 类型和 string 类型,完整条件表达式样例:
[["$dp20"]]
。
接口说明
创建 raw
类型或 string
类型的条件表达式。
fun newInstance(key: String, exprType: ExprType = ExprType.WEATHER): RawRule
参数说明
参数 | 类型 | 说明 |
---|---|---|
key | String |
说明:目前仅启用 |
exprType | ExprType | 表达式类型,参考 ExprType |
Kotlin 示例
val datapointId = "20"
val expr = mutableListOf(RawRule.newInstance(datapointId, ExprType.DEVICE).expr)
日出日落前后时间点类型,完整条件表达式样例:
[{"type":"sunrise","cityId":"1442827101764976691","sunrise":10}]
。
接口说明
创建日出日落前后时间点类型的条件表达式。
fun newInstance(cityId: String, type: SunType, minutes: Int): SunSetRiseRule
参数说明
参数 | 类型 | 说明 |
---|---|---|
cityId | String | 城市 ID。 说明:可以采用定位的经纬度信息,通过调用 根据经纬度查询城市信息 获得当前所在城市的 ID,取用 |
type | SunType | 表达式类型,参考 SunSetRiseRule.SunType。 |
minutes | Int | 分钟。 |
Kotlin 示例
// cityId 如上表中说明获得。
// type 和 minutes 根据用户的选择传入
val type = SUNRISE
val minutes = 10
val expr = SunSetRiseRule.newInstance(cityId, type, minutes).expr
定时类型,完整条件表达式样例:
[{timeZoneId = "Asia/Shanghai";loops = "0000000";time = "17:26";date = "20220517"}]
。
接口说明
创建定时类型的条件表达式。
fun newInstance(timeZoneId: String?, loops: String, time: String, date: String): TimerRule
参数说明
属性 | 类型 | 说明 |
---|---|---|
timeZoneId | String? | 时区 ID。说明:可通过 |
loops | String | 重复,loops 中的每一位分别表示周日到周六的每一天,1 表示生效,0 表示不生效。例如:"0000000" 。 |
time | String | 时间,格式:%02d:%02d 。例如:"08:00" 。 |
date | String | 日期,格式:yyyyMMdd 。例如:"20230308" 。 |
Kotlin 示例
// timeZoneId 如上表中说明获得。
// loops,time 和 date 根据用户选择的内容传入。
val expr = TimerRule.newInstance(timeZoneId, loops, time, date).expr
设备衍生计算类型,完整条件表达式样例:
[[[["$dp1";"==";"nopir"];"condCalculate";"$calObj"];"==";true]]
。
接口说明
创建设备衍生计算类型的条件表达式。
fun newInstance(key: String, chooseValue: Any): CalculateRule
参数说明
属性 | 类型 | 说明 |
---|---|---|
key | String | DP ID |
chooseValue | Any | 选择的枚举选项 |
Kotlin 示例
val datapointId = "1"
val chooseValue = "nopir"
val expr = mutableListOf(CalculateRule.newInstance(datapointId, chooseValue).expr)
家人回家类型,完整条件表达式样例:
[[["$devId";"lockRecognition";"$allData"];"inRange";"1223421,1273723"]]
。
接口说明
创建家人回家类型的条件表达式。
fun newInstance(memberIds: String): LockMemberRule
参数说明
属性 | 类型 | 说明 |
---|---|---|
memberIds | String | 选择的家庭成员 ID 的列表,使用逗号进行拼接。例如:"1223421,1273723" |
Kotlin 示例
val memberIds = "1223421,1273723"
val expr = mutableListOf(LockMemberRule.newInstance(memberIds).expr)
地理围栏类型,完整条件表达式样例:
[["$action";"==";"exit"]]
。
接口说明
创建地理围栏类型的条件表达式。
fun newInstance(type: String): GeofenceRule
参数说明
属性 | 类型 | 说明 |
---|---|---|
type | String | 地理围栏类型,参考 GeofencingType.type |
Kotlin 示例
val geofenceType = "exit"
val expr = mutableListOf(GeofenceRule.newInstance(geofenceType).expr)
类说明
class DelayActionBuilder(minutes: Int, seconds: Int)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
minutes | Int | 延时的分钟数 |
seconds | Int | 延时的秒数 |
Kotlin 示例
val actionBase: ActionBase = DelayActionBuilder(62, 20).build() as ActionBase
val delayAction = SceneAction(actionBase).apply {
entityName = "延时执行"
}
类说明
class NotifyActionBuilder(notifyType: String)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
notifyType | String | 通知类型,包括:"appPushTrigger" , "smsSend" 和 "mobileVoiceSend" |
Kotlin 示例
val unableTip = "电话通知已过期"
val actionBase: ActionBase = NotifyActionBuilder("mobileVoiceSend").build() as ActionBase
val notifyAction = SceneAction(actionBase).apply {
entityName = "来电提醒"
if (it.pushType != PushType.PUSH_TYPE_MESSAGE && !it.unableTip.isNullOrEmpty()) {
actionDisplayNew = mutableMapOf(
"voice_package_has_expired" to listOf(it.unableTip),
"package_has_expired" to listOf(it.unableTip)
)
}
}
相关数据模型
PushType
属性 | 类型 | 说明 |
---|---|---|
type | String | 通知类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
PUSH_TYPE_MESSAGE | "personal_push_message_service" |
消息中心 |
PUSH_TYPE_MOBILE | "personal_push_call_service" |
电话提醒 |
PUSH_TYPE_SMS | "personal_push_sms_service" |
短信提醒 |
类说明
class LinkageRuleActionBuilder(linkageRuleId: String, linkageOperator: String)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
linkageRuleId | String | 智能联动 ID |
linkageOperator | String | 联动类型,包括:"ruleTrigger" , "ruleEnable" , "ruleDisable" |
Kotlin 示例
val actionBase: ActionBase = LinkageRuleActionBuilder(linkageData.linkageId, "ruleTrigger").build() as ActionBase
val linkageAction = SceneAction(actionBase).apply {
entityName = linkageData.linkageName // 联动名称
}
类说明
class DeviceActionBuilder(
devId: String,
deviceActionDetailData: DeviceActionDetailBean,
selDpValue: Any?,
selDpDisplayValue: Any,
isStep: Boolean = false)
构造参数说明
属性 | 类型 | 说明 |
---|---|---|
devId | String | 设备 ID 或 群组 ID。 |
deviceActionDetailData | DeviceActionDetailBean |
设备动作的数据模型。说明:参考 DeviceActionDetailBean,其从 查询动作设备的 DP 列表 接口的数据模型 ActionDeviceDataPointList 转化而来。 |
selDpValue | Any? | 选择的值。 |
selDpDisplayValue | Any | 显示选择的值。 |
isStep | Boolean | 是否步进。 |
可选参数说明
属性 | 类型 | 说明 |
---|---|---|
originTempUnit | String? | 原始温度单位,"celsius" 或 "fahrenheit" 。 |
dpScale | Int? | 华氏度与摄氏度转换系数。 |
convertTemp | MutableMap<String, Int>? | 温度单位转换。说明:内含两个键值对,一个是原始的温度单位及对应值,另一个是温度偏好设置单位及其对应值。 |
type | DeviceStepType? | 步进类型,参考 DeviceStepType。 |
Kotlin 示例
// deviceId,selDpValue 根据用户选择传入。
// deviceActionDetailData 如上表说明获得。
// selDpDisplayValue 根据用户选择进行 DP 可视化转换
val builder = DeviceActionBuilder(deviceId, deviceActionDetailData, selDpValue, selDpDisplayValue ?: "")
.apply {
originTempUnit?.let {
this.setOriginTempUnit(it)
}
dpScale?.let {
this.setDpScale(it)
}
convertTemp?.let {
this.setConvertTemp(it)
}
}
val actionBase: ActionBase = builder.build() as ActionBase
SceneAction(actionBase).apply {
actionDisplayNew = actionDisplayMap // 同样是 DP 功能选择后的可视化展示
this.actionExecutor = ACTION_TYPE_DEVICE_GROUP // 群组动作执行器
// 以下为群组的图标,在线状态和名称
DeviceUtil.getGroupDevice(dpDialogBean.deviceActionDetailBean.deviceId.toLong())?.let {
this.devIcon = it.iconUrl
this.isDevOnline = it.isOnline
this.entityName = it.name
}
相关数据模型
DeviceActionDetailBean
属性 | 类型 | 说明 |
---|---|---|
itemIndex | int | 功能序号。 |
hasEdit | boolean | 标识功能是否编辑状态。 |
functionId | Long | 设备功能 ID。 |
functionName | String | 设备功能名称。 |
functionType | int | 设备功能类型,0 标识普通 DP,1 标识组合 DP。 |
currentValue | Object | 展示当前值。 |
entityId | String | 动作实体 ID,一般是设备 ID 或群组 ID。 |
deviceActionDataList | List<DeviceActionData> | 设备功能 DP 列表,参考 DeviceActionData。 |
hasChoose | boolean | 标记设备 DP 是否已被选择。说明:Zigbee 标准本地场景,同一个设备 DP 不允许重复选择。 |
deviceId | String | 设备 ID 或群组 ID。 |
deviceType | DeviceType | 类型,设备或群组。 |
DeviceActionData
属性 | 类型 | 说明 |
---|---|---|
id | long | DP 的唯一性 ID。说明:目前只有组合 DP 存在有效的 ID 属性。 |
dpName | String | 设备 DP 名称。 |
dpId | int | 设备 DP ID。 |
isEditable | Boolean | 功能 DP 是否可编辑。 |
stepHighDpProperty | StepDpProperty |
固定调高的步进可取值,参考 StepDpProperty。 |
stepLowDpProperty | StepDpProperty |
固定调低的步进可取值,参考 StepDpProperty。 |
step | int | 步进值。 |
type | String | 步进类型,参考 DeviceStepType.type。 |
datapointType | DatapointType |
DP 类型,参考 DatapointType。 |
lightType | LightType |
DP 灯类类型,对应 ActionDeviceDataPointDetail 的 valueType 字段值。参考 LightType。 |
dpValueType | DeviceDpValueType |
值类型(value) DP 的值展示类型,参考 DeviceDpValueType。 |
dpValueTypeData | DpValueTypeData |
值类型(value) DP 的属性,参考 DpValueTypeData。 |
dpEnumTypeData | DpEnumTypeData |
枚举类型(enum) DP 的属性,参考 DpEnumTypeData。 |
StepDpProperty
属性 | 类型 | 说明 |
---|---|---|
value | List<Integer> | 步进取值列表 |
LightType
属性 | 类型 | 说明 |
---|---|---|
type | String | valueType 的枚举值 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
LIGHT_TYPE_COLOR_NEW | "color2" |
新版彩光 |
LIGHT_TYPE_COLOR_OLD | "color1" |
旧版彩光 |
LIGHT_TYPE_COLOR_LEGACY | "color" |
老彩光,保留以向下兼容 |
LIGHT_TYPE_BRIGHT | "bright" |
白光亮度值 |
LIGHT_TYPE_TEMP | "light_temp" |
白光冷暖值 |
LIGHT_TYPE_NULL | "" |
空字符串 |
DeviceDpValueType
属性 | 类型 | 说明 |
---|---|---|
type | String | 值类型(value) DP 的展示类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
DP_VALUE_TYPE_COUNTDOWN | "countdown" |
时分秒 格式 |
DP_VALUE_TYPE_COUNTDOWN_1 | "countdown1" |
时分 格式 |
DP_VALUE_TYPE_PERCENT | "percent" |
0%-100% 百分值格式 |
DP_VALUE_TYPE_PERCENT_1 | "percent1" |
1%-100% 百分值格式 |
DP_VALUE_TYPE_NORMAL | "normal" |
常规格式 |
DpValueTypeData
属性 | 类型 | 说明 |
---|---|---|
currentValueKey | Object | 选择的值 |
unit | String | 单位 |
min | int | 最小值 |
max | int | 最大值 |
scale | int | 小数点转换系数说明: |
step | int | 步长说明:当最大值为 100、步长为 10,则可取值为 min、min+10、min+20 等 |
DpEnumTypeData
属性 | 类型 | 说明 |
---|---|---|
value | List<String> | 枚举列表的显示值 |
valueKey | List<Object> | 枚举列表的键 |
currentIndex | int | 枚举选项索引 |
DeviceStepType
属性 | 类型 | 说明 |
---|---|---|
type | String | 步进类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
LOW | "low" |
调低 |
HIGH | "high" |
调高 |
DeviceType
枚举实例 | 实例属性值 | 说明 |
---|---|---|
COMMON_DEVICE | / | 设备 |
GROUP_DEVICE | / | 群组 |
类和属性说明
参考 PreCondition
属性定义和 PreConditionExpr
属性定义。
Kotlin 示例
具体而言,城市信息可以通过调用 根据经纬度查询城市信息 获得,从中取用 cityId
字段作为城市的 ID,以及取用 city
字段作为城市的名称。或者通过 查询城市列表 后,选取城市获得。其他信息根据用户的选择填入。
PreCondition().apply {
val expr = PreConditionExpr()
expr.cityName = "杭州"
expr.cityId = "1442827101764976691"
expr.start = "00:00"
expr.end = "23:59"
expr.loops = "1111111"
expr.timeInterval = TimeInterval.TIME_INTERVAL_ALL_DAY.value
expr.timeZoneId = TimeZone.getDefault().id
this.expr = expr
condType = PreCondition.TYPE_TIME_CHECK
}
相关数据模型
TimeInterval
属性 | 类型 | 说明 |
---|---|---|
value | String | 生效时间段类型 |
枚举实例 | 实例属性值 | 说明 |
---|---|---|
TIME_INTERVAL_CUSTOM | "custom" |
自定义时间 |
TIME_INTERVAL_DAY | "daytime" |
白天 |
TIME_INTERVAL_NIGHT | "night" |
夜间 |
TIME_INTERVAL_ALL_DAY | "allDay" |
全天 |
接口说明
条件设备功能模型转化,用于将 查询条件设备的 DP 列表 获得的 ConditionItemDetail
转化为 DeviceConditionData
。
fun ConditionItemDetail.mapToDeviceConditionData(devId: String): DeviceConditionData
参数说明
参数 | 类型 | 说明 |
---|---|---|
devId | String | 设备 ID |
Kotlin 示例
// deviceRepository 定义了如下挂起方法可以从场景 SDK 获取条件设备功能列表
suspend fun getConditionDeviceDpAll(deviceId: String): List<ConditionItemDetail> =
suspendCoroutine {
val callback = object : IResultCallback<List<ConditionItemDetail>?> {
override fun onSuccess(result: List<ConditionItemDetail>?) {
it.resume(result ?: emptyList())
}
override fun onError(errorCode: String?, errorMessage: String?) {
it.resumeWithException(Exception(errorMessage))
}
}
sceneService.deviceService().getConditionDeviceDpAll(deviceId, callback)
}
// 调用上述方法获得数据 conditionItemDetailList 后进行模型转化
val conditionItemDetailList: List<ConditionItemDetail> = deviceRepository.getConditionDeviceDpAll(deviceId)
conditionItemDetailList.map { conditionItemDetail ->
conditionItemDetail.mapToDeviceConditionData(deviceId)
}
接口说明
动作设备功能模型转化,用于将 查询动作设备的 DP 列表 获得的 ActionDeviceDataPointList
转化为 DeviceActionDetailBean
。
fun ActionDeviceDataPointList.mapToDeviceActionData(
entityId: String,
deviceId: String,
deviceType: DeviceType,
sceneAction: SceneAction? = null,
togglePreFilter: () -> Boolean = { false }
): DeviceActionDetailBean?
参数说明
参数 | 类型 | 说明 |
---|---|---|
entityId | String |
|
deviceId | String | 设备 ID 或群组 ID。 |
deviceType | DeviceType | 类型,设备或群组。 |
sceneAction | SceneAction? | 当前编辑的场景动作数据。 |
togglePreFilter | () -> Boolean | 编辑场景时一键反转业务的过滤逻辑。说明:目前是 Zigbee 标准本地场景编辑时,需要过滤掉 bool 类型 DP 的一键反转选项。 |
Kotlin 示例
// deviceRepository 定义了如下挂起方法可以从场景 SDK 获取动作设备功能列表(包含群组)
suspend fun getActionDeviceDpAll(deviceId: String): List<ActionDeviceDataPointList> =
suspendCoroutine {
val callback = object : IResultCallback<List<ActionDeviceDataPointList>?> {
override fun onSuccess(result: List<ActionDeviceDataPointList>?) {
it.resume(result ?: emptyList())
}
override fun onError(errorCode: String?, errorMessage: String?) {
it.resumeWithException(Exception("getActionDeviceDpAll onError, errorCode: $errorCode, errorMsg: $errorMessage"))
}
}
sceneService.deviceService().getActionDeviceDpAll(deviceId, callback)
}
// 调用上述方法获得数据 fusedFunctions 后进行模型转化
fusedFunctions.forEachIndexed { _, function ->
function.mapToDeviceActionData(deviceId, deviceId, deviceType, sceneAction) { isBoundForPanel && !isAllDevice }
?.let { deviceActionDetailBean ->
deviceActionDetailList.add(deviceActionDetailBean)
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈