Wiki source code of BH01 -- Bluetooth to LoRaWAN Hub
Last modified by Yi Wang on 2025/03/19 17:24
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | (% style="text-align:center" %) | ||
2 | [[image:image-20250212172902-1.png]] | ||
3 | |||
4 | |||
5 | |||
6 | |||
7 | |||
8 | **Table of Contents:** | ||
9 | |||
10 | {{toc/}} | ||
11 | |||
12 | |||
13 | |||
14 | |||
15 | |||
16 | |||
17 | = 1. Introduction = | ||
18 | |||
19 | == 1.1 What is BH01 Bluetooth to LoRaWAN Hub == | ||
20 | |||
21 | |||
22 | (% style="color:blue" %)**BH01-LB**(%%) Bluetooth to LoRaWAN Hub is an edge communication node device designed for IoT scenarios. It uses the BLE Bluetooth module to scan and collect data from surrounding Bluetooth temperature and humidity sensors (such as BCN02, iBeacon beacons) in real time, and then transmits the data to the cloud platform over long distances using the LoRaWAN protocol, achieving seamless connection between Bluetooth devices and low-power wide area networks. It is designed for outdoor use and powered by (% style="color:blue" %)** 8500mAh Li/SOCl2 battery**(%%) for long term use.BH01-LB is designed to facilitate developers to quickly deploy industrial level LoRa and IoT solutions. It help users to turn the idea into apractical application and make the Internet of Things a reality. It is easy to program, create and connect your things everywhere. | ||
23 | |||
24 | (% style="color:blue" %)**BH01-LB wireless part**(%%) is based on SX1262 allows the user to send data and reach extremely long ranges at low data-rates.It provides ultra-long range spread spectrum communication and high interference immunity whilst minimising current consumption.It is suitable for cold chain warehouse monitoring, smart agricultural environment monitoring, asset tracking and urban infrastructure health management. It combines the flexibility of Bluetooth and the wide coverage of LoRaWAN, which can significantly reduce the deployment cost of the Internet of Things. | ||
25 | |||
26 | BH01-LB has a (% style="color:blue" %)**built-in BLE module**(%%), user can configure the sensor remotely via Mobile Phone. It also support (% style="color:blue" %)**OTA upgrade**(%%) via private LoRa protocol for easy maintaining. | ||
27 | |||
28 | |||
29 | == 1.2 Features == | ||
30 | |||
31 | |||
32 | * LoRaWAN 1.0.3 Class A | ||
33 | * Ultra-low power consumption | ||
34 | * Open-Source hardware/software | ||
35 | * Bands: CN470/EU433/KR920/US915/EU868/AS923/AU915/IN865 | ||
36 | * Support Bluetooth v5.1 and LoRaWAN remote configure | ||
37 | * Support wireless OTA update firmware | ||
38 | * Uplink on periodically | ||
39 | * Downlink to change configure | ||
40 | * 8500mAh Li/SOCl2 Battery | ||
41 | |||
42 | == 1.3 Specification == | ||
43 | |||
44 | |||
45 | (% style="color:#037691" %)**Common DC Characteristics:** | ||
46 | |||
47 | * Supply Voltage: Built-in Battery , 2.5v ~~ 3.6v | ||
48 | * Operating Temperature: -40 ~~ 85°C | ||
49 | |||
50 | (% style="color:#037691" %)**LoRa Spec:** | ||
51 | |||
52 | * Frequency Range, Band 1 (HF): 862 ~~ 1020 Mhz | ||
53 | * Max +22 dBm constant RF output vs. | ||
54 | * RX sensitivity: down to -139 dBm. | ||
55 | * Excellent blocking immunity | ||
56 | |||
57 | (% style="color:#037691" %)**Battery:** | ||
58 | |||
59 | * Li/SOCI2 un-chargeable battery | ||
60 | * Capacity: 8500mAh | ||
61 | * Self-Discharge: <1% / Year @ 25°C | ||
62 | * Max continuously current: 130mA | ||
63 | * Max boost current: 2A, 1 second | ||
64 | |||
65 | (% style="color:#037691" %)**Power Consumption** | ||
66 | |||
67 | * Sleep Mode: 5uA @ 3.3v | ||
68 | * LoRa Transmit Mode: 125mA @ 20dBm, 82mA @ 14dBm | ||
69 | |||
70 | == 1.4 Sleep mode and working mode == | ||
71 | |||
72 | |||
73 | (% style="color:blue" %)**Deep Sleep Mode: **(%%)Sensor doesn't have any LoRaWAN activate. This mode is used for storage and shipping to save battery life. | ||
74 | |||
75 | (% style="color:blue" %)**Working Mode:** (%%)In this mode, Sensor will work as LoRaWAN Sensor to Join LoRaWAN network and send out sensor data to server. Between each sampling/tx/rx periodically, sensor will be in IDLE mode), in IDLE mode, sensor has the same power consumption as Deep Sleep mode. | ||
76 | |||
77 | |||
78 | == 1.5 Button & LEDs == | ||
79 | |||
80 | |||
81 | [[image:image-20250213090333-1.png]] | ||
82 | |||
83 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
84 | |=(% style="width: 167px;background-color:#4F81BD;color:white" %)**Behavior on ACT**|=(% style="width: 117px;background-color:#4F81BD;color:white" %)**Function**|=(% style="width: 226px;background-color:#4F81BD;color:white" %)**Action** | ||
85 | |(% style="width:167px" %)Pressing ACT between 1s < time < 3s|(% style="width:117px" %)Send an uplink|(% style="width:225px" %)((( | ||
86 | If sensor is already Joined to LoRaWAN network, sensor will send an uplink packet, (% style="color:blue" %)**blue led** (%%)will blink once. | ||
87 | Meanwhile, BLE module will be active and user can connect via BLE to configure device. | ||
88 | ))) | ||
89 | |(% style="width:167px" %)Pressing ACT for more than 3s|(% style="width:117px" %)Active Device|(% style="width:225px" %)((( | ||
90 | (% style="color:green" %)**Green led**(%%) will fast blink 5 times, device will enter (% style="color:#037691" %)**OTA mode**(%%) for 3 seconds. And then start to JOIN LoRaWAN network. | ||
91 | (% style="color:green" %)**Green led**(%%) will solidly turn on for 5 seconds after joined in network. | ||
92 | Once sensor is active, BLE module will be active and user can connect via BLE to configure device, no matter if device join or not join LoRaWAN network. | ||
93 | ))) | ||
94 | |(% style="width:167px" %)Fast press ACT 5 times.|(% style="width:117px" %)Deactivate Device|(% style="width:225px" %)(% style="color:red" %)**Red led**(%%) will solid on for 5 seconds. Means device is in Deep Sleep Mode. | ||
95 | |||
96 | == 1.6 BLE connection == | ||
97 | |||
98 | |||
99 | BH01-LB supports BLE remote configure. | ||
100 | |||
101 | |||
102 | BLE can be used to configure the parameter of sensor or see the console output from sensor. BLE will be only activate on below case: | ||
103 | |||
104 | * Press button to send an uplink | ||
105 | * Press button to active device. | ||
106 | * Device Power on or reset. | ||
107 | |||
108 | If there is no activity connection on BLE in 60 seconds, sensor will shut down BLE module to enter low power mode. | ||
109 | |||
110 | |||
111 | == 1.7 Interface Definitions == | ||
112 | |||
113 | |||
114 | [[image:image-20250319172151-2.png||height="433" width="660"]] | ||
115 | |||
116 | |||
117 | == 1.8 Mechanical == | ||
118 | |||
119 | |||
120 | [[image:image-20240924112806-1.png||height="548" width="894"]] | ||
121 | |||
122 | |||
123 | == 1.9 Hole Option == | ||
124 | |||
125 | |||
126 | BH01-LB has different hole size options for different size sensor cable. The options provided are M12, M16 and M20. The definition is as below: | ||
127 | |||
128 | [[image:image-20250220091807-8.jpeg]] | ||
129 | |||
130 | [[image:image-20250220091842-9.jpeg]] | ||
131 | |||
132 | |||
133 | = 2. Configure BH01-LB to connect to LoRaWAN network = | ||
134 | |||
135 | == 2.1 How it works == | ||
136 | |||
137 | |||
138 | BH01-LB is configured as (% style="color:#037691" %)**LoRaWAN OTAA Class A**(%%) mode by default. It has OTAA keys to join LoRaWAN network. To connect a local LoRaWAN network, you need to input the OTAA keys in the LoRaWAN IoT server and press the button to activate the BH01-LB.It will automatically join the network via OTAA and start scanning nearby Bluetooth devices, sending the scanned device information to the network.The default uplink interval is 20 minutes. | ||
139 | |||
140 | |||
141 | == 2.2 Quick guide to connect to LoRaWAN server (OTAA) == | ||
142 | |||
143 | |||
144 | Following is an example for how to join the [[TTN v3 LoRaWAN Network>>url:https://console.cloud.thethings.network/]]. Below is the network structure; we use the [[LPS8v2>>url:https://www.dragino.com/products/lora-lorawan-gateway/item/228-lps8v2.html]] as a LoRaWAN gateway in this example. | ||
145 | |||
146 | The LPS8v2 is already set to connected to [[TTN network >>url:https://console.cloud.thethings.network/]], so what we need to now is configure the TTN server. | ||
147 | |||
148 | |||
149 | (% style="color:blue" %)**Step 1:**(%%) Create a device in TTN with the OTAA keys from BH01-LB. | ||
150 | |||
151 | Each BH01-LB is shipped with a sticker with the default device EUI as below: | ||
152 | |||
153 | [[image:image-20250220090645-2.jpeg]] | ||
154 | |||
155 | |||
156 | You can enter this key in the LoRaWAN Server portal. Below is TTN screen shot: | ||
157 | |||
158 | |||
159 | (% style="color:blue" %)**Register the device** | ||
160 | |||
161 | [[image:image-20250220091317-4.jpeg]] | ||
162 | |||
163 | |||
164 | (% style="color:blue" %)**Add APP EUI and DEV EUI** | ||
165 | |||
166 | [[image:image-20250220091349-5.jpeg]] | ||
167 | |||
168 | |||
169 | (% style="color:blue" %)**Add APP EUI in the application** | ||
170 | |||
171 | [[image:image-20250220091430-6.jpeg]] | ||
172 | |||
173 | |||
174 | (% style="color:blue" %)**Add APP KEY** | ||
175 | |||
176 | [[image:image-20250220091453-7.jpeg]] | ||
177 | |||
178 | (% style="color:blue" %)**Step 2:**(%%) Activate BH01-LB | ||
179 | |||
180 | Press the button for 5 seconds to activate the BH01-LB. | ||
181 | |||
182 | (% style="color:green" %)**Green led**(%%) will fast blink 5 times, device will enter (% style="color:blue" %)**OTA mode**(%%) for 3 seconds. And then start to JOIN LoRaWAN network. (% style="color:green" %)**Green led**(%%) will solidly turn on for 5 seconds after joined in network. | ||
183 | |||
184 | After join success, it will start to upload messages to TTN and you can see the messages in the panel. | ||
185 | |||
186 | |||
187 | == 2.3 Uplink Payload == | ||
188 | |||
189 | === 2.3.1 Device Status, FPORT~=5 === | ||
190 | |||
191 | |||
192 | Users can use the downlink command(**0x26 01**) to ask BH01-LB to send device configure detail, include device configure status. BH01-LB will uplink a payload via FPort=5 to server. | ||
193 | |||
194 | The Payload format is as below. | ||
195 | |||
196 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
197 | |(% colspan="6" style="background-color:#4f81bd; color:white" %)**Device Status (FPORT=5)** | ||
198 | |(% style="width:103px" %)**Size (bytes)**|(% style="width:72px" %)**1**|**2**|(% style="width:91px" %)**1**|(% style="width:86px" %)**1**|(% style="width:44px" %)**2** | ||
199 | |(% style="width:103px" %)Value|(% style="width:72px" %)Sensor Model|Firmware Version|(% style="width:91px" %)Frequency Band|(% style="width:86px" %)Sub-band|(% style="width:44px" %)BAT | ||
200 | |||
201 | Example parse in TTNv3 | ||
202 | |||
203 | |||
204 | (% style="color:#037691" %)**Sensor Model**(%%): For BH01-LB, this value is 0x44 | ||
205 | |||
206 | (% style="color:#037691" %)**Firmware Version**(%%): 0x0100, Means: v1.0.0 version | ||
207 | |||
208 | (% style="color:#037691" %)**Frequency Band**: | ||
209 | |||
210 | 0x01: EU868 | ||
211 | |||
212 | 0x02: US915 | ||
213 | |||
214 | 0x03: IN865 | ||
215 | |||
216 | 0x04: AU915 | ||
217 | |||
218 | 0x05: KZ865 | ||
219 | |||
220 | 0x06: RU864 | ||
221 | |||
222 | 0x07: AS923 | ||
223 | |||
224 | 0x08: AS923-1 | ||
225 | |||
226 | 0x09: AS923-2 | ||
227 | |||
228 | 0x0a: AS923-3 | ||
229 | |||
230 | 0x0b: CN470 | ||
231 | |||
232 | 0x0c: EU433 | ||
233 | |||
234 | 0x0d: KR920 | ||
235 | |||
236 | 0x0e: MA869 | ||
237 | |||
238 | |||
239 | (% style="color:#037691" %)**Sub-Band**: | ||
240 | |||
241 | AU915 and US915:value 0x00 ~~ 0x08 | ||
242 | |||
243 | CN470: value 0x0B ~~ 0x0C | ||
244 | |||
245 | Other Bands: Always 0x00 | ||
246 | |||
247 | |||
248 | (% style="color:#037691" %)**Battery Info**: | ||
249 | |||
250 | Check the battery voltage. | ||
251 | |||
252 | Ex1: 0x0B45 = 2885mV | ||
253 | |||
254 | Ex2: 0x0B49 = 2889mV | ||
255 | |||
256 | |||
257 | === 2.3.2 Working Modes & Sensor Data. Uplink via FPORT~=2 === | ||
258 | |||
259 | |||
260 | BH01-LB has different working mode for the connections of different type of sensors. This section describes these modes. Use can use the AT Command: | ||
261 | |||
262 | AT+MODEL=abcdefgh to set BH01-LB to different working modes. | ||
263 | |||
264 | For example: | ||
265 | |||
266 | (% style="color:blue" %)**AT+MODEL=**(% style="color:red" %)**03**(% style="color:#de9963" %)**05**(% style="color:#debd63" %)**00**(% style="color:#b0de63" %)**19**(% style="color:#63de69" %)**0b**(% style="color:#63d0de" %)**00**(% style="color:#6395de" %)**04**(% style="color:#b663de" %)**ff4c000215011223344556**(%%) (turn on scanning Bluetooth ibeacon beacons) | ||
267 | |||
268 | Parameter (% style="color:red" %)**a = 0x03:**(%%) Set the scanning mode to Bluetooth ibeacon beacons. | ||
269 | |||
270 | Parameter (% style="color:#de9963" %)**b = 0x05:**(%%) Set the intercepted data length to 5. | ||
271 | |||
272 | Parameter (% style="color:#debd63" %)**c = 0x00:**(%%) Set the intercepted data position to the broadcast packet. | ||
273 | |||
274 | Parameter (% style="color:#b0de63" %)**d = 0x19:**(%%) Set the intercepted data starting position 25. | ||
275 | |||
276 | Parameter (% style="color:#63de69" %)**e = 0x0b:**(%%) Set the filter data length to 11. | ||
277 | |||
278 | Parameter (% style="color:#63d0de" %)**f = 0x00:**(%%) Set the filter data position to the scan reply response packet. | ||
279 | |||
280 | Parameter (% style="color:#6395de" %)**g = 0x04:**(%%) Set the filter data starting position 4. | ||
281 | |||
282 | Parameter (% style="color:#b663de" %)**h = 0xff4c000215011223344556:**(%%) Set the filter data to 0xff4c000215011223344556 (0xff is AD Type). | ||
283 | |||
284 | |||
285 | ==== 2.3.2.1 Parameter Description ==== | ||
286 | |||
287 | ===== 2.3.2.1.1 Parameter a: type mode ===== | ||
288 | |||
289 | Modes 4 to 16 (a = 0x04 to 0x16) are user-defined scanning device modes based on the sensor used. | ||
290 | |||
291 | ====== (% style="color:blue" %)**Mode 1 (a ~= 0x01): Bluetooth Temperature Tag (TAH02) mode**(%%) ====== | ||
292 | |||
293 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
294 | |(% style="background-color:#4f81bd; color:white; width:170px" %)**Mac address (6 bytes)**|(% style="background-color:#4f81bd; color:white; width:170px" %)**0xEE 3B 14 28 32 D1**|(% style="background-color:#4f81bd; color:white; width:170px" %)/ | ||
295 | |(% style="width:207px" %)Sensor type (1 byte)|(% style="width:179px" %)0x03|(% style="width:250px" %)Temperature sensor | ||
296 | |(% style="width:207px" %)Sensor data length (1 byte)|(% style="width:179px" %)0x04|(% style="width:250px" %)Data length | ||
297 | |(% style="width:207px" %)Temperature (2 bytes)|(% style="width:179px" %)0x2701|(% style="width:250px" %)Temperature: 29.5℃ | ||
298 | |(% style="width:207px" %)Battery (1 byte)|(% style="width:179px" %)0x64|(% style="width:250px" %)Battery: 100% | ||
299 | |(% style="width:207px" %)RSSI (1 byte)|(% style="width:179px" %)0xC3|(% style="width:250px" %)1 meter output power: -61db | ||
300 | |||
301 | **AT+MODEL=0104:** Start scanning Bluetooth temperature tag (TAH02)mode. | ||
302 | |||
303 | **AT+MODEL=0100**: Turn off scanning for Bluetooth temperature tags (TAH02)mode. | ||
304 | |||
305 | |||
306 | ====== (% style="color:blue" %)**Mode 2 (a ~= 0x02): Bluetooth temperature and humidity (ES01) mode**(%%) ====== | ||
307 | |||
308 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
309 | |(% style="background-color:#4f81bd; color:white; width:170px" %)**Mac address (6 bytes)**|(% style="background-color:#4f81bd; color:white; width:170px" %)**0xEE 3B 14 28 32 D1**|(% style="background-color:#4f81bd; color:white; width:170px" %)/ | ||
310 | |(% style="width:207px" %)Sensor type (1 byte)|(% style="width:179px" %)0x03|(% style="width:250px" %)Temperature and humidity sensor | ||
311 | |(% style="width:207px" %)Sensor data length (1 byte)|(% style="width:179px" %)0x05|(% style="width:250px" %)Data length | ||
312 | |(% style="width:207px" %)Humidity (1 byte)|(% style="width:179px" %)0x4C|(% style="width:250px" %)THumidity: 76% | ||
313 | |(% style="width:207px" %)Temperature (2 bytes)|(% style="width:179px" %)0x2701|(% style="width:250px" %)Temperature: 29.5℃ | ||
314 | |(% style="width:207px" %)Battery (1 byte)|(% style="width:179px" %)0x64|(% style="width:250px" %)Battery: 100% | ||
315 | |(% style="width:207px" %)RSSI (1 byte)|(% style="width:179px" %)0xC3|(% style="width:250px" %)1 meter output power: -61db | ||
316 | |||
317 | **AT+MODEL=0205**: Enable Bluetooth temperature and humidity scanning (ES01)mode. | ||
318 | |||
319 | **AT+MODEL=0200**: Disable Bluetooth temperature and humidity scanning (ES01)mode. | ||
320 | |||
321 | |||
322 | ====== (% style="color:blue" %)**Mode 3 (a ~= 0x03): Bluetooth ibeacon mode**(%%) ====== | ||
323 | |||
324 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
325 | |(% style="background-color:#4f81bd; color:white; width:170px" %)**Mac address (6 bytes)**|(% style="background-color:#4f81bd; color:white; width:170px" %)**0xEE 3B 14 28 32 D1**|(% style="background-color:#4f81bd; color:white; width:170px" %)/ | ||
326 | |(% style="width:207px" %)Sensor type (1 byte)|(% style="width:179px" %)((( | ||
327 | 0x01 | ||
328 | )))|(% style="width:330px" %)ibeacon beacon | ||
329 | |(% style="width:207px" %)Sensor data length (1 byte)|(% style="width:179px" %)0x06|(% style="width:330px" %)Data length | ||
330 | |(% style="width:207px" %)Major (2byte)|(% style="width:179px" %)0x1122|(% style="width:330px" %)/ | ||
331 | |(% style="width:207px" %)Minor (2byte)|(% style="width:179px" %)0x004c|(% style="width:330px" %)/ | ||
332 | |(% style="width:207px" %)Measured Power(1byte)|(% style="width:179px" %)0x64|(% style="width:330px" %)Measured Bluetooth transmission power | ||
333 | |(% style="width:207px" %)RSSI (1 byte)|(% style="width:179px" %)0xC3|(% style="width:330px" %)1 meter output power: -61db | ||
334 | |||
335 | **AT+MODEL=030500190b0004ff4c000215011223344556**: Enable the Bluetooth ibeacon beacon scanning mode. | ||
336 | |||
337 | **AT+MODEL=0300**: Disable the Bluetooth ibeacon beacon scanning mode. | ||
338 | |||
339 | |||
340 | ====== (% style="color:blue" %)**Mode 4 to 16(a ~= 0x04 to 0x16: user-defined scanning device mode**(%%) ====== | ||
341 | |||
342 | |||
343 | (% style="color:red" %)**Note: Different scanning modes can work at the same time.** | ||
344 | |||
345 | If the user needs to scan Bluetooth temperature and humidity (ES01) and Bluetooth Temperature Tag (TAH02) at the same time, then just input the following continuously: | ||
346 | |||
347 | **AT+MODEL=0104** | ||
348 | |||
349 | **AT+MODEL=0205** | ||
350 | |||
351 | |||
352 | ===== 2.3.2.1.2 Parameter b: The effective data length of the interception ===== | ||
353 | |||
354 | b equals 0: indicates that the scanning of the corresponding modes 1 to 16 is canceled. | ||
355 | |||
356 | b is not equal to 0: set the b parameter according to the valid data intercepted by the sensor time. | ||
357 | |||
358 | For example, | ||
359 | |||
360 | in mode 1 (a = 0x01), the default parameter b is 4. | ||
361 | |||
362 | In mode 2 (a = 0x02), the default parameter b is 5. | ||
363 | |||
364 | (% style="color:red" %)**When it is mode 1 and 2, scanning can be performed after setting the b parameter; the subsequent parameter cdefgh does not need to be set.Mode 1 (a = 0x01): Bluetooth Temperature Tag (TAH02)** | ||
365 | |||
366 | In other modes,users need to set the following cdefgh parameters to enable this mode. | ||
367 | |||
368 | |||
369 | ===== 2.3.2.1.3 Parameter c: intercepted valid data position ===== | ||
370 | |||
371 | c = 0x00: in the broadcast packet | ||
372 | |||
373 | c = 0x01: in the scan reply packet. | ||
374 | |||
375 | **Note: Generally:** | ||
376 | |||
377 | scan data includes two types: broadcast packets (31 bytes) and scan response packets (31 bytes). There is at least one type of broadcast packet. You can use a mobile phone to scan and obtain the complete scan data. | ||
378 | |||
379 | [[image:image-20250314140143-1.png||height="291" width="584"]] | ||
380 | |||
381 | Both the broadcast packet and the scan reply packet are composed of several unit data; the unit data format is length+AD Type+AD Data. | ||
382 | |||
383 | |||
384 | ===== 2.3.2.1.4 Parameter d: The starting position of the intercepted valid data ===== | ||
385 | |||
386 | The starting position starts from 0. | ||
387 | |||
388 | The broadcast packet and the scan reply packet are two different packets, and the interception should start from 0. | ||
389 | |||
390 | The maximum is no more than 30. | ||
391 | |||
392 | |||
393 | ===== 2.3.2.1.5 Parameter e: scan and filter data length ===== | ||
394 | |||
395 | The maximum value is 31. | ||
396 | |||
397 | |||
398 | ===== 2.3.2.1.6 Parameter f: Scan filtered data location ===== | ||
399 | |||
400 | f = 0x00: The data location of the scan filter is in the broadcast packet | ||
401 | |||
402 | f = 0x01: The data location of the scan filter is in the scan reply packet | ||
403 | |||
404 | |||
405 | ===== 2.3.2.1.7 Parameter g: the starting position of the scanned filtered data ===== | ||
406 | |||
407 | The starting position starts from 0. | ||
408 | |||
409 | The broadcast packet and the scan reply packet are two different packets, and the filtering data should start from 0. | ||
410 | |||
411 | The maximum is no more than 30. | ||
412 | |||
413 | |||
414 | ===== 2.3.2.1.8 Parameter h: scan filtered data ===== | ||
415 | |||
416 | It is recommended to use data with UUID and Bluetooth names to filter out unnecessary scan data. | ||
417 | |||
418 | Generally, the more scan filter data there is, the less interference can be filtered. | ||
419 | |||
420 | The data from the starting position 0 to the data including the UUID or Bluetooth name part can be used as filter data. | ||
421 | |||
422 | |||
423 | (% class="wikigeneratedid" id="H-1" %) | ||
424 | ((( | ||
425 | (% style="color:blue" %)**If the user needs to customize, please refer to the following example:** | ||
426 | |||
427 | Manufacturers are required to provide Raw data, scanned broadcast packet data, scanned response packet data, valid data, and filtered data. | ||
428 | |||
429 | For example: **AD Type** Reference Table: | ||
430 | |||
431 | [[image:image-20250314113453-3.png||height="601" width="484"]](% id="cke_bm_11395S" style="display:none" %) [[image:image-20250213114648-5.png||height="441" width="459"]](%%) [[image:image-20250314113308-2.png||height="598" width="588"]] | ||
432 | |||
433 | Assume that the **valid data** is (% style="color:blue" %)**AD E8 F3 D4 B8 84 94 A0 AA F5 E2 0F 23 15 5A 95** | ||
434 | |||
435 | Assume the **filtered data** is (% style="color:blue" %)**1A FF 4C 00 02 15 01 12 23 34 45 56 67 78 89 9A AB BC CD DE EF F0 27 17 70 73 C3 ** | ||
436 | |||
437 | |||
438 | // //** Raw data analysis:** | ||
439 | |||
440 | (% style="color:blue" %)**0×02 01 06 ** | ||
441 | |||
442 | **Length** = 0x02 **AD Type** = 0x01 | ||
443 | |||
444 | **AD** **Data** = 0x06 | ||
445 | |||
446 | |||
447 | (% style="color:blue" %)**1A FF 4C 00 02 15 01 12 23 34 45 56 67 78 89 9A AB BC CD DE EF F0 27 17 70 73 C3 ** | ||
448 | |||
449 | **Length** = 0x1A(26) **AD Type **= 0xFF(This is a custom data type for Bluetooth manufacturers) | ||
450 | |||
451 | **Data** =0x4C0002150112233445566778899AABBCCDDEEFF027177073C3 | ||
452 | |||
453 | |||
454 | (% style="color:blue" %)**11 07 AD E8 F3 D4 B8 84 94 A0 AA F5 E2 0F 23 15 5A 95** | ||
455 | |||
456 | **Length** = 0x11(17) **AD Type** = 0x07 (UUID) | ||
457 | |||
458 | **AD** **Data** = 0xADE8F3D4B88494A0AAF5E20F23155A95 | ||
459 | |||
460 | |||
461 | (% style="color:blue" %)**0C 08 45 57 38 30 45 43 43 43 43 46 00** | ||
462 | |||
463 | **Length** = 0x0C(12) **AD Type** = 0x08 (Bluetooth Name) | ||
464 | |||
465 | **AD** **Data** = 0x4557383045434343434600 | ||
466 | |||
467 | |||
468 | **Analyze valid data:** | ||
469 | |||
470 | (% style="color:blue" %)**AD E8 F3 D4 B8 84 94 A0 AA F5 E2 0F 23 15 5A 95** | ||
471 | |||
472 | **Valid data length = **0x10 (16) ➡ (% style="color:#de9963" %)**b = 0x16** | ||
473 | |||
474 | **~ Valid data location = **0x00 (Broadcast Packet) ➡ (% style="color:#debd63" %)**c = 0x00** | ||
475 | |||
476 | **Valid data starting position **= 0x20 (32) ➡ (% style="color:#b0de63" %)**d = 0x20** | ||
477 | |||
478 | |||
479 | **Analyze the filtered data:** | ||
480 | |||
481 | (% style="color:blue" %)**1A FF 4C 00 02 15 01 12 23 34 45 56 67 78 89 9A AB BC CD DE EF F0 27 17 70 73 C3 **(%%)➡(% style="color:blue" %)** **(% style="color:#b663de" %)**h = 1aff4c0002130112233445566778899aabbccddeeff027177073c3** | ||
482 | |||
483 | **filtered data length = **0x1B (27) ➡ (% style="color:#63de69" %)**e = 0x1b** | ||
484 | |||
485 | **filtered data location = **0x00 (Broadcast Packet) ➡ (% style="color:#63d0de" %)**f = 0x00** | ||
486 | |||
487 | **filtered data starting position = **0x03 ➡ (% style="color:#6395de" %)**g = 0x03** | ||
488 | |||
489 | |||
490 | So the user can set the AT command as: | ||
491 | |||
492 | (% style="color:blue" %)**AT+MODEL=**(% style="color:red" %)**04**(% style="color:#de9963" %)**16**(% style="color:#debd63" %)**00**(% style="color:#b0de63" %)**20**(% style="color:#63de69" %)**1b**(% style="color:#63d0de" %)**00**(% style="color:#6395de" %)**03**(% style="color:#b663de" %)**1aff4c0002130112233445566778899aabbccddeeff027177073c3** | ||
493 | |||
494 | |||
495 | ))) | ||
496 | |||
497 | === 2.3.3 Decode payload === | ||
498 | |||
499 | |||
500 | While using TTN V3 network, you can add the payload format to decode the payload. | ||
501 | |||
502 | [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50%20%26%20LSN50-V2%20-%20LoRaWAN%20Sensor%20Node%20User%20Manual/WebHome/1656378466788-734.png?rev=1.1||alt="1656378466788-734.png"]] | ||
503 | |||
504 | The payload decoder function for TTN V3 are here: | ||
505 | |||
506 | BH01-LB TTN V3 Payload Decoder: [[https:~~/~~/github.com/dragino/dragino-end-node-decoder>>url:https://github.com/dragino/dragino-end-node-decoder]] | ||
507 | |||
508 | |||
509 | ==== 2.3.3.1 Battery Info ==== | ||
510 | |||
511 | |||
512 | Check the battery voltage for BH01-LB. | ||
513 | |||
514 | Ex1: 0x0B45 = 2885mV | ||
515 | |||
516 | Ex2: 0x0B49 = 2889mVxe | ||
517 | |||
518 | |||
519 | == 2.4 Payload Decoder file == | ||
520 | |||
521 | |||
522 | In TTN, use can add a custom payload so it shows friendly reading | ||
523 | |||
524 | In the page (% style="color:#037691" %)**Applications ~-~-> Payload Formats ~-~-> Custom ~-~-> decoder**(%%) to add the decoder from: | ||
525 | |||
526 | [[https:~~/~~/github.com/dragino/dragino-end-node-decoder/blob/main/BH01-LB/BH01-LB_Decode_V1.0.0.txt>>https://github.com/dragino/dragino-end-node-decoder/blob/main/BH01-LB/BH01-LB_Decode_V1.0.0.txt]] | ||
527 | |||
528 | |||
529 | == 2.5 Frequency Plans == | ||
530 | |||
531 | |||
532 | The BH01-LB/LS uses OTAA mode and below frequency plans by default. Each frequency band use different firmware, user update the firmware to the corresponding band for their country. | ||
533 | |||
534 | [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/>>http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/]] | ||
535 | |||
536 | |||
537 | = 3. Configure BH01-LB = | ||
538 | |||
539 | == 3.1 Configure Methods == | ||
540 | |||
541 | |||
542 | BH01-LB supports below configure method: | ||
543 | |||
544 | * AT Command via Bluetooth Connection (**Recommended**): [[BLE Configure Instruction>>http://wiki.dragino.com/xwiki/bin/view/Main/BLE%20Bluetooth%20Remote%20Configure/]]. | ||
545 | * AT Command via UART Connection : See [[UART Connection>>http://wiki.dragino.com/xwiki/bin/view/Main/UART%20Access%20for%20LoRa%20ST%20v4%20base%20model/#H2.3UARTConnectionforSN50v3basemotherboard]]. | ||
546 | * LoRaWAN Downlink. Instruction for different platforms: See [[IoT LoRaWAN Server>>http://wiki.dragino.com/xwiki/bin/view/Main/]] section. | ||
547 | |||
548 | == 3.2 General Commands == | ||
549 | |||
550 | |||
551 | These commands are to configure: | ||
552 | |||
553 | * General system settings like: uplink interval. | ||
554 | * LoRaWAN protocol & radio related command. | ||
555 | |||
556 | They are same for all Dragino Devices which support DLWS-005 LoRaWAN Stack. These commands can be found on the wiki: | ||
557 | |||
558 | [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/>>http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/]] | ||
559 | |||
560 | |||
561 | == 3.3 Commands special design for BH01-LB == | ||
562 | |||
563 | |||
564 | These commands only valid for BH01-LB, as below: | ||
565 | |||
566 | |||
567 | === 3.3.1 Set Transmit Interval Time === | ||
568 | |||
569 | |||
570 | Feature: Change LoRaWAN End Node Transmit Interval. | ||
571 | |||
572 | (% style="color:blue" %)**AT Command: AT+TDC** | ||
573 | |||
574 | (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %) | ||
575 | |=(% style="width: 156px;background-color:#4F81BD;color:white" %)**Command Example**|=(% style="width: 137px;background-color:#4F81BD;color:white" %)**Function**|=(% style="background-color:#4F81BD;color:white" %)**Response** | ||
576 | |(% style="width:156px" %)AT+TDC=?|(% style="width:137px" %)Show current transmit Interval|((( | ||
577 | 30000 | ||
578 | OK | ||
579 | the interval is 30000ms = 30s | ||
580 | ))) | ||
581 | |(% style="width:156px" %)AT+TDC=60000|(% style="width:137px" %)Set Transmit Interval|((( | ||
582 | OK | ||
583 | Set transmit interval to 60000ms = 60 seconds | ||
584 | ))) | ||
585 | |||
586 | (% style="color:blue" %)**Downlink Command: 0x01** | ||
587 | |||
588 | Format: Command Code (0x01) followed by 3 bytes time value. | ||
589 | |||
590 | If the downlink payload=0100003C, it means set the END Node's Transmit Interval to 0x00003C=60(S), while type code is 01. | ||
591 | |||
592 | * Example 1: Downlink Payload: 0100001E ~/~/ Set Transmit Interval (TDC) = 30 seconds | ||
593 | * Example 2: Downlink Payload: 0100003C ~/~/ Set Transmit Interval (TDC) = 60 seconds | ||
594 | |||
595 | === 3.3.2 Get Device Status === | ||
596 | |||
597 | |||
598 | Send a LoRaWAN downlink to ask the device to send its status. | ||
599 | |||
600 | (% style="color:blue" %)**Downlink Payload: 0x26 01** | ||
601 | |||
602 | Sensor will upload Device Status via **FPORT=5**. See payload section for detail. | ||
603 | |||
604 | |||
605 | === 3.3.3 Set Workmode === | ||
606 | |||
607 | |||
608 | Feature: Switch working mode. | ||
609 | |||
610 | (% style="color:blue" %)**AT Command: AT+MODEL=abcdefgh** | ||
611 | |||
612 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
613 | |=(% style="width: 155px;background-color:#4F81BD;color:white" %)**Command Example**|=(% style="width: 197px;background-color:#4F81BD;color:white" %)**Function**|=(% style="width: 158px;background-color:#4F81BD;color:white" %)**Response** | ||
614 | |(% style="width:154px" %)AT+MODEL=?|(% style="width:196px" %)Get the scan filter model.|(% style="width:157px" %)((( | ||
615 | OK | ||
616 | ))) | ||
617 | |(% style="width:154px" %)AT+MODEL=0104|(% style="width:196px" %)Set the working mode to TAH02.|(% style="width:157px" %)((( | ||
618 | OK | ||
619 | END_TRANSFER_CONDITION | ||
620 | ))) | ||
621 | |||
622 | (% style="color:blue" %)**Downlink Command: 0x08** | ||
623 | |||
624 | Format: Command Code | ||
625 | |||
626 | **~ · **Example 1: Downlink Payload: | ||
627 | |||
628 | 08 01 05 **~-~-->** AT+MODEL=0105 | ||
629 | |||
630 | **· **Example 2: Downlink Payload: | ||
631 | |||
632 | 08 03 05 00 19 0b 00 04 ff 4c 00 02 15 01 12 23 34 45 56 **~-~-->** AT+MODEL=030500190b0004ff4c000215011223344556 0x08 03 05 00 19 0b 00 04 ff 4c 00 02 15 01 12 23 34 45 56 | ||
633 | |||
634 | See payload section for detail. | ||
635 | |||
636 | |||
637 | === 3.3.4 Set up filtering of devices by signal strength === | ||
638 | |||
639 | |||
640 | Feature: Filter Scan Devices | ||
641 | |||
642 | (% style="color:blue" %)**AT Command:AT+FILTERRSSI=XX** | ||
643 | |||
644 | (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %) | ||
645 | |=(% style="width: 155px;background-color:#4F81BD;color:white" %)**Command Example**|=(% style="width: 197px;background-color:#4F81BD;color:white" %)**Function**|=(% style="width: 158px;background-color:#4F81BD;color:white" %)**Response** | ||
646 | |(% style="width:154px" %)((( | ||
647 | AT+FILTERRSSI=? | ||
648 | )))|(% style="width:196px" %)Get the RSSI range of the scanned device|(% style="width:157px" %)((( | ||
649 | 0 | ||
650 | OK | ||
651 | ))) | ||
652 | |(% style="width:154px" %)((( | ||
653 | AT+FILTERRSSI=-70 | ||
654 | )))|(% style="width:196px" %)Set the RSSI range of the scanning device to -70~0|(% style="width:157px" %)((( | ||
655 | OK | ||
656 | ))) | ||
657 | |||
658 | (% style="color:blue" %)**Downlink Command:0x09** | ||
659 | |||
660 | Format: Command Code | ||
661 | |||
662 | **· **Example: Downlink Payload: | ||
663 | |||
664 | 09 BA **~-~--> **AT+FILTERRSSI=-70 | ||
665 | |||
666 | -70 is converted from signed to unsigned to decimal 186, and 186 is converted from decimal to hexadecimal to BA. | ||
667 | |||
668 | |||
669 | = 4. Battery & Power Consumption = | ||
670 | |||
671 | |||
672 | BH01-LB use ER26500 + SPC1520 battery pack. See below link for detail information about the battery info and how to replace. | ||
673 | |||
674 | [[**Battery Info & Power Consumption Analyze**>>http://wiki.dragino.com/xwiki/bin/view/Main/How%20to%20calculate%20the%20battery%20life%20of%20Dragino%20sensors%3F/]] . | ||
675 | |||
676 | |||
677 | = 5. OTA Firmware update = | ||
678 | |||
679 | |||
680 | (% class="wikigeneratedid" %) | ||
681 | **User can change firmware BH01-LB to:** | ||
682 | |||
683 | * Change Frequency band/ region. | ||
684 | * Update with new features. | ||
685 | * Fix bugs. | ||
686 | |||
687 | **Firmware and changelog can be downloaded from :** **[[Firmware download link>>https://www.dropbox.com/scl/fo/159vcesgbwe6cv0frovaf/AGpaICU74040qlFxAmUhs84?rlkey=sl6hocinsp5lkzsu0c1fj7dyq&st=afgmn3mp&dl=0]]** | ||
688 | |||
689 | **Methods to Update Firmware:** | ||
690 | |||
691 | * (Recommanded way) OTA firmware update via wireless: **[[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20OTA%20Update%20for%20Sensors/>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20OTA%20Update%20for%20Sensors/]]** | ||
692 | * Update through UART TTL interface: **[[Instruction>>url:http://wiki.dragino.com/xwiki/bin/view/Main/UART%20Access%20for%20LoRa%20ST%20v4%20base%20model/#H1.LoRaSTv4baseHardware]]**. | ||
693 | |||
694 | = 6. Order Info = | ||
695 | |||
696 | |||
697 | Part Number: (% style="color:blue" %)**BH01-LB-XX-YY**(%%) | ||
698 | |||
699 | (% style="color:red" %)**XX**(%%): The default frequency band | ||
700 | |||
701 | * (% style="color:red" %)**AS923**(%%): LoRaWAN AS923 band | ||
702 | * (% style="color:red" %)**AU915**(%%): LoRaWAN AU915 band | ||
703 | * (% style="color:red" %)**EU433**(%%): LoRaWAN EU433 band | ||
704 | * (% style="color:red" %)**EU868**(%%): LoRaWAN EU868 band | ||
705 | * (% style="color:red" %)**KR920**(%%): LoRaWAN KR920 band | ||
706 | * (% style="color:red" %)**US915**(%%): LoRaWAN US915 band | ||
707 | * (% style="color:red" %)**IN865**(%%): LoRaWAN IN865 band | ||
708 | * (% style="color:red" %)**CN470**(%%): LoRaWAN CN470 band | ||
709 | |||
710 | (% style="color:red" %)**YY: ** (%%)Hole Option | ||
711 | |||
712 | * (% style="color:red" %)**12**(%%): With M12 waterproof cable hole | ||
713 | * (% style="color:red" %)**16**(%%): With M16 waterproof cable hole | ||
714 | * (% style="color:red" %)**20**(%%): With M20 waterproof cable hole | ||
715 | * (% style="color:red" %)**NH**(%%): No Hole | ||
716 | |||
717 | = 7. Packing Info = | ||
718 | |||
719 | |||
720 | (% style="color:#037691" %)**Package Includes**: | ||
721 | |||
722 | * BH01-LB Bluetooth to LoRaWAN Hub | ||
723 | |||
724 | (% style="color:#037691" %)**Dimension and weight**: | ||
725 | |||
726 | * Device Size: cm | ||
727 | * Device Weight: g | ||
728 | * Package Size / pcs : cm | ||
729 | * Weight / pcs : g | ||
730 | |||
731 | = 8. Support = | ||
732 | |||
733 | |||
734 | * Support is provided Monday to Friday, from 09:00 to 18:00 GMT+8. Due to different timezones we cannot offer live support. However, your questions will be answered as soon as possible in the before-mentioned schedule. | ||
735 | |||
736 | * Provide as much information as possible regarding your enquiry (product models, accurately describe your problem and steps to replicate it etc) and send a mail to [[support@dragino.cc>>url:http://../../../../../../D:%5C%E5%B8%82%E5%9C%BA%E8%B5%84%E6%96%99%5C%E8%AF%B4%E6%98%8E%E4%B9%A6%5CLoRa%5CLT%E7%B3%BB%E5%88%97%5Csupport@dragino.cc]] |