Changes between Version 2 and Version 3 of iot


Ignore:
Timestamp:
11/22/2019 01:00:25 AM (5 years ago)
Author:
Ryan Erbstoesser
Comment:

add starting of azure demo

Legend:

Unmodified
Added
Removed
Modified
  • iot

    v2 v3  
    11= Gateworks Internet of Things (IoT)
     2[[PageOutline]]
    23
    34Gateworks is a hardware company that designs and manufactures single board computers and radios that can be used for IoT systems, most typically Gateways and Edge devices. Gateworks can custom create sensors as well for high volume projects.
     
    2324 * Amazon AWS
    2425 * Google
    25  * TTN
     26 * The Things Network (TTN)(LoRa)
     27
    2628== IoT Software Solutions
    2729 * OmnIoT SoftHub
     30
     31== !LoRa & Azure Demo ==
     32
     33
     34Requirements
     35
     361. 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
     411. 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.
     571. 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{{{
     62HostName=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
     681. Make sure node is up and running and connected to with terminal program on laptop/desktop
     691. Start SBC and make sure packet forward is running first
     701. Then start the gateway bridge
     711. Then check for connected device on Azure
     721. Send packet from node and view on Azure
     73
     74Sample Logs & files
     75
     76Lora-gateway-bridge
     77{{{
     78root@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
     88log_level = 5
     89
     90# Gateway backend configuration.
     91[backend]
     92# Backend type.
     93type="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')
     114marshaler="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
     184Packet forwarder config:
     185{{{
     186root@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
     394Example packet forward application running output:
     395{{{
     396root@bionic-armhf:~/rak_common_for_gateway/lora/rak2247/packet_forwarder/lora_pkt_fwd# ./lora_pkt_fwd
     397*** Beacon Packet Forwarder for Lora Gateway ***
     398Version: 4.0.1
     399*** Lora concentrator HAL library version info ***
     400Version: 5.0.1;
     401***
     402INFO: Little endian host
     403INFO: found global configuration file global_conf.json, parsing it
     404INFO: global_conf.json does contain a JSON object named SX1301_conf, parsing SX1301 parameters
     405INFO: lorawan_public 1, clksrc 1
     406INFO: no configuration for LBT
     407INFO: antenna_gain 0 dBi
     408INFO: Configuring TX LUT with 16 indexes
     409INFO: radio 0 enabled (type SX1257), center frequency 902600000, RSSI offset -166.000000, tx enabled 1, tx_notch_freq 0
     410INFO: radio 1 enabled (type SX1257), center frequency 903400000, RSSI offset -166.000000, tx enabled 0, tx_notch_freq 0
     411INFO: Lora multi-SF channel 0>  radio 0, IF -400000 Hz, 125 kHz bw, SF 7 to 12
     412INFO: Lora multi-SF channel 1>  radio 0, IF -200000 Hz, 125 kHz bw, SF 7 to 12
     413INFO: Lora multi-SF channel 2>  radio 0, IF 0 Hz, 125 kHz bw, SF 7 to 12
     414INFO: Lora multi-SF channel 3>  radio 0, IF 200000 Hz, 125 kHz bw, SF 7 to 12
     415INFO: Lora multi-SF channel 4>  radio 1, IF -300000 Hz, 125 kHz bw, SF 7 to 12
     416INFO: Lora multi-SF channel 5>  radio 1, IF -100000 Hz, 125 kHz bw, SF 7 to 12
     417INFO: Lora multi-SF channel 6>  radio 1, IF 100000 Hz, 125 kHz bw, SF 7 to 12
     418INFO: Lora multi-SF channel 7>  radio 1, IF 300000 Hz, 125 kHz bw, SF 7 to 12
     419INFO: Lora std channel> radio 0, IF 300000 Hz, 500000 Hz bw, SF 8
     420INFO: FSK channel 8 disabled
     421INFO: global_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters
     422INFO: gateway MAC address is configured to 00D012FFFEE1F102
     423INFO: server hostname or IP address is configured to "localhost"
     424INFO: upstream port is configured to "1700"
     425INFO: downstream port is configured to "1700"
     426INFO: downstream keep-alive interval is configured to 10 seconds
     427INFO: statistics display interval is configured to 30 seconds
     428INFO: upstream PUSH_DATA time-out is configured to 100 ms
     429INFO: packets received with a valid CRC will be forwarded
     430INFO: packets received with a CRC error will be forwarded
     431INFO: packets received with no CRC will NOT be forwarded
     432INFO: Auto-quit after 6 non-acknowledged PULL_DATA
     433INFO: found local configuration file local_conf.json, parsing it
     434INFO: redefined parameters will overwrite global parameters
     435INFO: local_conf.json does not contain a JSON object named SX1301_conf
     436INFO: local_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters
     437INFO: gateway MAC address is configured to 00D012FFFEE1F102
     438INFO: packets received with a valid CRC will be forwarded
     439INFO: packets received with a CRC error will be forwarded
     440INFO: packets received with no CRC will NOT be forwarded
     441INFO: [main] concentrator started, packet can now be received
     442
     443INFO: Disabling GPS mode for concentrator's counter...
     444INFO: host/sx1301 time offset=(1573244036s:715596µs) - drift=1811158092µs
     445INFO: Enabling GPS mode for concentrator's counter.
     446
     447
     448INFO: Received pkt from mote: 12345678 (fcnt=77)
     449
     450JSON 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="}]}
     451INFO: [down] PULL_ACK received in 4 ms
     452
     453INFO: Received pkt from mote: 12345678 (fcnt=78)
     454
     455JSON 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="}]}
     456INFO: [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
     475src/jitqueue.c:448:jit_print_queue(): INFO: [jit] queue is empty
     476### [GPS] ###
     477# GPS sync is disabled
     478##### END #####
     479
     480JSON up: {"stat":{"time":"2019-11-08 20:14:29 GMT","rxnb":2,"rxok":2,"rxfw":2,"ackr":50.0,"dwnb":0,"txnb":0}}
     481INFO: [up] PUSH_ACK received in 2 ms
     482INFO: [down] PULL_ACK received in 2 ms
     483INFO: [down] PULL_ACK received in 3 ms
     484
     485}}}
     486
     487Example lora-gateway-bridge output
     488{{{
     489root@bionic-armhf:~# lora-gateway-bridge -c /etc/lora-gateway-bridge/lora-gateway-bridge.toml
     490INFO[0000] starting LoRa Gateway Bridge                  docs="https://www.loraserver.io/lora-gateway-bridge/" version=3.3.0
     491INFO[0000] backend/semtechudp: starting gateway udp listener  addr="0.0.0.0:1700"
     492DEBU[0000] backend/semtechudp: cleanup gateway registry
     493INFO[0000] integration/mqtt: connected to mqtt broker   
     494DEBU[0001] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullData
     495DEBU[0001] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullACK
     496INFO[0001] integration/mqtt: subscribing to topic        qos=0 topic="devices/00d012fffee1f102/messages/devicebound/#"
     497DEBU[0006] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:50657" protocol_version=2 type=PushData
     498DEBU[0006] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:50657" protocol_version=2 type=PushACK
     499INFO[0006] integration/mqtt: publishing event            event=up qos=0 topic=devices/00d012fffee1f102/messages/events/up uplink_id=d0e63fa3-ede2-4850-b981-e239820a8434
     500DEBU[0011] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:50657" protocol_version=2 type=PushData
     501DEBU[0011] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:50657" protocol_version=2 type=PushACK
     502INFO[0011] integration/mqtt: publishing event            event=stats qos=0 stats_id=1af685eb-3e6d-4a1f-bf18-103c7619c7d1 topic=devices/00d012fffee1f102/messages/events/stats
     503DEBU[0011] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullData
     504DEBU[0011] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullACK
     505DEBU[0021] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullData
     506DEBU[0021] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullACK
     507DEBU[0032] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullData
     508DEBU[0032] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullACK
     509DEBU[0041] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:50657" protocol_version=2 type=PushData
     510DEBU[0041] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:50657" protocol_version=2 type=PushACK
     511INFO[0041] integration/mqtt: publishing event            event=stats qos=0 stats_id=9926a236-5ef0-41f5-968b-83eb80af1836 topic=devices/00d012fffee1f102/messages/events/stats
     512DEBU[0042] backend/semtechudp: received udp packet from gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullData
     513DEBU[0042] backend/semtechudp: sending udp packet to gateway  addr="127.0.0.1:53877" protocol_version=2 type=PullACK
     514
     515}}}
     516
     517Sample status on Azure platform for a sample packet:
     518Bridge log:
     519{{{
     520INFO[5322] integration/mqtt: publishing event            event=stats qos=0 stats_id=5c6c1e4f-ae87-4bf9-a18d-8b2c27646dbb topic=devices/00d012fffee1f102/messages/events/stats
     521
     522}}}
     523Azure 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
     544Sample data up on Azure for sample up packet:
     545
     546Bridge log:
     547{{{
     548INFO[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
     552Azure 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