B4R Question Error subscribing to MQTT topic on io.adafruit.com

bdunkleysmith

Active Member
Licensed User
Longtime User
Due to issues documented here I chose an alternative method for a Google Assistant driven IR remote control project I'm working on. The method uses MQTT based on this article and utilizes Adafruit IO to provide the MQTT Broker service.

However I am encountering a problem subscribing to the topic (feed) on Adafruit IO.

Here is the relevant section of my code:

B4X:
Sub ConnectToBroker(unused As Byte)
    If mqtt.Connect = False Then       
        Dim mo As MqttConnectOptions
        mo.Initialize(MQTT_NAME, MQTT_PASS)
        mqtt.Connect2(mo)
        Log("Trying to connect again")
        CallSubPlus("ConnectToBroker", 1000, 0)
        Return
    End If
    Log("Connected to broker")
    mqtt.Subscribe("bryond/feeds/channel", 0)
End Sub

Sub Mqtt_MessageArrived (Topic As String, Payload() As Byte)
    Log("Message arrived. Topic=", Topic, " payload: ", Payload)       
End Sub

The resultant log is:

B4X:
Connected to broker
Message arrived. Topic=anon/errors payload: "subscription to bryond/feeds/channel failed: not available"

However the "channel" topic (feed) is available and if I subscribe using a wildcard via the following code:

B4X:
Sub ConnectToBroker(unused As Byte)
    If mqtt.Connect = False Then       
        Dim mo As MqttConnectOptions
        mo.Initialize(MQTT_NAME, MQTT_PASS)
        mqtt.Connect2(mo)
        Log("Trying to connect again")
        CallSubPlus("ConnectToBroker", 1000, 0)
        Return
    End If
    Log("Connected to broker")
    mqtt.Subscribe("bryond/feeds/#", 0)
End Sub

The resultant log does not show a subscription error and on changing the channel topic value it shows those values are received OK, but in the multiple formats provided by Adafruit IO:

B4X:
Connected to broker
Message arrived. Topic=bryond/feeds/channel payload: 200
Message arrived. Topic=bryond/feeds/channel/csv payload: 200,,,
Message arrived. Topic=bryond/feeds/963213 payload: 200
Message arrived. Topic=bryond/feeds/963213/csv payload: 200,,,
Message arrived. Topic=bryond/feeds/channel payload: 201
Message arrived. Topic=bryond/feeds/channel/csv payload: 201,,,
Message arrived. Topic=bryond/feeds/963213 payload: 201
Message arrived. Topic=bryond/feeds/963213/csv payload: 201,,,

Of course I can filter the received messages to extract just the data I require, but looking forward to when I may have multiple topics (feeds), it would be preferable to subscribe specifically to the desired topic (feed).

Incidentally while the MQTT API Documentation suggests using "+" in lieu of "#" as a wildcard would eliminate the /csv feed, when trying that I received a subscription error:

B4X:
Message arrived. Topic=anon/errors payload: "subscription to bryond/feeds/+ failed: not available"

Has anyone had experience subscribing to topics (feeds) on Adafruit IO and if so, what syntax did you find allowed subscription to the desired topic (feed)?
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…