Python mqtt script auf himbeer pi zu senden und zu empfangen meldungen

MQTT Frage:

Hallo, ich versuche, ein MQTT Netzwerk zwischen mehreren Raspberry Pis (beginnend mit zwei) einzurichten. Ich habe eine Himbeer-Pi (RPi-A), MQTT-Client, mit einem Thermistor-Sensor befestigt und eine Himbeere (RPi-B), MQTT Broker / Client, als Drehscheibe für mein Netzwerk. Durch Python-Scripting möchte ich die Temperatur alle 30 Minuten von RPi-A über MQTT an Thema Sensor / Daten gesendet und erhalten von RPi-B. Wenn RPi-B eine Nachricht von RPi-A über Themensensor / Daten empfängt, möchte ich mit einer Anweisung über MQTT Themensensor / Anleitung an RPi-A antworten. Unten ist mein Skript, so weit kann RPi-A Nachrichten senden und RPi-B erhalten sie aber ich kann nicht herausfinden, wie RPi-B reagieren kann.

Grundsätzlich, was ich versuche zu verstehen ist, ist es möglich, dass ein MQTT-Gerät gleichzeitig als Broker und Klient fungiert? Und kann ein Client sowohl senden und empfangen Nachrichten und wenn ja, wie man alle oben über Python zu implementieren? Ich habe viele Blogs gelesen, offizielle MQTT Artikel und die Paho Modul Dokumentation (die für mich ist sehr schwer zu ergründen), aber immer noch nicht herausfinden können. Ihre Hilfe wäre am nützlichsten / geschätzt.

Code RPi-A (mit Thermistor-Sensor):

from sense_hat import SenseHat import time import paho.mqtt.client as mqtt import paho.mqtt.publish as publish sense = SenseHat() Broker = "192.168.1.252" sub_topic = "sensor/instructions" # receive messages on this topic pub_topic = "sensor/data" # send messages to this topic ############### sensehat inputs ################## def read_temp(): t = sense.get_temperature() t = round(t) return t def read_humidity(): h = sense.get_humidity() h = round(h) return h def read_pressure(): p = sense.get_pressure() p = round(p) return p def display_sensehat(message): sense.show_message(message) time.sleep(10) ############### MQTT section ################## # when connecting to mqtt do this; def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe(sub_topic) # when receiving a mqtt message do this; def on_message(client, userdata, msg): message = str(msg.payload) print(msg.topic+" "+message) display_sensehat(message) def publish_mqtt(sensor_data): mqttc = mqtt.Client("python_pub") mqttc.connect(Broker, 1883) mqttc.publish(pub_topic, sensor_data) #mqttc.loop(2) //timeout = 2s def on_publish(mosq, obj, mid): print("mid: " + str(mid)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect(Broker, 1883, 60) while True: sensor_data = [read_temp(), read_humidity(), read_pressure()] publish.single("monto/solar/sensors", str(sensor_data), hostname = Broker) time.sleep(1*60) 

Code RPi-B (Netzwerk-Hub):

 import time import paho.mqtt.client as mqtt import paho.mqtt.publish as publish Broker = "192.168.1.252" sub_topic = "sensor/data" # receive messages on this topic pub_topic = "sensor/instructions" # send messages to this topic # mqtt section # when connecting to mqtt do this; def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe(sub_topic) # when receiving a mqtt message do this; def on_message(client, userdata, msg): message = str(msg.payload) print(msg.topic+" "+message) publish_mqtt('got your message') # to send a message def publish_mqtt(sensor_data): mqttc = mqtt.Client("monto_hub") mqttc.connect(Broker, 1883) mqttc.publish(pub_topic, "this is the master speaking") #mqttc.loop(2) //timeout = 2s def on_publish(mosq, obj, mid): print("mid: " + str(mid)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect(Broker, 1883, 60) client.loop_forever() 

    One Solution collect form web for “Python mqtt script auf himbeer pi zu senden und zu empfangen meldungen”

    Der einfachste Weg ist, die Netzwerkschleife auf einem separaten Thread mit der client.loop_start() Funktion zu starten, dann benutze die normale client.publish Methode

     from sense_hat import SenseHat import time import paho.mqtt.client as mqtt import paho.mqtt.publish as publish sense = SenseHat() Broker = "192.168.1.252" sub_topic = "sensor/instructions" # receive messages on this topic pub_topic = "sensor/data" # send messages to this topic ############### sensehat inputs ################## def read_temp(): t = sense.get_temperature() t = round(t) return t def read_humidity(): h = sense.get_humidity() h = round(h) return h def read_pressure(): p = sense.get_pressure() p = round(p) return p def display_sensehat(message): sense.show_message(message) time.sleep(10) ############### MQTT section ################## # when connecting to mqtt do this; def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe(sub_topic) # when receiving a mqtt message do this; def on_message(client, userdata, msg): message = str(msg.payload) print(msg.topic+" "+message) display_sensehat(message) def on_publish(mosq, obj, mid): print("mid: " + str(mid)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect(Broker, 1883, 60) client.loop_start() while True: sensor_data = [read_temp(), read_humidity(), read_pressure()] client.publish("monto/solar/sensors", str(sensor_data)) time.sleep(1*60) 
    Python ist die beste Programmiersprache der Welt.