import paho.mqtt.client as mqtt
import json
import threading
MQTT_BROKER = "thingsboard.sysats.tech"
NODE_1_TOKEN = "rg6k7jyrX31SB36fgH9i"
NODE_2_TOKEN = "fvKy9HtlofCPIE32VNKm"
node_1_info = {
"name": 1,
"gpio_status": {
1: 0 # We assume that all GPIOs are LOW
}
}
node_2_info = {
"name": 2,
"gpio_status": {
1: 0 # We assume that all GPIOs are LOW
}
}
node_1 = mqtt.Client("NODE 1 MQTT ID")
node_2 = mqtt.Client("NODE 2 MQTT ID")
def on_connect(client, userdata, flags, rc):
if rc==0:
print("connected OK") #print out when connect sucessfully
else:
print("bad connection")
#Must put those 2 functions inside on_connect() callback function
client.subscribe("v1/devices/me/rpc/request/+")
client.publish("v1/devices/me/attributes", get_gpio_status(userdata['gpio_status']))
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print("Node " + str(userdata['name']) + "; Received message: " + str(msg.topic)+ " " +str(msg.payload.decode()))
data = json.loads(msg.payload)
set_gpio_status(userdata['gpio_status'], data['params']['pin'], data['params']['enabled'])
client.publish(msg.topic.replace('request', 'response'), get_gpio_status(userdata['gpio_status']))
client.publish("v1/devices/me/attributes", get_gpio_status(userdata['gpio_status']))
def set_gpio_status(node_gpio_state, pin, status):
node_gpio_state[pin] = status
def get_gpio_status(node_gpio_state):
return json.dumps(node_gpio_state)
def node_initialize(node, token, node_info):
node.username_pw_set(token)
node.on_connect = on_connect
node.on_message = on_message
node.user_data_set(node_info)
node.connect(MQTT_BROKER, 1883)
node.loop_forever()
node_thread_1 = threading.Thread(target=node_initialize, args = (node_1, NODE_1_TOKEN, node_1_info))
node_thread_2 = threading.Thread(target=node_initialize, args = (node_2, NODE_2_TOKEN, node_2_info))
node_thread_1.start()
node_thread_2.start()
node_thread_1.join()
node_thread_2.join()