/******************************************************************************* * Copyright (c) 2018 Sensinov (www.sensinov.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ var express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); var request = require('request'); var app = express(); var fs = require('fs'); var config = require('./config.json'); var cseUri = config.csePoa+"/~/"+config.cseId+"/"+config.cseName; app.use(bodyParser.json({limit: '50mb', extended: true})) app.use(bodyParser.urlencoded({limit: '50mb', extended: true})) app.listen(config.aePort, function () { console.log('AE Monitor listening on port '+config.aePort); }); app.post('/', function (req, res) { console.log("\n◀◀◀◀◀") //console.log(req.body); var content = req.body['m2m:sgn'].nev.rep["m2m:cin"].con; //console.log("Content: "+JSON.stringify(content)); var jsonContent= JSON.parse(content); base64image = jsonContent.base64image; //console.log(base64image); require("fs").writeFile('out', base64image, {encoding: 'base64'}, function(err) { console.log('File created'); for (var i=0;i<config.visualRecognitionClassifierIds.length; i++){ config.visualRecognitionClassifierIds[i] visualRecognitionClassify(config.visualRecognitionClassifierIds[i],content); } }); res.sendStatus(204); }); createAE(cseUri); function createAE(targetUri){ console.log("\n▶▶▶▶▶"); var representation = { "m2m:ae":{ "rn":config.aeName, "api":config.appId, "rr":"true", "poa":["http://"+config.aeIp+":"+config.aePort+"/"] } }; console.log("POST "+targetUri); console.log(representation); var options = { uri: targetUri, method: "POST", headers: { "X-M2M-Origin": config.aeId, "X-M2M-RI": "123456", "Content-Type": "application/json;ty=2" }, json: representation }; request(options, function (error, response, body) { console.log("◀◀◀◀◀"); if(error){ console.log(error); }else{ console.log(response.statusCode); console.log(body); createSubscription(cseUri+config.targetCnt); for (var i=0;i<config.visualRecognitionClassifierIds.length; i++){ createContainer(cseUri+"/"+config.aeName,config.visualRecognitionClassifierIds[i]); } } }); } function createContainer(targetUri,name){ console.log("\n▶▶▶▶▶"); var representation = { "m2m:cnt":{ "rn":name, "mni":config.cntMni } }; console.log("POST "+ targetUri); console.log(representation); var options = { uri: targetUri, method: "POST", headers: { "X-M2M-Origin": config.aeId, "X-M2M-RI": "123456", "Content-Type": "application/json;ty=3" }, json: representation }; request(options, function (error, response, body) { console.log("◀◀◀◀◀"); if(error){ console.log(error); }else{ console.log(response.statusCode); console.log(body); } }); } function createSubscription(targetUri){ console.log("\n▶▶▶▶▶"); var representation = { "m2m:sub": { "rn": config.subName, "nu": ["/"+config.cseName+"/"+config.aeId], "nct": 2, "enc": { "net": [3] } } }; console.log("POST "+targetUri); console.log(representation); var options = { uri: targetUri, method: "POST", headers: { "X-M2M-Origin": config.aeId, "X-M2M-RI": "123456", "Content-Type": "application/json;ty=23" }, json: representation }; request(options, function (error, response, body) { console.log("◀◀◀◀◀"); if(error){ console.log(error); }else{ console.log(response.statusCode); console.log(body); } }); } function visualRecognitionClassify(classifierId, con){ console.log("\n▶▶▶▶▶"); var uri; if(classifierId=="classify"||classifierId=="detect_faces"){ uri=config.visualRecognitionUri+"/"+classifierId+"?version="+config.visualRecognitionVersion; }else{ uri=config.visualRecognitionUri+"/classify?version="+config.visualRecognitionVersion; } console.log("POST "+uri); var options = { uri: uri, method: "POST", headers: { "Authorization": "basic "+Buffer.from(config.visualRecognitionUsername+":"+config.visualRecognitionPassword).toString('base64') }, formData : { "classifier_ids":classifierId, "image" : fs.createReadStream("out") }, }; request(options, function (error, response, body) { console.log("◀◀◀◀◀"); if(error){ console.log(error); createContenInstance(error) }else{ console.log(response.statusCode); console.log(body); createContenInstance(cseUri+"/"+config.aeName+"/"+classifierId, con,body) } }); } function createContenInstance(targetUri,conString,output){ console.log("\n▶▶▶▶▶"); con = JSON.parse(conString); var representation = { "m2m:cin":{ "con": "{\"cameraid\":\""+con.cameraid+"\",\"imagetimestamp\":\""+con.timestamp+"\", \"base64image\":\""+con.base64image+"\", \"output\":"+output+"}" } }; console.log("POST "+targetUri); console.log(representation); var options = { uri: targetUri, method: "POST", headers: { "X-M2M-Origin": config.aeId, "X-M2M-RI": "123456", "Content-Type": "application/json;ty=4" }, json: representation }; request(options, function (error, response, body) { console.log("◀◀◀◀◀"); if(error){ console.log(error); }else{ console.log(response.statusCode); //console.log(body); } }); }