Processing 通过PubNub设置图表格式的问题

Processing 通过PubNub设置图表格式的问题,processing,real-time,dashboard,pubnub,Processing,Real Time,Dashboard,Pubnub,我正在使用Java(通过处理)运行Pubnub,并试图将其与嵌入式javascript图形集成。当我将发布的值获取到控制台(我使用单独的仅订阅脚本进行检查)时,我没有获取任何EON数据。我几乎可以肯定这和格式化有关,但我完全不知所措 以下是我尝试过的: 我已经尝试在嵌入式javascript中使用transform命令,试图将其转换为正确的格式。我不完全理解transform希望看到的格式,但我已经尝试了值字符串,值为int,以及我自己的JSON格式的格式化字符串。我使用公共流来测试我的嵌入式代

我正在使用Java(通过处理)运行Pubnub,并试图将其与嵌入式javascript图形集成。当我将发布的值获取到控制台(我使用单独的仅订阅脚本进行检查)时,我没有获取任何EON数据。我几乎可以肯定这和格式化有关,但我完全不知所措

以下是我尝试过的:

我已经尝试在嵌入式javascript中使用
transform
命令,试图将其转换为正确的格式。我不完全理解
transform
希望看到的格式,但我已经尝试了值字符串,值为int,以及我自己的JSON格式的格式化字符串。我使用公共流来测试我的嵌入式代码是否正常工作。是的!!!现在,我只是想得到一个处理脚本,将输入复制到代码中。我目前的尝试如下所示,正如您所见,我已尝试准确复制正在发布的消息。现在,嵌入式代码只获取时间戳。也就是说,它填充x轴并在新发布时更新,但不打印数据。我确信这是一个格式问题,我只是不知道还有什么可以尝试

import com.pubnub.api.*;
import org.json.*;
import java.util.*; 
Pubnub pubnub = new Pubnub("pub-c-ca3babb0-c900-4a8e-9524-fc2ae26847da", "sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe");

void setup()
{

  try {
    pubnub.subscribe("NSFPhaseII", new Callback() {
      @Override
      public void connectCallback(String channel, Object message) {
         pubnub.publish("NSFPhaseII", "Hello from the PubNub Java SDK", new Callback() {});
      }

      @Override
        public void disconnectCallback(String channel, Object message) {
        System.out.println("SUBSCRIBE : DISCONNECT on channel:" + channel
          + " : " + message.getClass() + " : "
          + message.toString());
      }

      public void reconnectCallback(String channel, Object message) {
        System.out.println("SUBSCRIBE : RECONNECT on channel:" + channel
          + " : " + message.getClass() + " : "
          + message.toString());
      }

      @Override
        public void successCallback(String channel, Object message) {
        System.out.println("SUBSCRIBE : " + channel + " : "
          + message.getClass() + " : " + message.toString());
      }

      @Override
        public void errorCallback(String channel, PubnubError error) {
        System.out.println("SUBSCRIBE : ERROR on channel " + channel
          + " : " + error.toString());
      }
    }
    );
  } 
  catch (PubnubException e) {
    System.out.println(e.toString());
  }
}

void draw() {

  Date TimeStamp = new Date();
  long current = TimeStamp.getTime()/1000; //

  //String m = "{\"ambient_temperature\":\"10\",\"radiation_level\":\"15\",\"humidity\":\"30\",\"sensor_uuid\":\"probe-dff03902\",\"photosensor\":\"39\",\"timestamp\":"+str(current)+"}";
  String m = "{ambient_temperature:'10',radiation_level:'15',humidity:'30',sensor_uuid:'probe-dff03902',photosensor:'39',timestamp:"+str(current)+"}";
  println(m);

  Callback callback = new Callback() {
    public void successCallback(String channel, Object response) {
      System.out.println(response.toString());
    }
    public void errorCallback(String channel, PubnubError error) {
      System.out.println(error.toString());
    }
  };
  pubnub.publish("NSFPhaseII", m, callback);
  delay(5000);
}
我还尝试在java中使用JSON对象,但在
publish
中出现了非常奇怪的错误。运行前,
publish
会突出显示以下错误:“函数“publish()”预期参数为:“publish(String,JSONObject,Callback)”。这很奇怪,因为我给了它所有这些东西。然后在运行时我得到:“方法publish(String,JSONObject,Callback)在类型中,PubnubCoreAsync不适用于参数(String、JSONObject、net Callback(){})。更奇怪的是,运行前的错误是我需要提供所有这些确切的东西。我认为问题在于pubnub所需的库有一个JSONObject类型,处理也是如此,这两种类型都不能很好地工作

不管怎样,这是我的嵌入式javascript,它是来自:


欢迎有任何想法

在此代码中,针对此
publish
Callback()
的实现在哪里:

publish(“NSFPhaseII”,write,new Callback(){})

newcallback(){}
是回调函数的空实现

您需要传递回调类的实例,该实例具有如下完整实现:

Callback callback = new Callback() {
  public void successCallback(String channel, Object response) {
    System.out.println(response.toString());
  }
  public void errorCallback(String channel, PubnubError error) {
    System.out.println(error.toString());
  }
};
    Callback callback = new Callback() {
  public void successCallback(String channel, Object response) {
    System.out.println(response.toString());
  }
  public void errorCallback(String channel, PubnubError error) {
    System.out.println(error.toString());
  }
};
pubnub.publish("NSFPhaseII", write, callback);
这:

与之相反:

pubnub.publish("NSFPhaseII", write,new Callback() {});

好的!现在我将试着解释我是如何解决这个问题的。该解决方案跨越了EON的格式问题和处理JSON对象问题。我会尽量做到两者兼顾。为了让它发挥作用,我使用公共pubnub传感器频道作为一个很好的资源:我的基本方法是在我自己的频道上模仿这个频道,然后将它转换为我真正想要发送的内容

JSON格式: 它的长短是,如果您希望EON graphs正确转换发布的值,则必须在publish命令中作为org.json.JSONObject发送。我从来都不能使用一个publish命令,该命令接受一个字符串并单独执行JSONing。即使我生成了与发布输入完全相同的格式,但该格式本应转换为JSON格式

因此,首先,使用org.json.JSONObject作为发布的输入

这就引出了如何在处理过程中创建这样一个对象,这并不容易

org.json.JSONObject处理: 因为处理有自己的JSONObject类型,所以必须显式使用org.json.JSONObject。从这里开始,您需要使用所描述的语法来正确格式化JSON对象。这里有一个转折点,新的JSON对象创建必须放在一个try语句中,否则处理将抱怨存在一个选中的未处理异常。比我聪明的人会更详细地介绍这一点!下面是一些使用库org.json.JSONObject库的示例代码:

import org.json.*;  

void setup() {
   String str = "{ \"name\": \"Alice\", \"age\": 20 }";
   org.json.JSONObject json;
   try {
     json = new org.json.JSONObject(str);
     String n = json.getString("name");
     int a = json.getInt("age");
     println(n + " " + a);
  }
  catch (org.json.JSONException e) {
     System.err.println(e);
     exit();
  }

}

void draw() {
}
一旦你有了这个对象,你就可以使用发布命令发布到一个图表上

下面是上面更新的代码,它现在创建了一个实时的EON图表。此代码每5秒向图表发送6个值:

import com.pubnub.api.*;
import org.json.*;
import java.util.*; 
Pubnub pubnub = new Pubnub("pub-c-ca3babb0-c900-4a8e-9524-fc2ae26847da", "sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe");

org.json.JSONObject m;
Callback callback = new Callback() {
    public void successCallback(String channel, Object response) {
      System.out.println(response.toString());
    }
    public void errorCallback(String channel, PubnubError error) {
      System.out.println(error.toString());
    }
  };

void setup()
{
  try {
    pubnub.subscribe("NSFPhaseII",callback);
  } 
  catch (PubnubException e) {
    System.out.println(e.toString());
  }
}

void draw() {

  Date TimeStamp = new Date();
  long current = TimeStamp.getTime()/1000; //
  String m1 = "\"T0\":\""+str(random(10))+"\",";
  String m2 = "\"T5\":\""+str(random(10))+"\",";
  String m3 = "\"T6\":\""+str(random(10))+"\",";
  String m4 = "\"T8\":\""+str(random(10))+"\",";
  String m5 = "\"T9\":\""+str(random(10))+"\",";
  String m6 = "\"T13\":\""+str(random(10))+"\",";
  String m7 = "\"timestamp\":\""+current+"\",";

  try {
    m = new org.json.JSONObject("{"+m1+m2+m3+m4+m5+m6+m7+"}");
  }
  catch (org.json.JSONException e) {
    System.err.println(e);
    exit();
  }
  pubnub.publish("NSFPhaseII", m, callback);
  delay(5000);
}

希望这能帮助3个使用处理的人做类似的事情…

EON图表需要这样做吗?这不会纠正格式错误。我现在得到了一个错误:我只是在处理您的Java代码。该发布不应该工作,因为它没有回调类参数的实现。谢谢!但我不认为这是核心问题。我认为可能发生的情况是,processing和pubnub库都有类型
JSONObject
。在上面,您将看到我编写了
processing.data.JSONObject而不是正常的
JSONObject写入
。当我有一个完整的回调时,它说它正在寻找一个
org.json.JSONObject
而不是
processing.data.JSONObject
。问题是,我不知道如何生成org.json.JSONObject。发布确实有效,因为我可以订阅并查看正在发布的值。但我非常感谢反馈,错误会略有变化,这可能会有所帮助。
pubnub.publish("NSFPhaseII", write,new Callback() {});
import org.json.*;  

void setup() {
   String str = "{ \"name\": \"Alice\", \"age\": 20 }";
   org.json.JSONObject json;
   try {
     json = new org.json.JSONObject(str);
     String n = json.getString("name");
     int a = json.getInt("age");
     println(n + " " + a);
  }
  catch (org.json.JSONException e) {
     System.err.println(e);
     exit();
  }

}

void draw() {
}
import com.pubnub.api.*;
import org.json.*;
import java.util.*; 
Pubnub pubnub = new Pubnub("pub-c-ca3babb0-c900-4a8e-9524-fc2ae26847da", "sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe");

org.json.JSONObject m;
Callback callback = new Callback() {
    public void successCallback(String channel, Object response) {
      System.out.println(response.toString());
    }
    public void errorCallback(String channel, PubnubError error) {
      System.out.println(error.toString());
    }
  };

void setup()
{
  try {
    pubnub.subscribe("NSFPhaseII",callback);
  } 
  catch (PubnubException e) {
    System.out.println(e.toString());
  }
}

void draw() {

  Date TimeStamp = new Date();
  long current = TimeStamp.getTime()/1000; //
  String m1 = "\"T0\":\""+str(random(10))+"\",";
  String m2 = "\"T5\":\""+str(random(10))+"\",";
  String m3 = "\"T6\":\""+str(random(10))+"\",";
  String m4 = "\"T8\":\""+str(random(10))+"\",";
  String m5 = "\"T9\":\""+str(random(10))+"\",";
  String m6 = "\"T13\":\""+str(random(10))+"\",";
  String m7 = "\"timestamp\":\""+current+"\",";

  try {
    m = new org.json.JSONObject("{"+m1+m2+m3+m4+m5+m6+m7+"}");
  }
  catch (org.json.JSONException e) {
    System.err.println(e);
    exit();
  }
  pubnub.publish("NSFPhaseII", m, callback);
  delay(5000);
}