将MQTT与PubNub一起使用

时间:2016-06-19 02:05:22

标签: mqtt pubnub

我正在尝试使用MQTT网关将MQTT消息发送到PubNub。我跟着this tutorial,但我无法让它发挥作用。

我写了4个程序:

  • MQTT订阅者
  • MQTT Publisher
  • PubNub订阅者
  • PubNub Publisher

我设法让两个PubNubs程序互相交谈。另外,我可以在MQTT订阅者程序上看到MQTT发布的消息。但是MQTTs程序和PubNubs程序似乎没有通信。

  • PubNub - > PubNub✔
  • MQTT - > MQTT✔
  • PubNub - > MQTT✘
  • MQTT - > PubNub✘

我不认为是代码问题。我用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'

2 个答案:

答案 0 :(得分:3)

弃用的答案

这个答案在当时是正确的,但截至2017年底,PubNub以与传统Pub / Sub基础相同的可扩展方式支持MQTT。

请参阅@adam

下面的答案

PubNub MQTT Bridge

我们已经通过PubNub MQTT桥识别并修复了该问题。如果你重试它应该工作,但回复到这里或PubNub支持,如果它仍然无法正常工作。

更新 - PUBNUB正式支持MQTT

PubNub已升级(替换)MQTT桥POC(用于测试的单个端点)以扩展实际项目,允许您将本机MQTT客户端直接连接到PubNub网络。

有关详细信息,请参阅New, Improved PubNub MQTT Support and IoT Capabilities或与PubNub Support联系。

答案 1 :(得分:0)

使用PubNub进行扩展的MQTT

我认为使用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检索该消息。

enter image description here