import paho.mqtt.client as mqtt from time import sleep, time import csv studentGroup_name = 'StudentGroup_X' # Assign client ID mqtt_client_id = studentGroup_name mqtt_base_topic = 'testtopic/7ZW5M0/' + mqtt_client_id # MQTT broker/server parameters mqtt_host_address_1 = 'broker.hivemq.com' mqtt_host_port_1 = 1883 #defines name of the .csv file of the data output output_filename = studentGroup_name + str(time()) + '_output.txt' #open file for appending (read&write) csv_file_1 = open(output_filename, 'a+') header = ("Timestamp","Topic","Message") csv_file_1.write(';'.join(header) + '\n') # Join all data into one string separated by ; (as required for CSV) and finish the line using '\n' csv_file_1.close() # data to be written to csv mqtt_host_address_2 = 'test.mosquitto.org' mqtt_host_port_2 = 1883 # Global variable to save latest received message latest_mesage_payload = '' latest_mesage_topic = '' def on_connect(): print("MQTT successfully connected!") def on_dissconnect(): print("Client disconnected form the MQTT broker!") def on_message(client, userdata, message): print("Received message '" + str(message.payload) + "' on topic '" + message.topic + "' with QoS " + str(message.qos)) # Save message content in a global variable global latest_mesage_payload, latest_mesage_topic latest_mesage_payload = message.payload latest_mesage_topic = message.topic #write message toppica and payload into CSV file global csv_file_1 data = [str(time()), str(message.topic), str(message.payload)] #add all data into array of strings # open file for appending (read&write) csv_file_1 = open(output_filename, 'a+') csv_file_1.write(';'.join(data) + '\n') csv_file_1.close() # Create Client client = mqtt.Client(client_id = mqtt_client_id) # Start runnig the network loop in a paralel thread in regular intervals mqtt.loop_start() while True: # Try to connect to a broker and subscribe to the topic(s) try: # Assign on_connect/on_disconnect function to a Client client.on_connect = on_connect client.on_disconnect = on_dissconnect # Connect Client client.connect(host = mqtt_host_address_1, port = mqtt_host_port_1) break #exit the loop if no error in connection except: # In case error occured in connecting print("An error occurred in connection") sleep(2) # wait 2 seconds # print ("Trying again!") try: # Subscribe Client to a topic client.subscribe(mqtt_base_topic + '/#') # Assign on_message function to a Client client.on_message = on_message except: print("An error occurred while trying to subscribe to a topic") # Main part of the script for publishing while True: try: msg = time() client.publish(topic = mqtt_base_topic+'/time', payload = msg) # Run mqtt network loop - this will try to send/receive all client.loop() except: print("An error occurred while trying to publish to a topic!") # print("Trying again!") sleep(2) # Stop runnig the network loop in a paralel thread in regular intervals mqtt.loop_stop() # This part of code is in regular circumstances unreachable!