Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Can't get Join accept from Multitech gateway

    Scheduled Pinned Locked Moved LoPy
    multitech lopy
    15 Posts 4 Posters 1.1k Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • robert-hhR Offline
      robert-hh @tuanlinh1711
      last edited by robert-hh

      @tuanlinh1711 In which region are you? It seems to be us, but I cannot see the region setting, and the default is EU868. But then the frquency setting is inconsistent and should raise an error.
      Edit: which firmware version are you using?

      T 1 Reply Last reply Reply Quote 0
      • T Offline
        tuanlinh1711 @robert-hh
        last edited by tuanlinh1711

        @robert-hh
        Hi, my Region is US915. I did add it but it still failed to receive the Join accept
        edit:
        sys.version
        '3.4.0'
        sys.platform
        'FiPy'

        robert-hhR 1 Reply Last reply Reply Quote 0
        • robert-hhR Offline
          robert-hh @tuanlinh1711
          last edited by

          @tuanlinh1711 What is the result, when you push Ctrl-B in REPL or type:
          import uos
          uos.uname()

          T 1 Reply Last reply Reply Quote 0
          • T Offline
            tuanlinh1711 @robert-hh
            last edited by

            @robert-hh
            Hi, This is the result
            (sysname='FiPy', nodename='FiPy', release='1.18.1.r10', version='v1.8.6-849-d53c7f3 on 2019-01-10', machine='FiPy with ESP32', lorawan='1.0.2', sigfox='1.0.1', pybytes='0.9.5')
            Thank you

            1 Reply Last reply Reply Quote 0
            • M Offline
              misterlisty
              last edited by robert-hh

              try the code below..it works for me on Multitech Conduit

              from network import LoRa
              import socket
              import time
              import ubinascii
              
              # Initialise LoRa in LORAWAN mode.
              # Please pick the region that matches where you are using the device:
              # Asia = LoRa.AS923
              # Australia = LoRa.AU915
              # Europe = LoRa.EU868
              # United States = LoRa.US915
              lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.AU915)
              
              # create an OTAA authentication parameters
              app_eui = ubinascii.unhexlify('xxxx')
              app_key = ubinascii.unhexlify('xxxx')
              
              # join a network using OTAA (Over the Air Activation)
              lora.join(activation=LoRa.OTAA, auth=(app_eui, app_key), timeout=0)
              
              # wait until the module has joined the network
              while not lora.has_joined():
                  time.sleep(2.5)
                  print('Not yet joined...')
              
              # create a LoRa socket
              s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
              
              
              
              # # selecting confirmed type of messages
              # s.setsockopt(socket.SOL_LORA, socket.SO_CONFIRMED, True)
              
              # set the LoRaWAN data rate
              print('set the LoRaWAN data rate')
              s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)
              
              print('coding_rate..')
              cr=lora.coding_rate()
              print(cr)
              # make the socket blocking
              # (waits for the data to be sent and for the 2 receive windows to expire)
              s.setblocking(True)
              
              # send some data
              s.send(bytes([0x01, 0x02, 0x03]))
              
              s.setblocking(False)
              #lmsg = ubinascii.unhexlify('Hello Lora')
              for counter in range(1,100):
                  time.sleep(30)
                  #sum = sum + counter
                  s.send("hi LoRa #" + str(counter))
                  print("hi LoRa #" + str(counter))    
                  # get any data received (if any...)
                  data = s.recv(64)
                  print(data)
              
              
              
              # # make the socket non-blocking
              # # (because if there's no data received it will block forever...)
              # s.setblocking(False)
              
              # # get any data received (if any...)
              # data = s.recv(64)
              # print(data)
              
              T 1 Reply Last reply Reply Quote 0
              • T Offline
                tuanlinh1711 @misterlisty
                last edited by

                @misterlisty
                Hi
                Thank you for your help but I used that code before and it couldn't even send the join request.

                1 Reply Last reply Reply Quote 0
                • J Offline
                  jcaron
                  last edited by

                  @tuanlinh1711 Can you post your gateway and LNS configuration?

                  Have you tried other sub-bands to see if the result is different?

                  T 1 Reply Last reply Reply Quote 0
                  • T Offline
                    tuanlinh1711 @jcaron
                    last edited by

                    @jcaron
                    Hi,
                    Here are my gateway configuration:
                    0_1547754595133_Linh_1.PNG
                    Key management:
                    0_1547754626824_Linh_2.PNG
                    Console:
                    0_1547754637442_Linh_3.PNG
                    The gateway is under another project right now so all I can do is try to connect to it with the given configuration by using Pycom module

                    J 1 Reply Last reply Reply Quote 0
                    • J Offline
                      jcaron @tuanlinh1711
                      last edited by

                      @tuanlinh1711 There's something weird in your logs... All join accepts are sent on the 926.9 MHz frequency at SF10 BW500 (DR10), whatever the incoming channel.

                      My understanding of the LoRaWAN spec is that for US915, downlinks (including join accepts) should be sent either:

                      • in RX1 on a channel that depends on the incoming channel number and a data rate that depends on the incoming data rate and RX1DROffset,
                      • or on RX2 on the 923.3 MHz channel at DR8 (though this is overridden in your config)

                      So it's definitely not RX2 (not the right channel, not the right data rate), so it must be RX1.

                      But then we should have:

                      • request on 912.3 = uplink channel 50 -> downlink channel 2 = 924.5 MHz
                      • request on 912.7 = uplink channel 52 -> downlink channel 4 = 925.7 MHz
                      • request on 911.9 = uplink channel 48 -> downlink channel 0 = 923.3 MHz
                      • request on 912.9 = uplink channel 53 -> downlink channel 5 = 926.3 MHz

                      Instead, it's always sending on 926.9, which is channel 6.

                      I don't see anything if the settings screens shown which would set this, maybe somewhere in the Advanced Settings?

                      Also, two other points:

                      • the LoPy should cycle through the various channels, so you should at some point end up sending the join request on an uplink channel (54) that results in the LoPy listening on channel 6 and receiving the join accept.
                      • your log shows only a few join requests spaced apart quite a lot. The LoPy should be retrying and sending join requests at regular intervals (don't remember off the top of my head, but something like every 15 seconds I believe), so you should have many more requests in your logs.

                      You can try to enable only channel 54 to see if you get things through, but there's something fishy...

                      T 2 Replies Last reply Reply Quote 0
                      • T Offline
                        tuanlinh1711 @jcaron
                        last edited by

                        @jcaron
                        Hi

                        Thank you for your time. I tried to join the network with the end device from Multitech and it worked just fine. The gateway will always send the response at 926MHz but the Multitech End Device will get the response but not the Lopy. I'll talk to the engineer who in charges of the gateway and see what can I do about it and update as soon as possible

                        Thank you for your response

                        1 Reply Last reply Reply Quote 0
                        • T Offline
                          tuanlinh1711 @jcaron
                          last edited by

                          @jcaron
                          Hi
                          I went through the Xdot document and I found out that if I choose the channel 7 uplink, it'll always send the downlink reply in 926.9 MHz as I attached below
                          0_1548171087691_49855669_302966413897634_4643910513804181504_n.jpg

                          I left the Lopy untouched for at least 15 minutes and it tried about 3 times in 9 minutes and that's pretty much it.
                          I don't know what did I do wrong with the Lopy but it seems like it's more likely to be my configuration ...

                          J 1 Reply Last reply Reply Quote 0
                          • J Offline
                            jcaron @tuanlinh1711
                            last edited by

                            @tuanlinh1711 Be are that the channel numbering in that table is not the official LoRaWAN numbering, nor that used in your code: it starts at 1 instead of 0. Also those channels are for sub-band 0, when your gateway is listening on sub-band 7.

                            As I wrote previously, you should try enabling only channel 54, that should make the LoPy listen on the downlink channel the gateway is sending on:

                               for channel in range(0, 72):
                                    lora.remove_channel(channel)
                                
                                channel = 54
                                lora.add_channel(channel, frequency=902300000+channel*200000, dr_min=0, dr_max=3)
                            

                            Don't know if the settings for US915 are any different from EU868 in that respect, but joins repeated every 3 minutes does not seem quite right, you're most probably just seeing only part of them because they are sent on channels the gateway is not listening on.

                            T 1 Reply Last reply Reply Quote 0
                            • T Offline
                              tuanlinh1711 @jcaron
                              last edited by

                              @jcaron
                              Hi
                              I did remove all other channels and enable channel 54 only but it couldn't join the network.
                              This is my code:

                              from network import LoRa
                              import socket
                              import time
                              import binascii
                              import utime
                              import pycom
                              import ubinascii
                              
                              pycom.rgbled(0x007f00) # green
                              
                              def select_subband(lora, subband):
                                  if (type(subband) is int):
                                      if ((subband<1) or (subband>8)):
                                          raise ValueError("subband out of range (1-8)")
                                  else:
                                      raise TypeError("subband must be 1-8")
                                  
                                  for channel in range(0, 72):
                                      lora.remove_channel(channel)
                                  
                                  for channel in range((subband-1)*8, ((subband-1)*8)+8):
                                      lora.add_channel(channel, frequency=902300000+channel*200000, dr_min=0, dr_max=4)
                              
                              lora = LoRa(mode=LoRa.LORAWAN, adr=True, sf=10, coding_rate=1,power_mode = LoRa.ALWAYS_ON,frequency =926900000,bandwidth = LoRa.BW_125KHZ,tx_power = 14, public=False, tx_retries=2,device_class = LoRa.CLASS_A,region=LoRa.US915 )
                              
                              sb = 7 #Change to desired conduit frequency sub-band
                              
                              #select_subband(lora,7) 
                              for channel in range(0, 72):
                                      lora.remove_channel(channel)
                              lora.add_channel(54, frequency=902300000+channel*200000, dr_min=0, dr_max=4)
                              # assign your AppEUI, AppKey, DevEUI
                              app_eui = binascii.unhexlify('ff ff ba 78 20 0c c2 ee'.replace(' ','')) 
                              app_key = binascii.unhexlify('12 67 ad a4 da e3 ac 12 67 6b ad da e3 ac ff ff'.replace(' ',''))
                              #dev_eui = binascii.unhexlify ('70 b3 d5 49 94 54 a0 8f'.replace(' ',''))  
                              #app_eui = ubinascii.unhexlify('19526023')
                              #app_key = ubinascii.unhexlify('19526023')
                              # create an OTAA authentication (DevEUI, AppEUI, AppKey)
                              #auth =(dev_eui, app_eui, app_key)
                              
                              # create an OTAA authentication (AppEUI, AppKey)
                              auth=(app_eui, app_key)
                              
                              # join a network using OTAA (Over the Air Activation)
                              lora.join(activation=LoRa.OTAA, auth=auth, timeout=0,dr =0 )
                              
                              print("Joining...")
                              
                              while not lora.has_joined():
                                  print('Not joined yet...')
                                  pycom.rgbled(0x00)
                                  time.sleep(0.1)
                                  pycom.rgbled(0xFF0000)
                                  time.sleep(2)
                                  #print('Not yet joined on frequency sub-band '+str(sb)+'...')
                              print('joined')
                              

                              The gateway did send back the Join Accept

                              1 Reply Last reply Reply Quote 0
                              • T Offline
                                tuanlinh1711
                                last edited by

                                Hi everyone

                                I figured it out that the Gateway is using "MTS Private " network which is Multitech's proprietary Lora network for their product. I switched back to LoraWAN Private and it worked just fine.

                                Thank you for your help

                                1 Reply Last reply Reply Quote 2

                                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                With your input, this post could be even better 💗

                                Register Login
                                • 1 / 1
                                • First post
                                  Last post

                                Pycom on Twitter

                                Pycom