script python mqtt no raspberry pi para enviar e receber mensagens

Pergunta do MQTT:

Olá, estou tentando configurar uma rede MQTT entre vários Raspberry Pis (começando com dois). Eu tenho um cliente MQTT de raspberry pi (RPi-A), com um sensor termistor conectado e um cliente / broker de MQTT de framboesa (RPi-B), atuando como um hub para minha rede. Por meio de scripts python, gostaria que a temperatura fosse enviada a cada 30 minutos do RPi-A via MQTT para sensor / dados de tópico e recebido pelo RPi-B. Quando o RPi-B recebe uma mensagem do RPi-A por meio de sensor / dados de tópicos, desejo que ele responda com uma instrução via sensor / instruções de tópicos do MQTT para RPi-A. Abaixo está o meu script, até agora o RPi-A pode enviar mensagens e o RPi-B as recebe, mas não consigo descobrir como o RPi-B pode responder.

Basicamente, o que estou tentando entender é que é possível que um dispositivo MQTT atue como intermediário e cliente ao mesmo tempo? E, um cliente pode enviar e receber mensagens e, em caso afirmativo, como implementar todas as opções acima via python? Eu li muitos blogs, artigos oficiais do MQTT e a documentação do módulo paho (que para mim é muito difícil de entender), mas ainda não consigo descobrir isso. Sua ajuda seria muito útil / apreciada.

Código RPi-A (com sensor termistor):

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)

Código RPi-B (hub de rede):

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()

questionAnswers(1)

yourAnswerToTheQuestion