Я использую Java (через обработку) для запуска Pubnub и пытается интегрировать его со встроенным графиком EON javascript. Пока я получаю опубликованные значения на консоли (которые я проверяю с помощью отдельного сценария для подписки), я не получаю никаких данных EON. Я почти уверен, что это связано с формированием, но я на полную потерю.Проблемы с формированием диаграммы EON с помощью PubNub
Вот что я пробовал:
Я попытался с помощью команды transform
в моем встроенный JavaScript, чтобы попытаться получить его в нужный формат. Я не совсем понимаю, какой формат transform
хочет видеть, но я попробовал строки значений, значения как ints и свою собственную форматированную строку формата 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);
}
Я также попытался использовать объекты JSON в Java, но я получаю очень странные ошибки с publish
. Перед запуском publish
выделяется следующая ошибка: «Функция« Опубликовать() »ожидает таких параметров, как:« publish (String, JSONObject, Callback) ». Это странно, потому что я даю все это. Затем во время выполнения я получаю : «Метод publish (String, JSONObject, Callback) в типе PubnubCoreAsync неприменим для аргументов (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-коду. Это публикация не должна работать из-за того, что у нее нет реализации для параметра класса обратного вызова. –
Спасибо! Но я не думаю, что это основная проблема. Я думаю, что может произойти то, что как обработка, так и библиотека pubnub имеют тип 'JSONObject'. Вы уже увидите, что у меня есть 'processing.data.JSONObject write;' вместо обычного 'JSONObject write'. Когда у меня есть полный обратный вызов, он говорит, что ищет 'org.json.JSONObject' не' process.data.JSONObject'. Проблема в том, что я понятия не имею, как создать org.json.JSONObject. – Murenrb