NEWS

  • Forum Testing Most Active Global Moderator Administrators

    Ich will mich mal wieder einen Schritt weiter in JS einarbeiten.
    Vieles weiß ich schon, traue mich aber noch nicht so richtig, zumal Blockly (erst recht mit den zukünftigen neuen Bausteinen) eine fast vollwertige und einfachere Alternative ist.

    Mein jetziges Problem ist, dass ich zwei "geklaute" Skripte/Adapter miteinander kombinieren muss, was mir bisher nicht wirklich geggückt ist. Es ist zwar mit viel try and error immer besser geworden, daber nicht korrekt.

    Es geht um die Berechnung des effektiven Stromverbrauchs aus Daten vom Smartmeter-Adapters (Momentanwert Gesamtwirkleistung (Total) ist +/- je nach Leistung der Solaranlage) und dem Wert der AC-Leistung des Wechselrichters nach Auslesen desselben über ein Skript.

    Diese Werte kommen nicht synchron. Insbesondere bei stark wolkigem Wetter und schnell wechselndem Solarertrag ist eine Berechnung alle 10 Sekunden oft nicht korrekt, da die Werte so nicht synchronisiert sind.
    Solarwerte.png

    Ich denke, dass es funktionieren würde, wenn ich das Auslese skript nicht per schedule

    schedule("*/11 * 5-23 * * *", Piko);
    

    sondern irgendwo zu Beginn auf die Änderung des Wertes des smartmeteradapters synchronisieren würde.

    Wenn ich inzwischen richtig aufgepasst habe muss da irgendetwas mit

    ON...smartmeter.0.1-0:16_7_0_255.value.. not equal
    

    rein.

    Aber wo und wie genau?

    Danke für jede Hilfe

  • Forum Testing

    Hallo Rainer,

    versuch es mal so:

    on({id: "smartmeter.0.1-0:16_7_0_255.value", change: "ne"}, function (obj) {
    
    // Ausleseskript Wechselrichter Kostal Piko ab Firmware v05.31 (12.10.2015)
    
    //Variable
    
     //Leistungswerte
        ID_DCEingangGesamt = 33556736;         // in W
        ID_Ausgangsleistung = 67109120;        // in W
        ID_Eigenverbrauch = 83888128;          // in W
        //Status
        ID_Status = 16780032;                  // 0:Off
        //Statistik - Tag
        ID_Ertrag_d = 251658754;               // in Wh
        ID_Hausverbrauch_d = 251659010;        // in Wh
        ID_Eigenverbrauch_d = 251659266;       // in Wh
        ID_Eigenverbrauchsquote_d = 251659278; // in %
        ID_Autarkiegrad_d = 251659279;         // in %
        //Statistik - Gesamt
        ID_Ertrag_G = 251658753;               // in kWh
        ID_Hausverbrauch_G = 251659009;        // in kWh
        ID_Eigenverbrauch_G = 251659265;       // in kWh
        ID_Eigenverbrauchsquote_G = 251659280; // in %
        ID_Autarkiegrad_G = 251659281;         // in %
        ID_Betriebszeit = 251658496;           // in h
        //Momentanwerte - PV Genertor
        ID_DC1Spannung = 33555202;             // in V
        ID_DC1Strom = 33555201;                // in A
        ID_DC1Leistung = 33555203;             // in W
        ID_DC2Spannung = 33555458;             // in V
        ID_DC2Strom = 33555457;                // in A
        ID_DC2Leistung = 33555459;             // in W
        //Momentanwerte Haus
        ID_HausverbrauchSolar = 83886336;      // in W
        ID_HausverbrauchBatterie = 83886592;   // in W
        ID_HausverbrauchNetz = 83886848;       // in W
        ID_HausverbrauchPhase1 = 83887106;     // in W
        ID_HausverbrauchPhase2 = 83887362;     // in W
        ID_HausverbrauchPhase3 = 83887618;     // in W
        //Netz Netzparameter
        ID_NetzAusgangLeistung = 67109120;     // in W
        ID_NetzFrequenz = 67110400;            // in Hz
        ID_NetzCosPhi = 67110656;
        //Netz Phase 1
        ID_P1Spannung = 67109378;              // in V
        ID_P1Strom = 67109377;                 // in A
        ID_P1Leistung = 67109379;              // in W
        //Netz Phase 2
        ID_P2Spannung = 67109634;              // in V
        ID_P2Strom = 67109633;                 // in A
        ID_P2Leistung = 67109635;              // in W
        //Netz Phase 3
        ID_P3Spannung = 67109890;              // in V
        ID_P3Strom = 67109889;                 // in A
        ID_P3Leistung = 67109891;              // in W
    
    
     
    var IPAnlage = '192.168.138.103/api/dxs.json';   // IP der Photovoltaik-Anlage
    
    
    
    createState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_AC_aktuell', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_d',0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_G',0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Betriebszeit',0);
    createState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_DC_aktuell',0);
    createState('Messwerte.0.Solaranlage.Momentanwerte.Eigenverbrauch',0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_d');
    createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_G', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_d', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_G', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Tagesertrag', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Gesamtertrag', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_d', 0);
    createState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_G', 0);
    createState('Messwerte.0.Solaranlage.Momentanwerte.P1Spannung');
    createState('Messwerte.0.Solaranlage.Momentanwerte.P2Spannung');
    createState('Messwerte.0.Solaranlage.Momentanwerte.P1Strom');
    createState('Messwerte.0.Solaranlage.Momentanwerte.P2Strom');
    createState('Messwerte.0.Solaranlage.Momentanwerte.P1Leistung');
    createState('Messwerte.0.Solaranlage.Momentanwerte.P2Leistung');
    
    
    var logging = false;
    var request = require('request');
    
    function Piko() {
        if (logging) log("Piko 5.5 auslesen");
        request('http://' + IPAnlage + 
        '?dxsEntries=' + ID_DCEingangGesamt +
        '&dxsEntries=' + ID_Ausgangsleistung +
        '&dxsEntries=' + ID_Eigenverbrauch +
        '&dxsEntries=' + ID_Eigenverbrauch_d +
        '&dxsEntries=' + ID_Eigenverbrauch_G +
        '&dxsEntries=' + ID_Eigenverbrauchsquote_d +
        '&dxsEntries=' + ID_Eigenverbrauchsquote_G +
        '&dxsEntries=' + ID_Ertrag_d +
        '&dxsEntries=' + ID_Ertrag_G +
        '&dxsEntries=' + ID_Hausverbrauch_d +
        '&dxsEntries=' + ID_Hausverbrauch_G +
        '&dxsEntries=' + ID_Autarkiegrad_G +
        '&dxsEntries=' + ID_Autarkiegrad_d +
        '&dxsEntries=' + ID_Betriebszeit +
        '&dxsEntries=' + ID_P1Spannung +
        '&dxsEntries=' + ID_P2Spannung +
        '&dxsEntries=' + ID_P1Strom +
        '&dxsEntries=' + ID_P2Strom +
        '&dxsEntries=' + ID_P1Leistung +
        '&dxsEntries=' + ID_P2Leistung +
        '&dxsEntries=' + ID_Status +
        '&dxsEntries=' + ID_DC1Leistung +
        '&dxsEntries=' + ID_DC2Leistung,
        
        function (error, response, body) {
            if(!error && response.statusCode ==200) {
                if(logging) log(body);
                var result = JSON.parse(body).dxsEntries;
                setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_DC_aktuell', result[0].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_AC_aktuell', result[1].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.Eigenverbrauch', result[2].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_d', result[3].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_G', result[4].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_d', result[5].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_G', result[6].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Tagesertrag', result[7].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Gesamtertrag', result[8].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_d', result[9].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_G', result[10].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_G', result[11].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_d', result[12].value || 0, true);
                setState('Messwerte.0.Solaranlage.Summenwerte.Betriebszeit', result[13].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.P1Spannung', result[14].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.P2Spannung', result[15].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.P1Strom', result[16].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.P2Strom', result[17].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.P1Leistung', result[18].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.P2Leistung', result[19].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.Status', result[20].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_String1', result[21].value || 0, true);
                setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_String2', result[22].value || 0, true);
            } else {
                log("Fehler: " + error + " bei Abfrage von: " + url, "warn");
            }
        });
    }
    
    
    });
    

    Wenn der Wert von "smartmeter.0.1-0:16_7_0_255.value" sich ändert und ungleich dem vorherigen Wert ist, wird getriggert.

    Viele Grüße
    Christian


  • @Homoran Anstelle des schedule() am Skriptende ein on() als Trigger auf den Smartmeter-Datenpunkt.

    on('smartmeter.0.1-0:16_7_0_255.value', Piko); // triggert bei Wertänderung
    

    Hoffentlich erfolgt die Wertänderung nicht zu schnell.

  • Forum Testing Most Active Global Moderator Administrators

    Danke Paul!

    @paul53 sagte in Adapterwerte und Script synchronisieren:

    am Skriptende

    Das erschien mir auch am logischsten, aber ich dachte das muss immer (ziemlich weit) oben stehen.

    @paul53 sagte in Adapterwerte und Script synchronisieren:

    Hoffentlich erfolgt die Wertänderung nicht zu schnell.

    Im MOment alle 10 Sekunden - was wäre deiner Meinung denn ein "sicheres" Intervall?


  • @Homoran sagte:

    ich dachte das muss immer (ziemlich weit) oben stehen.

    Nein, in der Regel weit unten, denn die Deklaration der im Trigger verwendeten Variablen und Funktionen sollte vorher erfolgen (damit der Parser/Compiler nicht mehrere Durchläufe benötigt).

    @Homoran sagte:

    alle 10 Sekunden

    Das sollte problemlos funktionieren, denn die Laufzeit der Funktion Piko() wird wohl erheblich geringer sein.

  • Forum Testing Most Active Global Moderator Administrators

    @paul53
    Danke!
    Dann trau ich mich mal 😉

Suggested Topics

2.0k
Online

36.8k
Users

42.5k
Topics

589.4k
Posts