2016-04-28 13 views
0

私はPubnubを実行するためにJava(Processing経由)を使用しており、埋め込まれたJavascript EONグラフと統合しようとしています。コンソールに公開されている値(私は個別の購読専用スクリプトでチェックしています)を取得していますが、私はEONデータを取得しません。私はこれがフォーメーション化と関係していることはほぼ確信していますが、総損失であります。PONNUB経由のEONチャートの書式設定

を私は正しいフォーマットにそれを取得しようとする私の埋め込まれたJavaScriptでtransformコマンドを使用して試してみました:ここ

は、私がしようとしているものです。私は完全にはどの形式を理解していないtransformが、私は値の文字列、intとして、私自身の書式設定された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() "は、" publish(String、JSONObject、Callback) "のようなパラメータを期待しています。 : "PubnubCoreAsync型のpublish(String、JSONObject、Callback)メソッドは引数(String、JSONObject、net Callback(){})には適用されません。エラー前のランタイムとして、私はそれらすべての正確なものを供給する必要があったので、さらに奇妙です。私は、pubnubに必要なライブラリにはJSONObject型があり、処理も同じで、2つの型がうまく動作しないという問題があると私は信じています。とにかく

は、ここhereから直接コピーである私の埋め込まれたJavaScriptです:

<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()の実装である

答えて

0

OK:

pubnub.publish("NSFPhaseII", write, callback); 

は対照的に!今私はこれをどのように解決するか説明しようとします。このソリューションは、EONとJSONオブジェクトの両方のフォーマット問題と、処理に関するオブジェクトの問題にまたがっています。私は両方のヒットしようとします。それを動かすために、私は良いリソースとして公共のpubnubセンサーチャンネルを使用しました:https://www.pubnub.com/developers/realtime-data-streams/sensor-network/私の基本的なアプローチは、自分のチャンネルでこのチャンネルをアロットし、実際に送信したいものに変換することでした。

JSON書式設定: EONグラフで公開された値を正しく変換するには、publishコマンドでorg.json.JSONObjectとして送信する必要があります。私は決して文字列を取った発行コマンドを使用することはできず、独自のJSONを行った。私が入力と同じフォーマットを生成しても、JSONに変換されているはずのEONはそれを拒否しました。

最初の点は、Publishの入力としてorg.json.JSONObjectを使用することです。

これは、簡単ではない処理でこのようなオブジェクトを作成する方法を私たちにもたらします。

org.json.JSONObject処理: 処理は、独自のJSONObjectタイプを持っているので、org.json.JSONObjectを明示的に使用する必要があります。そこから、hereという構文を使用してJSONオブジェクトを正しくフォーマットする必要があります。新しいJSONオブジェクトの作成をtryステートメントに入れる必要があります。そうしないと、未処理の例外がチェックされています。これは、私よりスマートな人によって、より詳細には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チャートを作成する上記の更新コードがあります。このコードは、チャートに6つの値ごとに5秒を送信します。

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人を助けます...

0

pubnub.publish("NSFPhaseII", write,new Callback() {});

new Callback() {}は、あなたが持っているコールバッククラスのインスタンスを渡す必要があり、空のコールバック

の実装

ですこのような完全実装:

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() {}); 
+0

はEONチャートのために必要なことですか?これは書式設定エラーを解決しません。私は今、エラーを取得します: – Murenrb

+0

私はちょうどあなたのJavaコードを扱っています。これは、Callbackクラス・パラメータの実装がないため、パブリッシュは機能しません。 –

+0

ありがとう!しかし、私はこれが核心問題ではないと思う。私は、処理とpubnubライブラリの両方が 'JSONObject'型を持っていることが考えられます。上記のように、通常の 'JSONObject write'の代わりに' processing.data.JSONObject write; 'があります。完全なコールバックがあるとき、 'processing.data.JSONObject'ではなく' org.json.JSONObject'を探していると言います。問題は、org.json.JSONObjectを生成する方法がわかりません。 – Murenrb