| 30 | |
| 31 | == !LoRa & Azure Demo == |
| 32 | |
| 33 | |
| 34 | Requirements |
| 35 | |
| 36 | 1. Node / Device |
| 37 | 1. [http://www.sparklan.com/p2-products-detail.php?PKey=1d706in8fkBM1aogttf0QPj2j2xnNC4Ud8OmmRXWAPM&WLRS-591EVB%20%20Series SparkLAN WLRS-591EVB] |
| 38 | 1. Connect to desktop/laptop via !CuteCom terminal program |
| 39 | 1. Set freq |
| 40 | 1. Mac join abp, etc |
| 41 | 1. Gateworks SBC |
| 42 | 1. Install Ubuntu Bionic (Ventana) [wiki:ventana/ubuntu Instructions] |
| 43 | 1. Insert RAK2247 card into adapter (Because the card by default does not support active low reset which is what the Gateworks SBC uses. Contact RAK to have a RAK2247 modified to use a active low reset) |
| 44 | 1. Software pieces: |
| 45 | 1. Github rak_common_for_gateway https://github.com/RAKWireless/rak_common_for_gateway |
| 46 | 1. {{{ git clone https://github.com/RAKWireless/rak_common_for_gateway}}} |
| 47 | 1. This talks to the actual radio card. |
| 48 | 1. Careful to set config file global_conf.json for frequency, and gateway to local host for this example (or The Things Network (TTN) if not using azure) |
| 49 | 1. /root/rak_common_for_gateway/lora/rak2247/packet_forwarder/lora_pkt_fwd/lora_pkt_fwd |
| 50 | 1. .deb package lora-gateway-bridge (must be v3.3 or higher)(now called chirpstack because of licensing issues) |
| 51 | 1. The bridge is required because the packet forwarder cannot talk to Azure direct. It only speaks Lora Protocol. Azure needs something like MQTT, etc. So the bridge converts from Lora to MQTT. |
| 52 | 1. https://www.chirpstack.io |
| 53 | 1. Download here: https://artifacts.chirpstack.io/downloads/lora-gateway-bridge/ |
| 54 | 1. lora-gateway-bridge -c /etc/lora-gateway-bridge/lora-gateway-bridge.toml |
| 55 | 1. This is used |
| 56 | 1. Config file must specify the proper device ID thats set in Azure cloud, however, I felt the bridge was not listening to my config file and picked the eth0 MAC address as the device ID, so then I created a device in the cloud to match this MAC. |
| 57 | 1. Azure Cloud |
| 58 | 1. Use pre-done remote monitoring solution accelerator (https://docs.microsoft.com/en-us/azure/iot-accelerators/iot-accelerators-remote-monitoring-sample-walkthrough) |
| 59 | 1. Must get shared key device string like example: |
| 60 | 1. |
| 61 | {{{ |
| 62 | HostName=gateworksremotemonitor-s2pc7.azurewebsites.net;DeviceId=GateworksTest1;SharedAccessKey=R9hjZNOvtfferesrsHzFGScSgc3EUxc004pjMg= |
| 63 | }}} |
| 64 | 1. Must create a device with a specific device ID. This device ID must be used by the MQTT lora-gateway-bridge |
| 65 | |
| 66 | === Steps to take |
| 67 | |
| 68 | 1. Make sure node is up and running and connected to with terminal program on laptop/desktop |
| 69 | 1. Start SBC and make sure packet forward is running first |
| 70 | 1. Then start the gateway bridge |
| 71 | 1. Then check for connected device on Azure |
| 72 | 1. Send packet from node and view on Azure |
| 73 | |
| 74 | Sample Logs & files |
| 75 | |
| 76 | Lora-gateway-bridge |
| 77 | {{{ |
| 78 | root@bionic-armhf:~# cat /etc/lora-gateway-bridge/lora-gateway-bridge.toml |
| 79 | # This configuration provides a Semtech UDP packet-forwarder backend and |
| 80 | # integrates with a MQTT broker. Many options and defaults have been omitted |
| 81 | # for simplicity. |
| 82 | # |
| 83 | # See https://www.loraserver.io/lora-gateway-bridge/install/config/ for a full |
| 84 | # configuration example and documentation. |
| 85 | |
| 86 | [general] |
| 87 | # debug=5, info=4, warning=3, error=2, fatal=1, panic=0 |
| 88 | log_level = 5 |
| 89 | |
| 90 | # Gateway backend configuration. |
| 91 | [backend] |
| 92 | # Backend type. |
| 93 | type="semtech_udp" |
| 94 | |
| 95 | # Semtech UDP packet-forwarder backend. |
| 96 | [backend.semtech_udp] |
| 97 | |
| 98 | # ip:port to bind the UDP listener to |
| 99 | # |
| 100 | # Example: 0.0.0.0:1700 to listen on port 1700 for all network interfaces. |
| 101 | # This is the listeren to which the packet-forwarder forwards its data |
| 102 | # so make sure the 'serv_port_up' and 'serv_port_down' from your |
| 103 | # packet-forwarder matches this port. |
| 104 | udp_bind = "0.0.0.0:1700" |
| 105 | |
| 106 | |
| 107 | # Integration configuration. |
| 108 | [integration] |
| 109 | # Payload marshaler. |
| 110 | # |
| 111 | # This defines how the MQTT payloads are encoded. Valid options are: |
| 112 | # * protobuf: Protobuf encoding (this will become the LoRa Gateway Bridge v3 default) |
| 113 | # * json: JSON encoding (easier for debugging, but less compact than 'protobuf') |
| 114 | marshaler="json" |
| 115 | |
| 116 | # MQTT integration configuration. |
| 117 | [integration.mqtt] |
| 118 | # Event topic template. |
| 119 | event_topic_template="gateway/{{ .GatewayID }}/event/{{ .EventType }}" |
| 120 | |
| 121 | # Command topic template. |
| 122 | command_topic_template="gateway/{{ .GatewayID }}/command/#" |
| 123 | |
| 124 | # MQTT authentication. |
| 125 | [integration.mqtt.auth] |
| 126 | # Type defines the MQTT authentication type to use. |
| 127 | # |
| 128 | # Set this to the name of one of the sections below. |
| 129 | #type="generic" |
| 130 | type="azure_iot_hub" |
| 131 | |
| 132 | # Generic MQTT authentication. |
| 133 | [integration.mqtt.auth.generic] |
| 134 | # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) |
| 135 | server="tcp://127.0.0.1:1883" |
| 136 | |
| 137 | # Connect with the given username (optional) |
| 138 | username="" |
| 139 | |
| 140 | # Connect with the given password (optional) |
| 141 | password="" |
| 142 | |
| 143 | # Azure IoT Hub |
| 144 | # |
| 145 | # This setting will preset uplink and downlink topics that will only |
| 146 | # work with Azure IoT Hub service. |
| 147 | [integration.mqtt.auth.azure_iot_hub] |
| 148 | |
| 149 | # Device connection string (symmetric key authentication). |
| 150 | # |
| 151 | # This connection string can be retrieved from the Azure IoT Hub device |
| 152 | # details when using the symmetric key authentication type. |
| 153 | device_connection_string="HostName=iothub-s2pc7.azure-devices.net;DeviceId=00d012fffee1f102;SharedAccessKey=hWY7XLZuFOYlgIzvSGEbvzDpJ5H2sVGWGq1M6cUoiNc=" |
| 154 | |
| 155 | # Token expiration (symmetric key authentication). |
| 156 | # |
| 157 | # ChirpStack Gateway Bridge will generate a SAS token with the given expiration. |
| 158 | # After the token has expired, it will generate a new one and trigger a |
| 159 | # re-connect (only for symmetric key authentication). |
| 160 | sas_token_expiration="24h0m0s" |
| 161 | |
| 162 | # Device ID (X.509 authentication). |
| 163 | # |
| 164 | # This will be automatically set when a device connection string is given. |
| 165 | # It must be set for X.509 authentication. |
| 166 | device_id="" |
| 167 | |
| 168 | # IoT Hub hostname (X.509 authentication). |
| 169 | # |
| 170 | # This will be automatically set when a device connection string is given. |
| 171 | # It must be set for X.509 authentication. |
| 172 | # Example: iot-hub-name.azure-devices.net |
| 173 | hostname="" |
| 174 | |
| 175 | # Client certificates (X.509 authentication). |
| 176 | # |
| 177 | # Configure the tls_cert (certificate file) and tls_key (private-key file) |
| 178 | # when the device is configured with X.509 authentication. |
| 179 | tls_cert="" |
| 180 | tls_key="" |
| 181 | |
| 182 | }}} |
| 183 | |
| 184 | Packet forwarder config: |
| 185 | {{{ |
| 186 | root@bionic-armhf:~/rak_common_for_gateway/lora/rak2247/packet_forwarder/lora_pkt_fwd# cat global_conf.json |
| 187 | { |
| 188 | "SX1301_conf": { |
| 189 | "lorawan_public": true, |
| 190 | "clksrc": 1, |
| 191 | "antenna_gain": 0, |
| 192 | "radio_0": { |
| 193 | "enable": true, |
| 194 | "type": "SX1257", |
| 195 | "freq": 902600000, |
| 196 | "rssi_offset": -166.0, |
| 197 | "tx_enable": true, |
| 198 | "tx_freq_min": 902000000, |
| 199 | "tx_freq_max": 928000000 |
| 200 | }, |
| 201 | "radio_1": { |
| 202 | "enable": true, |
| 203 | "type": "SX1257", |
| 204 | "freq": 903400000, |
| 205 | "rssi_offset": -166.0, |
| 206 | "tx_enable": false |
| 207 | }, |
| 208 | "chan_multiSF_0": { |
| 209 | "enable": true, |
| 210 | "radio": 0, |
| 211 | "if": -400000 |
| 212 | }, |
| 213 | "chan_multiSF_1": { |
| 214 | "enable": true, |
| 215 | "radio": 0, |
| 216 | "if": -200000 |
| 217 | }, |
| 218 | "chan_multiSF_2": { |
| 219 | "enable": true, |
| 220 | "radio": 0, |
| 221 | "if": 0 |
| 222 | }, |
| 223 | "chan_multiSF_3": { |
| 224 | "enable": true, |
| 225 | "radio": 0, |
| 226 | "if": 200000 |
| 227 | }, |
| 228 | "chan_multiSF_4": { |
| 229 | "enable": true, |
| 230 | "radio": 1, |
| 231 | "if": -300000 |
| 232 | }, |
| 233 | "chan_multiSF_5": { |
| 234 | "enable": true, |
| 235 | "radio": 1, |
| 236 | "if": -100000 |
| 237 | }, |
| 238 | "chan_multiSF_6": { |
| 239 | "enable": true, |
| 240 | "radio": 1, |
| 241 | "if": 100000 |
| 242 | }, |
| 243 | "chan_multiSF_7": { |
| 244 | "enable": true, |
| 245 | "radio": 1, |
| 246 | "if": 300000 |
| 247 | }, |
| 248 | "chan_Lora_std": { |
| 249 | "enable": true, |
| 250 | "radio": 0, |
| 251 | "if": 300000, |
| 252 | "bandwidth": 500000, |
| 253 | "spread_factor": 8 |
| 254 | }, |
| 255 | "chan_FSK": { |
| 256 | "enable": false, |
| 257 | "radio": 0, |
| 258 | "if": 300000, |
| 259 | "bandwidth": 250000, |
| 260 | "datarate": 100000 |
| 261 | }, |
| 262 | "tx_lut_0": { |
| 263 | "desc": "TX gain table, index 0", |
| 264 | "pa_gain": 0, |
| 265 | "mix_gain": 8, |
| 266 | "rf_power": -6, |
| 267 | "dig_gain": 0 |
| 268 | }, |
| 269 | "tx_lut_1": { |
| 270 | "desc": "TX gain table, index 1", |
| 271 | "pa_gain": 0, |
| 272 | "mix_gain": 10, |
| 273 | "rf_power": -3, |
| 274 | "dig_gain": 0 |
| 275 | }, |
| 276 | "tx_lut_2": { |
| 277 | "desc": "TX gain table, index 2", |
| 278 | "pa_gain": 0, |
| 279 | "mix_gain": 12, |
| 280 | "rf_power": 0, |
| 281 | "dig_gain": 0 |
| 282 | }, |
| 283 | "tx_lut_3": { |
| 284 | "desc": "TX gain table, index 3", |
| 285 | "pa_gain": 1, |
| 286 | "mix_gain": 8, |
| 287 | "rf_power": 3, |
| 288 | "dig_gain": 0 |
| 289 | }, |
| 290 | "tx_lut_4": { |
| 291 | "desc": "TX gain table, index 4", |
| 292 | "pa_gain": 1, |
| 293 | "mix_gain": 10, |
| 294 | "rf_power": 6, |
| 295 | "dig_gain": 0 |
| 296 | }, |
| 297 | "tx_lut_5": { |
| 298 | "desc": "TX gain table, index 5", |
| 299 | "pa_gain": 1, |
| 300 | "mix_gain": 12, |
| 301 | "rf_power": 10, |
| 302 | "dig_gain": 0 |
| 303 | }, |
| 304 | "tx_lut_6": { |
| 305 | "desc": "TX gain table, index 6", |
| 306 | "pa_gain": 1, |
| 307 | "mix_gain": 13, |
| 308 | "rf_power": 11, |
| 309 | "dig_gain": 0 |
| 310 | }, |
| 311 | "tx_lut_7": { |
| 312 | "desc": "TX gain table, index 7", |
| 313 | "pa_gain": 2, |
| 314 | "mix_gain": 9, |
| 315 | "rf_power": 12, |
| 316 | "dig_gain": 0 |
| 317 | }, |
| 318 | "tx_lut_8": { |
| 319 | "desc": "TX gain table, index 8", |
| 320 | "pa_gain": 1, |
| 321 | "mix_gain": 15, |
| 322 | "rf_power": 13, |
| 323 | "dig_gain": 0 |
| 324 | }, |
| 325 | "tx_lut_9": { |
| 326 | "desc": "TX gain table, index 9", |
| 327 | "pa_gain": 2, |
| 328 | "mix_gain": 10, |
| 329 | "rf_power": 14, |
| 330 | "dig_gain": 0 |
| 331 | }, |
| 332 | "tx_lut_10": { |
| 333 | "desc": "TX gain table, index 10", |
| 334 | "pa_gain": 2, |
| 335 | "mix_gain": 11, |
| 336 | "rf_power": 16, |
| 337 | "dig_gain": 0 |
| 338 | }, |
| 339 | "tx_lut_11": { |
| 340 | "desc": "TX gain table, index 11", |
| 341 | "pa_gain": 3, |
| 342 | "mix_gain": 9, |
| 343 | "rf_power": 20, |
| 344 | "dig_gain": 0 |
| 345 | }, |
| 346 | "tx_lut_12": { |
| 347 | "desc": "TX gain table, index 12", |
| 348 | "pa_gain": 3, |
| 349 | "mix_gain": 10, |
| 350 | "rf_power": 23, |
| 351 | "dig_gain": 0 |
| 352 | }, |
| 353 | "tx_lut_13": { |
| 354 | "desc": "TX gain table, index 13", |
| 355 | "pa_gain": 3, |
| 356 | "mix_gain": 11, |
| 357 | "rf_power": 25, |
| 358 | "dig_gain": 0 |
| 359 | }, |
| 360 | "tx_lut_14": { |
| 361 | "desc": "TX gain table, index 14", |
| 362 | "pa_gain": 3, |
| 363 | "mix_gain": 12, |
| 364 | "rf_power": 26, |
| 365 | "dig_gain": 0 |
| 366 | }, |
| 367 | "tx_lut_15": { |
| 368 | "desc": "TX gain table, index 15", |
| 369 | "pa_gain": 3, |
| 370 | "mix_gain": 14, |
| 371 | "rf_power": 27, |
| 372 | "dig_gain": 0 |
| 373 | } |
| 374 | }, |
| 375 | "gateway_conf": { |
| 376 | "gateway_ID": "00D012FFFEE1F102", |
| 377 | /* change with default server address/ports, or overwrite in local_conf.json */ |
| 378 | "server_address": "localhost", |
| 379 | "serv_port_up": 1700, |
| 380 | "serv_port_down": 1700, |
| 381 | /* adjust the following parameters for your network */ |
| 382 | "keepalive_interval": 10, |
| 383 | "stat_interval": 30, |
| 384 | "push_timeout_ms": 100, |
| 385 | /* forward only valid packets */ |
| 386 | "forward_crc_valid": true, |
| 387 | "forward_crc_error": true, |
| 388 | "forward_crc_disabled": false, |
| 389 | "autoquit_threshold": 6 |
| 390 | } |
| 391 | } |
| 392 | }}} |
| 393 | |
| 394 | Example packet forward application running output: |
| 395 | {{{ |
| 396 | root@bionic-armhf:~/rak_common_for_gateway/lora/rak2247/packet_forwarder/lora_pkt_fwd# ./lora_pkt_fwd |
| 397 | *** Beacon Packet Forwarder for Lora Gateway *** |
| 398 | Version: 4.0.1 |
| 399 | *** Lora concentrator HAL library version info *** |
| 400 | Version: 5.0.1; |
| 401 | *** |
| 402 | INFO: Little endian host |
| 403 | INFO: found global configuration file global_conf.json, parsing it |
| 404 | INFO: global_conf.json does contain a JSON object named SX1301_conf, parsing SX1301 parameters |
| 405 | INFO: lorawan_public 1, clksrc 1 |
| 406 | INFO: no configuration for LBT |
| 407 | INFO: antenna_gain 0 dBi |
| 408 | INFO: Configuring TX LUT with 16 indexes |
| 409 | INFO: radio 0 enabled (type SX1257), center frequency 902600000, RSSI offset -166.000000, tx enabled 1, tx_notch_freq 0 |
| 410 | INFO: radio 1 enabled (type SX1257), center frequency 903400000, RSSI offset -166.000000, tx enabled 0, tx_notch_freq 0 |
| 411 | INFO: Lora multi-SF channel 0> radio 0, IF -400000 Hz, 125 kHz bw, SF 7 to 12 |
| 412 | INFO: Lora multi-SF channel 1> radio 0, IF -200000 Hz, 125 kHz bw, SF 7 to 12 |
| 413 | INFO: Lora multi-SF channel 2> radio 0, IF 0 Hz, 125 kHz bw, SF 7 to 12 |
| 414 | INFO: Lora multi-SF channel 3> radio 0, IF 200000 Hz, 125 kHz bw, SF 7 to 12 |
| 415 | INFO: Lora multi-SF channel 4> radio 1, IF -300000 Hz, 125 kHz bw, SF 7 to 12 |
| 416 | INFO: Lora multi-SF channel 5> radio 1, IF -100000 Hz, 125 kHz bw, SF 7 to 12 |
| 417 | INFO: Lora multi-SF channel 6> radio 1, IF 100000 Hz, 125 kHz bw, SF 7 to 12 |
| 418 | INFO: Lora multi-SF channel 7> radio 1, IF 300000 Hz, 125 kHz bw, SF 7 to 12 |
| 419 | INFO: Lora std channel> radio 0, IF 300000 Hz, 500000 Hz bw, SF 8 |
| 420 | INFO: FSK channel 8 disabled |
| 421 | INFO: global_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters |
| 422 | INFO: gateway MAC address is configured to 00D012FFFEE1F102 |
| 423 | INFO: server hostname or IP address is configured to "localhost" |
| 424 | INFO: upstream port is configured to "1700" |
| 425 | INFO: downstream port is configured to "1700" |
| 426 | INFO: downstream keep-alive interval is configured to 10 seconds |
| 427 | INFO: statistics display interval is configured to 30 seconds |
| 428 | INFO: upstream PUSH_DATA time-out is configured to 100 ms |
| 429 | INFO: packets received with a valid CRC will be forwarded |
| 430 | INFO: packets received with a CRC error will be forwarded |
| 431 | INFO: packets received with no CRC will NOT be forwarded |
| 432 | INFO: Auto-quit after 6 non-acknowledged PULL_DATA |
| 433 | INFO: found local configuration file local_conf.json, parsing it |
| 434 | INFO: redefined parameters will overwrite global parameters |
| 435 | INFO: local_conf.json does not contain a JSON object named SX1301_conf |
| 436 | INFO: local_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters |
| 437 | INFO: gateway MAC address is configured to 00D012FFFEE1F102 |
| 438 | INFO: packets received with a valid CRC will be forwarded |
| 439 | INFO: packets received with a CRC error will be forwarded |
| 440 | INFO: packets received with no CRC will NOT be forwarded |
| 441 | INFO: [main] concentrator started, packet can now be received |
| 442 | |
| 443 | INFO: Disabling GPS mode for concentrator's counter... |
| 444 | INFO: host/sx1301 time offset=(1573244036s:715596µs) - drift=1811158092µs |
| 445 | INFO: Enabling GPS mode for concentrator's counter. |
| 446 | |
| 447 | |
| 448 | INFO: Received pkt from mote: 12345678 (fcnt=77) |
| 449 | |
| 450 | JSON up: {"rxpk":[{"tmst":12244828,"chan":6,"rfch":1,"freq":903.500000,"stat":1,"modu":"LORA","datr":"SF10BW125","codr":"4/5","lsnr":10.8,"rssi":-39,"size":17,"data":"QHhWNBKATQAPR52Q+oKvi8I="}]} |
| 451 | INFO: [down] PULL_ACK received in 4 ms |
| 452 | |
| 453 | INFO: Received pkt from mote: 12345678 (fcnt=78) |
| 454 | |
| 455 | JSON up: {"rxpk":[{"tmst":27958804,"chan":4,"rfch":1,"freq":903.100000,"stat":1,"modu":"LORA","datr":"SF10BW125","codr":"4/5","lsnr":10.2,"rssi":-39,"size":17,"data":"QHhWNBKATgAPZnN8WUUi2U8="}]} |
| 456 | INFO: [up] PUSH_ACK received in 7 ms |
| 457 | |
| 458 | ##### 2019-11-08 20:14:29 GMT ##### |
| 459 | ### [UPSTREAM] ### |
| 460 | # RF packets received by concentrator: 2 |
| 461 | # CRC_OK: 100.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00% |
| 462 | # RF packets forwarded: 2 (34 bytes) |
| 463 | # PUSH_DATA datagrams sent: 2 (396 bytes) |
| 464 | # PUSH_DATA acknowledged: 50.00% |
| 465 | ### [DOWNSTREAM] ### |
| 466 | # PULL_DATA sent: 3 (33.33% acknowledged) |
| 467 | # PULL_RESP(onse) datagrams received: 0 (0 bytes) |
| 468 | # RF packets sent to concentrator: 0 (0 bytes) |
| 469 | # TX errors: 0 |
| 470 | # BEACON queued: 0 |
| 471 | # BEACON sent so far: 0 |
| 472 | # BEACON rejected: 0 |
| 473 | ### [JIT] ### |
| 474 | # SX1301 time (PPS): 2835751 |
| 475 | src/jitqueue.c:448:jit_print_queue(): INFO: [jit] queue is empty |
| 476 | ### [GPS] ### |
| 477 | # GPS sync is disabled |
| 478 | ##### END ##### |
| 479 | |
| 480 | JSON up: {"stat":{"time":"2019-11-08 20:14:29 GMT","rxnb":2,"rxok":2,"rxfw":2,"ackr":50.0,"dwnb":0,"txnb":0}} |
| 481 | INFO: [up] PUSH_ACK received in 2 ms |
| 482 | INFO: [down] PULL_ACK received in 2 ms |
| 483 | INFO: [down] PULL_ACK received in 3 ms |
| 484 | |
| 485 | }}} |
| 486 | |
| 487 | Example lora-gateway-bridge output |
| 488 | {{{ |
| 489 | root@bionic-armhf:~# lora-gateway-bridge -c /etc/lora-gateway-bridge/lora-gateway-bridge.toml |
| 490 | INFO[0000] starting LoRa Gateway Bridge docs="https://www.loraserver.io/lora-gateway-bridge/" version=3.3.0 |
| 491 | INFO[0000] backend/semtechudp: starting gateway udp listener addr="0.0.0.0:1700" |
| 492 | DEBU[0000] backend/semtechudp: cleanup gateway registry |
| 493 | INFO[0000] integration/mqtt: connected to mqtt broker |
| 494 | DEBU[0001] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:53877" protocol_version=2 type=PullData |
| 495 | DEBU[0001] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:53877" protocol_version=2 type=PullACK |
| 496 | INFO[0001] integration/mqtt: subscribing to topic qos=0 topic="devices/00d012fffee1f102/messages/devicebound/#" |
| 497 | DEBU[0006] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:50657" protocol_version=2 type=PushData |
| 498 | DEBU[0006] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:50657" protocol_version=2 type=PushACK |
| 499 | INFO[0006] integration/mqtt: publishing event event=up qos=0 topic=devices/00d012fffee1f102/messages/events/up uplink_id=d0e63fa3-ede2-4850-b981-e239820a8434 |
| 500 | DEBU[0011] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:50657" protocol_version=2 type=PushData |
| 501 | DEBU[0011] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:50657" protocol_version=2 type=PushACK |
| 502 | INFO[0011] integration/mqtt: publishing event event=stats qos=0 stats_id=1af685eb-3e6d-4a1f-bf18-103c7619c7d1 topic=devices/00d012fffee1f102/messages/events/stats |
| 503 | DEBU[0011] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:53877" protocol_version=2 type=PullData |
| 504 | DEBU[0011] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:53877" protocol_version=2 type=PullACK |
| 505 | DEBU[0021] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:53877" protocol_version=2 type=PullData |
| 506 | DEBU[0021] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:53877" protocol_version=2 type=PullACK |
| 507 | DEBU[0032] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:53877" protocol_version=2 type=PullData |
| 508 | DEBU[0032] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:53877" protocol_version=2 type=PullACK |
| 509 | DEBU[0041] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:50657" protocol_version=2 type=PushData |
| 510 | DEBU[0041] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:50657" protocol_version=2 type=PushACK |
| 511 | INFO[0041] integration/mqtt: publishing event event=stats qos=0 stats_id=9926a236-5ef0-41f5-968b-83eb80af1836 topic=devices/00d012fffee1f102/messages/events/stats |
| 512 | DEBU[0042] backend/semtechudp: received udp packet from gateway addr="127.0.0.1:53877" protocol_version=2 type=PullData |
| 513 | DEBU[0042] backend/semtechudp: sending udp packet to gateway addr="127.0.0.1:53877" protocol_version=2 type=PullACK |
| 514 | |
| 515 | }}} |
| 516 | |
| 517 | Sample status on Azure platform for a sample packet: |
| 518 | Bridge log: |
| 519 | {{{ |
| 520 | INFO[5322] integration/mqtt: publishing event event=stats qos=0 stats_id=5c6c1e4f-ae87-4bf9-a18d-8b2c27646dbb topic=devices/00d012fffee1f102/messages/events/stats |
| 521 | |
| 522 | }}} |
| 523 | Azure receive: |
| 524 | {{{ |
| 525 | { |
| 526 | "data": { |
| 527 | "gatewayId": "ANAS//7h8QI=", |
| 528 | "ip": "172.24.24.194", |
| 529 | "time": "2019-11-08T21:37:30Z", |
| 530 | "location": null, |
| 531 | "configVersion": null, |
| 532 | "rxPacketsReceived": 0, |
| 533 | "rxPacketsReceivedOk": 0, |
| 534 | "txPacketsReceived": 0, |
| 535 | "txPacketsEmitted": 0, |
| 536 | "statsId": "Mf/IdLFxTe6ZVlUYcQvlZw==", |
| 537 | "stats": null |
| 538 | }, |
| 539 | "deviceId": "00d012fffee1f102", |
| 540 | "time": "2019-11-08T21:37:30+00:00" |
| 541 | } |
| 542 | }}} |
| 543 | |
| 544 | Sample data up on Azure for sample up packet: |
| 545 | |
| 546 | Bridge log: |
| 547 | {{{ |
| 548 | INFO[5193] integration/mqtt: publishing event event=up qos=0 topic=devices/00d012fffee1f102/messages/events/up uplink_id=7a36347f-e7f5-4d9e-b75c-d54adf68e9d2 |
| 549 | |
| 550 | }}} |
| 551 | |
| 552 | Azure packet log |
| 553 | {{{ |
| 554 | { |
| 555 | "data": { |
| 556 | "phyPayload": "QHhWNBKAVwAPo+J5m001Lok=", |
| 557 | "txInfoFrequency": 903100000, |
| 558 | "txInfoModulation": "LORA", |
| 559 | "txInfoLoRaModulationInfoBandwidth": 125, |
| 560 | "txInfoLoRaModulationInfoSpreadingFactor": 10, |
| 561 | "txInfoLoRaModulationInfoCodeRate": "4/5", |
| 562 | "txInfoLoRaModulationInfoPolarizationInversion": false, |
| 563 | "rxInfoGatewayId": "ANAS//7h8QI=", |
| 564 | "rxInfoTime": null, |
| 565 | "rxInfoTimeSinceGpsEpoch": null, |
| 566 | "rxInfoRssi": -35, |
| 567 | "rxInfoLoRaSnr": 11.5, |
| 568 | "rxInfoChannel": 4, |
| 569 | "rxInfoRfChain": 1, |
| 570 | "rxInfoBoard": 0, |
| 571 | "rxInfoAntenna": 0, |
| 572 | "rxInfoLocation": null, |
| 573 | "rxInfoFineTimestampType": "NONE", |
| 574 | "rxInfoContext": "NtnEjA==", |
| 575 | "rxInfoUplinkId": "ejY0f+f1TZ63XNVK32jp0g==", |
| 576 | "up": null |
| 577 | }, |
| 578 | "deviceId": "00d012fffee1f102", |
| 579 | "time": "2019-11-08T21:40:52+00:00" |
| 580 | } |
| 581 | }}} |
| 582 | |
| 583 | |
| 584 | === Random Azure Links === |
| 585 | * https://github.com/Azure-Samples/IoTMQTTSample |
| 586 | * https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support |
| 587 | * https://www.chirpstack.io/guides/microsoft-azure/ |
| 588 | * https://www.chirpstack.io/gateway-bridge/overview/ |
| 589 | * https://artifacts.chirpstack.io/downloads/lora-gateway-bridge/ |
| 590 | |