FiPy not connecting to MQTT with LTE CatM1
-
Hello,
I am having trouble getting the FiPy to send messages via LTE Cat-M1. I have update the sequans, and the latest firmware for the FiPy.
According to lte.isattached and lte.isconnected everything is True.
When connecting by Wifi the MQTT message send no problems.
I have checked to make sure I have data on the SIM.The code I have eventually returns:
Traceback (most recent call last): File "main.py", line 42, in <module> File "mqtt.py", line 84, in connect IndexError: bytes index out of range
My mqtt.py code is from the pycom github unchanged.
My main.py is:import machine import network import os import time import socket import ssl import pycom from network import LTE from mqtt import MQTTClient def sub_cb(topic, msg): print(msg) # setup as a station lte = LTE() print("Line 15") lte.send_at_cmd('AT+CFUN=0') lte.send_at_cmd('AT!="clearscanconfig"') lte.send_at_cmd('AT!="addscanfreq band=28 dl-earfcn=9410"') lte.send_at_cmd('AT+CGDCONT=1, "IP", "telstra.internet"') lte.send_at_cmd('AT+CEMODE=0') lte.send_at_cmd('AT+CEREG=2') lte.send_at_cmd('AT+CFUN=1') while not lte.isattached(): print("Attaching...") time.sleep(0.1) print("Attached") lte.connect() while not lte.isconnected(): print("Connecting...") time.sleep(0.1) print("Connected!") time.sleep(2) print(lte.isconnected()) client = MQTTClient("Demo","io.adafruit.com",user="Dylan", password="xxxx", port=1883) print("Line 38") print(lte.isconnected()) client.set_callback(sub_cb) print("Line 41") client.connect() print("Line 43") time.sleep(3) client.subscribe(topic="Dylan/feeds/mqtt") print("Line 46") while True: print("Sending ON") client.publish(topic="Dylan/feeds/mqtt", msg="ON") print("Line 51") time.sleep(1) print("Sending OFF") client.publish(topic="Dylan/feeds/mqtt", msg="OFF") print("Line 55") client.check_msg() time.sleep(1)
Any help would be greatly appreciated,
Cheers
-
@dylan Hi Dylan. I am using MQTT constantlty over CAT-M1 on Telstra.
I am only using.
lte.send_at_cmd('AT+CGDCONT=1,"IP","telstra.internet"') lte.send_at_cmd("AT!=\"RRC::addscanfreq band=28 dl-earfcn=9410\"") lte.send_at_cmd('AT+CFUN=1')
And have not had to resort to the additional AT commands you are using.
I have also found the reset the modem if I have lost the connection and am reconnecting without a power cycle.lte.send_at_cmd('AT^RESET')
Other than that its working very reliably for me.
I am not using
mqtt
but using the AWS client (not to connect to AWS) as I need TLS with certificate support.
We use Losant. They do support port 1883.T
-
@jmarcelino Gave the same error :(
-
@dylan
Can you try editing mqtt.py and addingself.sock.setBlocking(True)
after line 55
self.sock = socket.socket()