wabcam lib added
authorebelcrom <ebelcrom@gmail.com>
Sun, 9 Feb 2020 23:11:25 +0000 (00:11 +0100)
committerebelcrom <ebelcrom@gmail.com>
Sun, 9 Feb 2020 23:11:25 +0000 (00:11 +0100)
lib/gpio.js
lib/webcam.js [new file with mode: 0644]
routes/v1/events.js
routes/v1/status.js

index ebb3cfd7031f944f2e7ae827c4752c98f5d580bb..a39204a950eb7741429805b296de7d3664429491 100644 (file)
@@ -4,7 +4,7 @@ const log = require('./logger')(__filename.slice(__dirname.length + 1));
 const RELAIS = 16; // GPIO 23
 const REED = 11; // GPIO 17
 const UNKNOWN = 2;
-const DELAY = 10;
+const DELAY = 300;
 var reedState;
 var controlCallback = null;
 var notificationCallback = null;
@@ -38,7 +38,6 @@ function readDebounced(pin) {
     log.debug('state unknown');
     return UNKNOWN;
   } else {
-    log.debug('state :', state);
     return state;
   }
 }
diff --git a/lib/webcam.js b/lib/webcam.js
new file mode 100644 (file)
index 0000000..2ace8fa
--- /dev/null
@@ -0,0 +1,41 @@
+const log = require('./logger')(__filename.slice(__dirname.length + 1));
+const http = require('http');
+
+const username = 'view';
+const options = {
+  host: '192.168.3.2',
+  path: '/snapshot.cgi',
+  mthod: 'GET',
+  headers: {
+    'Authorization': 'Basic ' + new Buffer(username + ':').toString('base64')
+  }
+};
+
+function getImage() {
+  return new Promise((resolve, reject) => {
+    const req = http.request(options, (res) => {
+      var image = [];
+
+      res.on('data', (chunk) => {
+        image.push(chunk);
+      });
+
+      res.on('end', () => {
+        var buffer = Buffer.concat(image);
+        log.debug('Image size:', buffer.length);
+        resolve(buffer);
+      });
+    });
+
+    req.on('error', (err) => {
+      log.error('Webcam error', JSON.stringify(err));
+      reject('Webcam error');
+    });
+
+    req.end();
+  });
+}
+
+module.exports = {
+  getImage
+}
index cfcd85d48c218190f675ef3c8e3e71a2c03f666f..3b34896576e637fa5a4695b9f9cf6f79a484fb1d 100644 (file)
@@ -4,7 +4,6 @@ const qStr = require('query-string');
 const router = express.Router();
 const db = require('./../../lib/db');
 const EventEmitter = require('events');
-const fs = require('fs');
 
 const events = new EventEmitter();
 var response = null;
@@ -86,22 +85,18 @@ events.on('stateChanged', (state) => {
       'state': state
     };
     if (image) {
-      var file = null;
-      switch (state) {
-        case 'open':
-          file = fs.readFileSync(__dirname + '/../../public/images/open.jpg', 'base64');
-          break;
-        case 'closed':
-          file = fs.readFileSync(__dirname + '/../../public/images/closed.jpg', 'base64');
-          break;
-        default:
-          log.error('Unexpected status from state');
-          response.status(500).send();
-          return;
-      }
-      content['image'] = file;
+      webcam.getImage()
+      .then(image => {
+        content['image'] = new Buffer(image).toString('base64');
+        res.json(content);
+      })
+      .catch(err => {
+        log.error('Error on getting webcam image', JSON.stringify(err));
+        res.status(500).send();
+      });
+    } else {
+      res.json(content);
     }
-    response.json(content);
     response = null;
   }
 });
index d13224105b9b8e91ca448e4fff728e4f859ead2e..2e798394ec1786b724018a8ea35bb2b6f1983be5 100644 (file)
@@ -3,8 +3,8 @@ const log = require('./../../lib/logger')(__filename.slice(__dirname.length + 1)
 const qStr = require('query-string');
 const router = express.Router();
 const db = require('./../../lib/db');
-const fs = require('fs');
 const gpio = require('./../../lib/gpio');
+const webcam = require('./../../lib/webcam');
 
 /* Disables caching in client */
 function nocache(req, res, next) {
@@ -61,22 +61,18 @@ router.get('/', nocache, function(req, res, next) {
         'state': state
       };
       if (image) {
-        var file = null;
-        switch (state) {
-          case 'open':
-            file = fs.readFileSync(__dirname + '/../../public/images/open.jpg', 'base64');
-            break;
-          case 'closed':
-            file = fs.readFileSync(__dirname + '/../../public/images/closed.jpg', 'base64');
-            break;
-          default:
-            log.error('Unexpected status from settings');
-            res.status(500).send();
-            return;
-        }
-        content['image'] = file;
+        webcam.getImage()
+        .then(image => {
+          content['image'] = new Buffer(image).toString('base64');
+          res.json(content);
+        })
+        .catch(err => {
+          log.error('Error on getting webcam image', JSON.stringify(err));
+          res.status(500).send();
+        });
+      } else {
+        res.json(content);
       }
-      res.json(content);
     }
   });
 });