我尝试设置一个Arduino,它向NodeJaS服务器发布一些消息,但我无法从中获取发布者名称。我搜索了文档,发现没有什么真正有用的。我在PubNub以PubNub.set_uuid(uuid);
开头之前设置了一个UUID,但它没有任何效果。应用程序只返回一个未定义的。我该怎么设置呢?
#include <ESP8266WiFi.h>
#define PubNub_BASE_CLIENT WiFiClient
#include <PubNub.h>
// Replace these with your WiFi network settings
const char* ssid = "SSID"; //replace this with your WiFi network name
const char* password = "PW"; //replace this with your WiFi network password
const static char pubkey[] = "KEY"; // your publish key
const static char subkey[] = "KEY"; // your subscribe key
const static char channel[] = "test"; // channel to use
const static char uuid[] = "temp-sens"; // Unique Device UUID
void setup()
{
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println();
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
PubNub.set_uuid(uuid);
PubNub.begin(pubkey, subkey);
Serial.println("PubNub set up");
Serial.println("success!");
Serial.print("IP Address is: ");
Serial.println(WiFi.localIP());
}
void loop() {
WiFiClient *client;
char msg[] = "\"Yo!\"";
client = PubNub.publish(channel, msg);
if (!client) {
Serial.println("publishing error");
delay(1000);
return;
}
if (PubNub.get_last_http_status_code_class() != PubNub::http_scc_success) {
Serial.print("Got HTTP status code error from PubNub, class: ");
Serial.print(PubNub.get_last_http_status_code_class(), DEC);
}
while (client->available()) {
Serial.write(client->read());
}
client->stop();
Serial.println("---");
}
答案 0 :(得分:0)
我认为您的要求是在订阅者收到的消息中接收发布者的UUID。这只适用于PubNub SDK的最新4.x版本,因为它们实现了一个新的发布/订阅API,将发布者的UUID作为附加 data in the delivered message提供,但不是实际的消息内容。
例如,如果您使用PubNub JavaScript SDK,则可以从邮件事件中获取publisher
键的值。
以下是message event
JSON有效负载示例(不要将 message event
与message
内的message event
密钥混淆:
{
"channel": "ch1",
"subscription": null,
"actualChannel": null,
"subscribedChannel": "ch1",
"timetoken": "15215690220119777",
"publisher": "cv1",
"message": {
"msg": "hello"
}
}
timetoken
是实际发布的timetoken,它在4.x PubNub SDK中首次亮相。
Arduino SDK是较旧的SDK,并未实现包含此信息的最新pub / sub API。作为解决方法,您可以在您发布的邮件内容中包含发布者的UUID。