更新时间: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)
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈