09-emq-broker.md 5.3 KB
Newer Older
1 2 3 4 5
---
sidebar_label: EMQX Broker
title: EMQX Broker writing
---

6
MQTT is a popular IoT data transfer protocol. [EMQX](https://github.com/emqx/emqx) is an open-source MQTT Broker software. You can write MQTT data directly to TDengine without any code. You only need to setup "rules" in EMQX Dashboard to create a simple configuration. EMQX supports saving data to TDengine by sending data to a web service and provides a native TDengine driver for direct saving in the Enterprise Edition. Please refer to the [EMQX official documentation](https://www.emqx.io/docs/en/v4.4/rule/rule-engine.html) for details on how to use it.).
7 8 9 10 11

## Prerequisites

The following preparations are required for EMQX to add TDengine data sources correctly.
- The TDengine cluster is deployed and working properly
12
- taosAdapter is installed and running properly. Please refer to the [taosAdapter manual](../../reference/taosadapter) for details.
13 14 15 16 17 18
- If you use the emulated writers described later, you need to install the appropriate version of Node.js. V12 is recommended.

## Install and start EMQX

Depending on the current operating system, users can download the installation package from the [EMQX official website](https://www.emqx.io/downloads) and execute the installation. After installation, use `sudo emqx start` or `sudo systemctl start emqx` to start the EMQX service.

19
Note: this chapter is based on EMQX v4.4.5. Other version of EMQX probably change its user interface, configuration methods or functions.
20

D
dingbo 已提交
21
## Create Database and Table
22

D
dingbo 已提交
23
In this step we create the appropriate database and table schema in TDengine for receiving MQTT data. Open TDengine CLI and execute SQL bellow: 
24 25

```sql
D
dingbo 已提交
26 27 28
CREATE DATABASE test;
USE test;
CREATE TABLE sensor_data (ts TIMESTAMP, temperature FLOAT, humidity FLOAT, volume FLOAT, pm10 FLOAT, pm25 FLOAT, so2 FLOAT, no2 FLOAT, co FLOAT, sensor_id NCHAR(255), area TINYINT, coll_time TIMESTAMP);
29 30 31 32
```

## Configuring EMQX Rules

33
Since the configuration interface of EMQX differs from version to version, here is v4.4.5 as an example. For other versions, please refer to the corresponding official documentation.
34 35 36 37 38

### Login EMQX Dashboard

Use your browser to open the URL `http://IP:18083` and log in to EMQX Dashboard. The initial installation username is `admin` and the password is: `public`.

D
dingbo 已提交
39
![TDengine Database EMQX login dashboard](./emqx/login-dashboard.webp)
40 41 42 43 44

### Creating Rule

Select "Rule" in the "Rule Engine" on the left and click the "Create" button: !

D
dingbo 已提交
45
![TDengine Database EMQX rule engine](./emqx/rule-engine.webp)
46 47 48

### Edit SQL fields

D
dingbo 已提交
49 50 51 52 53 54 55 56 57
Copy SQL bellow and paste it to the SQL edit area:

```sql
SELECT
  payload
FROM
  "sensor/data"
```

D
dingbo 已提交
58
![TDengine Database EMQX create rule](./emqx/create-rule.webp)
59 60 61

### Add "action handler"

D
dingbo 已提交
62
![TDengine Database EMQX add action handler](./emqx/add-action-handler.webp)
63 64 65

### Add "Resource"

D
dingbo 已提交
66
![TDengine Database EMQX create resource](./emqx/create-resource.webp)
67 68 69 70 71

Select "Data to Web Service" and click the "New Resource" button.

### Edit "Resource"

D
dingbo 已提交
72
Select "WebHook" and fill in the request URL as the address and port of the server running taosAdapter (default is 6041). Leave the other properties at their default values.
73

D
dingbo 已提交
74
![TDengine Database EMQX edit resource](./emqx/edit-resource.webp)
75 76 77

### Edit "action"

D
dingbo 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
Edit the resource configuration to add the key/value pairing for Authorization. If you use the default TDengine username and password then the value of key Authorization is:
```
Basic cm9vdDp0YW9zZGF0YQ==
```

Please refer to the [ TDengine REST API documentation ](/reference/rest-api/) for the authorization in details. 
 
Enter the rule engine replacement template in the message body:

```sql
INSERT INTO test.sensor_data VALUES(
  now,
  ${payload.temperature},
  ${payload.humidity},
  ${payload.volume},
  ${payload.PM10},
  ${payload.pm25},
  ${payload.SO2},
  ${payload.NO2},
  ${payload.CO},
  '${payload.id}',
  ${payload.area},
  ${payload.ts}
)
```
103

D
dingbo 已提交
104
![TDengine Database EMQX edit action](./emqx/edit-action.webp)
105

D
dingbo 已提交
106
Finally, click the "Create" button at bottom left corner saving the rule.
107 108 109
## Compose program to mock data

```javascript
D
dingbo 已提交
110
{{#include docs/examples/other/mock.js}}
111 112 113 114
```

Note: `CLIENT_NUM` in the code can be set to a smaller value at the beginning of the test to avoid hardware performance be not capable to handle a more significant number of concurrent clients.

D
dingbo 已提交
115
![TDengine Database EMQX client num](./emqx/client-num.webp)
116 117 118 119 120 121 122 123

## Execute tests to simulate sending MQTT data

```
npm install mqtt mockjs --save ---registry=https://registry.npm.taobao.org
node mock.js
```

D
dingbo 已提交
124
![TDengine Database EMQX run mock](./emqx/run-mock.webp)
125 126 127 128 129

## Verify that EMQX is receiving data

Refresh the EMQX Dashboard rules engine interface to see how many records were received correctly:

D
dingbo 已提交
130
![TDengine Database EMQX rule matched](./emqx/check-rule-matched.webp)
131 132 133 134 135

## Verify that data writing to TDengine

Use the TDengine CLI program to log in and query the appropriate databases and tables to verify that the data is being written to TDengine correctly:

D
dingbo 已提交
136
![TDengine Database EMQX result in taos](./emqx/check-result-in-taos.webp)
137

138
Please refer to the [TDengine official documentation](https://docs.tdengine.com/) for more details on how to use TDengine.
139
EMQX Please refer to the [EMQX official documentation](https://www.emqx.io/docs/en/v4.4/rule/rule-engine.html) for details on how to use EMQX.