akenza.io
Search…
MQTT
This page describes MQTT Connectivity in more detail
If a device communicates via MQTT with akenza, an MQTT connector has to be set up and assigned to a data flow.
After the creation of the MQTT device connector, a secret is generated which needs to be provided in the topic structure of the uplink request.
  • MQTT username: the device connector id
  • MQTT password: the device connector secret
  • MQTT topic: a topic with the following structure /up/<deviceConnectorSecret>/id/<deviceID>

Sending data with MQTT

uplink.py
import paho.mqtt.publish as publish
topic ="<copy from Akenza Device Api configuration>"
host = "mqtt.akenza.io"
mqtt_username = "<copy from Akenza Device Api configuration>"
mqtt_password = "<copy from Akenza Device Api configuration>"
payload = '{"foo":"bar"}'
publish.single(topic, payload, hostname=host, port=1883, auth={'username':mqtt_username, 'password':mqtt_password})
pip3 install paho-mqtt
python3 uplink.py
Subscribing to downlinks is possible by providing the following info:
  • MQTT username: the device connector id
  • MQTT password: the device connector secret
  • MQTT topic: a topic with the following structure /down/<deviceConnectorSecret>/id/<deviceID>
downlink.py
import paho.mqtt.client as mqtt
from paho.mqtt.client import error_string
host = "mqtt.akenza.io"
mqtt_username = "<copy from Akenza Device Api configuration>"
mqtt_password = "<copy from Akenza Device Api configuration>"
device_id= "<copy from Akenza Device Api configuration>"
topic = "/down/{0}/id/{1}/#".format(mqtt_password, device_id)
def on_connect(client, userdata, flags, rc): # The callback for when the client connects to the broker
print("Connected with result code {0}".format(error_string(rc)))
def on_message(client, userdata, message):
print("Received message '" + str(message.payload) + "' on topic '"
+ message.topic + "' with QoS " + str(message.qos))
def on_disconnect(client, userdata, rc):
print("Unexpected disconnection. " + error_string(rc))
if rc != 0:
print("Unexpected disconnection. " + error_string(rc))
client = mqtt.Client("mqtt-test-client")
client.username_pw_set(mqtt_username, mqtt_password)
client.on_message = on_message
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect(host, 1883)
client.subscribe(topic) # Subscribe to the topic, receive any messages published on it
client.loop_forever() # Start networking daemon
pip3 install paho-mqtt
python3 downlink.py
The downlink topic added in akenza will be appended to the topic subscribed to e.g. when providing "myTopic" the resulting downlink topic will look as follows: /down/{0}/id/{1}/myTopic.

Using TLS

akenza allows sending data using transport layer security (TLS). For this the port 8883 has to be used.
import paho.mqtt.publish as publish
topic ="<copy from Akenza Device Api configuration>"
host = "mqtt.akenza.io"
mqtt_username = "<copy from Akenza Device Api configuration>"
mqtt_password = "<copy from Akenza Device Api configuration>"
payload = '{"foo":"bar"}'
tls_config = {
"cert_reqs": ssl.CERT_REQUIRED,
"tls_version": ssl.PROTOCOL_TLSv1_2
}
publish.single(topic, payload, hostname=host, port=8883, tls = tls_config, auth={'username':mqtt_username, 'password':mqtt_password})
Refer to the paho-mqtt documentation for more information.
Why am I getting a certificate expired error?
Akenza is using an ISRG Root X1 root certificate provided by Let's Encrypt to sign certificates. If your device is older, it might not contain an up to date root certificate. Aquire the root certificate from here and update your trust store accordingly.
Copy link
On this page
Sending data with MQTT
Receiving Downlinks with MQTT
Using TLS