Hi Everyone, I'm a novice when it comes to programming and i'm trying to figure out why my weather data is not loading into my channel. I've had the code working previously before thingspeak went from MQTT to MQTT3. I'm having issues around the publish.single(). import subprocess import paho.mqtt.publish as publish import psutil import string import json from statistics import median from pms5003 import PMS5003 #weather_iot import requests import time from datetime import datetime from csv import writer import math import paho.mqtt.publish as publish #Thingspeak channel and MQQT protocol mqtt_client_ID = "detail removed" mqtt_username = "detail removed" mqtt_password = "detail removed" channelID = "detail removed" apiKey = "detail removed" topic = "channels/" + channelID + "/publish/" mqttHost = "mqtt3.thingspeak.com" tTransport = "websockets" useSSLWebsockets = False tTLS = None tPort = 80 def csv(): List=[now, Temperature1, IAQ1, Pressure1, Humidity1, PM1_0, PM2_5, PM10] with open('Weather.csv', 'a') as f_object: writer_object = writer(f_object) writer_object.writerow(List) f_object.close() return #PM sensor configuration pms5003 = PMS5003( device='/dev/ttyAMA0', baudrate=9600, pin_enable=22, pin_reset=27 ) #Open C File proc = subprocess.Popen(['./bsec_bme680'], stdout=subprocess.PIPE) listIAQ_Accuracy = [ ] listPressure = [ ] listGas = [ ] listTemperature = [ ] listIAQ = [ ] listHumidity = [ ] listStatus = [ ] for line in iter(proc.stdout.readline, ''): lineJSON = json.loads(line.decode("utf-8")) # process line-by-line lineDict = dict(lineJSON) listIAQ_Accuracy.append(int(lineDict['IAQ_Accuracy'])) listPressure.append(float(lineDict['Pressure'])) listGas.append(int(lineDict['Gas'])) listTemperature.append(float(lineDict['Temperature'])) listIAQ.append(float(lineDict['IAQ'])) listHumidity.append(float(lineDict['Humidity'])) listStatus.append(int(lineDict['Status'])) if len(listIAQ_Accuracy) == 20: #generate the median for each value IAQ_Accuracy = median(listIAQ_Accuracy) Pressure = median(listPressure) Gas = median(listGas) Temperature = median(listTemperature) IAQ = median(listIAQ) Humidity = median(listHumidity) Status = median(listStatus) #clear lists listIAQ_Accuracy.clear() listPressure.clear() listGas.clear() listTemperature.clear() listIAQ.clear() listHumidity.clear() listStatus.clear() #Temperature Offset Temperature = Temperature + 2 IAQ1 = round(IAQ,1) Temperature1 = round(Temperature, 1) Humidity1 = round(Humidity, 1) Pressure1 = round(Pressure, 1) data = pms5003.read() if Humidity1 < 80: CF = 1 else: CF = (Humidity1/100)*1.3 PM1_0 = format(data.pm_ug_per_m3(1.0)) PM2_5 = format(data.pm_ug_per_m3(2.5)) PM10 = format(data.pm_ug_per_m3(10)) PM1_0 = round(int(PM1_0) / CF,) PM2_5 = round((int(PM2_5)/CF/25) * 100,) PM10 = round((int(PM10)/CF/50) * 100,) now = datetime.now() tPayload = "field1=" + str(Temperature1)+ "&field2=" + str(IAQ1)+ "&field3=" + str(Pressure1)+ "&field4=" + str(Humidity1)+ "&field5=" + str(PM1_0)+ "&field6=" + str(PM2_5)+ "&field7=" + str(PM10) try: print ("[INFO] Data prepared to be uploaded") publish.single(topic, payload=tPayload, hostname=mqttHost, transport=tTransport, port=tPort, tls=tTLS, client_id=mqtt_client_ID, auth={'username':mqtt_username,'password':mqtt_password}) print ("[INFO] Data sent for 7 fields: ", Temperature1, IAQ1, Pressure1, Humidity1, PM1_0, PM2_5, PM10) except (KeyboardInterrupt): break except: print ("[INFO] Failure in sending data") csv() Raspberry Pi Weather Station MQTT Can you publish successfully from a desktop app like mqttx or MATLAB? Make sure you have added the permissions for the device to write to the correct channel. What error do you see? Hi Chris, I don't receive any errors. I tried connecting using my creddentials in MQTTX using port 80 and it didn't establish a connection. If I change this to port 1883 it establishes a connection. I only have one channel setup so the details should be correct. Does this part of the program look correct to you? mqtt_client_ID = "detail removed" #same as mqtt_username mqtt_username = "detail removed" mqtt_password = "detail removed" channelID = "detail removed" apiKey = "detail removed" topic = "channels/" + channelID + "/publish/" mqttHost = "mqtt3.thingspeak.com" tTransport = "websockets" useSSLWebsockets = False tTLS = None tPort = 80 publish.single(topic, payload=tPayload, hostname=mqttHost, transport=tTransport, port=tPort, tls=tTLS, client_id=mqtt_client_ID, auth={'username':mqtt_username,'password':mqtt_password}) it looks very similar to the code I tested that is in our doc example. To make sure you have the permissions for the device correct, I would try using mqttx, or MATLAB to publish to the channel. You need to specifically allow an MQTT device to publish to a channel. python mqtt