ThingsBoard规则链节点:Script节点详解

news2024/10/25 1:33:08

引言

脚本节点简介

用法

含义

应用场景

实际项目运用示例

智能楼宇管理系统

工业自动化生产线

结论


引言

ThingsBoard是一个功能强大的物联网平台,它支持设备管理、数据收集与处理以及实时监控。其核心组件之一是规则引擎,允许用户定义复杂的业务逻辑来自动处理来自设备的数据流。本文将详细介绍规则链中的“脚本”(Script)节点,包括其基本用法、含义及在实际项目中的应用案例。

ThingsBoard从入门到实战课程,深入透析底层原理,快速搭建自己的IOT平台_哔哩哔哩_bilibiliThingsBoard从入门到实战课程,深入透析底层原理,快速搭建自己的IOT平台共计21条视频,包括:1、ThingsBoard项目介绍、2、ThingsBoard前端Vue版本代码编译、3、ThingsBoard本地后端源码编译等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1CH36egEDM/?spm_id_from=333.999.0.0&vd_source=5b535ac3589f53abe431d7f6afc44ff4 

脚本节点简介

在ThingsBoard中,脚本节点提供了一种灵活的方式来执行自定义的JavaScript代码。这使得开发者能够实现更加复杂和定制化的数据处理逻辑,而不仅仅是依赖于预定义的节点功能。通过编写脚本,用户可以访问消息对象、上下文信息,并根据需要修改或生成新的消息。

用法

  1. 添加到规则链:在规则链编辑器界面,从左侧工具箱拖动“脚本”节点至右侧工作区。
  2. 配置选项
    • 脚本类型:选择脚本语言,默认为JavaScript。
    • 脚本内容:在此处编写你的脚本代码。你可以访问msg对象(当前消息)、metadata(元数据)以及其他内置函数和变量。
  3. 连接到其他节点:通常该节点会放置在需要进行特定逻辑处理的地方,以便于后续处理步骤能够基于脚本处理后的结果继续操作。
  4. 查看结果:执行后,消息对象可能会被脚本修改,或者产生新的消息对象传递给下一个节点。

含义

脚本节点的主要作用是允许用户通过编程方式扩展规则链的功能。它可以用来实现任何预定义节点无法满足的需求,例如复杂的计算、条件判断、外部API调用等。

应用场景

  • 复杂计算:当需要对遥测数据进行复杂的数学运算或统计分析时,使用脚本节点可以方便地实现这些计算。
  • 动态路由:根据消息内容动态决定消息的流向,比如根据不同类型的报警级别将消息发送到不同的处理路径。
  • 外部集成:与第三方服务进行交互,如调用REST API发送通知、查询数据库或与其他系统同步数据。
  • 数据转换:对消息中的数据进行格式转换,以适应不同系统的接口要求。
  • 条件判断:根据特定条件决定是否继续处理消息,或者改变消息的内容。

实际项目运用示例

智能楼宇管理系统

假设你正在开发一套智能楼宇管理系统,该系统集成了温度传感器、湿度传感器、安全摄像头等多种设备,用于监测楼宇内的环境状况并确保安全。

  • 动态报警级别:当温度传感器检测到异常高温时,可以根据具体温度值动态设置报警级别。使用脚本节点编写如下脚本:

     Javascript 

    深色版本

    if (msg.temperature > 35) {
        msg.alarmLevel = 'CRITICAL';
    } else if (msg.temperature > 30) {
        msg.alarmLevel = 'WARNING';
    } else {
        msg.alarmLevel = 'NORMAL';
    }
    return { msg: msg, metadata: metadata, msgType: msgType };

    这样,根据温度的不同,可以设置不同的报警级别,并且将这个级别作为新属性添加到消息中。

  • 外部API调用:如果需要在检测到异常情况时向物业管理部门发送短信通知,可以通过脚本节点调用第三方短信服务API:

     Javascript 

    深色版本

    const http = require('http');
    const options = {
        hostname: 'api.example.com',
        port: 80,
        path: '/send-sms',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        }
    };
    
    const req = http.request(options, res => {
        // Handle response
    });
    
    req.on('error', error => {
        // Handle error
    });
    
    const postData = JSON.stringify({
        phoneNumber: '+1234567890',
        message: `Temperature alarm at ${msg.location}: ${msg.temperature}°C`
    });
    req.write(postData);
    req.end();
    
    return { msg: msg, metadata: metadata, msgType: msgType };

工业自动化生产线

在一个工业自动化生产线上,各种传感器和控制器不断生成大量的操作日志和状态报告。这些数据对于维护生产线的正常运行至关重要。

  • 数据清洗与转换:有时,从不同设备获取的数据格式可能不一致,需要统一格式后才能进行进一步处理。使用脚本节点可以实现数据格式的标准化:

     Javascript 

    深色版本

    if (msg.deviceType === 'temperatureSensor') {
        msg.value = msg.temperature;
        delete msg.temperature;
    } else if (msg.deviceType === 'humiditySensor') {
        msg.value = msg.humidity;
        delete msg.humidity;
    }
    
    // Add a timestamp
    msg.timestamp = new Date().toISOString();
    return { msg: msg, metadata: metadata, msgType: msgType };
  • 条件判断与控制:在某些情况下,可能需要根据特定条件触发某些操作。例如,当某台机器的故障计数超过阈值时,启动紧急停机程序:

     Javascript 

    深色版本

    if (msg.errorCount > 10) {
        // Trigger an emergency shutdown
        console.log(`Emergency shutdown triggered for device ${msg.deviceId}`);
        // Additional logic to handle the shutdown
    }
    
    return { msg: msg, metadata: metadata, msgType: msgType };

结论

脚本节点是ThingsBoard规则链中一个非常强大的工具,它赋予了开发者极大的灵活性来实现自定义的业务逻辑。无论是为了处理复杂的计算任务、动态路由消息、还是与外部系统集成,合理利用脚本节点都能显著提升系统的功能性和效率。随着物联网技术的发展,期待未来能看到更多创新的应用实例出现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue特效,一片动态星空

vue实现漂亮星空&#xff0c;超级简单 1.创建vue项目&#xff1a; vue create demo 2.注册vuecli : npm i element-ui -S 3.加载依赖 &#xff1a;npm i 4.运行项目 :npm run serve <!DOCTYPE html> <html lang"en"> <head><…

JavaWeb 19 AJAX

"我就是希望你好&#xff0c;就像很多人希望我好一样&#xff0c;特别简单&#xff0c;特别真挚。也不为了什么&#xff0c;就是希望你好" —— 24.10.13 一、什么是AJAX AJAX Asynchronous JavaScript and XML(异步的JavaScript和XML) AJAX不是新的编程语言&…

仿新版QQ的聊天小软件

仿新版QQ的聊天小软件 文章说明核心源码效果展示源码下载 文章说明 新开一个聊天组件的项目的想法主要来源于想学习一下消息队列的使用&#xff0c;后来在书写界面和一些功能模块时&#xff0c;又想到可以抽离出来&#xff0c;分别写几篇文章&#xff0c;主要介绍扫码登陆、消息…

MQ快速入门【详细】个人笔记 讲解通俗易懂

1.同步通讯和异步通讯 同步通讯&#xff1a;如果举个例子来说&#xff0c;同步通讯就像是两个人在打电话&#xff0c;一方说的话&#xff0c;能够立马传给另一方&#xff0c;消息的时效性非常高&#xff0c;但是相对的&#xff0c;只能是给一个人通讯&#xff0c;如果这个时候&…

React (三) 创建安装脚手架,类组件与函数式组件;生命周期;父子通信props;插槽;非父子通信Context

文章目录 一、脚手架的创建与安装1. 认识脚手架2. 安装脚手架3. 创建react项目4. 项目结构 二、从0编写三、组件化开发1. 什么是组件化开发2. 类组件3. render函数4. 函数式组件 四、生命周期1. 挂载Mount2. 更新Update3. 卸载Unmount4. 不常用的生命周期 五、父子组件通信1. 父…

数据结构之队列(python)

华子目录 1.队列存储结构1.1队列基本介绍1.2队列的实现方式 2.顺序队列2.1顺序队列的介绍2.2顺序队列的简单实现2.3代码实现 3.链式队列和基本操作3.1链式队列数据入队3.2链式队列数据出队3.3队列的链式表示和实现 1.队列存储结构 1.1队列基本介绍 队列的两端都"开口&qu…

springcloud之服务集群注册与发现 Eureka

前言 1&#xff1a;对于能提供完整领域服务接口功能的RPC而言&#xff0c;例如&#xff1b;gRPC、Thrift、Dubbo等&#xff0c;服务的注册与发现都是核心功能中非常重要的一环&#xff0c;使得微服务得到统一管理。 2&#xff1a;在分布式领域中有个著名的CAP理论&#xff1b;…

Vue3 + Element plus 实现切换el-radio前二次确认

Vue3 Element plus 实现切换el-radio前二次确认 场景&#xff1a;点击切换el-radio之前判断当前内容是否有改变&#xff0c;如有改变弹窗提示切换el-radio将销毁操作&#xff0c;弹窗二次确认是否切换 问题&#xff1a; el-radio 没有提供类似于beforeUpdate这样的钩子去处理这…

探索极简计算的新边界:从Uxn虚拟机看未来编程生态

越来越多的开发者追求复杂度和功能性的极致,然而,有一个小众的编程社区选择了截然不同的道路——极简主义。Uxn虚拟机便是这一思潮的代表之一。它通过简洁的指令集和有限的硬件资源模拟,试图打造一种可以在多种设备上运行的便携性编程环境。 与主流的重型操作系统和复杂…

HTB:Legacy[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many TCP ports are open on Legacy? 2.What is the 2008 CVE ID for a vulnerability in SMB that allows for remote code execution? 3.What is the name of the Metasploit module that exploits CVE-2008-4250? 4.When expl…

VS+QT 自定义插件变成动态库加载及使用

一、前言 有个界面需要重复使用某个自定义的控件&#xff0c;希望自定义控件能够像动态库文件那样&#xff0c;添加引用lib就能使用&#xff0c;经过多次太坑后&#xff0c;总结如下 二、实现方式 ① 新建项目&#xff0c;选择"Qt Designer Custom Widget" 创建自定…

Springboot从入门到起飞-【day01】

个人主页→VON 收录专栏→Springboot从入门到起飞 一、前言 经过了近两个月的沉淀开始了新专栏的学习&#xff0c;经过深思熟虑还是决定重新学习java&#xff0c;因为基础部分东西太多太乱就不进行逐一的更新了&#xff0c;等到学完了一同进行更新。 二、Springboot简要概述 …

kafka消息队列核心内容及常见问题

目录 1. 使用消息队列的目的&#xff08;优点与缺点&#xff09; 2. 常见各消息队列对比 3. kafka介绍 3.1 kafka简介 3.2 kafka特点 3.3 kafka系统架构 3.4 设置数据可靠性 3.4.1 Topic 分区副本 3.4.2 消息确认机制 4. 常见问题&#xff08;面试题&#xff09; 4.…

Springboot 接入 WebSocket 实战

Springboot 接入 WebSocket 实战 前言&#xff1a; WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。 简单理解&#xff1a; 1&#xff0c;常见开发过程中我们知道 Http协议&#xff0c;客户端…

LED显示器闪烁故障原因及解决方法

随着电子显示屏在各行各业的广泛应用&#xff0c;LED显示器因其高亮度、节能和灵活的宣传功能&#xff0c;成为了宣传推广的重要工具。然而&#xff0c;LED显示器在使用过程中有时会出现闪烁的现象&#xff0c;这不仅影响了显示效果&#xff0c;还可能影响用户体验。针对这一问…

【layui】多文件上传组件实现

插件预览效果&#xff1a; 需要引入layui的脚本文件layui.js和样式文件layui.css html代码&#xff1a; <div class"layui-input-block"><div class"layui-upload-list"><table class"layui-table"><colgroup><col…

18936 手串

### 思路 1. **输入处理**&#xff1a;读取输入的n, m, c&#xff0c;以及每个串珠的颜色信息。 2. **颜色位置记录**&#xff1a;使用一个字典来记录每种颜色出现的位置。 3. **检查颜色分布**&#xff1a;遍历每种颜色&#xff0c;检查其在任意连续m个串珠中是否出现超过一次…

【Flask】Flask数据库

【Flask】Flask数据库 1.概述2.使用Flask-SQLAlchemy管理数据库3.定义模型4.关系5.数据库操作创建表插入行修改行删除行查询行 1.概述 大多数的数据库引擎都有对应的 Python 包&#xff0c;包括开源包和商业包。Flask 并不限制你使用何种类型的数据库包&#xff0c;因此可以根…

Java体系中的泛型

1. 泛型 一般的类和方法&#xff0c;只能够使用基本类型&#xff0c;要么是自定义的类&#xff0c;如果要编写可以应用于多种数据类型的代码&#xff0c;这种刻板的限制对代码的约束就会很大&#xff0c;那么如何实现可应用于多种数据类型的代码&#xff0c;而不局限于单一一种…

第5篇:DDOS病毒----应急响应之Linux实战篇

现象描述 某服务器网络资源异常,感染该木马病毒的服务器会占用网络带宽&#xff0c;甚至影响网络业务正常应用。 系统分析 针对日志服务器病毒事件排查情况&#xff1a; 在开机启动项/etc/rc.d/rc.local发现可疑的sh.sh脚本&#xff0c;进一步跟踪sh.sh脚本,这是一个检测病毒…