Files
OpenMQTTGateway/docs/integrate/node_red.md
Florian 7a2bb04a1b [DOCS] Theengs Plug highlight and SEO improvements (#1730)
* [DOCS] Theengs Plug highlight

* Add alt content for images and description
2023-08-11 13:04:52 -05:00

321 lines
7.6 KiB
Markdown

# Integrate Node-Red
## Integrate BLE sensors, devices and display a dashboard
Prerequisites: node-red, node-red-dashboard
### Broker connection
* Add a new `mqtt in` node
* Click 2 times on it
* Add a new broker or connect to an existing one (server field)
* Set the topic like below with the MAC address at the end being the one of the device you want to integrate
![NodeRed integration](../img/OpenMQTTgateway_NODERED-integration.png)
::: tip
The "+" enables to process the data from all the gateways whatever name they have. So you may setup several OpenMQTTGateway, you will not have to change the Node-Red configuration.
:::
This configuration enables to process all the data coming from the sensor.
* Click on done
* So as to monitor the traffic coming; you can add a debug node with *msg.payload* as Output
![NodeRed integration](../img/OpenMQTTgateway_NODERED-integration-debug.png)
* Link it to the `mqtt in` node
![NodeRed integration](../img/OpenMQTTgateway_NODERED-integration-debug2.png)
* Deploy
* Open the debug panel
* You should see messages coming when the gateway will receive data
![NodeRed integration](../img/OpenMQTTgateway_NODERED-integration-debug3.png)
### Json message processing
We need to process the json message so as to extract the value that we want to display.
* Add a `change` node
* Configure it as `Move`
* Add the msg value you would like to process example *msg.payload.tempc* and the target *msg.payload*
![NodeRed integration](../img/OpenMQTTgateway_NODERED-integration-process.png)
* Connect the `change` node to the `mqtt in` node
### Dashboard
You can now add widget so as to display the value processed above
* Add a `gauge` node
* Add a group and organize your dashboard
* Add your value format to process the payload like below
![NodeRed integration](../img/OpenMQTTgateway_NODERED-gauge.png)
* Click on Done
* Deploy
* Go to your `node-red url`/ui
You should see the gauge with the last value displayed
![NodeRed integration](../img/OpenMQTTgateway_NODERED-gauge-dashboard.png)
You can also add easily a chart node:
![NodeRed integration](../img/OpenMQTTgateway_NODERED-chart.png)
![NodeRed integration](../img/OpenMQTTgateway_NODERED-chart-dashboard.png)
Or a function with a notification:
![NodeRed integration](../img/OpenMQTTgateway_NODERED-flow-BLE-temperature.png)
## Integrate RF
Here is a simple set of flows for integrating OpenMQTTGateway with NodeRED via an ESP8266 module.
In this example I have used a Wemos D1 Mini with some cheap RF modules.
![NodeRed integration](https://i.imgur.com/z2RFvUw.jpg)
A flow to receive 433MHz signals into NodeRED (you will need to update the IP address of your broker)
![NodeRed integration](https://i.imgur.com/2UWYzHg.jpg)
```json
[
{
"id": "6d1b2915.7ce798",
"type": "mqtt in",
"z": "a9a9b76b.e69998",
"name": "433MQTT",
"topic": "home/OpenMQTTGateway/433toMQTT",
"qos": "2",
"broker": "4572f098.cc1",
"x": 80,
"y": 740,
"wires": [
[
"fe53b819.4f9568"
]
]
},
{
"id": "fe53b819.4f9568",
"type": "debug",
"z": "a9a9b76b.e69998",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 290,
"y": 740,
"wires": []
},
{
"id": "4572f098.cc1",
"type": "mqtt-broker",
"z": "",
"name": "",
"broker": "192.168.0.56",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": "",
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": ""
}
]
```
A flow to send 433MHz signals from NodeRED
![NodeRed integration](https://i.imgur.com/PMlWyii.jpg)
```json
[
{
"id": "ff924d56.459d6",
"type": "mqtt out",
"z": "a9a9b76b.e69998",
"name": "MQTTto433",
"topic": "home/OpenMQTTGateway/commands/MQTTto433",
"qos": "",
"retain": "",
"broker": "4572f098.cc1",
"x": 610,
"y": 860,
"wires": []
},
{
"id": "6c25a2d4.6c733c",
"type": "inject",
"z": "a9a9b76b.e69998",
"name": "",
"topic": "",
"payload": "On",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 90,
"y": 840,
"wires": [
[
"7689fe88.45679"
]
]
},
{
"id": "a76d2f03.5f3",
"type": "change",
"z": "a9a9b76b.e69998",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "5510487",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 380,
"y": 840,
"wires": [
[
"ff924d56.459d6"
]
]
},
{
"id": "7689fe88.45679",
"type": "switch",
"z": "a9a9b76b.e69998",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "On",
"vt": "str"
},
{
"t": "eq",
"v": "Off",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 210,
"y": 860,
"wires": [
[
"a76d2f03.5f3"
],
[
"6a7c2c3a.567794"
]
]
},
{
"id": "7e52ec9.00dde14",
"type": "inject",
"z": "a9a9b76b.e69998",
"name": "",
"topic": "",
"payload": "Off",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 90,
"y": 880,
"wires": [
[
"7689fe88.45679"
]
]
},
{
"id": "6a7c2c3a.567794",
"type": "change",
"z": "a9a9b76b.e69998",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "4527444",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 380,
"y": 880,
"wires": [
[
"ff924d56.459d6"
]
]
},
{
"id": "20991aea.cca8a6",
"type": "comment",
"z": "a9a9b76b.e69998",
"name": "Set you RF codes here.",
"info": "",
"x": 380,
"y": 800,
"wires": []
},
{
"id": "4572f098.cc1",
"type": "mqtt-broker",
"z": "",
"name": "",
"broker": "192.168.0.56",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": "",
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": ""
}
]
```