场景创建

更新时间: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。
  • 当条件为天气时,是城市 ID。
  • 当条件是设备时,是设备 ID。
  • 当条件是定时时,固定是 "timer"
  • 当条件是日落日出前后时间点时,固定是 "sunsetriseTimer"
entitySubIds String? 条件相关功能内容 ID。
  • 当条件是设备时,是所选 DP 的 DP ID。
  • 当条件时普通天气时,是天气描述,例如 "temp"
  • 当条件是定时("timer")、日落日出前后时间点("sunsetriseTimer")、地理围栏("condition")时,都是默认的固定字符串。
expr MutableList<Any?>? 条件表达式
extraInfo MutableMap<String, Any?>? 条件扩展信息

CondType

属性 类型 说明
type Int 条件表达式的匹配类型
枚举实例 实例属性值 说明
EXPR_MATCH 1 表达式匹配
SIMPLE_MATCH 2 简单匹配,
说明:raw 类型和 string 类型的 DP 时,condType 设置为 2

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" 不在某地,即不在设定范围内

注册场景地理围栏

接口说明

此方法提供一个注册场景地理围栏的能力。例如,当新增或编辑一个包含地理围栏的自动化保存并启用时执行。

目前仅支持注册的国际账号使用。如需了解如何正确地接入地理围栏监控功能,Google 开发者请参考 设置地理围栏监控,华为开发者请参考 地理围栏开发

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。
说明:取用条件数据模型的 entityId 字段,该字段的值将在云端创建场景模型成功后分配。
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,取用 cityId 字段。或者通过 查询城市列表 后,选取城市获得该值。
cityName String 城市名称。
说明:与上述 cityId 的获取方式相同,取用 city 字段。
entityType Int 条件类型,普通天气条件为 3
说明:可以通过 查询条件列表,获取气象条件列表,即 envConds 字段,取其中对应的气象类型的 entityType 字段。
weatherType WeatherType 气象类型,参考 WeatherType
operator String? 操作符,例如:"<""=="">"
说明气象温度和气象风速 需要传入选择的操作符,其他气象类型传入 null 即可,即便传入此参数也无效。
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。
说明:可通过 Calendar.getInstance().timeZone.idTimeZone.getDefault().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 中取用 entitySubId 字段。
entityType Int 条件实体类型,目前支持 171113。参考 ConditionEntityType.type
deviceConditionData DeviceConditionData? 设备条件的数据模型。
说明:参考 DeviceConditionData,其从查询条件设备的 DP 列表 接口的数据模型 ConditionItemDetail 转化而来。当通过可选参数 rule 设置自定义的 Rule 时,此参数则无效。
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>> 操作符选项
说明:默认标记第一个操作符为选中状态,即第一个 Pair 对的 second 属性标记为 true
unit String 单位
min Int 最小值
max Int 最大值
scale Int 小数点转换系数
说明0 表示无小数点,1 表示保留一位小数,2 表示保留两位小数
step Int 步长
说明:当最大值为 100、步长为 10,则可取值为 min、min+10、min+20 等

OtherTypeData

属性 类型 说明
datapointKey String
  • 当 DP 类型为 rawstring,此处是 DP ID
  • 当为其他类型 DP 时,此处是 DP 值
    datapointOption String
    • 当 DP 类型为 rawstring,此处是条件名称
    • 当为其他类型 DP 时,此处是 DP ID 的可读性释义
      checked Boolean 选中状态
      virtualItem Boolean? 标记虚拟节点,传感 PIR 设备专用
      durationTime String? 持续时间,PIR 设备专用

      NewMCGroup

      属性 类型 说明
      id int 多控组 ID
      groupName String 多控组名称

      创建条件表达式

      Rule

      条件表达式的基类。

      属性 类型 说明
      expr MutableList<Any?> 条件表达式,采用数组描述

      相关数据模型

      ExprType

      表达式类型,不同条件类型的表达式描述的格式不同。

      枚举实例 实例属性值 说明
      DEVICE / 设备
      WEATHER / 天气

      BoolRule

      布尔型,完整条件表达式样例:[["$dp2";"=="; true]]

      接口说明

      创建 Bool 类型的条件表达式。

      fun newInstance(key: String, isTrue: Boolean, exprType: ExprType = ExprType.WEATHER): BoolRule
      

      参数说明

      参数 类型 说明
      key String
      • exprTypeDEVICE 时,此处为 DP ID
      • exprTypeWEATHER 时,此处为 WeatherType.type
      说明:目前仅启用 DEVICE 类型
      isTrue Boolean 开启或关闭,对应值 truefalse
      exprType ExprType 表达式类型,参考 ExprType

      Kotlin 示例

      val datapointId = "2"
      val expr = mutableListOf(BoolRule.newInstance(datapointId, true, ExprType.DEVICE).expr)
      

      EnumRule

      枚举型,完整条件表达式样例:[["$dp21";"==";"colour"]]

      接口说明

      创建 Enum 类型的条件表达式。

      fun newInstance(key: String, chooseValue: String, exprType: ExprType = ExprType.WEATHER): EnumRule
      

      参数说明

      参数 类型 说明
      key String
      • exprTypeDEVICE 时,此处为 DP ID
      • exprTypeWEATHER 时,此处为 WeatherType.type
      chooseValue String 选择的枚举选项
      exprType ExprType 表达式类型,参考 ExprType

      Kotlin 示例

      val datapointId = "21"
      val chooseValue = "colour"
      val expr = mutableListOf(EnumRule.newInstance(datapointId, chooseValue, ExprType.DEVICE).expr)
      

      ValueRule

      值类型,完整条件表达式样例:[["$dp3";"<";149]]

      接口说明

      创建 Value 类型的条件表达式。

      fun newInstance(key: String, operator: String, value: Int, exprType: ExprType = ExprType.WEATHER): ValueRule
      

      参数说明

      参数 类型 说明
      key String
      • exprTypeDEVICE 时,此处为 DP ID
      • exprTypeWEATHER 时,此处为 WeatherType.type
      operator String 选择的操作符
      value Int 选择的数值
      exprType ExprType 表达式类型,参考 ExprType

      Kotlin 示例

      val datapointId = "3"
      val operator = "<"
      val expr = mutableListOf(ValueRule.newInstance(datapointId, operator, 149, ExprType.DEVICE).expr)
      

      RawRule

      raw 类型和 string 类型,完整条件表达式样例:[["$dp20"]]

      接口说明

      创建 raw 类型或 string 类型的条件表达式。

      fun newInstance(key: String, exprType: ExprType = ExprType.WEATHER): RawRule
      

      参数说明

      参数 类型 说明
      key String
      • exprTypeDEVICE 时,此处为 DP ID
      • exprTypeWEATHER 时,此处为 WeatherType.type
      说明:目前仅启用 DEVICE 类型
      exprType ExprType 表达式类型,参考 ExprType

      Kotlin 示例

      val datapointId = "20"
      val expr = mutableListOf(RawRule.newInstance(datapointId, ExprType.DEVICE).expr)
      

      SunSetRiseRule

      日出日落前后时间点类型,完整条件表达式样例:[{"type":"sunrise","cityId":"1442827101764976691","sunrise":10}]

      接口说明

      创建日出日落前后时间点类型的条件表达式。

      fun newInstance(cityId: String, type: SunType, minutes: Int): SunSetRiseRule
      

      参数说明

      参数 类型 说明
      cityId String 城市 ID。
      说明:可以采用定位的经纬度信息,通过调用 根据经纬度查询城市信息 获得当前所在城市的 ID,取用 cityId 字段。或者通过 查询城市列表 后,选取城市获得。
      type SunType 表达式类型,参考 SunSetRiseRule.SunType
      minutes Int 分钟。

      Kotlin 示例

      // cityId 如上表中说明获得。
      // type 和 minutes 根据用户的选择传入
      val type = SUNRISE
      val minutes = 10
      val expr = SunSetRiseRule.newInstance(cityId, type, minutes).expr
      

      TimerRule

      定时类型,完整条件表达式样例:[{timeZoneId = "Asia/Shanghai";loops = "0000000";time = "17:26";date = "20220517"}]

      接口说明

      创建定时类型的条件表达式。

      fun newInstance(timeZoneId: String?, loops: String, time: String, date: String): TimerRule
      

      参数说明

      属性 类型 说明
      timeZoneId String? 时区 ID。
      说明:可通过 Calendar.getInstance().timeZone.idTimeZone.getDefault().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
      

      CalculateRule

      设备衍生计算类型,完整条件表达式样例:[[[["$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)
      

      LockMemberRule

      家人回家类型,完整条件表达式样例:[[["$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)
      

      GeofenceRule

      地理围栏类型,完整条件表达式样例:[["$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 灯类类型,对应 ActionDeviceDataPointDetailvalueType 字段值。参考 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 小数点转换系数
      说明0 表示无小数点,1 表示保留一位小数,2 表示保留两位小数
      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" 全天

      数据传输对象 (DTO) 模型转化

      条件设备功能数据模型转化为 DTO 模型

      接口说明

      条件设备功能模型转化,用于将 查询条件设备的 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)
      }
      

      动作设备功能数据模型转化为 DTO 模型

      接口说明

      动作设备功能模型转化,用于将 查询动作设备的 DP 列表 获得的 ActionDeviceDataPointList 转化为 DeviceActionDetailBean

      fun ActionDeviceDataPointList.mapToDeviceActionData(
          entityId: String,
          deviceId: String,
          deviceType: DeviceType,
          sceneAction: SceneAction? = null,
          togglePreFilter: () -> Boolean = { false }
      ): DeviceActionDetailBean?
      

      参数说明

      参数 类型 说明
      entityId String
      • 当为设备时即是设备 ID。
      • 当为群组时,具体规则如下:
        说明:优先使用群组产品 ID (PID)和首个子设备产品 ID (PID)一致的设备的 ID。否则,使用群组内首个子设备 ID。若群组为空,则使用群组 ID。
      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)
              }
      }