thingsboard规则链websocket
时间: 2024-12-27 16:20:13 浏览: 5
### ThingsBoard 规则链与 WebSocket 集成
#### 创建 WebSocket 转发器规则节点
为了实现 ThingsBoard 中的 WebSocket 数据流处理,可以创建一个自定义规则节点来监听特定事件并将这些事件通过 WebSocket 推送给前端应用。
```javascript
const ws = require('ws');
let webSocketServer;
function startWebSocket() {
webSocketServer = new ws.Server({
port: 9001,
path: '/data'
});
webSocketServer.on('connection', function connection(wsClient) {
console.log("New client connected");
// 当有新消息到达时触发此回调函数
wsClient.on('message', function incoming(message) {
console.log(`Received from client ${message}`);
});
// 断开连接时调用该方法
wsClient.on('close', function close() {
console.log('Disconnected');
});
});
}
startWebSocket();
```
当构建好上述基础结构之后,在 ThingsBoard 的规则链编辑界面里新增加一个 **Script Transformation Node**, 输入如下脚本:
```groovy
// 假设已经有一个全局变量 `webSocketServer` 存储着 WebSocket Server 实例.
if (msgType == 'POST_TELEMETRY_REQUEST') {
try {
let dataString = JSON.stringify(msg);
webSocketServer.clients.forEach(function each(client) {
if (client.readyState === ws.OPEN) {
client.send(dataString);
}
});
return { msg: null, metadata: {}, msgType: "NO_ERROR" };
} catch(e){
log.warn("Error while sending message via WS", e);
throw e;
}
} else {
return { msg: originalMsg, metadata: originalMetadata, msgType: originalMsgType };
}
```
这段 Groovy 代码会拦截所有来自设备上传感器数据的消息 (`POST_TELEMETRY_REQUEST`) 并尝试将其发送给每一个已建立好的 WebSocket 连接客户端。如果成功,则返回无错误状态;如果有任何异常发生,则记录警告日志并抛出异常终止当前流程[^1]。
对于想要接收推送通知的应用程序来说,只需要按照标准方式打开 Web Socket 连接到服务器即可:
```html
<script>
var socket = new WebSocket('ws://yourserverip:9001/data');
socket.addEventListener('open', function(event) {
console.log("Connected to server.");
});
socket.addEventListener('message', function(event) {
var telemetryData = JSON.parse(event.data);
updateUI(telemetryData); // 自定义 UI 更新逻辑
});
</script>
```
以上就是如何利用 ThingsBoard 的规则链机制配合 WebSocket 技术实现实时通信的一个简单例子[^4]。
阅读全文