You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
# license removed for brevity
|
|
import rospy
|
|
from std_msgs.msg import String
|
|
import paho.mqtt.client as mqtt
|
|
import time
|
|
import numpy as np
|
|
from paho.mqtt.client import ssl
|
|
import sys
|
|
|
|
|
|
receiveMessanges = []
|
|
|
|
|
|
|
|
def initialise_clients(clientname, user, Password):
|
|
# callback assignment
|
|
initialise_client = mqtt.Client(clientname, False) # don't use clean session
|
|
initialise_client.username_pw_set(user, Password)
|
|
# initialise_client.tls_set(cert_reqs=ssl.CERT_NONE)
|
|
|
|
initialise_client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,
|
|
tls_version=ssl.PROTOCOL_TLS,
|
|
ciphers=None)
|
|
initialise_client.tls_insecure_set(True)
|
|
return initialise_client
|
|
|
|
def MQTT_Pub(pub_topic, msg, WaitForAck=True):
|
|
Pubmsg = f"Confirm Order: {msg}"
|
|
mid = client.publish(pub_topic, Pubmsg, qos=1)[1]
|
|
if WaitForAck:
|
|
if mid not in receiveMessanges:
|
|
print("wait ack")
|
|
# if status[1] == 15:
|
|
# client.disconnect()
|
|
# print(f"result:{status}")
|
|
# print(f"Send back the Order{status[1]} was already Confirm")
|
|
|
|
def on_connect(client, userdata, flags, rc):
|
|
print("Connected with result code " + str(rc))
|
|
MQTT_Pub(topic, "ack", True)
|
|
|
|
def on_disconnect(client, userdata, rc):
|
|
print("dissconnect")
|
|
|
|
def on_publish(self, userdata, mid):
|
|
print("ack")
|
|
receiveMessanges.append(mid)
|
|
|
|
|
|
|
|
|
|
# ROS
|
|
def chatter_callback(message):
|
|
#get_caller_id(): Get fully resolved name of local node
|
|
rospy.loginfo(rospy.get_caller_id() + "I heard %s", message.data)
|
|
MQTT_Pub(topic, message.data)
|
|
|
|
def listener():
|
|
|
|
# In ROS, nodes are uniquely named. If two nodes with the same
|
|
# node are launched, the previous one is kicked off. The
|
|
# anonymous=True flag means that rospy will choose a unique
|
|
# name for our 'listener' node so that multiple listeners can
|
|
# run simultaneously.
|
|
rospy.init_node('listener', anonymous=True)
|
|
|
|
rospy.Subscriber("phone_msg", String, chatter_callback)
|
|
|
|
# spin() simply keeps python from exiting until this node is stopped
|
|
rospy.spin()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
host = "mrf7613cpe6j8.messaging.solace.cloud"
|
|
port = 8883
|
|
username = "solace-cloud-client"
|
|
password = "rd9h3fudcut4j35fvu8938lq1rlab606"
|
|
topic = "mqtt/sub"
|
|
client = initialise_clients("client1", username, password)
|
|
client.connect(host, port, 60)
|
|
client.on_connect = on_connect
|
|
client.on_disconnect = on_disconnect
|
|
client.loop_start()
|
|
listener()
|