This repository has been archived by the owner on Jul 29, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.js
113 lines (91 loc) · 2.81 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
var express = require('express')
var app = express()
var config = require('./config')
/* airbrake */
if ( config.USE_AIRBRAKE ){
var airbrake = require('airbrake').createClient(config.AIRBRAKE_API_KEY, 'production');
airbrake.serviceHost = config.AIRBRAKE_SERVICE_HOST;
app.use(airbrake.expressHandler());
}
/**/
var gpio = require("pi-gpio");
var pin = 11;
var relayOpen = false;
// require('coffee-script/register');
var Slack = require('slack-client');
var token = config.SLACK_TOKEN, // Add a bot at https://my.slack.com/services/new/bot and copy the token here.
autoReconnect = true,
autoMark = true;
var slack = new Slack(token, autoReconnect, autoMark);
slack.on('open', function() {
var unreads = slack.getUnreadCount();
console.log('Welcome to Slack. You are @%s of %s', slack.self.name, slack.team.name);
});
/* gpio */
gpio.close(pin); // Close pin 16
gpio.open(pin, "output", function(err) { // Open pin 16 for output
gpio.write(pin, 1, function() {});
});
app.get('/', function (req, res) {
res.send('Hello World!')
})
var server = app.listen(3000, function () {
var host = server.address().address
var port = server.address().port
console.log('Example app listening at http://%s:%s', host, port)
})
/* Slack */
slack.on('message', function(message) {
var type = message.type,
channel = slack.getChannelGroupOrDMByID(message.channel),
user = slack.getUserByID(message.user),
time = message.ts,
text = message.text,
response = '';
if (user === undefined){
/* skip channel messages(skip the messages which are not sent to sesame directly) */
return true;
}
console.log('Received: %s %s @%s %s "%s"', type, (channel.is_channel ? '#' : '') + channel.name, user.name, time, text);
if (type === 'message' && (user.name === 'neko' || user.name === 'sakir')) {
if (text === 'open' || (text.indexOf('open ') === 0)){
if(text === 'open'){
doorTimeout = 1;
}else{
doorTimeout = parseInt( text.replace("open ", "") );
}
if(doorTimeout > 10){
doorTimeout = 1;
}
if (doorTimeout == 0){
closeRelay();
}else{
openDoor(doorTimeout);
}
response = 'ok';
channel.send(response);
console.log('@%s responded with "%s"', slack.self.name, response);
}
}
});
slack.on('error', function(error) {
console.error('Error: %s', error);
});
slack.login();
/* /slack */
function openDoor(doorTimeout){
doorTimeout = doorTimeout || 1;
if(!relayOpen){
relayOpen = true;
console.log('open called');
gpio.write(pin, 0, function() {});
setTimeout(function() {
closeRelay();
}, (doorTimeout * 1000));
}
}
function closeRelay(){
gpio.write(pin, 1, function(){});
console.log('closed!');
relayOpen = false;
}