龙空技术网

thingsboard ce的规则引擎实例

老刘说iot 116

前言:

目前各位老铁们对“js取系统当前时间”可能比较重视,同学们都想要学习一些“js取系统当前时间”的相关资讯。那么小编也在网摘上搜集了一些对于“js取系统当前时间””的相关内容,希望你们能喜欢,咱们一起来了解一下吧!

--------在一个时间区间内,由条件触发发送邮件提醒

条件准备:

1、一个nodemcu单片机、数字式人体红外传感器,通过mqtt协议发送数据到tb平台;

2、thingsboard平台已经创建好对应的设备,其设备token已烧录至nodemcu中;

3、nodemcu上电后,可以看到该设备遥测数据已经正常上发;

4、设备通电后,数据按每两秒一条上行数据。当感应到红外线 online为:100,否则为:1;

nodemcu通过mqtt发布人体红外感应数据

问题:

需要在某个时间区间内当设备感应到红外线,然后触发一个邮件推送来提醒设备管理人员。并且推送次数至多不超过2条。

规则链:

根据问题描述,可以通过tb中的规则节点来实现这一需求。

重点规则节点:

1、用“Switch”节点来判断是否为“人体红外传感器”的设备数据

2、用“Switch”节点的js代码获取系统时间并定义出有效数据的时间区间

3、用“设备属性集”节点,来实现条件成立后只发送几次邮件提醒。这里需要引入一个变量,用来判断发了几次邮件。

该设备增加一个服务端属性

节点处获取该服务端属性的数据

4、用“script”节点来判断这个服务端数据的是否小于2(至多2次)

5、用变换节点中的“to email”节点来创建邮件接收地址

6、用变换节点中的“script”节点,对服务端数据值每次+1操作,并保存属性数据;

属性值+1

保存属性数据

7、整个规则链

备注:

nodemcu的代码可参考如下:

#include "ThingsBoard.h"#include <ESP8266WiFi.h>int sensor= 12;  // Digital pin D6 ,接人体红外传感器数字OUT口int timeOut = 0;#define WIFI_AP             "SSID"   // wifi 用户名#define WIFI_PASSWORD       "*********"    // wifi 密码#define TOKEN               "wWMPRLLQYn**********"  // 设备Token#define THINGSBOARD_SERVER  "3.*.*.*"                  #define PORT          1883 // Baud rate for debug serial#define SERIAL_DEBUG_BAUD   115200// Initialize ThingsBoard clientWiFiClient espClient;// Initialize ThingsBoard instanceThingsBoard tb(espClient);// the Wifi radio's statusint status = WL_IDLE_STATUS;void setup() {  pinMode(sensor, INPUT);   // declare sensor as input  pinMode(Status, OUTPUT);  // declare LED as output  // initialize serial for debugging  Serial.begin(SERIAL_DEBUG_BAUD);  WiFi.begin(WIFI_AP, WIFI_PASSWORD);  pinMode(LED_BUILTIN, OUTPUT);  InitWiFi();}void loop() {  delay(2000);  if (WiFi.status() != WL_CONNECTED) {    reconnect();  }  Serial.println("444444444");  Serial.println(WiFi.localIP());  if (!tb.connected()) {    // Connect to the ThingsBoard    Serial.print("Connecting to: ");    Serial.print(THINGSBOARD_SERVER);    Serial.print(" with token ");    Serial.println(TOKEN);    if (!tb.connect(THINGSBOARD_SERVER, TOKEN, PORT)) {      Serial.println("Failed to connect");      return;    }  }  Serial.println("Sending data...");  // Uploads new telemetry to ThingsBoard using MQTT.  // See ; // for more details  long state = digitalRead(sensor);  Serial.println(state);  // 增加延时处理,当红外感应从高电平变为低电平后,做一个延时处理给平台推送更多有效数据;  // 减轻数据波动  if (state == HIGH) {    tb.sendTelemetryInt("online", 100);    digitalWrite(LED_BUILTIN, LOW);  // Turn the LED off by making the voltage HIGH    timeOut = 0;  }  else {     timeOut++;  }  if(timeOut >= 10){     Serial.println("Motion absent!");     tb.sendTelemetryInt("online", 1);     digitalWrite(LED_BUILTIN, HIGH);   // Turn the LED on (Note that LOW is the voltage level   }else{     tb.sendTelemetryInt("online", 100);     digitalWrite(LED_BUILTIN, LOW);  // Turn the LED off by making the voltage HIGH   }    tb.loop();}void InitWiFi(){  Serial.println("Connecting to AP ...");  // attempt to connect to WiFi network  WiFi.begin(WIFI_AP, WIFI_PASSWORD);  while (WiFi.status() != WL_CONNECTED) {    delay(500);    Serial.print(".");  }  Serial.println("Connected to AP");}void reconnect() {  // Loop until we're reconnected  status = WiFi.status();  if ( status != WL_CONNECTED) {    WiFi.begin(WIFI_AP, WIFI_PASSWORD);    while (WiFi.status() != WL_CONNECTED) {      delay(500);      Serial.print(".");    }    Serial.println("Connected to AP");  }}

标签: #js取系统当前时间