Ich benutze Java (über die Verarbeitung), um Pubnub und versuchen, das mit einem eingebetteten Javascript EON-Graph zu integrieren. Während ich veröffentlichte Werte auf die Konsole bekomme (die ich mit einem separaten Subskriptions-Skript überprüfe), bekomme ich keine EON-Daten. Ich bin mir fast sicher, dass dies mit der Formatierung zu tun hat, aber ich bin total verloren. HierEON-Diagramm formatieren Probleme über PubNub
ist, was ich habe versucht:
Ich habe versucht, mit dem transform
Befehl in meinem eingebetteten Javascript zu versuchen, es in das richtige Format zu bekommen. Ich verstehe nicht ganz, welches Format transform
sehen will, aber ich habe versucht, Strings der Werte, die Werte als Ints und meine eigene formatierte Zeichenfolge des JSON-Formats. Ich habe die öffentlichen Streams here verwendet, um zu testen, dass mein eingebetteter Code funktioniert. Und es ist!!! Jetzt versuche ich nur ein Verarbeitungs-Skript zu erhalten, das die Eingabe in diesen Code dupliziert. Mein aktueller Versuch ist unten und wie Sie sehen können, habe ich versucht, die Nachrichten, die gerade veröffentlicht werden, zu kopieren. Im Moment bekommt der eingebettete Code nur den Zeitstempel. IE, es bevölkert die x-Achse und aktualisiert, wie es neue veröffentlicht, aber keine Daten geplottet werden. Ich bin mir sicher, dass dies ein Formatierungsproblem ist, ich habe einfach keine Ahnung, was ich sonst noch versuchen sollte.
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);
}
Ich habe auch versucht, JSON-Objekte in Java zu verwenden, aber ich wirklich seltsame Fehler mit publish
. Vor der Laufzeit wird publish
mit folgendem Fehler hervorgehoben: "Die Funktion" Publish() "erwartet Parameter wie:" publish (String, JSONObject, Callback) ". Das ist merkwürdig, weil ich all diese Dinge gebe. Dann zur Laufzeit bekomme ich : "Die Methode publish (String, JSONObject, Callback) im Typ PubnubCoreAsync gilt nicht für die Argumente (String, JSONObject, net Callback() {}). Was noch merkwürdiger ist als der Fehler vor der Laufzeit war, dass ich genau diese Dinge liefern musste. Ich glaube, das Problem ist, dass die Bibliotheken, die für pubnub benötigt werden, einen JSONObject-Typ haben, und auch die Verarbeitung, und die beiden Typen funktionieren nicht gut.
Wie auch immer, hier ist mein eingebetteter Javascript, die eine direkte Kopie von here ist:
<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>
und hier ist meine Verarbeitung .pde. In dieser Version habe ich es eingerichtet, den JSON zu veröffentlichen.
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);
}
Alle Gedanken sind willkommen.
dass für EON-Charts ist erforderlich? Dies behebt die Formatierungsfehler nicht. Ich bekomme jetzt den Fehler: – Murenrb
Ich adressiere nur Ihren Java-Code. Diese Veröffentlichung sollte nicht funktionieren, da sie keine Implementierung für den Parameter Callback-Klasse enthält. –
Danke! Aber ich glaube nicht, dass dies das Kernproblem ist. Ich denke, was passiert, ist, dass sowohl die Verarbeitung als auch die pubnub-Bibliothek den Typ "JSONObject" haben. Oben sehen Sie, dass ich 'processing.data.JSONObject write;' anstelle des normalen 'JSONObject write' habe. Wenn ich einen vollständigen Rückruf habe, heißt es, es sucht nach einem 'org.json.JSONObject' und nicht nach einem' processing.data.JSONObject'. Das Problem ist, dass ich keine Ahnung habe, wie man ein org.json.JSONObject erzeugt. – Murenrb