将 MQTT 与 PubNub 结合使用
Using MQTT with PubNub
我正在尝试使用 MQTT 网关将 MQTT 消息发送到 PubNub。我关注了 this tutorial,但我无法正常使用它。
我写了4个程序:
- MQTT 订阅者
- MQTT 发布者
- PubNub 订阅者
- PubNub 发布者
我设法让两个 PubNubs 程序相互交谈。另外,我可以在 MQTT 订阅者程序上看到 MQTT 发布的消息。但是MQTTs程序和PubNubs程序好像不能通信。
- PubNub --> PubNub ✔
- MQTT --> MQTT ✔
- PubNub --> MQTT ✘
- MQTT --> PubNub ✘
我认为不是代码问题。我在 javascript、python 中编写了应用程序,然后继续。我还尝试了 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'
已弃用的答案
这个答案在当时是正确的,但截至 2017 年底,PubNub 以与其传统 Pub/Sub 基础相同的可扩展方式支持 MQTT。
请参阅下面@adam 的回答
PubNub MQTT 桥
我们已经确定并修复了 PubNub MQTT 桥的问题。如果您重试,它应该可以正常工作,但如果仍然无法正常工作,请在此处回复或回复 PubNub 支持。
更新 - PUBNUB 正式支持 MQTT
PubNub 已升级(替换)MQTT 桥接 POC(用于测试的单个端点)以扩展实际项目,使您可以将本机 MQTT 客户端直接连接到 PubNub 网络。
请参考New, Improved PubNub MQTT Support and IoT Capabilities for more details or contact PubNub Support。
使用 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 术语中的频道)。
您可以发布适合您场景的数据,而不是“hi = 10”。我坚持要包括一个 Unix 时间戳,这样你就知道数据是什么时候提交的。
您也可以使用 PubNub standard publish with Python or any other language that there is an SDK for (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()
现在这条消息已经发布,您可以在网络浏览器中打开的仪表板中实时接收它。如果在发布消息时仪表板未打开,可以稍后使用 PubNub storage and playback.
检索它
我正在尝试使用 MQTT 网关将 MQTT 消息发送到 PubNub。我关注了 this tutorial,但我无法正常使用它。
我写了4个程序:
- MQTT 订阅者
- MQTT 发布者
- PubNub 订阅者
- PubNub 发布者
我设法让两个 PubNubs 程序相互交谈。另外,我可以在 MQTT 订阅者程序上看到 MQTT 发布的消息。但是MQTTs程序和PubNubs程序好像不能通信。
- PubNub --> PubNub ✔
- MQTT --> MQTT ✔
- PubNub --> MQTT ✘
- MQTT --> PubNub ✘
我认为不是代码问题。我在 javascript、python 中编写了应用程序,然后继续。我还尝试了 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'
已弃用的答案
这个答案在当时是正确的,但截至 2017 年底,PubNub 以与其传统 Pub/Sub 基础相同的可扩展方式支持 MQTT。
请参阅下面@adam 的回答
PubNub MQTT 桥
我们已经确定并修复了 PubNub MQTT 桥的问题。如果您重试,它应该可以正常工作,但如果仍然无法正常工作,请在此处回复或回复 PubNub 支持。
更新 - PUBNUB 正式支持 MQTT
PubNub 已升级(替换)MQTT 桥接 POC(用于测试的单个端点)以扩展实际项目,使您可以将本机 MQTT 客户端直接连接到 PubNub 网络。
请参考New, Improved PubNub MQTT Support and IoT Capabilities for more details or contact PubNub Support。
使用 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 术语中的频道)。
您可以发布适合您场景的数据,而不是“hi = 10”。我坚持要包括一个 Unix 时间戳,这样你就知道数据是什么时候提交的。
您也可以使用 PubNub standard publish with Python or any other language that there is an SDK for (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()
现在这条消息已经发布,您可以在网络浏览器中打开的仪表板中实时接收它。如果在发布消息时仪表板未打开,可以稍后使用 PubNub storage and playback.
检索它