我正在尝试使用MQTT网关将MQTT消息发送到PubNub。我跟着this tutorial,但我无法让它发挥作用。
我写了4个程序:
我设法让两个PubNubs程序互相交谈。另外,我可以在MQTT订阅者程序上看到MQTT发布的消息。但是MQTTs程序和PubNubs程序似乎没有通信。
我不认为是代码问题。我用javascript,python和go编写应用程序。我还尝试了 mosquitto_pub 和 mosquitto_sub 客户端,但没有成功。
这是我对MQTT应用程序的配置:
publish_key = "my_pubkey"
subscribe_key = "my_subkey"
channel_name = "test"
client_uuid = "mqtt-pub"
mqtt_hostname = "mqtt.pubnub.com"
mqtt_id = publish_key + "/" + subscribe_key + "/" + client_uuid
mqtt_topic = publish_key + "/" + subscribe_key + "/" + channel_name
PubNubs客户端的配置:
publish_key = "my_pubkey"
subscribe_key = "my_subkey"
channel_name = publish_key + "/" + subscribe_key + "/" + "test"
client_uuid = "pubnub"
这就是我使用mosquitto_pub客户端的方式:
mosquitto_pub -h mqtt.pubnub.com -t 'my_pubkey/my_subkey/test' -i 'my_pubkey/my_subkey/mosquitto' -m 'Hello from mosquitto'
答案 0 :(得分:3)
这个答案在当时是正确的,但截至2017年底,PubNub以与传统Pub / Sub基础相同的可扩展方式支持MQTT。
请参阅@adam
下面的答案我们已经通过PubNub MQTT桥识别并修复了该问题。如果你重试它应该工作,但回复到这里或PubNub支持,如果它仍然无法正常工作。
PubNub已升级(替换)MQTT桥POC(用于测试的单个端点)以扩展实际项目,允许您将本机MQTT客户端直接连接到PubNub网络。
有关详细信息,请参阅New, Improved PubNub MQTT Support and IoT Capabilities或与PubNub Support联系。
答案 1 :(得分:0)
我认为使用Python和Mosquitto的方法不再适用。如果您想使用MQTT和PubNub,请使用Python和Paho尝试以下代码:
import paho.mqtt.client as mqtt
publish_key = "<your publish key>"
subscribe_key = "<your subscribe key>"
client_id = "<your unique client identifier>"
client = mqtt.Client(client_id=publish_key + "/" + subscribe_key + "/" + client_id)
client.connect("mqtt.pndsn.com", 1883, 60)
client.publish("<topic to publish>", json.dumps({ "hi": 10 }))
此代码的作用是将JSON数据发布到MQTT主题(PubNub术语中的通道)。
而不是&#34; hi = 10&#34;您可以发布适合您的方案的数据。我坚持要包含一个Unix时间戳,以便您知道数据何时提交。
您还可以使用PubNub standard publish with Python或任何其他语言(there's more than 70 SDKs)。
import time
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub
pnconfig = PNConfiguration()
pnconfig.publish_key = '<your publish key>'
pubnub = PubNub(pnconfig)
## makes a timetoken that is easily converted to
## a JavaScript date object in a web browser
javascript_timetoken = int(time.time() * 1000)
pubnub.publish().channel("my_channel").message({
'tt': javascript_timetoken,
'foo': 'bar'
}).sync()
现在该消息已发布,可以在Web浏览器中打开的仪表板中实时接收。如果在发布消息时仪表板未打开,则可以稍后使用PubNub storage and playback检索该消息。