2016-05-24 15 views
0

Ich bin ein Student, der MQTT studiert haben.Wie kann ich eine Bilddatei mit Mosquitto in Python veröffentlichen und abonnieren?

Ich habe versucht, eine Bilddatei in einem Raspberry Pi mit Moskito zu senden. Diese

ist ein pub.py

import paho.mqtt.client as mqtt 

    def on_public(mosq, userdata, mid): 
     mosq.disconnect() 

    client = mqtt.Client() 
    client.connect("test.mosquitto.org", 1883, 60) 
    f=open("1.jpg", "rb") 
    fileContent = f.read() 
    byteArr = bytes(fileContent) 
    client.publish("image",byteArr,0) 
    client.loop(5) 

Und das ist ein sub.py

import paho.mqtt.client as mqtt 

    def on_public(client, userdata, rc): 
     print("Connect with result code " + str(rc)) 
     client.subscribe(“image”) 

    def on_public(client, userdata, msg): 
     print("Topic : " , msg.topic + "\n Image : " + byteArr 

    client = mqtt.Client() 
    client.on_connect = on_connect 
    client.on_message = on_message 
    client.connect("test.mosquitto.org", 1883, 60) 
    client.loop(20) 

Das Problem ist, ich nicht gut wissen konnte, wie kann ich das Bild zeichnen, die ich bereits pub .

Ich denke, die Logik ist in meinem Kopf zu finden, aber es funktioniert nicht.

Ich habe eine Vielzahl von Möglichkeiten versucht, wie mit write() oder etw so.

Es tut mir leid, wenn es nur eine grundlegende Codierung Fähigkeit ist, aber ich habe ein System mit MQTT, R-pi gemacht.

Bitte helfen Sie mir, ich brauche deine Hand.

Antwort

0

Unter normalen Umständen werden Nachrichten nur übermittelt, wenn der abonnierende Client verbunden ist und sich vor der Veröffentlichung der Nachricht registriert. (Für wie bei Nachrichten veröffentlicht erhalten, wenn der Teilnehmer wird getrennt Suche nach Persistent Abonnements)

Ihre Teilnehmer App sollte ungefähr so ​​aussehen:

import paho.mqtt.client as mqtt 

def on_connect(client, userdata, rc): 
    print("Connect with result code " + str(rc)) 
    client.subscribe(“image”) 

def on_message(client, userdata, msg): 
    print("Topic : " , msg.topic + "\n Image : " + msg.payload 

client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 
client.connect("test.mosquitto.org", 1883, 60) 
client.loop_forever() 

Die client.loop_forever() ist die wichtige Bit Teilnehmer Laufen zu halten und nicht nur für 5 Sekunden.

Dies wird die rohen Bytes auf die Konsole drucken, die nicht so nützlich sein wird. Um das Bild in eine Datei zu schreiben versuchen, so etwas wie diese

def on_message(client, userdata, msg) 
    f = open('/tmp/output.jpg', 'w') 
    f.write(msg.payload) 
    f.close() 

Dies würde schreiben, die Datei zu /tmp/output.jpg