-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
60 lines (48 loc) · 1.39 KB
/
server.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
'use strict'
const path = require('path')
const domapic = require('domapic-service')
const gpioIn = require('gpio-in-domapic')
const pluginConfigs = require('./lib/plugins.json')
const {
ABILITY_NAME,
DEBOUNCE_OPTION,
ABILITY_DESCRIPTION,
ABILITY_STATE_DESCRIPTION,
ABILITY_EVENT_DESCRIPTION,
REVERSE_OPTION
} = require('./lib/statics')
const options = require('./lib/options')
domapic.createModule({
packagePath: path.resolve(__dirname),
customConfig: options
}).then(async dmpcModule => {
const contactSensor = new gpioIn.Gpio(dmpcModule, {
}, {
debounceTimeout: DEBOUNCE_OPTION
})
const reverse = await dmpcModule.config.get(REVERSE_OPTION)
const gpioValue = value => reverse ? !value : value
await dmpcModule.register({
[ABILITY_NAME]: {
description: ABILITY_DESCRIPTION,
data: {
type: 'boolean'
},
state: {
description: ABILITY_STATE_DESCRIPTION,
handler: () => gpioValue(contactSensor.status)
},
event: {
description: ABILITY_EVENT_DESCRIPTION
}
}
})
await dmpcModule.addPluginConfig(pluginConfigs)
await contactSensor.init()
contactSensor.events.on(gpioIn.Gpio.eventNames.CHANGE, newValue => {
const value = gpioValue(newValue)
dmpcModule.tracer.debug(ABILITY_EVENT_DESCRIPTION, value)
dmpcModule.events.emit(ABILITY_NAME, value)
})
return dmpcModule.start()
})