2016-03-09 35 views
1

我想使用Mosquitto和python將文件發佈到AWS IoT。我需要發佈的文件是位於本地目錄中的jpg文件。我擁有將數據發佈到物聯網所需的密鑰和訪問密鑰。我對編程非常陌生,不知道如何編寫這個程序。有人能幫助我嗎?我很抱歉,如果這是非常基本的東西。謝謝如何在Python中使用Mosquitto將文件發佈到AWS-IoT

我已經試過這個How can I publish a file using Mosquitto in python?並沒有爲我工作。

這就是我累的事情。

> #!/usr/bin/python 

import mosquitto import sys         
import ssl 
import paho.mqtt.client as mqtt 


f = open("data") 
imagestring = f.read() 
byteArray = bytes(imagestring) 
client.publish("photo", byteArray ,0) 

#called when a message is received by a topic 
def on_message(mqttc, obj, msg): 
print("Received message from topic: "+msg.topic+" | QoS: "+str(msg.qos)+"Data  Received: "+str(msg.payload)) 

#creating a client with client-id=mqtt-test 
mqttc = mqtt.Client(client_id="mqtt-test") 

mqttc.on_connect = on_connect 
mqttc.on_subscribe = on_subscribe 
mqttc.on_message = on_message 

#Configure network encryption 
mqttc.tls_set("/home/username/root-CA.crt", 
certfile="/home/username/6fdda68178-certificate.pem.crt", 
keyfile="/home/username/6fdda68178-private.pem.key", 
       tls_version=ssl.PROTOCOL_TLSv1_2, 
       ciphers=None) 

#connecting to aws-account-specific-iot-endpoint 
mqttc.connect("A2DL8ZE59089FKF.iot.us-west-2.amazonaws.com", port=8883) 


#the topic to publish to 
mqttc.subscribe("$aws/things/mqtt-listener/shadow/update/#", qos=1) 


#automatically handles reconnecting 
mqttc.loop_forever() 
+0

解釋如何指向例如,如果以任何方式還是修改 – hardillb

回答

3

看起來你在代碼中有些東西倒退了,或者至少很難理解。以下是將二進制文件上傳到AWS IOT的一些工作代碼示例。

#!/usr/bin/python 

import paho.mqtt.client as paho 
import os 
import socket 
import ssl 
from time import sleep 
from random import uniform 

connflag = False 

def on_connect(client, userdata, flags, rc): 
    global connflag 
    connflag = True 
    print("Connection returned result: " + str(rc)) 

mqttc = paho.Client() 
mqttc.on_connect = on_connect 

awshost = "YOURAWSHOST.iot.us-west-2.amazonaws.com" 
awsport = 8883 
caPath = "root-CA.crt" 
certPath = "YOURCERT.pem.crt" 
keyPath = "YOURKEY.pem.key" 

mqttc.tls_set(caPath, certfile=certPath, keyfile=keyPath, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None) 

mqttc.connect(awshost, awsport, keepalive=60) 

mqttc.loop_start() 
while 1==1: 
    sleep(0.5) 
    f = open('mybinaryfile') 
    imagestring = bytearray(f.read()) 
    f.close() 

    message = '"image": { "bytearray": "' + imagestring + '"} } ' 
    mqttc.publish("$aws/things/rpi/shadow/update", message, qos=1) 

請記住,您發佈的消息需要小 - 128KB是最大尺寸。如果您的圖像很大,則可能需要遍歷圖像並將其讀取到小於128KB(+開銷)的塊中,並將多個圖像上傳到AWS IOT以獲取每個圖像,直到您獲得完整的上傳。

-Ray

+0

@雷特里爾沒有工作,以及如何當我運行這段代碼它說,連接返回的結果:0。還沒有更新陰影。有什麼建議麼 ?我插入了我的圖像的路徑,它說f = open('mybinaryfile'),這是正確的方法嗎? –

相關問題