Changes for page BACnet

Last modified by Kilight Cao on 2025/06/03 14:23

From version 21.1
edited by Kilight Cao
on 2025/06/03 11:51
Change comment: There is no comment for this version
To version 12.1
edited by Kilight Cao
on 2023/04/01 12:00
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -18,46 +18,154 @@
18 18  === 1.1.2 List supported products and requirements ===
19 19  
20 20  
21 -Gateway model: LPS8v2,LG01v2,MS20,MS48-LR
21 +Gateway model: LPS8v2,LG01v2,MS20
22 22  
23 23  
24 -= 2. Bridge LoRaWAN network to BACnet network =
24 +== 1.2 Download and Install the BACnet ==
25 25  
26 26  
27 -By following the steps below in the configuration example, Users can convert the uplink data of the lorawan sensor to BACnet data
27 +(% class="box infomessage" %)
28 +(((
29 +wget [[http:~~/~~/dragino.vicp.io:6080/bacnet/dragino-bacnet-apps-hp0c-2023-03-01.deb>>url:http://dragino.vicp.io:6080/bacnet/dragino-bacnet-apps-hp0c-2023-03-01.deb]]
30 +dpkg -i dragino-bacnet-apps-hp0c-2023-03-01.deb
31 +)))
28 28  
29 -LPS8v2 includes a local ChirpStack Server. This example shows how to configure LHT65N to use with BACnet. This example assumes users already have:
33 +[[image:image-20230401114036-1.png]]
30 30  
31 -* LHT65N register on LPS8v2 Built-In ChirpStack server already
32 -* The user is able to see the data on the built-in ChirpStack server device page.
33 33  
34 -Below are the steps to configure lps8v2 BACnet.
36 +== 1.3 Configure BACnet ==
35 35  
38 +After BACnet is installed, run commands to modify BACnet configurations
36 36  
37 -== 2.1 Register gateway ==
40 +**Note: device_port and bacnet_ip_port are not set to the same**
38 38  
42 +(% class="box infomessage" %)
43 +(((
44 +nano /etc/config/bacnet
45 +)))
39 39  
40 -For information on how to register a gateway connection to chirpstack, please refer to the link:
47 +**Examples:**
41 41  
42 -**[[https:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H4.A0SemtechUDPforChirpStackv4>>https://wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H4.A0SemtechUDPforChirpStackv4]]**
49 +(% class="box infomessage" %)
50 +(((
51 +config settings 'general'
52 + option bacnet_ip '10.130.2.80'  #The IP address of the BACnetIP network, here basically the same IP as the bbmd address below
53 + option bacnet_ip_port '47808'  #As with bbmd_port, the purpose of this is to register a Bacnet Server application as a bbmd registration server
54 + option bbmd_address '10.130.2.80'  #bbmd is the BACnet registration server. Only one bbmd server is required in the same ip network
55 + option bbmd_port '47808'  #In general, 47808 is used as the default port
56 + option bacnet_dev_count '2'  #Here is the number of BACnet devices that need to be simulated, if the number is 2, then the following settings must have 2, which are bacdev_1, bacdev_2
57 +)))
43 43  
59 +(% class="box infomessage" %)
60 +(((
61 +config settings 'bacdev_1'
62 + option device_name 'LHT65N-1'  #The identification name of the bacnet device
63 + option device_id '10001'  #The unique identification code in the same network segment of BACnet,Scope is(1 - 4194302)
64 + option device_port '47912'  #The IP port occupied by Bacnet when it starts, Scope is (1024 - 65535)
65 +)))
44 44  
45 -== 2.2  Register Node ==
67 +(% class="box infomessage" %)
68 +(((
69 +config settings 'bacdev_2'
70 + option device_name 'LHT65N-2'
71 + option device_id '10002'
72 + option device_port '47913'  
73 +)))
46 46  
47 -For information on how to register a Node connection to chirpstack, please refer to the link:
75 +== 1.4 Run BACnet ==
48 48  
49 -**[[https:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H2.A0Nodeusageintroduction>>https://wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H2.A0Nodeusageintroduction]]**
77 +After the configuration is complete, run the following command to start BACnet, The following are two ways to run BACnet:
50 50  
79 +(1) With /etc/config/bacnet configuration, and to run the registration server on the current machine, start it with the following command (configure the /etc/config/bacnet file correctly):
51 51  
52 -== 2.3 Configure BACnet ==
81 +(% class="box infomessage" %)
82 +(((
83 +bacserver -c -s
84 +)))
53 53  
54 -After completing the steps of registering the gateway and nodes as mentioned above, start configuring BACnet
86 +(2) Without /etc/config/bacnet, and to run the registration server on the current machine, start it with the following command:
55 55  
56 -Video on the configuration of BACnet:
88 +(% class="box infomessage" %)
89 +(((
90 +bacserver -s -a 10.130.2.80 -p 47808
91 +)))
57 57  
93 +This command simulates two devices, with device IDs 47910 and 47911
58 58  
59 -=== Step 1. Enable BACnet ===
95 +Enter bacserver -h to output help
60 60  
97 +(% class="box infomessage" %)
98 +(((
99 +bacserver -h
100 +)))
61 61  
102 +[[image:image-20230401114458-2.png]]
62 62  
104 +== 1.5 Read devices and modify devices ==
105 +
106 +Enter baccli -h to output help
107 +
108 +(% class="box infomessage" %)
109 +(((
110 +baccli -h
111 +)))
112 +
113 +[[image:image-20230401114641-3.png]]
114 +
115 +
116 +**Examples:**
117 +
118 +(1) List the current Bacnet devices:
119 +
120 +(% class="box infomessage" %)
121 +(((
122 +baccli -l -a
123 +)))
124 +
125 +[[image:image-20230401114653-4.png]]
126 +
127 +
128 +(2) List device information based on device ID:
129 +
130 +(% class="box infomessage" %)
131 +(((
132 +baccli -l -i id
133 +)))
134 +
135 +[[image:image-20230401114706-5.png]]
136 +
137 +(3) List the device details by device ID:
138 +
139 +(% class="box infomessage" %)
140 +(((
141 +baccli -l -v -i id
142 +)))
143 +
144 +(4) Modify the specified attribute value based on the device ID:
145 +
146 +(% class="box infomessage" %)
147 +(((
148 +baccli -i id -p prop -w value
149 +)))
150 +
151 +[[image:image-20230401114720-6.png]]
152 +
153 +
154 +(5)Check the results using the BACnet tool
155 +
156 +The user can check the data of the device by using the **[[yabe BACnet tool>>https://sourceforge.net/projects/yetanotherbacnetexplorer/]]**
157 +
158 +[[image:image-20230401114729-7.png||height="521" width="1077"]]
159 +
160 +
161 += 1.6 Example: How to transfer data to BACnet via LoRaWAN in LPS8v2 =
162 +
163 +LPS8v2 includes a local TTN Server and Node-Red. This example shows how to configure LHT65N to use with the BACnet. This example assumes users already have:
164 +
165 +* LHT65N register on LPS8v2 Built-In TTN server already
166 +* The user is able to see the data on the built-in TTN server device page.
167 +* The LPS8v2 already has BACnet installed
168 +
169 +Below are the steps to plot the sensor data on LPS8v2 BACnet.
170 +
63 63  
LHT65N_TTN_to_BACnet.json
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Kilight
Size
... ... @@ -1,1 +1,0 @@
1 -8.2 KB
Content
... ... @@ -1,334 +1,0 @@
1 -[
2 - {
3 - "id": "b356382079d5c6a0",
4 - "type": "tab",
5 - "label": "TTN to BACnet",
6 - "disabled": false,
7 - "info": "",
8 - "env": []
9 - },
10 - {
11 - "id": "f66b1b60040f4067",
12 - "type": "template",
13 - "z": "b356382079d5c6a0",
14 - "name": "LHT65N-1 10001 battery",
15 - "field": "payload",
16 - "fieldType": "msg",
17 - "format": "handlebars",
18 - "syntax": "mustache",
19 - "template": "baccli -i 10001 -p battery -w {{payload}}\n",
20 - "output": "str",
21 - "x": 590,
22 - "y": 100,
23 - "wires": [
24 - [
25 - "d9290c0c62e0f7c0",
26 - "cc39d099b49cf9fe"
27 - ]
28 - ]
29 - },
30 - {
31 - "id": "d9290c0c62e0f7c0",
32 - "type": "exec",
33 - "z": "b356382079d5c6a0",
34 - "command": "",
35 - "addpay": "payload",
36 - "append": "",
37 - "useSpawn": "false",
38 - "timer": "",
39 - "winHide": false,
40 - "oldrc": false,
41 - "name": "EXEC",
42 - "x": 1050,
43 - "y": 220,
44 - "wires": [
45 - [
46 - "af8dbd68b05f6313"
47 - ],
48 - [
49 - "af8dbd68b05f6313"
50 - ],
51 - []
52 - ]
53 - },
54 - {
55 - "id": "cc39d099b49cf9fe",
56 - "type": "debug",
57 - "z": "b356382079d5c6a0",
58 - "name": "Full Script",
59 - "active": true,
60 - "tosidebar": true,
61 - "console": false,
62 - "tostatus": false,
63 - "complete": "payload",
64 - "targetType": "msg",
65 - "statusVal": "",
66 - "statusType": "auto",
67 - "x": 1040,
68 - "y": 100,
69 - "wires": []
70 - },
71 - {
72 - "id": "af8dbd68b05f6313",
73 - "type": "debug",
74 - "z": "b356382079d5c6a0",
75 - "name": "output",
76 - "active": true,
77 - "tosidebar": true,
78 - "console": false,
79 - "tostatus": false,
80 - "complete": "payload",
81 - "targetType": "msg",
82 - "statusVal": "",
83 - "statusType": "auto",
84 - "x": 1210,
85 - "y": 220,
86 - "wires": []
87 - },
88 - {
89 - "id": "866c4581bd0de190",
90 - "type": "mqtt in",
91 - "z": "b356382079d5c6a0",
92 - "name": "LHT65N-1",
93 - "topic": "v3/5000000@ttn/devices/eui-d0a7a83cc714b96f/up",
94 - "qos": "0",
95 - "datatype": "auto-detect",
96 - "broker": "d1413e55f801d787",
97 - "nl": false,
98 - "rap": true,
99 - "rh": 0,
100 - "inputs": 0,
101 - "x": 120,
102 - "y": 140,
103 - "wires": [
104 - [
105 - "09bb2ca9b68d9137",
106 - "3b08d85a66d0c58a"
107 - ]
108 - ]
109 - },
110 - {
111 - "id": "09bb2ca9b68d9137",
112 - "type": "function",
113 - "z": "b356382079d5c6a0",
114 - "name": "function 3",
115 - "func": "var data = msg.payload\nvar bat = data[\"uplink_message\"][\"decoded_payload\"][\"BatV\"]\nvar tem = data[\"uplink_message\"][\"decoded_payload\"][\"TempC_DS\"]\nvar tem2 = data[\"uplink_message\"][\"decoded_payload\"][\"TempC_SHT\"]\nvar hum = data[\"uplink_message\"][\"decoded_payload\"][\"Hum_SHT\"]\nvar data2 = {payload: bat},data3={payload:tem},data4={payload:tem2},data5={payload:hum}\n//return data2\nreturn[data2,data3,data4,data5]",
116 - "outputs": 4,
117 - "noerr": 0,
118 - "initialize": "",
119 - "finalize": "",
120 - "libs": [],
121 - "x": 340,
122 - "y": 200,
123 - "wires": [
124 - [
125 - "f66b1b60040f4067",
126 - "0cf8a6fc743b8619"
127 - ],
128 - [
129 - "2f48e806d3e4bd5e",
130 - "0cf8a6fc743b8619"
131 - ],
132 - [
133 - "0cf8a6fc743b8619",
134 - "15c7503d379cb571"
135 - ],
136 - [
137 - "700c1799a8cd28a1",
138 - "0cf8a6fc743b8619"
139 - ]
140 - ]
141 - },
142 - {
143 - "id": "0cf8a6fc743b8619",
144 - "type": "debug",
145 - "z": "b356382079d5c6a0",
146 - "name": "debug 5",
147 - "active": true,
148 - "tosidebar": true,
149 - "console": false,
150 - "tostatus": false,
151 - "complete": "payload",
152 - "targetType": "msg",
153 - "statusVal": "",
154 - "statusType": "auto",
155 - "x": 340,
156 - "y": 80,
157 - "wires": []
158 - },
159 - {
160 - "id": "3b08d85a66d0c58a",
161 - "type": "debug",
162 - "z": "b356382079d5c6a0",
163 - "name": "debug 6",
164 - "active": true,
165 - "tosidebar": true,
166 - "console": false,
167 - "tostatus": false,
168 - "complete": "false",
169 - "statusVal": "",
170 - "statusType": "auto",
171 - "x": 160,
172 - "y": 240,
173 - "wires": []
174 - },
175 - {
176 - "id": "2f48e806d3e4bd5e",
177 - "type": "template",
178 - "z": "b356382079d5c6a0",
179 - "name": "LHT65N-1 10001 temp1",
180 - "field": "payload",
181 - "fieldType": "msg",
182 - "format": "handlebars",
183 - "syntax": "mustache",
184 - "template": "baccli -i 10001 -p temp1 -w {{payload}}\n",
185 - "output": "str",
186 - "x": 590,
187 - "y": 160,
188 - "wires": [
189 - [
190 - "046eca291b77ebd3"
191 - ]
192 - ]
193 - },
194 - {
195 - "id": "15c7503d379cb571",
196 - "type": "template",
197 - "z": "b356382079d5c6a0",
198 - "name": "LHT65N-1 10001 temp2",
199 - "field": "payload",
200 - "fieldType": "msg",
201 - "format": "handlebars",
202 - "syntax": "mustache",
203 - "template": "baccli -i 10001 -p temp2 -w {{payload}}",
204 - "output": "str",
205 - "x": 590,
206 - "y": 220,
207 - "wires": [
208 - [
209 - "56c2605dd962c0d4"
210 - ]
211 - ]
212 - },
213 - {
214 - "id": "56c2605dd962c0d4",
215 - "type": "delay",
216 - "z": "b356382079d5c6a0",
217 - "name": "",
218 - "pauseType": "delay",
219 - "timeout": "4",
220 - "timeoutUnits": "seconds",
221 - "rate": "1",
222 - "nbRateUnits": "1",
223 - "rateUnits": "second",
224 - "randomFirst": "1",
225 - "randomLast": "5",
226 - "randomUnits": "seconds",
227 - "drop": false,
228 - "allowrate": false,
229 - "outputs": 1,
230 - "x": 800,
231 - "y": 220,
232 - "wires": [
233 - [
234 - "d9290c0c62e0f7c0"
235 - ]
236 - ]
237 - },
238 - {
239 - "id": "046eca291b77ebd3",
240 - "type": "delay",
241 - "z": "b356382079d5c6a0",
242 - "name": "",
243 - "pauseType": "delay",
244 - "timeout": "2",
245 - "timeoutUnits": "seconds",
246 - "rate": "1",
247 - "nbRateUnits": "1",
248 - "rateUnits": "second",
249 - "randomFirst": "1",
250 - "randomLast": "5",
251 - "randomUnits": "seconds",
252 - "drop": false,
253 - "allowrate": false,
254 - "outputs": 1,
255 - "x": 800,
256 - "y": 160,
257 - "wires": [
258 - [
259 - "d9290c0c62e0f7c0"
260 - ]
261 - ]
262 - },
263 - {
264 - "id": "700c1799a8cd28a1",
265 - "type": "template",
266 - "z": "b356382079d5c6a0",
267 - "name": "LHT65N-1 10001 humidity",
268 - "field": "payload",
269 - "fieldType": "msg",
270 - "format": "handlebars",
271 - "syntax": "mustache",
272 - "template": "baccli -i 10001 -p humidity -w {{payload}}",
273 - "output": "str",
274 - "x": 590,
275 - "y": 280,
276 - "wires": [
277 - [
278 - "9a8f158109d93abb"
279 - ]
280 - ]
281 - },
282 - {
283 - "id": "9a8f158109d93abb",
284 - "type": "delay",
285 - "z": "b356382079d5c6a0",
286 - "name": "",
287 - "pauseType": "delay",
288 - "timeout": "6",
289 - "timeoutUnits": "seconds",
290 - "rate": "1",
291 - "nbRateUnits": "1",
292 - "rateUnits": "second",
293 - "randomFirst": "1",
294 - "randomLast": "5",
295 - "randomUnits": "seconds",
296 - "drop": false,
297 - "allowrate": false,
298 - "outputs": 1,
299 - "x": 800,
300 - "y": 280,
301 - "wires": [
302 - [
303 - "d9290c0c62e0f7c0"
304 - ]
305 - ]
306 - },
307 - {
308 - "id": "d1413e55f801d787",
309 - "type": "mqtt-broker",
310 - "name": "",
311 - "broker": "eu1.cloud.thethings.network",
312 - "port": "1883",
313 - "clientid": "",
314 - "autoConnect": true,
315 - "usetls": false,
316 - "protocolVersion": "4",
317 - "keepalive": "60",
318 - "cleansession": true,
319 - "birthTopic": "",
320 - "birthQos": "0",
321 - "birthPayload": "",
322 - "birthMsg": {},
323 - "closeTopic": "",
324 - "closeQos": "0",
325 - "closePayload": "",
326 - "closeMsg": {},
327 - "willTopic": "",
328 - "willQos": "0",
329 - "willPayload": "",
330 - "willMsg": {},
331 - "userProps": "",
332 - "sessionExpiry": ""
333 - }
334 -]
image-20230401142357-8.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Kilight
Size
... ... @@ -1,1 +1,0 @@
1 -134.1 KB
Content
image-20230401144525-9.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Kilight
Size
... ... @@ -1,1 +1,0 @@
1 -47.4 KB
Content
image-20230401144951-10.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Kilight
Size
... ... @@ -1,1 +1,0 @@
1 -78.2 KB
Content