Influx Uploading
This commit is contained in:
66
index.js
66
index.js
@@ -1,4 +1,68 @@
|
||||
import axios from 'axios'
|
||||
import fs from 'fs'
|
||||
let config = JSON.parse(fs.readFileSync('config.json', 'utf8'))
|
||||
|
||||
// name influxKey=data[valueKey],influxKey=data[valueKey],...
|
||||
|
||||
const config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
|
||||
axios.get(config.servers.deconz.url + '/api/' + config.servers.deconz.apiKey + '/sensors')
|
||||
.then(response => {
|
||||
let sensors = response.data
|
||||
let data = []
|
||||
let influxPayload = ""
|
||||
let devices = {}
|
||||
// Filter only the data we find relevant
|
||||
for (let sensor in sensors) { // sensor: "10"
|
||||
try {
|
||||
if (sensors[sensor].config.reachable) {
|
||||
data.push({
|
||||
uniqueId: sensors[sensor].uniqueid,
|
||||
data: sensors[sensor].state
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
|
||||
// Assemble data from specified sensors
|
||||
[...config.devices].forEach(device => {
|
||||
try{
|
||||
if (!devices[device.name]) {
|
||||
devices[device.name] = []
|
||||
}
|
||||
let relevantData = data.filter(sensor => sensor.uniqueId.includes(device.uniqueId))
|
||||
let value = relevantData[0].data[device.valueKey]/device.valueModifier
|
||||
if (device.valueModifier != 1){
|
||||
value = Math.round(relevantData[0].data[device.valueKey]/device.valueModifier).toFixed(2)
|
||||
}
|
||||
devices[device.name].push(`${device.influxKey}=${value}`)
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
})
|
||||
|
||||
// Assemble influx payload
|
||||
for (let device in devices) {
|
||||
influxPayload += `${device} ${devices[device].join(",")}\n`
|
||||
}
|
||||
influxPayload = influxPayload.slice(0, -1)
|
||||
|
||||
// Send data to influx
|
||||
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.log(error.response.data)
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(error)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user