2017-03-27 6 views
1

node.js経由でアーティクルクラウドにセンサデータを送信しようとしています。 (Webソケットとシリアルポートを使用)。しかし、そのnullを送信します。誰でもその理由を知っていますか?私はチュートリアルのコードをコピーしたので、構文エラーはありません。センサデータがアーティクルクラウドにアップロードされていません

var webSocketUrl = "wss://api.artik.cloud/v1.1/websocket?ack=true"; 
var device_id = "####"; 
var device_token = "#####"; 

var isWebSocketReady = false; 
var ws = null; 
var serialport = require("serialport"); 


var portName = 'COM5'; 
var sp= new serialport.SerialPort(portName, { 
    baudRate: 9600, 
    parser: serialport.parsers.readline("\r\n") 

}); 
var WebSocket = require('ws'); 

/** 
* Gets the current time in millis 
*/ 
function getTimeMillis(){ 
    return parseInt(Date.now().toString()); 
} 

/** 
* Create a /websocket bi-directional connection 
*/ 
function start() { 
    //Create the websocket connection 
     isWebSocketReady = false; 
    ws = new WebSocket(webSocketUrl); 
    ws.on('open', function() { 
       console.log("Websocket connection is open ...."); 
     register(); 
    }); 
    ws.on('message', function(data, flags) { 
       console.log("Received message: " + data + '\n'); 
    }); 
    ws.on('close', function() { 
       console.log("Websocket connection is closed ...."); 
    }); 
} 

/** 
* Sends a register message to the websocket and starts the message flooder 
*/ 
function register(){ 
     console.log("Registering device on the websocket connection"); 
    try{ 
     var registerMessage = '{"type":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+'"}'; 
       console.log('Sending register message ' + registerMessage + '\n'); 
     ws.send(registerMessage, {mask: true}); 
       isWebSocketReady = true; 
    } 
    catch (e) { 
     console.error('Failed to register messages. Error in registering message: ' + e.toString()); 
    } 
} 

/** 
* Send one message to ARTIK Cloud 
*/ 
function sendData(temperature){ 
    try{ 
    // ts = ', "ts": '+getTimeMillis(); 
      var data = { 
       "temp": temperature 

       }; 
     var payload = '{"sdid":"'+device_id+'", "data": '+JSON.stringify(data)+', "cid":"'+getTimeMillis()+'"}'; 
     console.log('Sending payload ' + payload); 
     ws.send(payload, {mask: true}); 
    } catch (e) { 
     console.error('Error in sending a message: ' + e.toString()); 
    } 
} 

/** 
* All start here 
*/ 


start(); // create websocket connection 

sp.on("open", function() { 
    sp.on('data', function(data) { 
      if (!isWebSocketReady){ 
       console.log("WebSocket is not ready. Skip sending data to ARTIK Cloud (data:" + data +")"); 
       return; 
      } 
      console.log("Serial port received data:" + data); 
      //var parsedStrs = data.split(","); 
      var temperature = parseInt(data); 




      sendData(temperature); 
    }); 
}); 
+0

こんにちはHuny、あなたが私たちの最初のIoTサンプル参照する場合: https://developer.artik.cloud/documentation/tutorials/your-first-iot-device.html Node.jsのSAをmpleは温度センサーからの値を送信します。依存関係としては、接続されたArduino、Raspberry Pi、およびDHT温度センサーが右のピンに必要です。 ARTIK Cloudにデータを送信する前に「null」と表示されている場合は、センサーから何の価値も得られません。 特に、出力エラーが発生した場合は、次の関数の "temperature"値を出力して出力します。 function sendData(temperature)// ... –

答えて

0

あなたは私たちの最初のIoTサンプル参照する場合: https://developer.artik.cloud/documentation/tutorials/your-first-iot-device.html

をNode.jsのサンプルは、温度センサからの値を送信します。依存関係としては、接続されたArduino、Raspberry Pi、およびDHT温度センサーが右のピンに必要です。 ARTIK Cloudにデータを送信する前に「null」と表示されている場合は、センサーから何の価値も得られません。任意の解析エラーの場合は、以下の機能から「温度」の値をコンソールに特定の、出力や印刷で

: 機能のsendData(温度)// ...

は、開発者の@ artikメールでお問い合わせ。追加情報が必要な場合はクラウド。

ありがとうございます!この行で

0

:あなたは(あなたは、変数の内容をログに記録している前の行でこれを確認することができます)、空または非数値データを取得している場合は

var temperature = parseInt(data); 

、その後、温度がNaN(になります数字ではありません)。 JSON.stringifyので

{ 
    "sdid": "cbd3f844967d464da3c4f4989f80f86c", 
    "data": { 
    "temp":null 
    }, 
    "cid":"1495817841624" 
} 

{"temp":NaN} 

はに翻訳されるだろうあなたがArtikクラウドのためのJSONペイロードを構築するときに、あなたのようなものになってしまいます

{"temp":null} 
関連する問題