小程序面板开发教程|开发照明 Matter 面板步骤(三)

小程序面板开发教程|开发照明 Matter 面板步骤(一) 

小程序面板开发教程|开发照明 Matter 面板步骤(二) 

六. 开发五路灯

注意:由于 Matter 模型五路灯彩光采用的 HSV 模型,因此这里的功能点定义和 DP 模型有较大差别

参考原型

功能介绍

  • 开关:控制灯具的开关状态。
  • 模式:控制灯具的工作模式,包括白光、彩光、场景、音乐模式,在四路灯下,设备灯具只允许上报 white 白光模式或 colour 彩光模式。
  • HS 颜色调节:控制灯具的彩光值中的色相和饱和度,数值范围均为 0-254,转换为字符串则为 HHSS 这样的格式,第一个字节代表 Hue 值的十六进制,第二个字节代表 Saturation 值的十六进制,如 00fe 代表色相为 0,饱和度为 254,最终应用到 UI 层,需要分别将色相和饱和度分别从 0-254 转成 0-360 和 0-100
  • 亮度调节:根据当前模式的状态固件来判断控制灯具的白光亮度还是彩光亮度,数值越大则亮度越高,在彩光模式下代表的是 HSV 模型中的 V。
  • 色温调节:控制灯具的冷暖色温,数值越大则 Kelvin 值越小,则对应灯具的色温越暖。

功能定义

DP ID

功能点名称

标识符

数据传输类型

数据类型

功能点属性

20

开关

switch

可下发可上报(rw)

bool

21

模式

work_mode

可下发可上报(rw)

enum

枚举值: white, colour, scene, music

23

HS 颜色调节

hs_color_set

可下发可上报(rw)

value

最大长度: 255

85

亮度调节

brightness_control

可下发可上报(rw)

value

数值范围: 1-254, 间距: 1, 倍数: 0, 单位:

86

色温调节

color_temp_control

可下发可上报(rw)

value

数值范围: 153-370, 间距: 1, 倍数: 0, 单位:

与 DP 模型的区别

  • 开关的功能点标识符不一致,在 Matter 模型下标识符为 switch,DP 模型下为 switch_led
  • 色温的功能点标识符不一致,在 Matter 模型下标识符为 color_temp_control,DP 模型下为 temp_value
  • 彩光调节的逻辑不同,在 Matter 模型下,彩光调节需要分为两个功能点,即 hs_color_set 和 brightness_control,即控制彩光的色相或饱和度时下发 hs_color_set,在控制彩光的亮度时下发 brightness_control,而在 DP 模型下,彩光调节只需要一个功能点,即 colour_data,直接控制灯具的色相饱和度和亮度。
  • 白光亮度调节的逻辑不同,在 Matter 模型下,在模式为 white 时,调节 brightness_control 控制的是白光亮度,在模式为 colour 时,调节 brightness_control 控制的是彩光亮度,而在 DP 模型下,调节白光亮度的功能点固定为 bright_value

DP ID

功能点名称

标识符

数据传输类型

数据类型

功能点属性

20

开关

switch_led

可下发可上报(rw)

bool

21

模式

work_mode

可下发可上报(rw)

enum

枚举值: white, colour, scene, music

22

白光亮度

bright_value

可下发可上报(rw)

value

数值范围: 10-1000, 间距: 1, 倍数: 0, 单位:

23

冷暖值

temp_value

可下发可上报(rw)

value

数值范围: 0-1000, 间距: 1, 倍数: 0, 单位:

24

彩光

colour_data

可下发可上报(rw)

string

注意事项

  • 色温调节数值范围为 153-370,对应的 kelvin=1000000 / 色温值,例如色温值为 153,则 kelvin 值为 6536。

七. 开发实时调节

由于实时调节功能是涂鸦特有的功能点模型,具体的协议说明见下图:

在色温定义中我们可以看到,control_data 功能点中色温的范围仍然是 0-1000,而在 Matter 模型下,色温 color_temp_control DP 范围通常在 153-370,因此在实时调节的时候,我们需要将色温的值根据以下规则进行转换。

  1. 将 Matter 模型下的 color_temp_control 色温 DP 转换为 Kelvin 值,即 kelvin=1000000 / 色温值,比如 153 对应的 Kelvin 值为 6536(冷光),370 对应的 Kelvin 值为 2702(暖光)。
import _ from 'lodash';

/**
 * 将 Matter 标准的照明色温值转换为 kelvin 值
 *
 * @param tempDp 当前 Matter 标准的照明色温 DP 值
 * @returns 当前 Matter 标准的照明色温值 对应的 kelvin 值
 */
export const tempM2Kelvin = (tempMatter: number) => {
  const tempMatterMin = 153; // 实际开发环境建议从 color_temp_control DP 的产品定义中获取实际的 min、max 值
  const tempMatterMax = 370;
  // 这里有个反比计算最小和最大的温度转换为 kelvin 单位时的值
  const kelvinsMin = 1000000 / tempMatterMax;
  const kelvinsMax = 1000000 / tempMatterMin;

  // 根据设定范围将温度值转换为 kelvin 单位
  const kelvin = 1000000 / tempMatter;

  // 对计算后的值进行四舍五入,并限制其值在设定的范围内
  return _.clamp(Math.round(kelvin), kelvinsMin, kelvinsMax);
};
  1. 将 Kelvin 值转换为 control_data 功能点中色温对应范围的 0-1000,转换到 kelvin 值对应范围的 2702-6536。
import { utils } from '@ray-js/panel-sdk';

export const kelvin2Temp = (kelvin: number) => {
  const tempMatterMin = 153; // 实际开发环境建议从 color_temp_control DP 的产品定义中获取实际的 min、max 值
  const tempMatterMax = 370;
  // 这里有个反比计算最小和最大的温度转换为 kelvin 单位时的值
  const kelvinsMin = 1000000 / tempMatterMax;
  const kelvinsMax = 1000000 / tempMatterMin;
  return Math.round(utils.calcPosition(kelvin, kelvinsMin, kelvinsMax, 0, 1000));
}

八. 结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IoT砖家涂拉拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值