我正在使用Java(通過處理)來運行Pubnub並嘗試將其與嵌入式JavaScript EON圖形進行集成。雖然我將控制檯發佈的值發佈(我使用單獨的訂閱腳本查看),但我沒有收到任何EON數據。我幾乎肯定這與格式有關,但是我完全失敗了。EON圖表通過PubNub格式化問題
這是我曾嘗試:
我在嵌入的JavaScript使用transform
命令來嘗試進入它的正確格式嘗試。我不完全明白transform
想要看到什麼格式,但我嘗試過使用字符串的值,值作爲整數,以及我自己格式化的JSON格式的字符串。我使用公共流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
突出顯示,出現以下錯誤:「函數」Publish()「預期參數,如:」發佈(字符串,JSONObject,回調)「這是奇怪的,因爲我給它所有這些東西。 :「PubnubCoreAsync類型中的publish(String,JSONObject,Callback)方法不適用於參數(String,JSONObject,net Callback(){})。這更加奇怪,因爲運行前錯誤是我需要提供所有這些確切的事情。我相信問題是pubnub需要的庫具有JSONObject類型,處理也是如此,這兩種類型都不能正常工作。
不管怎麼說,這是我的嵌入的JavaScript是從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);
}
歡迎任何想法。
那是需要EON圖表?這不能解決格式錯誤。我現在得到錯誤: – Murenrb
我只是解決你的Java代碼。該發佈不應該起作用,因爲它沒有Callback類參數的實現。 –
謝謝!但我不認爲這是核心問題。我認爲可能發生的情況是,處理和pubnub庫都具有類型「JSONObject」。在上面你會看到我有'processing.data.JSONObject write;'而不是普通的'JSONObject write'。當我有一個完整的回調,它說它正在尋找一個'org.json.JSONObject'而不是'processing.data.JSONObject'。問題是我不知道如何生成org.json.JSONObject。 – Murenrb