68 lines
2.7 KiB
JavaScript
68 lines
2.7 KiB
JavaScript
import axios from 'axios'
|
|
import WebSocket from 'ws'
|
|
import fs from 'fs'
|
|
import exec from 'child_process'
|
|
let config = JSON.parse(fs.readFileSync('config.json', 'utf8'))
|
|
let SOCKET_URL = `ws://${config.servers.deconz.url}:${config.servers.deconz.websocketPort}`
|
|
console.log(SOCKET_URL)
|
|
let ws = new WebSocket(SOCKET_URL)
|
|
|
|
ws.on('error', (error) => {
|
|
console.error('WebSocket error:', error)
|
|
console.log("ERROR")
|
|
})
|
|
ws.on('close', (code, reason) => {
|
|
console.log(`Connection closed with code ${code} and reason: ${reason}`);
|
|
// Clean up any resources here
|
|
})
|
|
|
|
|
|
ws.on('message', msg => {
|
|
let data = JSON.parse(msg)
|
|
//fs.appendFileSync('socket.log', msg+'\n')
|
|
try {
|
|
if (data.state) {
|
|
let device = config.wsDevices.find(device => device.uniqueId === data.uniqueid)
|
|
if (device) {
|
|
let payloadValue = (device.valueKey == 'open') ? (data.state['open'] ? 0 : 1) : data.state[device.valueKey]
|
|
let influxPayload = `${device.name} ${device.influxKey}=${payloadValue}`
|
|
console.log(`${new Date().toString()} 👉🏻 Sending ${influxPayload}`)
|
|
axios.post(`${config.servers.influx.url}/api/v2/write?orgID=${config.servers.influx.orgId}&bucket=${config.servers.influx.bucket}`,
|
|
influxPayload,
|
|
{
|
|
headers: {
|
|
Authorization: `Token ${config.servers.influx.apiKey}`,
|
|
'Content-Type': 'text/plain'
|
|
}
|
|
}
|
|
).then(response => {
|
|
console.log(response.data)
|
|
}).catch(error => {
|
|
console.error(error)
|
|
console.log("ERROR")
|
|
})
|
|
if (device.openScript && data.state[device.valueKey]) {
|
|
console.log("Running open script")
|
|
let scriptToRun = device.openScript.replace("%VALUE%", payloadValue)
|
|
try {
|
|
|
|
exec.exec(scriptToRun, (error, stdout, stderr) => {
|
|
if (error || stderr) {
|
|
console.error(`Error executing script: ${error ? error.message : stderr}`);
|
|
return;
|
|
}
|
|
console.log(`Script output: ${stdout}`);
|
|
});
|
|
} catch (error) {
|
|
console.error(error)
|
|
console.log("ERROR")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(error)
|
|
console.log("ERROR")
|
|
}
|
|
})
|