Eaton UPS Companion zu Home-Assistant dumpen
NUTs mal nicht zum Laufen bekommen. Die Ellipse Eco hat die Software “Eaton UPS Companion” dabei. Auf nem Windows-Host installiert und gecheckt – die schreibt Logs lokal in einer Datei.
Also – bauen wir ein Script, welches die Datei ausliest, via HTTP zur Verfügung stellt, und sagen HomeAssistant, dass es die via diese API abgreift.
Auf dem Server ein neues Script, z.B. in D:\...\index.js
ablegen:
var http = require('http');
var fs = require('fs');
const path = "C:\\Program Files (x86)\\Eaton\\UPSCompanion\\configs\\energy.log"
const getCurrent = () => {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
if (err) {
return reject(err);
}
return resolve((data + "").split("|")[0]/3600/1000);
});
});
};
http.createServer(async function (req, res) {
try {
const data = await getCurrent();
res.write(JSON.stringify({ kWh: data }));
res.end(); //end the response
} catch(e) {
res.write(e.stack);
res.end();
}
}).listen(8888);
Code language: JavaScript (javascript)
Als Service auf dem Host installieren:
npm install -g qckwinsvc
npx qckwinsvc
prompt: Service name: eaton-service
prompt: Service description: Service für Eaton
prompt: Node script path: D:\...\index.js
prompt: Should the service get started immediately? (y/n): y
Service installed.
Service started.
Code language: JavaScript (javascript)
Kurzer Check -> http://localhost:8888/data und ggfs die Windows-Firewall anpassen
In Home-Assistant den Rest-Sensor hinterlegen
rest:
- resource: http://10.0.0.3:8888/data
scan_interval: 60
sensor:
- name: "Eaton UPS Companion: Verbrauch seit letztem Reset"
device_class: energy
state_class: total_increasing
unit_of_measurement: "kWh"
value_template: "{{ value_json.kWh }}"
Code language: JavaScript (javascript)
Und schon tracken wir die USV via Home-Assistant 🙂