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") } })