wirenboard-module
Version:
Command to quick install modules for wirenboard
124 lines (102 loc) • 2.46 kB
JavaScript
// TODO: Do nothing if it is not wirenboard
const MODULE_NAME = 'wirenboard-module'
const MODULES_DIR = '/etc/wb-rules-modules'
const RULES_DIR = '/etc/wb-rules'
const MODULES = [
'ebus',
'heater',
'climate',
'greenhouse',
'zigbee',
'email',
'sms',
'ledstrip',
'guard',
'gas',
'smoke',
'smoke-adc',
'siren',
'flood',
'terneo',
]
let HELP = `
Available commands:`
MODULES.forEach(name => {
HELP += `${MODULE_NAME} ${name} \n`
})
HELP += '\n'
const path = require('path')
const fs = require('fs')
const { exec } = require('child_process')
//
// Files //
//
const copyModule = (module_name, cb_onDone) => {
if (!fs.existsSync(MODULES_DIR)){
fs.mkdirSync(MODULES_DIR)
}
fs.copyFile(
path.resolve(__dirname, '../node_modules/wirenboard-module-' + module_name + '/wb-rules-modules/' + module_name + '.js'),
path.resolve(MODULES_DIR, module_name + '.js'), err => {
if (err) throw err
cb_onDone()
})
}
const copyRule = (module_name, cb_onDone) => {
if (!fs.existsSync(RULES_DIR)){
fs.mkdirSync(RULES_DIR)
}
fs.copyFile(
path.resolve(__dirname, '../node_modules/wirenboard-module-' + module_name + '/wb-rules/' + module_name + '.js'),
path.resolve(RULES_DIR, module_name + '_rule.js'), err => {
if (err) throw err
cb_onDone()
})
}
//
// CMD //
//
const execCommand = (cmd, cb_onDone) => {
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log('Error: could not execute command: ' + cmd)
return
}
if (stdout) console.log(stdout)
if (stderr) console.log(stderr)
cb_onDone()
})
}
//
// Main //
//
// get arguments after first two elements //
const arguments = process.argv.splice(2)
if (!arguments.length) {
console.log(HELP)
return
}
arguments.forEach(arg => {
// validate name //
if (!MODULES.includes(arg)) {
console.log("Bad module name: " + arg)
console.log(HELP)
process.exit()
}
})
// copy files //
let completedCount = 0
arguments.forEach(arg => {
copyModule(arg, () => {
copyRule(arg, () => {
console.log('+ Added module: ' + arg)
completedCount += 1
if (completedCount === arguments.length) {
execCommand('service wb-rules restart', () => {
console.log('+ Wirenboard rules restarted')
})
}
})
})
})