通过 PubNub 的 EON 图表格式化问题
EON chart formating issues via PubNub
我正在使用 Java(通过处理)到 运行 Pubnub 并尝试将其与嵌入式 javascript EON 图集成。当我将发布的值发送到控制台时(我使用单独的仅订阅脚本进行检查),我没有获得任何 EON 数据。我几乎可以肯定这与格式化有关,但我完全不知所措。
这是我尝试过的:
我已经尝试在我的嵌入式 java 脚本中使用 transform
命令来尝试将其转换为正确的格式。我不完全明白 transform
想要看到什么格式,但我已经尝试过值的字符串,值作为整数,以及我自己的 JSON 格式的格式化字符串。我使用 public 流 here 来测试我的嵌入式代码是否正常工作。它是!现在我只是想获得一个处理脚本,将输入复制到该代码。我目前的尝试如下,如您所见,我已尝试准确复制正在发布的消息。现在嵌入式代码只获取时间戳。 IE,它填充 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
突出显示并出现以下错误之前:"The function "Publish()" 期望参数如下:"publish(String, JSONObject,Callback)"。这很奇怪,因为我给了它所有这些东西。然后在 运行 时间我得到:“PubnubCoreAsync 类型的方法 publish(String,JSONObject,Callback) 不适用于参数(String,JSONObject,net Callback( ){}).更奇怪的是,运行 之前的错误是我需要提供所有这些确切的东西。我认为问题在于 pubnub 所需的库具有 JSONObject 类型,处理也是如此,并且这两种类型无法正常工作。
无论如何,这是我的嵌入式 java 脚本,它是 here:
的直接副本
<html>
<head>
<script type="text/javascript" src="http://pubnub.github.io/eon/v/eon/0.0.10/eon.js"></script>
<link type="text/css" rel="stylesheet" href="http://pubnub.github.io/eon/v/eon/0.0.10/eon.css" />
</head>
<body>
<div id="chart"></div>
<script>
// using the example stream from
// http://www.pubnub.com/developers/data-streams/sensor-network
var pubnub = PUBNUB.init({
subscribe_key: 'sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe', //rebound
//subscribe_key: 'sub-c-5f1b7c8e-fbee-11e3-aa40-02ee2ddab7fe',
ssl: true
});
eon.chart({
pubnub: pubnub,
history: false,
channel: 'NSFPhaseII',
//channel: 'pubnub-sensor-network',
limit: 100,
rate: 10,
ssl: true,
debug: true,
generate: {
transition: {
duration: 3
},
bindto: '#chart',
data: {
x: 'x'
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%H:%m:%S'
}
}
}
},
transform: function(m) {
return {
eon: {
'Humidy': m.humidity,
'Temperature': m.ambient_temperature,
'Light': m.photosensor
}
}
}
});
</script>
</body>
</html>
这是我的处理.pde。在这个版本中,我设置了发布 JSON。
import com.pubnub.api.*;
import org.json.*;
processing.data.JSONObject write;
Pubnub pubnub = new Pubnub("pub-c-ca3babb0-c900-4a8e-9524-fc2ae26847da", "sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe");
void setup()
{
write = new processing.data.JSONObject();
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(){
write.setFloat("var1", random(10));
write.setFloat("var2", random(10));
write.setFloat("var3", random(10));
//saveJSONObject(write, "data/new.json");
pubnub.publish("NSFPhaseII", write,new Callback() {});
delay(15000);
}
欢迎任何想法。
在这段代码中,您为此 publish
实现的 Callback()
在哪里:
pubnub.publish("NSFPhaseII", write,new Callback() {});
new Callback() {}
是 Callback
的空实现
您需要传递具有如下完整实现的回调实例 class:
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, callback);
相对于:
pubnub.publish("NSFPhaseII", write,new Callback() {});
好的!现在我将尝试解释我是如何解决这个问题的。该解决方案涵盖 EON 的格式问题和 JSON 对象处理问题。我会尝试同时击中两者。为了让它工作,我使用 public pubnub 传感器频道作为一个很好的资源:https://www.pubnub.com/developers/realtime-data-streams/sensor-network/ 我的基本方法是在我自己的频道上模仿这个频道,然后将它转换成我真正想要的正在发送。
JSON 格式:
总而言之,如果您希望 EON 图正确转换您发布的值,则必须在您的发布命令中将其作为 org.json.JSONObject 发送。我从来没有能够使用一个发布命令,它接受一个字符串并自己执行 JSONing 。即使我生成的格式与要发布的输入完全相同,但本应转换为 JSON EON 拒绝了它。
所以,首先,使用 org.json.JSONObject 作为 Publish 的输入。
这给我们带来了如何在 Processing 中创建这样一个对象,这并不容易。
org.json.JSONObject 处理:
因为 Processing 有自己的 JSONObject 类型,所以必须显式使用 org.json.JSONObject。从那里开始,您需要使用比我聪明的人描述的 here to format the JSON object correctly. There is a twist, the new JSON object creation must be put in a try statement or else Processing will complain that there is an checked unhandled exception. This is covered in more detail here 语法!下面是一些使用库 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 图表上!
这是上面的更新代码,现在可以创建实时 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 个人做这样的事情...
我正在使用 Java(通过处理)到 运行 Pubnub 并尝试将其与嵌入式 javascript EON 图集成。当我将发布的值发送到控制台时(我使用单独的仅订阅脚本进行检查),我没有获得任何 EON 数据。我几乎可以肯定这与格式化有关,但我完全不知所措。
这是我尝试过的:
我已经尝试在我的嵌入式 java 脚本中使用 transform
命令来尝试将其转换为正确的格式。我不完全明白 transform
想要看到什么格式,但我已经尝试过值的字符串,值作为整数,以及我自己的 JSON 格式的格式化字符串。我使用 public 流 here 来测试我的嵌入式代码是否正常工作。它是!现在我只是想获得一个处理脚本,将输入复制到该代码。我目前的尝试如下,如您所见,我已尝试准确复制正在发布的消息。现在嵌入式代码只获取时间戳。 IE,它填充 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
突出显示并出现以下错误之前:"The function "Publish()" 期望参数如下:"publish(String, JSONObject,Callback)"。这很奇怪,因为我给了它所有这些东西。然后在 运行 时间我得到:“PubnubCoreAsync 类型的方法 publish(String,JSONObject,Callback) 不适用于参数(String,JSONObject,net Callback( ){}).更奇怪的是,运行 之前的错误是我需要提供所有这些确切的东西。我认为问题在于 pubnub 所需的库具有 JSONObject 类型,处理也是如此,并且这两种类型无法正常工作。
无论如何,这是我的嵌入式 java 脚本,它是 here:
的直接副本<html>
<head>
<script type="text/javascript" src="http://pubnub.github.io/eon/v/eon/0.0.10/eon.js"></script>
<link type="text/css" rel="stylesheet" href="http://pubnub.github.io/eon/v/eon/0.0.10/eon.css" />
</head>
<body>
<div id="chart"></div>
<script>
// using the example stream from
// http://www.pubnub.com/developers/data-streams/sensor-network
var pubnub = PUBNUB.init({
subscribe_key: 'sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe', //rebound
//subscribe_key: 'sub-c-5f1b7c8e-fbee-11e3-aa40-02ee2ddab7fe',
ssl: true
});
eon.chart({
pubnub: pubnub,
history: false,
channel: 'NSFPhaseII',
//channel: 'pubnub-sensor-network',
limit: 100,
rate: 10,
ssl: true,
debug: true,
generate: {
transition: {
duration: 3
},
bindto: '#chart',
data: {
x: 'x'
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%H:%m:%S'
}
}
}
},
transform: function(m) {
return {
eon: {
'Humidy': m.humidity,
'Temperature': m.ambient_temperature,
'Light': m.photosensor
}
}
}
});
</script>
</body>
</html>
这是我的处理.pde。在这个版本中,我设置了发布 JSON。
import com.pubnub.api.*;
import org.json.*;
processing.data.JSONObject write;
Pubnub pubnub = new Pubnub("pub-c-ca3babb0-c900-4a8e-9524-fc2ae26847da", "sub-c-d0682e0e-04e9-11e6-a8fd-02ee2ddab7fe");
void setup()
{
write = new processing.data.JSONObject();
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(){
write.setFloat("var1", random(10));
write.setFloat("var2", random(10));
write.setFloat("var3", random(10));
//saveJSONObject(write, "data/new.json");
pubnub.publish("NSFPhaseII", write,new Callback() {});
delay(15000);
}
欢迎任何想法。
在这段代码中,您为此 publish
实现的 Callback()
在哪里:
pubnub.publish("NSFPhaseII", write,new Callback() {});
new Callback() {}
是 Callback
您需要传递具有如下完整实现的回调实例 class:
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, callback);
相对于:
pubnub.publish("NSFPhaseII", write,new Callback() {});
好的!现在我将尝试解释我是如何解决这个问题的。该解决方案涵盖 EON 的格式问题和 JSON 对象处理问题。我会尝试同时击中两者。为了让它工作,我使用 public pubnub 传感器频道作为一个很好的资源:https://www.pubnub.com/developers/realtime-data-streams/sensor-network/ 我的基本方法是在我自己的频道上模仿这个频道,然后将它转换成我真正想要的正在发送。
JSON 格式: 总而言之,如果您希望 EON 图正确转换您发布的值,则必须在您的发布命令中将其作为 org.json.JSONObject 发送。我从来没有能够使用一个发布命令,它接受一个字符串并自己执行 JSONing 。即使我生成的格式与要发布的输入完全相同,但本应转换为 JSON EON 拒绝了它。
所以,首先,使用 org.json.JSONObject 作为 Publish 的输入。
这给我们带来了如何在 Processing 中创建这样一个对象,这并不容易。
org.json.JSONObject 处理: 因为 Processing 有自己的 JSONObject 类型,所以必须显式使用 org.json.JSONObject。从那里开始,您需要使用比我聪明的人描述的 here to format the JSON object correctly. There is a twist, the new JSON object creation must be put in a try statement or else Processing will complain that there is an checked unhandled exception. This is covered in more detail here 语法!下面是一些使用库 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 图表上!
这是上面的更新代码,现在可以创建实时 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 个人做这样的事情...