跳到主要内容

批量操作:更新多个节点

使用 setMultipleNodesParams 方法可以在一次 API 调用中为多个节点更新参数。推荐使用此方式进行批量操作,从而跨节点高效更新多项设备参数和服务参数。

推荐批量操作

当需要跨多个节点更新多项参数时,请使用 setMultipleNodesParams。这比为每项参数单独调用 setValue 更高效。

使用设备参数和服务参数更新多个节点

可以在一次批量操作中同时更新多个节点的设备参数和服务参数:

try {
const payload = [
{
nodeId: "node_id_1",
payload: {
// 设备参数,使用设备名称作为键
"Light": {
"Power": true,
"Brightness": 80,
"CCT": 4000
},
"Fan": {
"Power": true,
"Speed": 5
},
// 服务参数,使用服务名称作为键
"Time": {
"TZ": "America/Los_Angeles",
"TZ-POSIX": "PST8PDT,M3.2.0,M11.1.0"
}
}
},
{
nodeId: "node_id_2",
payload: {
"Light": {
"Power": false
},
"Switch": {
"Power": true
}
}
}
];

const response = await userInstance.setMultipleNodesParams(payload);
console.log("Batch update successful:", response);
} catch (error) {
console.error("Error updating multiple nodes:", error);
}

示例:仅更新设备参数

可以仅更新多个节点的设备参数:

try {
const payload = [
{
nodeId: "node_id_1",
payload: {
"Light": {
"Power": true,
"Brightness": 100
}
}
},
{
nodeId: "node_id_2",
payload: {
"Light": {
"Power": true,
"Brightness": 50
},
"Fan": {
"Power": true,
"Speed": 3
}
}
}
];

const response = await userInstance.setMultipleNodesParams(payload);
console.log("Device parameters updated:", response);
} catch (error) {
console.error("Error updating device parameters:", error);
}

示例:仅更新服务参数

可以仅更新多个节点的服务参数:

try {
const payload = [
{
nodeId: "node_id_1",
payload: {
"Time": {
"TZ": "America/New_York",
"TZ-POSIX": "EST5EDT,M3.2.0,M11.1.0"
}
}
},
{
nodeId: "node_id_2",
payload: {
"Time": {
"TZ": "Asia/Kolkata"
}
}
}
];

const response = await userInstance.setMultipleNodesParams(payload);
console.log("Service parameters updated:", response);
} catch (error) {
console.error("Error updating service parameters:", error);
}

示例:混合设备参数和服务参数

在同一次批量操作中同时更新设备参数和服务参数:

try {
const payload = [
{
nodeId: "node_id_1",
payload: {
// 设备参数
"Light": {
"Power": true,
"Brightness": 75
},
// 服务参数
"Time": {
"TZ": "Europe/London"
}
}
}
];

const response = await userInstance.setMultipleNodesParams(payload);
console.log("Mixed parameters updated:", response);
} catch (error) {
console.error("Error updating parameters:", error);
}

示例:基于节点数据构建载荷

可以根据节点数据动态构建载荷:

try {
// 获取所有用户节点
const nodesResponse = await userInstance.getUserNodes();

// 构建用于批量更新的载荷
const payload = nodesResponse.nodes.map((node) => {
const nodeConfig = node.nodeConfig;
const nodePayload = {};

// 添加设备参数
if (nodeConfig && nodeConfig.devices) {
nodeConfig.devices.forEach((device) => {
nodePayload[device.name] = {};
// 示例:如果存在则更新 Power 参数
const powerParam = device.params.find(p => p.name === "Power");
if (powerParam) {
nodePayload[device.name]["Power"] = true;
}
});
}

// 添加服务参数
if (nodeConfig && nodeConfig.services) {
nodeConfig.services.forEach((service) => {
nodePayload[service.name] = {};
// 示例:如果存在则更新 TZ 参数
const tzParam = service.params.find(p => p.name === "TZ");
if (tzParam) {
nodePayload[service.name]["TZ"] = "America/Los_Angeles";
}
});
}

return {
nodeId: node.id,
payload: nodePayload
};
});

// 执行批量更新
const response = await userInstance.setMultipleNodesParams(payload);
console.log("Batch update completed:", response);
} catch (error) {
console.error("Error in batch update:", error);
}

setMultipleNodesParams API

参数类型说明
payload*MultipleNodePayload[]载荷对象数组,其中每个对象都包含待更新的节点 ID 及其参数。

MultipleNodePayload 接口

属性类型说明
nodeId*字符串要更新的节点 ID。
payload*NodePayload包含设备参数和服务参数的对象,以设备或服务名称为键。

NodePayload 结构

NodePayload 是一个可索引对象,其中:

  • 为设备名称或服务名称(字符串)。
  • DeviceParams 对象(可按参数名索引)。

示例结构:

{
"Light": { // 设备名称
"Power": true, // 参数名:值
"Brightness": 80
},
"Time": { // 服务名称
"TZ": "America/Los_Angeles" // 参数名:值
}
}
注意
  • 载荷中的设备名称和服务名称必须与节点配置中的实际名称一致。
  • 参数名称必须与设备或服务配置中的实际参数名称一致。
  • 可以在同一次批量操作中同时更新设备参数和服务参数。
  • 该 API 会为整个批量操作返回一个响应结果。

On this page