NEWS

Piko 5.5 Wechselrichter (alte Firmware) auslesen


  • Forum Testing Most Active

    Hallo,

    bisher hatte ich o.g. Thema per Script erledigt mit einem js.modul "cheerio". Dieses läuft aber nicht mehr (warum weiß ich nicht).
    Nun habe ich das Script erfolgreich umgeschrieben. Die Werte werden ausgelesen per regex (hier nochmals Danke an homoran; ohne ihn hätte ich den regex nicht gebacken bekommen).

    Die Objekte müsst ihr logischerweise manuell anlegen; oder per nachfolgendem Script:

    // Photovoltaik -------------------------------------------------------------------------------------------------------------
    createState('javascript.0.Status.Photovoltaik.Leistung_aktuell', 0, {type: 'number',name: 'Leistung aktuell',min: 0,role: 'per Script'});
    createState('javascript.0.Status.Photovoltaik.Tagesleistung', 0, {type: 'number',name: 'Tagesleistung',min: 0,role: 'per Script'});
    createState('javascript.0.Status.Photovoltaik.Leistung_gesamt', 0, {type: 'number',name: 'Leistung gesamt',min: 0,role: 'per Script'});
    createState('javascript.0.Status.Photovoltaik.Leistung_Strang1', 0, {type: 'number',name: 'Leistung Strang 1',min: 0,role: 'per Script'});
    createState('javascript.0.Status.Photovoltaik.Leistung_Strang2', 0, {type: 'number',name: 'Leistung Strang 2',min: 0,role: 'value'});
    
    

    Diese einmalig in ein Script kopieren, starten und fertig.

    Und nun das eigentliche Script. Eure Zugangswerte müsst ihr natürlich angleichen. Das Script fragt die Werte alle 5 Minuten ab (siehe Schedule). Könnt ihr natürlich ändern.

    
    // Photovoltaik: Piko 5.5 Anlage (alte Firmware)
    // Danke an homoran für den regex
    // @bahnuhr; 03/2019 Dieter Müller
    
    //Variaben
        var idaktuell = 'javascript.0.Status.Photovoltaik.Leistung_aktuell';
        var idTag = 'javascript.0.Status.Photovoltaik.Tagesleistung';
        var idall = 'javascript.0.Status.Photovoltaik.Leistung_gesamt';
        var idP1 = 'javascript.0.Status.Photovoltaik.Leistung_Strang1';
        var idP2 = 'javascript.0.Status.Photovoltaik.Leistung_Strang2';
    
        var NameAnlage = 'xxx';        // Nutzername der Photovoltaik-Anlage
        var PassAnlage = 'xxx';         // Password der Photovoltaik-Anlage
        var IPAnlage = '192.168.xxx.xx';    // IP der Photovoltaik-Anlage
    
        var logging = false;
        var request = require('request');
    
    
     function Piko() {
        if (logging) log("Piko 5.5 auslesen");
        var results = [];
        request('http://' + NameAnlage + ':' + PassAnlage +'@' + IPAnlage, function (error, response, body) {
            var d = body.toString();
            var reg = /#FFFFFF">[^\d]+([^<]+)/g
            var z = reg.exec(d);
    
            while(z != null) {
                if (isNaN(z[1])) {
                    if (logging) log("keine Zahl= "+ z[1]);
                    z[1] = 0;
                } else {
                    if (logging) log("Zahl= "+ z[1]);
                    parseFloat(z[1]);
                }
                results[results.length] = z[1];
                z = reg.exec(d);
            }
            if (logging) log("results= "+ results);
    
        // Werte zuordnen
            var pwr = results[0];           // Energie aktuell in W
            var day = results[2];           // Tagesenergie in kWh
            var all = results[1];           // Gesamtenergie in kWh
            var v1 = results[3];            // PV Generator Nr. 1 - Spannung in V
            var i1 = results[5];            // PV Generator Nr. 1 - Strom in A
            var p1 = parseInt(v1 * i1);
            var v2 = results[7];            // PV Generator Nr. 2 - Spannung in V
            var i2 = results[9];            // PV Generator Nr. 2 - Strom in A
            var p2 = parseInt(v2 * i2);
    
            log("Leistung aktuell= " + pwr + " W");
            log("Tagesleistung= " + day + " kWh");
            log("Leistung gesamt= " + all + " kWh");
    	    log("Leistung Strang 1= " + p1 + " W");
        	log("Leistung Strang 2= " + p2 + " W");
    
            setState(idaktuell, parseFloat(pwr));
            setState(idTag, parseFloat(day));
            setState(idall, parseFloat(all));
            setState(idP1, parseFloat(p1));
            setState(idP2, parseFloat(p2));
        });
    }
    
    
    schedule("2,7,12,17,22,27,32,37,42,47,52,57 * * * *", function () {
        log ("Auslöser: Schedule");
    	Piko();
    });
    
    schedule("3 0 * * *", function () {     // Variablen löschen um 00:03 Uhr   
        setState('javascript.0.Status.Photovoltaik.Tagesleistung', 0);
    });
    
    

    Geht bestimmt auch kürzer; oder schöner im js.Stil. Aber es läuft.

    mfg


Log in to reply
 

Suggested Topics

1.8k
Online

32.2k
Users

38.9k
Topics

526.7k
Posts