# 技术方案
# 注:大卡片、小组件、灵动岛脚本代码需维护在同一份文件上,根据不同字段内容区分
# 原生脚本交互接口
- 原生入参示例:
{
"deviceSn": "000000P0000000Q1A0681CAE921C0000",
"deviceId": "24189255812085",
"reqId": "4c99607f99b41df7d91b0cdeddb38799",
"createTime": "2023-06-15 08:55:13 +0000",
"deviceStatus": {},
"isOnline": "0/1"
}
// deviceId/deviceID:设备id,
// deviceStatus:设备状态
// isOnline:设备在线离线状态,String类型,0:离线;1:在线
# 脚本输出结果
- 脚本输出结构示例:
{
"unknown_status": false,
"baseInfo": {},
"deviceControl": {}
}
# 设备状态未知
"unknown_status": true, // Bool类型,设备状态未知
状态说明:
- 当入参中deviceStatus缺少判断状态相关字段,且设备当前处于在线状态,设为true
!!卡片上任意显示状态未知,整体置为状态未知,提供刷新按钮
# 基础信息(示例图中环境信息):baseInfo
"baseInfo": {
"displayEnvironment": true, //BOOL类型 是否显示环境信息内容
"environment": [{
"type": "language", // 环境信息名次
"value": "language_key"
}, {
"type": "value", // 环境信息值
"value": "30"
}, {
"type": "unit", // 环境信息单位
"value": "°C"
}], // Array类型,展示的环境信息,根据类型type,进行数据拼接,拼接顺序根据当前语种(阿拉伯语和希伯来语语序问题)
"displayDeviceStatus": true, //BOOL类型 是否显示设备信息内容
"deviceStatus": "", // String类型,设备当前状态,返回多语言文案key,支持单一状态显示
"warningStatus": true, // Boolean类型,控制设备状态文案是否展示错误提示色
"dotColor": { // 状态文案左侧圆点颜色值
"normal": "", // 正常模式下16进制颜色值,参考色值:运行中:#00D6DE;待机中:#ADADAD;错误提示色:#F79431
"dark": "", // 暗黑模式下16进制颜色值,参考色值:运行中:#3DC7CC;待机中:#CCCCCC;错误提示色:#F79431
}
}
# 小组件快捷控制按钮:deviceControl
"deviceControl": {
"display": true, // 是否显示控制按钮
"clickEvent": { // 点击事件
"clickable": true, // 操作按钮是否可以点击, true:可点击;false:不可点击
"toastLanguageKey": "" // 有值,代表点击后toast提示;空值,代表执行下面的控制指令
},
"icon": {
"iconFromHttp": false, // icon来源,true:网络资源;false:内置图片
"url": "", // icon地址,内置图片输入图片文件名(两端需要统一),网络图片输入完整图片url;按钮置灰需传入单独图片,考虑到暗黑模式原因,不做蒙层处理
},
"control": {
"coverCode": "widgetModuleControl" // 控制发码js代码,需要传进js执行库,执行结果作为控制指令传入SDK
}
}
# 控制指令传参
- 在设备状态的Object中,增加setValue字段,作为共同参数传入脚本执行方法,得出执行指令集
- 控制指令输出示例
"backData" = {
// controlParams有多少个元素即下发多少次指令。
"controlParams": [{
"applianceCode": "设备id,从原生传入的设备状态中获取",
// lua控制指令
"key": "value"
}, {
"applianceCode": "设备id,从原生传入的设备状态中获取",
// lua控制指令
"key": "value"
}]
}