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