Arduino PubNub UUID

时间:2018-02-21 18:05:46

标签: arduino pubnub

我尝试设置一个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("---");
}

1 个答案:

答案 0 :(得分:0)

收到消息中的PubNub Publisher UUID

我认为您的要求是在订阅者收到的消息中接收发布者的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。