2017-12-26 32 views
0

これまでのところ、nodered .. で遊んでいます。私はmodbusでいくつかのデータを収集し、mqtt経由でこれをブローカーに送ることができます。 しかし、私は監視の理由から私のスイッチからいくつかのsnmpサブツリーに対してこれをしたいと思っています。 私はこれを動作させることはできません。私は "snmp-subtree"ノードでスイッチからデータを収集することができます。デバッグビューでは、私が望むペイロードを見ることができます。 今、私は配列から各オブジェクトを取り出し、それを "私の" mqttトピックとペイロードに変換する何らかの機能を必要としています。mqttとnode-redを経由してsnmpサブツリーを送信する

msg : Object 
    object 
    _msgid: "xyz" 
    topic: "" 
    payload: array[33] 
     [0 … 9] 
      0: object 
       oid: "1.3.6.1.2.1.2.2.1.10.1" 
       value: 1231397597 
      1: object 
       oid: "1.3.6.1.2.1.2.2.1.10.2" 
       value: 0 

各オブジェクトはインターフェイスです。私はそれぞれのインターフェースについて、トピック "room/switch/interfaceIn /#"(#はOIDの最後の数字である)を持つメッセージを必要とし、 とペイロードの値を必要とします。 どのように私はこれを動作させることができるのか分かりません。私はforループを持っていたい(オブジェクトごとにいくつかの魔法をつけてメッセージを撃つ)。 誰かが私が使用できる例がありますか?

新しいコメント:

私はGoogleで見つかった例でコーディングを試みました。 今のところ私の機能にはいくつかの作業コードがあります。 これを数日間テストしてテストします。

function shootMsg(element, index, array) { 
    node.send ({payload: element.value, topic:'test/mult/1/' + index}); 
} 

msg.payload.forEach(shootMsg); 

...私は、Javaに新たなんだ、私はどのような方法でこれを改善することができたら、コメントを残すこと自由に感じ..私は私が

I :-)やってるのか分かりませんここで私の目標に達するための新しい質問があります。新しい話題を始める方がいいと思いますか? (私はそれがメッセージ本文にはない、前のノードに割り当てられたIPアドレスを読み取ることが可能であるかどうかを知る必要があります。)

よろしく デニス

+0

機能ノードは通常のjavascriptを使用します。もしあなたが立ち往生していたら、あなたが試したもので質問を編集して誰かが助けてくれるでしょう。 – hardillb

+0

あなた自身の質問に答えるなら、自分の質問に対する編集ではなく答えとして – hardillb

答えて

0

私はあなたがすでに実行可能なJavaScriptのソリューションを持っていることがわかり関数ノードを使用してオブジェクトの配列を反復処理し、それぞれを個別のmsgとして送信します。この同じタスクを達成するために、少なくとも2つの他の良い方法があります。

  1. 33個の別々のMSGオブジェクトにペイロード・アレイを分割するsplitノードを使用し - 次いで、ワイヤとOIDを移動changeノードにmsg.topic、および値が

  2. はMSGの新しい配列があなたのオブジェクトを構築するために、このJsonata表現を使用するように構成され、changeノードに配列全体を渡すmsg.payloadする必要があります。

    payload.{ 
        "topic": $reverse($split(oid, "."))[0], 
        "payload": value 
    } 
    

1つのJSON構造を別の構造に再フォーマットする必要があるほとんどの状況で、この2番目の手法を使用する傾向があります。

注:changeノードにJsonata式を使用するには、「タイプ」プルダウンではなく、JSON文字列を入力するための{}オプションのJ:オプションを選択する必要があります。

関連する問題