2017-03-15 18 views
0

私はセンサー以外のリモートデバイスを持っています。それは私にいくつかの数字を与え続けます。実際に私はnode.jsサーバにこれらの番号を受け取りましたが、私はこれらのデータを公開したくありません。私はクライアントを購読したいとクライアントが購読した後トピックメッセージを印刷したいと思います。ここに私のNode.jsサーバとmqttはです。両方のファイルをノードapp.jsgcc main.c。/a.outの後に実行します。
この問題を解決するにはどうすればよいですか?
ファイルは以下の通りである:クライアントを購読し、Node.js、Mosca、MQTTのMongoDBに保存する方法

をapp.js

'use strict'; 

//dependencies 
var express   = require('express'), 
    passport   = require('passport'), 
    strategy   = require('passport-local').Strategy, 
    mongoose   = require('mongoose'), 
    mongodb   = require('mongodb'), 
    bodyParser  = require('body-parser'), 
    path    = require('path'), 
    acl    = require('acl'), 
    mosca   = require('mosca'); 

exports.init = function(pp) { 
    passport = pp; 
    app = pp; 
    return exports; 
}; 

exports.root = function(req, res) { 
    // Running 
    res.send("Running"); 
}; 

//create express app 
var app   = express(); 
    app.appname ="watersensor_DB"; 

//config mongoose 
    mongoose.Promise = global.Promise; 
    app.db = mongoose.createConnection('localhost/'+app.appname); 
    app.db.on('error', console.error.bind(console, 'mongoose connection error: ')); 
    app.db.once('open', function() { 
    // Store All Data 
    }); 

//config mongodb 
    mongodb.connect("mongodb://localhost/"+app.appname, function(error, mdb) { 
    app.acl=new acl(new acl.mongodbBackend(mdb, app.appname)); 
    }); 

//config data models 
    require('./models')(app, mongoose); 

//Serve Frontend 
    app.use(express.static(path.join(__dirname, '/public/'))); 

//config Routes 
    var router = express.Router(); 
    require('./routes')(app, router, passport); 

//config express 
    app.set('secret','thisshouldnotbeinplaintext'); 
    app.use(bodyParser.urlencoded({ extended: false })); 
    app.use(bodyParser.json()); 
    app.use(passport.initialize()); 
    app.use(router); 


//config mosca 
var ascoltatore = { 
    //using ascoltatore 
    type: 'mongo', 
    url: 'mongodb://localhost:27017/mqtt', 
    pubsubCollection: 'ascoltatori', 
    mongo: {} 
}; 

var settings = { 
    port: 1883, 
    backend: ascoltatore, 
    persistence: { 
    factory: mosca.persistence.Mongo, 
    url: 'mongodb://localhost:27017/mqtt' 
    } 
}; 

var server = new mosca.Server(settings); 

server.on('clientConnected', function(client) { 
    console.log('client connected', client.id); 
}); 

// fired when a message is received 
server.on('published', function(packet, client) { 
    console.log('Published', packet.payload); 
}); 


server.on('ready', setup); 

// fired when the mqtt server is ready 
function setup() { 
    console.log('Mosca server is up and running'); 
} 

//Port Listening 
    app.listen(7000, function(){ 
    //Running 
    console.log("Node.js Server Is Running On localhost:7000"); 
    }); 

main.cの

#include <stdio.h> 

main() 
{ 
    char buf[1024]; 
    int i; 
    //mosquitto_sub -t 'test/topic' -v 
    //mosqui<to_pub -t 'test/topic' -m 'hello' 
    for(i=0; ;i++) { 
     //sprintf(buf, "mosquitto_pub -h 192.168.43.82 -p 1883 -t 'test' -m '%d'",i); 
     sprintf(buf, "mosquitto_pub -t 'test' -m '%d'",i); 
     printf("%s\n",buf); 
     system(buf); 
     sleep(1); 
    } 
} 
+1

ここであなたが何を求めているのかは分かりません。また、メッセージ・トピックがあることを確認がない、あなたは信じられないほど非効率的である – hardillb

答えて

0

何を意味することのNode.jsサーバから発行されたデータを取得するということですあなたのリモートデバイス?その後、サーバーはMongoDBにデータを保存しますか?

この意味で、サーバーはクライアントを購読する必要はありません。それは下のコードからデータを得ることができます。

server.on('published', function(packet, client) { 
    console.log('Published : ', packet.topic + " --- " + packet.payload); 

    var MongoClient = require('mongodb').MongoClient; 
    var url = "mongodb://localhost:27017/mydb"; 

    MongoClient.connect(url, function(err, db) { 
     if (err) throw err; 

     var stringBuf = packet.payload.toString('utf-8'); 
     var myobj3 = JSON.parse(stringBuf); 

     db.collection("customers").insertOne(myobj3, function(err, res) { 
     if (err) throw err; 
     console.log("1 record inserted"); 
     db.close(); 
     }); 
    }); 
}); 
+0

を達成しようとしているものを、あなたはすべてのメッセージのためにデータベースへの接続を開閉しているのより明確な説明を与えるために質問をしてみてください、再作業正しい。 – hardillb

関連する問題