I'm working on a Streamlit app with a real-time wordcloud dashboard. The data that will be used is from the Audio Classification app, whereas the prediction data is published in MQTTX. Now that the Audio Classification app and the MQTTX are already connected and the prediction data is already published in that client, I am having trouble getting the data from the MQTT. Here's the code that I created for the streamlit dashboard: import streamlit as st import wordcloud import matplotlib.pyplot as plt import paho.mqtt.client as mqtt import json broker = 'broker.emqx.io' port = 1883 topic = "audio_test" client_id = 'audio_test' username = 'emqx' password = 'public' def connect_mqtt() -> mqtt: def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %d\n", rc) # Set Connecting Client ID client = mqtt.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) client.loop_start() return client def get_data_from_mqtt(client: mqtt): # Callback when a message is published to the specified topic. def on_message(client, userdata, message): topic = message.topic payload = json.loads(message.payload.decode('utf-8')) time_stamp = payload['Timestamp'] category_name = payload['Classification'] score = payload['Accuracy'] st.write(f"Topic: {topic}\nTimestamp: {time_stamp}\nClassification: {category_name}\nAccuracy: {score}%") print(f"Received message from topic '{topic}'") client.subscribe(topic) client.on_message = on_message def create_wordcloud(text): wc = wordcloud.WordCloud(width=800, height=200, max_words=200, background_color='white').generate(text) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.tight_layout(pad=0) st.pyplot() def main(): st.set_page_config( page_title="Real-Time Audio Classification Dashboard", page_icon="", layout="wide", ) st.markdown("<h1 style='text-align: center; color: black;'> Real-Time Audio Classification Dashboard</h1>", unsafe_allow_html=True) client = connect_mqtt() get_data_from_mqtt(client) client.loop_forever() data = get_data_from_mqtt(client) text = ' '.join([d['Classification'] for d in data]) if len(data) == 0 or text == '': st.write("No data to display wordcloud") else: create_wordcloud(text) create_wordcloud(text) if __name__ == '__main__': main() Also, it doesn't print any text if the message has been received so I am assuming there's a problem with the connection between this dashboard and MQTTX This is the error that I've encountered: AttributeError: 'NoneType' object has no attribute 'recv' Traceback: File "C:\Users\mayew\Desktop\Audio Classification\venv\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 565, in _run_script exec(code, module.__dict__) File "C:\Users\mayew\Desktop\Audio Classification\Audio-Classification\testing.py", line 73, in <module> main() File "C:\Users\mayew\Desktop\Audio Classification\Audio-Classification\testing.py", line 61, in main client.loop_forever() File "C:\Users\mayew\Desktop\Audio Classification\venv\lib\site-packages\paho\mqtt\client.py", line 1756, in loop_forever rc = self._loop(timeout) File "C:\Users\mayew\Desktop\Audio Classification\venv\lib\site-packages\paho\mqtt\client.py", line 1164, in _loop rc = self.loop_read() File "C:\Users\mayew\Desktop\Audio Classification\venv\lib\site-packages\paho\mqtt\client.py", line 1556, in loop_read rc = self._packet_read() File "C:\Users\mayew\Desktop\Audio Classification\venv\lib\site-packages\paho\mqtt\client.py", line 2389, in _packet_read byte = self._sock_recv(1) File "C:\Users\mayew\Desktop\Audio Classification\venv\lib\site-packages\paho\mqtt\client.py", line 640, in _sock_recv return self._sock.recv(bufsize) Continue reading...