2017-12-28 15 views
0

snmpを使用してスイッチから複数の64ビットカウンタを読み込みました。値をバッファに格納します。しかし、バッファのサイズは8バイトほどではないので、 'buf.readDoubleBE'を使って変換することはできません。カウンターが増加している間にバッファーが増加します。 次の例では、カウンタ値に変換する方法を任意のヒントSNMPサブツリーのノード(ちょうど最初の二つのオブジェクト)node-redを値に変換する

msg : Object 
    object 
    host: "192.168.0.11" 
    name: "SWHAR" 
    _msgid: "3a45e09a.957c9" 
    oid: "1.3.6.1.2.1.31.1.1.1.6" 
    payload: array[33] 
     [0 … 9] 
      0: object 
       oid: "1.3.6.1.2.1.31.1.1.1.6.1" 
       value: buffer[4]raw 
        0: 0x0 
        1: 0xb9 
        2: 0xda 
        3: 0x4b 
      1: object 
       oid: "1.3.6.1.2.1.31.1.1.1.6.2" 
       value: buffer[1]raw 
        0: 0x0 
      2: object ....cut 

の出力ですか? 私は以下の関数を使って配列を個々のメッセージに分けています。 ドキュメントを最後まで読まずに 'readDoubleBE(0、true)'を使ってみましたが、すぐにDockerコンテナを停止します。 noAssertなしインデックスから範囲外のエラーが発生しました。

function shootMsg(element, index, array) { 
    node.send ({payload: element.value, topic:'SwMetrics/' + msg.name + '/' + index}); 
} 

msg.payload.forEach(shootMsg); 
+0

と4つの別々のバイトとしてそれを読んでする必要があるので、4バイトvalueは、実際のIPアドレスであることを推測するつもりだました64ビットの値はカウンタなので、常に整数になりますか? – hardillb

+0

また、NodeJSがサポートできる最大整数型は32ビットです – hardillb

答えて

0

まずあなたがちょうどあなたが第一は4バイト長であるが、2番目は1バイトのみで与えた例から、同じ各value鍵を扱うことができません。

getDouble()は、2番目のvalueから2バイトを読み込もうとしているため、1つしかありません。

私がコメントで言ったように。 NodeJSで扱える最大の整数値は32ビット整数です。

EDIT:

があなたの前の質問を見て、私はあなたがreadInt8()