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 🙂