应该是因为多条tcp消息到达热水器的顺序无法保证导致的。 现在换成用function节点手动发送每一条消息,确保前面的消息发送成功再发送后面的消息就可以稳定控制了。 注意要先在nodered的settings.js里面配置全局导出net库,否则没法在function节点引入net。
const net = global.get('net');
async function sendTcpMessages(messages) {
const client = new net.Socket();
try {
node.status({ fill: "yellow", shape: "ring", text: "正在连接…" });
// 连接到服务器
await new Promise((resolve, reject) => {
client.connect(7681, '192.168.31.59', () => resolve());
client.on('error', reject);
node.status({ fill: "red", shape: "dot", text: "连接失败" });
});
// 按顺序发送消息
for (const message of messages) {
await new Promise((resolve, reject) => {
client.write(Buffer.from(message, "hex"), (err) => {
if (err) reject(err);
else resolve();
});
});
node.log(`Sent: ${message}`);
// console.log(`Sent: ${message}`);
}
node.status({ fill: "green", shape: "dot", text: "发送完成" });
} catch (error) {
node.error('Error:', error);
node.status({ fill: "red", shape: "dot", text: "发送出现错误" });
// console.error('Error:', error);
} finally {
client.end();
}
}
// 使用示例
const messages = [
"aabb08028c00106f54faf4c95c8e6572c9eba9bee63e5d9e99",
"aabb11006700408882f42408bd03b25cedcad29f5ecf00f28393903783fba9826067ca6a6337fd441a30f7c4864bf6b5f1a85f688c35c05a783f3951d934d2269e5e46c8042f75",
"aabb1100310050e7dd5f1b35d9f21d5afa1dbf8e64fcb91491878ef4bf076ba332c24f7ba677daf97903e1bcbedfe477aaab8267cb3d49bc2f17d3628dd49cd127349a657d2dcd486f5e329475db8f95298534fa0b0cc9",
"aabb11006e0050d3a985bb41087e7e0ec3a2d43533037f9b83432fcb329251a0fb9fbd2d77b910016cf0abd946643dde06f91cb1878922b4dab6d07542979681c8609a8bc3152ebf02b0c9c710422fefe97681c94f8f30",
"aabb11009a0050f06078aaf3d779dbe62ecb0a83c8987ee3453534e6ba8b6900c86c902900ea8c387147e3b0bacd4ef72716a5a27ecf9af77b5655bd6c9fb7504de2e97ec232d56ce0f02a5bec384e2d0b02b1101abf8f",
"aabb1100d900504e027faf1525b7ac53ac07f40b05c8dd3af33a5a00dd1eabb05b1d84d6750f2aee02b37127ae9df87a048df425ebeba647d9076fd10dac916c264bdb41be0cecc8cdfafe874665cbffcab8d699b34541aabb1100a20050512385d3dd30f022adb6b709baec18a2cd4fb5d9c3e17d5a6b2a4b23f13c9e5a792e25d782bad1008d39f72e79778fd4aa69ee3aae75f4b81955c6ab694d2669e09ad3c780745ed0aab35cbdb012f2c0"
];
sendTcpMessages(messages);
|