hap-homematic
Version:
provides a homekit bridge to the ccu
76 lines (70 loc) • 2.05 kB
JavaScript
/**
* hm_addon.js Node version of hm_addon command
* creates or removes a button from homematic webui system page
* usage : node hm_addon.js uid [configfile]
* 2020 by thkl https://github.com/thkl
*
*/
const fs = require('fs')
let cfgFileName = '/etc/config/hm_addons.cfg'
let regex = /(.*?) \{CONFIG_URL (.*?) CONFIG_DESCRIPTION \{de (.*?) en (.*?)\} ID (.*?) CONFIG_NAME (.*?)\} /g
var m
var items = {}
var addItem
// First parameter is the uid second the config
var myArgs = process.argv.slice(2)
if (myArgs.length === 0) {
console.log('usage : hm_addon.js uid [configfile]')
process.exit(-1)
}
let uid = myArgs[0]
if (myArgs.length === 2) {
if (fs.existsSync(myArgs[1])) {
var buffer = fs.readFileSync(myArgs[1], 'utf8')
let tmp = JSON.parse(buffer.toString())
addItem = {
'uid': uid.toLocaleLowerCase(),
'url': tmp.CONFIG_URL,
'de': tmp.CONFIG_DESCRIPTION.de,
'en': tmp.CONFIG_DESCRIPTION.en,
'id': tmp.ID,
'name': tmp.CONFIG_NAME
}
} else {
}
}
if (fs.existsSync(cfgFileName)) {
let contents = fs.readFileSync(cfgFileName, 'utf8')
if (contents.slice(-1) !== ' ') {
contents = contents + ' ' // add a space for easyer parsing
}
do {
m = regex.exec(contents)
if (m) {
let item = {
'uid': m[1].toLocaleLowerCase(),
'url': m[2],
'de': m[3],
'en': m[4],
'id': m[5],
'name': m[6]
}
items[m[1]] = item
}
} while (m)
}
if (addItem !== undefined) {
items[uid] = addItem
console.log('add %s', uid)
} else {
delete items[uid]
console.log('remove %s', uid)
}
var strout = ''
Object.keys(items).forEach(key => {
let item = items[key]
// check remove config there is no config and the uid did not match the given uid
strout = strout + item.uid.toLocaleLowerCase() + ' {CONFIG_URL ' + item.url + ' CONFIG_DESCRIPTION {de ' + item.de
strout = strout + ' en ' + item.en + '} ID ' + item.id + ' CONFIG_NAME ' + item.name + '} '
})
fs.writeFileSync(cfgFileName, strout, 'utf8')