Solax PV Wechselrichter in den ioBroker über SolaxCloud einbinden

0
285
SolaxAdapter

Wenn kein zusätzlicher WLAN-Adapter auf dem Solax Wechselrichter verbaut ist, kann man die Daten nicht direkt vom Wechselrichter ziehen! Man muss über die SolaxCloud API ausweichen. Der Solax Adapter vom ioBroker funktioniert nicht.

Update 2022-05

Der Solax Wechselrichter kann über Modbus TCP abgerufen werden. Der Wechselrichter erlaubt jedoch nur einen (1) Client. Scheinbar wird der erste Client nach einem Neustart des Wechselrichters akzeptiert und alle weiten Clients blockiert.

Lösung für Solax Wechselrichter

Man ruft die Daten über ein Skript aus der API Schnittstelle von der SolayCloud ab. Leider fehlen viele Daten, aber besser als nichts.

Zuerst muss man die API Schnittstelle auf in der SolaxCloud (solaxcloud.com) aktivieren und eine TokenID erstellen.
Diese ID benötigen wir für das Skript später.
Dann benötigen wir noch die Registrierungsnummer vom Wechselrichter, die man unter Geräte – Wechselrichter findet. (Nicht die Seriennummer !!)

Im ioBroker den Javascript Adapter installieren, wenn noch nicht läft.

Hier ein neues Script erstellen und den Code unten einfügen.

Aus dem code muss man unter Id=xxxxxtokenxxxxx&sn=xxxxxxRegistrierungsnummerxxxxx den eigenen Token und die eigenen Registrierungsnummer einfügen.

var request = require('request');

var acpower = 'javascript.0.Solar.AusgangsleistungAktuell';
createState(acpower, 0, { read: true, write: true, desc: acpower, type: 'number' });

var yieldtoday = 'javascript.0.Solar.Tagesertrag';
createState(yieldtoday, 0, { read: true, write: true, desc: yieldtoday, type: 'number' });

var yieldtotal = 'javascript.0.Solar.Gesamtertrag';
createState(yieldtotal, 0, { read: true, write: true, desc: yieldtotal, type: 'number' });

var feedinpower = 'javascript.0.Solar.Einspeisung-Netzbezug-Jetzt';
createState(feedinpower, 0, { read: true, write: true, desc: feedinpower, type: 'number' });

var feedinenergy = 'javascript.0.Solar.Netzeinspeisung-Total';
createState(feedinenergy, 0, { read: true, write: true, desc: feedinenergy, type: 'number' });

var consumeenergy = 'javascript.0.Solar.Netzbezug-Total';
createState(consumeenergy, 0, { read: true, write: true, desc: consumeenergy, type: 'number' });

var soc = 'javascript.0.Solar.BatterieLadestatus';
createState(soc, 0, { read: true, write: true, desc: soc, type: 'number' });

var batPower = 'javascript.0.Solar.BatterieLeistungWatt';
createState(batPower, 0, { read: true, write: true, desc: batPower, type: 'number' });

var powerdc1 = 'javascript.0.Solar.PV-String-1-Watt';
createState(powerdc1, 0, { read: true, write: true, desc: powerdc1, type: 'number' });

var powerdc2 = 'javascript.0.Solar.PV-String-2-Watt';
createState(powerdc2, 0, { read: true, write: true, desc: powerdc2, type: 'number' });

var inverterStatus = 'javascript.0.Solar.PV-Anlage-Satus';
createState(inverterStatus, 0, { read: true, write: true, desc: inverterStatus, type: 'number' });

function getInfo(answer) {
    var options = {
        url: 'https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=xxxxxtokenxxxxx&sn=xxxxxxRegistrierungsnummerxxxxx',
        method: 'GET', headers: { 'User-Agent': 'request' }
    };

    request(options, callback);

    function callback(error, response, body) {
        if (!error && response.statusCode == 200) {
            answer(JSON.parse(body));
        }
    }
}

schedule('*/2 * * * *', function () {  // each 2 min
    getInfo(function (read) {
        setState(acpower, read.result.acpower);
    });
});

schedule('*/8 * * * *', function () {  //
    getInfo(function (read) {
        setState(yieldtoday, read.result.yieldtoday);
    });
});

schedule('*/8 * * * *', function () {  //
    getInfo(function (read) {
        setState(yieldtotal, read.result.yieldtotal);
    });
});
schedule('*/8 * * * *', function () {  //
    getInfo(function (read) {
        setState(feedinpower, read.result.feedinpower);
    });
});
schedule('*/8 * * * *', function () {  //
    getInfo(function (read) {
        setState(feedinenergy, read.result.feedinenergy);
    });
});
schedule('*/4 * * * *', function () {  //
    getInfo(function (read) {
        setState(consumeenergy, read.result.consumeenergy);
    });
});
schedule('*/5 * * * *', function () {  //
    getInfo(function (read) {
        setState(soc, read.result.soc);
    });
});
schedule('*/5 * * * *', function () {  //
    getInfo(function (read) {
        setState(batPower, read.result.batPower);
    });
});
schedule('*/2 * * * *', function () {  //
    getInfo(function (read) {
        setState(powerdc1, read.result.powerdc1);
    });
});
schedule('*/2 * * * *', function () {  //
    getInfo(function (read) {
        setState(powerdc2, read.result.powerdc2);
    });
});
schedule('*/20 * * * *', function () {  //
    getInfo(function (read) {
        setState(inverterStatus, read.result.inverterStatus);
    });
});

Die Daten findet man dann unter Objekte.

Bei Fragen unten in die Kommentare!

Solax PV Wechselrichter Problem

Leider wird man beim Abfrageintervall von Solax sehr stark eingeschränkt. Man kann nur alle ca. 5-10 Minuten Werte abfragen. Macht man es öfter, so kommt eine Fehlermeldung, dass man zu oft eine Abfrage macht. Hier zählen jedoch nicht nur die API Webabfragen, sondern auch die Abfrage über die Smartphone App. So kann es schon passieren, dass man mal 30 Minuten keine Werte bekommt. Somit ist das System eher ungeeignet, wenn man zusätzliche Geräte über die Solax Werte steuern möchte. Würde man z.B einen PV Heizstab einsetzen und die Solax Werte für die Steuerung verwenden, wäre es ungenau und man würde oft hohle Verluste machen.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein