From 200046b0f183420dd23f391720a740607a1ec288 Mon Sep 17 00:00:00 2001 From: Tim Windelschmidt Date: Sat, 5 Sep 2015 12:18:35 +0200 Subject: [PATCH] Added HTML5 Push-Notifications --- node/package.json | 31 ++++++++++---------- node/statusbot.js | 73 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 68 insertions(+), 36 deletions(-) diff --git a/node/package.json b/node/package.json index fe52d43..cf1807c 100644 --- a/node/package.json +++ b/node/package.json @@ -1,17 +1,18 @@ { - "name": "statusbot", - "description": "ctdo status bot", - "version": "0.0.1", - "private": true, - "dependencies": { - "express": "3.4", - "connect-flash": "0.1.1", - "net-snmp": "1.1.8", - "redis": "0.8.5", - "underscore": "1.5.2", - "jade": "0.35", - "socket.io": "0.9.16", - "moment": "2.3.1" - }, - "main": "index" + "name": "statusbot", + "description": "ctdo status bot", + "version": "0.0.1", + "private": true, + "dependencies": { + "connect-flash": "0.1.1", + "express": "3.4", + "jade": "0.35", + "moment": "2.3.1", + "net-snmp": "1.1.8", + "node-notifier": "^4.2.3", + "redis": "0.8.5", + "socket.io": "0.9.16", + "underscore": "1.5.2" + }, + "main": "index" } diff --git a/node/statusbot.js b/node/statusbot.js index dcbbe78..df4cdfa 100644 --- a/node/statusbot.js +++ b/node/statusbot.js @@ -1,7 +1,8 @@ var express = require('express'), - app = express(), - server = require('http').createServer(app), - io = require('socket.io').listen(server); + app = express(), + server = require('http').createServer(app), + io = require('socket.io').listen(server), + notifier = require('node-notifier'); var flash = require('connect-flash'); var moment = require('moment'); var SnmpMac = require("./snmp-mac"); @@ -31,7 +32,7 @@ var spaceanswer = { twitter: "@ctdo", issue_mail: "server-admin@chaostreff-dortmund.de" }, - issue_report_channels: [ "issue_mail" ], + issue_report_channels: ["issue_mail"], state: { open: null, lastchange: 0, @@ -41,23 +42,25 @@ var spaceanswer = { } }, sensors: { - power_consumption: [ { - unit: "W", - name: "mains power", - description: "overall power consumption from our space", - location: "basement", - value: 0 } ] + power_consumption: [{ + unit: "W", + name: "mains power", + description: "overall power consumption from our space", + location: "basement", + value: 0}] } }; -var simpleanswer = { state: "unknown", count: 0, names: [], lastchange: 0, power: 0 }; -var usercountanswer = { at: 0, current_value: 0, datapoints: [ - { at: 0, value: 0 } -]}; +var simpleanswer = {state: "unknown", count: 0, names: [], lastchange: 0, power: 0}; +var usercountanswer = {at: 0, current_value: 0, datapoints: [ + {at: 0, value: 0} + ]}; var snmpMac = new SnmpMac("juni.ctdo.de", "ctdo23"); var ippoll = new IpPoll("switch2.raum.ctdo.de", "195.160.169.30-120"); var flukso = new Flukso("flukso.raum.ctdo.de", "/sensor/cf00e0b22230f4a8870af58f2b8719dd"); +var laststate = false; + snmpMac.on('done', function (res) { simpleanswer.names = res; simpleanswer.lastchange = new Date().getTime(); @@ -74,23 +77,55 @@ ippoll.on('doneState', function (state) { spaceanswer.state.lastchange = new Date().getTime(); simpleanswer.state = state; simpleanswer.lastchange = spaceanswer.state.lastchange; - io.sockets.emit('sdata', { data: simpleanswer }); + io.sockets.emit('sdata', {data: simpleanswer}); }); flukso.on('done', function (num) { simpleanswer.power = num; spaceanswer.sensors.power_consumption[0].value = num; - io.sockets.emit('sdata', { data: simpleanswer }); + io.sockets.emit('sdata', {data: simpleanswer}); }); io.configure(function () { io.set('log level', 0); }); +notifier.on('click', function (notifierObject, options) { + // Happens if `wait: true` and user clicks notification +}); + +notifier.on('timeout', function (notifierObject, options) { + // Happens if `wait: true` and notification closes +}); function work() { snmpMac.poll(); ippoll.pollCount(); + + if (spaceanswer.state.open == true && laststate != true) { + laststate == true; + notifier.notify({ + title: 'CTDO - Statusänderung', + message: 'Der Chaostreff Dortmund ist nun offen.', + icon: path.join('public/img/green.png'), // absolute path (not balloons) + sound: true, // Only Notification Center or Windows Toasters + wait: true // wait with callback until user action is taken on notification + }, function (err, response) { + // response is response from notification + }); + } else if (spaceanswer.state.open == false && lasttaste != false) { + laststate == false; + + notifier.notify({ + title: 'CTDO - Statusänderung', + message: 'Der Chaostreff Dortmund ist nun geschlossen.', + icon: path.join('public/img/red.png'), // absolute path (not balloons) + sound: true, // Only Notification Center or Windows Toasters + wait: true // wait with callback until user action is taken on notification + }, function (err, response) { + // response is response from notification + }); + } } setInterval(work, 60000); @@ -111,7 +146,7 @@ app.configure('development', function () { app.use(express.static(__dirname + '/public')); app.use(express.bodyParser()); app.use(express.cookieParser('chaostreff')); -app.use(express.session({ cookie: { maxAge: 60000 }})); +app.use(express.session({cookie: {maxAge: 60000}})); app.use(flash()); @@ -149,7 +184,3 @@ app.post('/form', routes.form); app.get('/', routes.index); server.listen(3000, 'localhost'); - - - -