Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Stromverbrauch protokollieren (Tag, Woche, Monat, Quartal, Jahr)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Stromverbrauch protokollieren (Tag, Woche, Monat, Quartal, Jahr)

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      @EVOlutionIX:

      Schade das es für die Fragen hier keine Antworten mehr gibt. `
      Das liegt vielleicht daran, dass ich in deinem letzten Post keine Frage gesehen habe.

      Gruß

      Rainer

      1 Reply Last reply Reply Quote 0
      • E
        EVOlutionIX last edited by

        @eric2905:

        Was sagt den das Log, wenn Du das Script startest?

        Von unterwegs getippert `

        im Log steht das:

        javascript.0	2018-02-25 15:29:54.409	error	at Object. (script.js.Test.Stromverbrauch_Kühlschrank:75:23)
        javascript.0	2018-02-25 15:29:54.406	error	at entferneDatenpunkt (script.js.Test.Stromverbrauch_Kühlschrank:273:17)
        javascript.0	2018-02-25 15:29:54.405	error	at checkBlacklist (script.js.Test.Stromverbrauch_Kühlschrank:257:17)
        javascript.0	2018-02-25 15:29:54.403	error	Error in callback: TypeError: Cannot read property 'indexOf' of undefined
        

        MOD-Edit by eric2905, Log-Auszüge, usw. bitte immer in CODE- und ggf. SPOILER-Tags setzen

        1 Reply Last reply Reply Quote 0
        • E
          EVOlutionIX last edited by

          @Homoran:

          @EVOlutionIX:

          Schade das es für die Fragen hier keine Antworten mehr gibt. `
          Das liegt vielleicht daran, dass ich in deinem letzten Post keine Frage gesehen habe.

          Gruß

          Rainer `

          Die Frage ist wie personalisiert man die Zeilen 59 -72 ?

          Was muss wo hin und wie?

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators last edited by

            Ich habe mich bisher nicht mit dem Skript beschäftigt, kann also vollkommen daneben liegen, da ich auch kein Skripter bin.

            Auf die Schnelle würde ich sagen, dass da gar nichts personalisiert werden muss.

            Voraussetzung scheint allerdings zu sein
            ` > Skript dient zur Ermittlung des Stromverbrauchs bei Geräten,

            die mit den Homematic Zwischenstecker-Schaltaktor mit Leistungsmessung oder den FS20 EM1000 verbunden sind `
            Hast du solche Geräte?

            Gruß

            Rainer

            1 Reply Last reply Reply Quote 0
            • E
              EVOlutionIX last edited by

              @Homoran:

              Ich habe mich bisher nicht mit dem Skript beschäftigt, kann also vollkommen daneben liegen, da ich auch kein Skripter bin.

              Auf die Schnelle würde ich sagen, dass da gar nichts personalisiert werden muss.

              Voraussetzung scheint allerdings zu sein
              ` > Skript dient zur Ermittlung des Stromverbrauchs bei Geräten,

              die mit den Homematic Zwischenstecker-Schaltaktor mit Leistungsmessung oder den FS20 EM1000 verbunden sind `
              Hast du solche Geräte?

              Gruß

              Rainer `

              Ja hab einen Homematic Funk-Schaltaktor 1fach mit Leistungsmessung, Zwischenstecker HM-ES-PMSw1-Pl an meinem Kühlschrank im Einsatz.

              Leider schaffe ich nichts anderes mit dem Skript als das unter Objekt - Javascript - Strom - Preis - aktuell der Strompreis eingefügt wird den ich im Script vorher definiert habe.

              Ich denke ich muss aber dem Script irgendwie oder irgendwo sagen auf welchen Zwischenstecker es seine Berechnungen aufbauen soll?

              Gruß Marcus

              1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators last edited by

                @EVOlutionIX:

                Ich denke ich muss aber dem Script irgendwie oder irgendwo sagen auf welchen Zwischenstecker es seine Berechnungen aufbauen soll? `
                Was hast du da gemacht?

                IMHO sucht das Skript Geräte mit dem Datenpunkt ENERGY_Counter und fügt diese selbständig hinzu.

                @EVOlutionIX:

                Homematic Funk-Schaltaktor 1fach mit Leistungsmessung `
                Wie heisst der richtig (HM-xx.xx…)?

                Gruß

                Rainer

                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  Habe jetzt das Skript auch installiert.

                  Bekomme auch einen Fehler:

                  javascript.0	2018-02-25 17:12:50.030	error	at Object. (script.js.Energieskript:76:31)
                  javascript.0	2018-02-25 17:12:50.030	error	Error in callback: TypeError: Cannot read property 'replace' of undefined
                  

                  Die zuständige Zeile heißt:

                  geraetename = geraetename.replace(/\s/g, ""); // per Regexp Leerzeichen entfernen
                  

                  Bitte Info von jemandem der dieses Skript nutzt:

                  • ist das Skript im ersten Post noch aktuell?

                  • ist der Fehler irgendwo behoben?

                  Gruß

                  Rainer

                  1 Reply Last reply Reply Quote 0
                  • eric2905
                    eric2905 last edited by

                    Im Thread gibt es einen Korrekturhinweis dazu.

                    Gruß,

                    Eric

                    Von unterwegs getippert

                    1 Reply Last reply Reply Quote 0
                    • E
                      EVOlutionIX last edited by

                      @Homoran:

                      @EVOlutionIX:

                      Ich denke ich muss aber dem Script irgendwie oder irgendwo sagen auf welchen Zwischenstecker es seine Berechnungen aufbauen soll? `
                      Was hast du da gemacht?

                      IMHO sucht das Skript Geräte mit dem Datenpunkt ENERGY_Counter und fügt diese selbständig hinzu.

                      @EVOlutionIX:

                      Homematic Funk-Schaltaktor 1fach mit Leistungsmessung `
                      Wie heisst der richtig (HM-xx.xx…)?

                      Gruß

                      Rainer `

                      Der nennt sich HM-ES-PMSw1-Pl hab ich aber in meinem anderen Post schon geschrieben 😉

                      Gruß Marcus

                      1 Reply Last reply Reply Quote 0
                      • A
                        Adnim last edited by

                        ! ```
                        `/* Strom Zaehlerstaende, Verbrauch und Kosten
                        ! Skript dient zur Ermittlung des Stromverbrauchs bei Geräten,
                        die mit den Homematic Zwischenstecker-Schaltaktor mit Leistungsmessung oder den FS20 EM1000 verbunden sind
                        ! Zählerstände werden gespeichert jeweils
                        -jeden Tag
                        -jede Woche Montag
                        -jeden Monatsersten
                        -jeden Quartalsersten
                        -jedes Neujahr
                        wenn ein neuer Wert reinkommt.
                        ! Der Strompreis wird in die Variable "Strompreis_aktuell" geschrieben.
                        Änderungen des Strompreispreises müssen rechtzeitig per Cronjob programmiert werden.
                        ! Die Stromkosten (Verbrauch * Preis) werden ebenso
                        -jeden Tag
                        -jede Woche Montag
                        -jeden Monatsersten
                        -jeden Quartalsersten
                        -jedes Neujahr
                        ! genullt und bis dahin durch die Berechnung (der Differenz des aktuellen Zählerstandes - Zählerstand Beginn des Zeitraums) * Strompreis ermittelt
                        ! Der kumulierte Zählerstand berücksichtigt evtl. Resets und Überläufe der realen Zählerstände der Geräte.
                        ! Todo: Wenn aktueller Zählerstand < letzter Zählerstand, dann push und korrektur
                        wie hier: http://homematic-forum.de/forum/viewtopic.php?f=27&t=23688&p=201954&hilit=HM+ES+PMSw1+Pl+Zähler#p201959
                        ! erstellt: 09.02.2016 von pix auf Basis des alten Skriptes
                        01.03.2016 Leerzeichen werden aus Gerätenamen gelöscht
                        */
                        ! var logging = false;
                        var instanz = 'javascript.0'; instanz = instanz + '.';
                        var pfad = 'Strom.'; // Pfad innerhalb der Instanz
                        var blacklist= ['-']; // persönliche Blacklist: Diese Teile werden aus den Homematic Gerätenamen entfernt
                        ! // Variablen erstellen, Zählerstände einlesen und Stromkosten errechnen (pro Gerät)
                        // Strompreis
                        createState(pfad + 'Preis.aktuell.Arbeitspreis', 0.23, {
                        name: 'Strompreis - aktueller Arbeitspreis (brutto)',
                        unit: '€/kWh'
                        });
                        createState(pfad + 'Preis.aktuell.Grundpreis', 3.95, { // wird noch nicht eingerechnet
                        name: 'Strompreis - aktueller Grundpreis (brutto)',
                        unit: '€/Monat'
                        });
                        ! var idStrompreis = instanz + pfad + 'Preis.aktuell.Arbeitspreis';
                        ! // Einlesen der aktuellen Daten vom Zähler
                        on({id: /.METER|.ENERGY_COUNTER$/
                        }, function(obj) {

                        var idbyname = getIdByName(obj.common.name, true);
                        if (logging) {   
                            log('-------- Strommesser ---------');
                            log('RegExp-Funktion ausgelöst');
                            log('Gewerk:       ' + obj.role);   // undefined
                            log('Beschreibung: ' + obj.desc);   // undefined
                            log('id:           ' + obj.id);
                            log('Name:         ' + obj.common.name);   // Waschmaschine Küche:2.ENERGY_COUNTER !!!!! Mac mini Strommessung.METER
                            log('channel ID:   ' + obj.channelId);     // hm-rpc.0.MEQ0170864.2
                            log('channel Name: ' + obj.channelName);   // Waschmaschine Küche:2
                            log('device ID:    ' + obj.deviceId);      // hm-rpc.0.MEQ0170864
                            log('device name:  ' + obj.deviceName);    // Küche Waschmaschine
                            log('neuer Wert:   ' + obj.newState.val);  // 16499.699982
                            log('alter Wert:   ' + obj.oldState.val);  // 16499.699982
                            log('Einheit:      ' + obj.common.unit);   // Wh
                            log('IDbyNameFunktion: ' + idbyname[0]); // hm-rpc.0.MEQ0170864.2.ENERGY_COUNTER
                        }
                        // Gerätenamen erstellen
                        

                        var geraetename = obj.deviceName;
                        geraetename = geraetename.replace(/\s/g, ""); // per Regexp Leerzeichen entfernen
                        if (logging) log('Gerätename: ' + geraetename);

                        ! // States erstellen (CreateStates für dieses Gerät)
                        erstelleStates (geraetename);

                        // prüfe eingehende Daten
                          // nicht nötig, da subscribe eh nur anspringt, wenn gelieferte Daten = oder > sind als alte (gt)
                          // zweiter subscribe übernimmt das
                        
                        // prüfe und schreibe Daten  
                        var idKumuliert =  instanz + pfad + geraetename + '.Zaehlerstand.kumuliert',
                            idBackup =     instanz + pfad + geraetename + '.Zaehlerstand.Backup';
                        
                        if (obj.newState.val >= obj.oldState.val) {                                     // neuer Wert größer alter wert -> alles gut
                            setState(idKumuliert, obj.newState.val + getState(idBackup).val);           // Kumulierten Wert mit Ist-Wert (inkl. Backup) synchronisieren
                        } else {                                                                        // neuer Wert kleiner als alter Wert -> Achtung Zähler im Gerät übergelaufen oder genullt
                            var differenz = obj.oldState.val - obj.newState.val;                        // Differenz berechnen
                            setState(idBackup, getState(idBackup).val + differenz);                     // und Differenz und Backup addieren "und den Werteabriss ausgleichen"
                            setState(idKumuliert, data.newState.val + getState(idBackup).val);          // damit neuer kumulierter Wert stetig weiter wächst
                            meldung = 'Achtung!\n\n' 
                                    + 'Der Stromzählerstand (' + geraetename + ') ist übergelaufen oder gelöscht worden (ggf. Stromausfall).\n'
                                    + 'Der letzte Zählerstand vor dem Reset wird nun zum Neuen addiert. Bitte unbedingt die Werte prüfen. \n\n '
                                    + 'ioBroker';
                            betreff = 'ioBroker Meldung';
                            prio = getState(OptinPushPrio).val;
                            meldung_push(meldung, betreff, prio);
                            log('Zählerstand (' + geraetename + ') übergelaufen oder genullt. Backup wird ab jetzt verwendet.', 'error');
                        }
                        
                        // aktualisiere den Verbrauch und die Kosten
                        berechneVerbrauchKosten(geraetename, (getState(idKumuliert).val / 1000).toFixed(3), getState(idStrompreis).val); // in kWh
                        
                        // ETAPPENWERTE SPEICHERN und RESETS DER WERTE #################################
                        // Verzögerungen eingebaut. Resets, wenn die ersten Werte der neuen Etappe reinkommen
                        if ( zeit(obj.oldState.ts).Stunde > zeit(obj.newState.ts).Stunde ) { // neue Stunde kleiner als alte Stunde (Mitternacht)
                            setTimeout(function() {
                                resetKostenVerbrauch(geraetename, 'Tag');
                            }, 1000);
                            setTimeout(function() {
                                schreibeZaehlerstand(geraetename, 'Tag');
                            }, 1500);
                        }  
                        if ( zeit(obj.oldState.ts).Wochentag ===  0 && zeit(obj.newState.ts).Wochentag === 1) { // So auf Mo
                            setTimeout(function() {
                                resetKostenVerbrauch(geraetename, 'Woche');
                            }, 2000);
                            setTimeout(function() {
                                schreibeZaehlerstand(geraetename, 'Woche');
                            }, 2500);
                        }   
                        if ( zeit(obj.oldState.ts).Tag > zeit(obj.newState.ts).Tag ) { // wenn alter Tag größer als neuer Tag (am 1\. eines Monats)   
                            setTimeout(function() {
                                resetKostenVerbrauch(geraetename, 'Monat');
                            }, 3000);
                            setTimeout(function() {
                                schreibeZaehlerstand(geraetename, 'Monat');
                            }, 3500);
                        }    
                        var old_month = parseInt(zeit(obj.oldState.ts).Monat,10);
                        var new_month = parseInt(zeit(obj.state.ts).Monat, 10);
                        // wenn obj.oldState.ts im März [3] und obj.newState.ts im April [4] oder
                        //      obj.oldState.ts im Juni [6] und obj.newState.ts im Juli [7] oder
                        //      obj.oldState.ts im Sept [9] und obj.newState.ts im Okt [10] oder
                        //      obj.oldState.ts im Dez [12] und obj.newState.ts im Jan [1], dann Quartal
                        //log('Monat (alt): ' + old_month);
                        //log('Monat (neu): ' + new_month);
                        if ( (old_month === 3 && new_month === 4)  || (old_month === 6 && new_month === 7)  || (old_month === 9 && new_month === 10)  || (old_month === 12 && new_month === 1) ) {
                            setTimeout(function() {
                                resetKostenVerbrauch(geraetename, 'Quartal');
                            }, 4000);
                            setTimeout(function() {
                                schreibeZaehlerstand(geraetename, 'Quartal');
                            }, 4500);
                        }
                        // wenn obj.oldState.ts im alten Jahr liegt, dann Jahr
                        if (zeit(obj.oldState.ts).Jahr < zeit(jetzt).Jahr) {
                            setTimeout(function() {
                                resetKostenVerbrauch(geraetename, 'Jahr');
                            }, 5000);
                            setTimeout(function() {
                                schreibeZaehlerstand(geraetename, 'Jahr');
                            }, 5500);
                        }
                        if (logging) log('------------ ENDE ------------');
                        

                        });

                        ! function schreibeZaehlerstand(geraet, zeitraum) {
                        var idKumuliert = instanz + pfad + geraet + '.Zaehlerstand.kumuliert',
                        idZaehlerstand = instanz + pfad + geraet + '.Zaehlerstand.' + zeitraum;
                        // Zählerstand für übergebene Zeitraum und das Gerät in Wh auslesen
                        setState(idZaehlerstand, parseFloat( (getState(idKumuliert).val / 1000).toFixed(3)) ); // und in kWh (mit drei Dezimalstellen) speichern (also durch 1000)

                            // hier externe Protokollierung in Datei einbauen
                        
                            log('Zählerstände für das Gerät ' + geraet + ' (' + zeitraum + ') gespeichert');
                        

                        }

                        ! function resetKostenVerbrauch(geraet, zeitraum) {
                        setState(instanz + pfad + geraet + '.Kosten.' + zeitraum, 0); // Reset der Stromkosten für den übergebenen Zeitraum
                        setState(instanz + pfad + geraet + '.Verbrauch.' + zeitraum, 0); // Reset des Stromverbrauchs für den übergebenen Zeitraum
                        log('Stromkosten und Stromverbrauch für das Gerät ' + geraet + ' (' + zeitraum + ') zurückgesetzt');
                        }
                        ! function zeit (time) {
                        jetzt = new Date(formatDate(time,"JJJJ.MM.TT SS:mm:ss"));
                        var jahr = jetzt.getFullYear();
                        var monat = (jetzt.getMonth()+1 < 10) ? '0' + (jetzt.getMonth()+1) : jetzt.getMonth()+1;
                        var tag = (jetzt.getDate() < 10) ? '0' + jetzt.getDate() : jetzt.getDate();
                        var wochentag = jetzt.getDay(); // startet am Sonntag mit 0
                        var stunde = (jetzt.getHours() < 10) ? '0' + jetzt.getHours() : jetzt.getHours();
                        var minute = (jetzt.getMinutes() < 10) ? '0' + jetzt.getMinutes() : jetzt.getMinutes();
                        var sekunde = (jetzt.getSeconds() < 10) ? '0' + jetzt.getSeconds() : jetzt.getSeconds();
                        return {
                        'Jahr' : jahr,
                        'Monat' : monat,
                        'Tag' : tag,
                        'Wochentag' : wochentag,
                        'Stunde' : stunde,
                        'Minute' : minute,
                        'Sekunde' : sekunde
                        };
                        }
                        ! function berechneVerbrauchKosten(geraet, zaehler, preis) { // bei jedem eingehenden Wert pro Gerät
                        // Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] --- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
                        setState(instanz + pfad + geraet + '.Verbrauch.Tag', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3) ) ); // Verbrauch an diesem Tag in kWh
                        setState(instanz + pfad + geraet + '.Kosten.Tag', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3) ) ); // Kosten an diesem Tag in €
                        // Woche
                        setState(instanz + pfad + geraet + '.Verbrauch.Woche', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3) ) );
                        setState(instanz + pfad + geraet + '.Kosten.Woche', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3) ) );
                        // Monat
                        setState(instanz + pfad + geraet + '.Verbrauch.Monat', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3) ) );
                        setState(instanz + pfad + geraet + '.Kosten.Monat', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3) ) );
                        // Quartal
                        setState(instanz + pfad + geraet + '.Verbrauch.Quartal', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3) ) );
                        setState(instanz + pfad + geraet + '.Kosten.Quartal', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3) ) );
                        // Jahr
                        setState(instanz + pfad + geraet + '.Verbrauch.Jahr', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3) ) );
                        setState(instanz + pfad + geraet + '.Kosten.Jahr', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3) ) );
                        if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert');
                        }
                        ! function erstelleStates (geraet) {
                        // Kumulierter Zählerstand (wird nie kleiner)
                        createState(pfad + geraet + '.Zaehlerstand.kumuliert', 0, {name: 'Kumulierter Zählerstand (' + geraet + ') inkl. Backups', type: 'number', unit:'Wh'});

                        // Zählerstand
                        createState(pfad + geraet + '.Zaehlerstand.Tag',     0, {name: 'Zählerstand Tagesbeginn ('       + geraet + ')', type: 'mixed', unit:'kWh'});
                        createState(pfad + geraet + '.Zaehlerstand.Woche',   0, {name: 'Zählerstand Wochenbeginn ('      + geraet + ')', type: 'mixed', unit:'kWh'});
                        createState(pfad + geraet + '.Zaehlerstand.Monat',   0, {name: 'Zählerstand Monatsbeginn ('      + geraet + ')', type: 'mixed', unit:'kWh'});
                        createState(pfad + geraet + '.Zaehlerstand.Quartal', 0, {name: 'Zählerstand Quartalsbeginn ('    + geraet + ')', type: 'mixed', unit:'kWh'});
                        createState(pfad + geraet + '.Zaehlerstand.Jahr',    0, {name: 'Zählerstand Jahresbeginn ('      + geraet + ')', type: 'mixed', unit:'kWh'});
                        
                        // Backup Zählerstand
                        createState(pfad + geraet + '.Zaehlerstand.Backup',  0, {
                            name: 'Zählerstand Backup ('+ geraet + '), Differenz aus altem und neuem Wert nach Überlauf oder Reset',
                            desc: 'wird beim Umspringen des Original-Zählerstandes (' + geraet + ') zu diesem addiert',
                            type: 'number',
                            unit: 'Wh'});
                        
                        // Verbrauch 
                        createState(pfad + geraet + '.Verbrauch.Tag',        0, {name: 'Verbrauch seit Tagesbeginn ('    + geraet + ')', type: 'number', unit:'kWh'});
                        createState(pfad + geraet + '.Verbrauch.Woche',      0, {name: 'Verbrauch seit Wochenbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                        createState(pfad + geraet + '.Verbrauch.Monat',      0, {name: 'Verbrauch seit Monatsbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                        createState(pfad + geraet + '.Verbrauch.Quartal',    0, {name: 'Verbrauch seit Quartalsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
                        createState(pfad + geraet + '.Verbrauch.Jahr',       0, {name: 'Verbrauch seit Jahresbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                        
                        // Stromkosten
                        createState(pfad + geraet + '.Kosten.Tag',           0, {name: 'Stromkosten heute ('             + geraet + ')', type: 'number', unit:'€'  });
                        createState(pfad + geraet + '.Kosten.Woche',         0, {name: 'Stromkosten Woche ('             + geraet + ')', type: 'number', unit:'€'  });
                        createState(pfad + geraet + '.Kosten.Monat',         0, {name: 'Stromkosten Monat ('             + geraet + ')', type: 'number', unit:'€'  });
                        createState(pfad + geraet + '.Kosten.Monat',         0, {name: 'Stromkosten Monat ('             + geraet + ')', type: 'number', unit:'€'  });
                        createState(pfad + geraet + '.Kosten.Quartal',       0, {name: 'Stromkosten Quartal ('           + geraet + ')', type: 'number', unit:'€'  });
                        createState(pfad + geraet + '.Kosten.Jahr',          0, {name: 'Stromkosten Jahr ('              + geraet + ')', type: 'number', unit:'€'  });
                        
                        if (logging) log('States in der Instanz ' + instanz + pfad + ' erstellt');   
                        

                        }

                        ! function checkBlacklist (name) { // Unterfunktion von entferneDatenpukt
                        for(var i = 0; i < blacklist.length; i++) { // Blacklist durchgehen
                        if (name.indexOf(blacklist[i]) != -1) { // wenn vorhanden (nicht nicht vorhanden)
                        return( name.substring(0, name.indexOf(blacklist[i])) ); // Zeichenketten aus der Blacklist löschen
                        }
                        }
                        }
                        ! function entferneDatenpunkt(geraet) {
                        var rueckgabe;
                        if (geraet.indexOf(":2.ENERGY_COUNTER") != -1) {
                        rueckgabe = geraet.substring(0, geraet.indexOf(":2.ENERGY_COUNTER"));
                        } else
                        if (geraet.indexOf(".METER") != -1) {
                        rueckgabe = geraet.substring(0, geraet.indexOf(".METER"));
                        }
                        // Rückgabe sollte keine Sonderzeichen oder Leerzeichen enthalten. Wenn doch, werden die entfernt oder ersetzt
                        // todo
                        rueckgabe = checkBlacklist(rueckgabe); // Wenn man keine Blacklist braucht, kann man diesen Teil auskommentieren
                        return rueckgabe;
                        }`
                        ! So läuft das Skript bei mir! mit den gleichen Steckdosen (ein paar mehr davon)[/i][/i]

                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          @EVOlutionIX:

                          Der nennt sich HM-ES-PMSw1-Pl hab ich aber in meinem anderen Post schon geschrieben 😉 `
                          Sorry, ich hielt das für zwei verschiedene Geräte :oops:

                          Also nur den einen Messaktor für den Kühlschrank?

                          @Adnim:

                          So läuft das Skript bei mir! mit den gleichen Steckdosen (ein paar mehr davon) `
                          Danke!

                          werde ich heute abend mal testen und Feedback geben.

                          @pix

                          Wenn ich das verifizieren kann, soll ich dann den Code im ersten Post austauschen?

                          aut Changelog müsste das dann dieses sein:
                          > EDIT 17.12.2017 Lösung für Homematic-Dateinamen mit Punkten gibt es hier (von peoples) - noch nicht eingepflegt
                          Meine haben aber keine Punkte.

                          Gruß

                          Rainer

                          1 Reply Last reply Reply Quote 0
                          • E
                            EVOlutionIX last edited by

                            @Adnim:

                            ! ```
                            `/* Strom Zaehlerstaende, Verbrauch und Kosten
                            ! Skript dient zur Ermittlung des Stromverbrauchs bei Geräten,
                            die mit den Homematic Zwischenstecker-Schaltaktor mit Leistungsmessung oder den FS20 EM1000 verbunden sind
                            ! Zählerstände werden gespeichert jeweils
                            -jeden Tag
                            -jede Woche Montag
                            -jeden Monatsersten
                            -jeden Quartalsersten
                            -jedes Neujahr
                            wenn ein neuer Wert reinkommt.
                            ! Der Strompreis wird in die Variable "Strompreis_aktuell" geschrieben.
                            Änderungen des Strompreispreises müssen rechtzeitig per Cronjob programmiert werden.
                            ! Die Stromkosten (Verbrauch * Preis) werden ebenso
                            -jeden Tag
                            -jede Woche Montag
                            -jeden Monatsersten
                            -jeden Quartalsersten
                            -jedes Neujahr
                            ! genullt und bis dahin durch die Berechnung (der Differenz des aktuellen Zählerstandes - Zählerstand Beginn des Zeitraums) * Strompreis ermittelt
                            ! Der kumulierte Zählerstand berücksichtigt evtl. Resets und Überläufe der realen Zählerstände der Geräte.
                            ! Todo: Wenn aktueller Zählerstand < letzter Zählerstand, dann push und korrektur
                            wie hier: http://homematic-forum.de/forum/viewtopic.php?f=27&t=23688&p=201954&hilit=HM+ES+PMSw1+Pl+Zähler#p201959
                            ! erstellt: 09.02.2016 von pix auf Basis des alten Skriptes
                            01.03.2016 Leerzeichen werden aus Gerätenamen gelöscht
                            */
                            ! var logging = false;
                            var instanz = 'javascript.0'; instanz = instanz + '.';
                            var pfad = 'Strom.'; // Pfad innerhalb der Instanz
                            var blacklist= ['-']; // persönliche Blacklist: Diese Teile werden aus den Homematic Gerätenamen entfernt
                            ! // Variablen erstellen, Zählerstände einlesen und Stromkosten errechnen (pro Gerät)
                            // Strompreis
                            createState(pfad + 'Preis.aktuell.Arbeitspreis', 0.23, {
                            name: 'Strompreis - aktueller Arbeitspreis (brutto)',
                            unit: '€/kWh'
                            });
                            createState(pfad + 'Preis.aktuell.Grundpreis', 3.95, { // wird noch nicht eingerechnet
                            name: 'Strompreis - aktueller Grundpreis (brutto)',
                            unit: '€/Monat'
                            });
                            ! var idStrompreis = instanz + pfad + 'Preis.aktuell.Arbeitspreis';
                            ! // Einlesen der aktuellen Daten vom Zähler
                            on({id: /.METER|.ENERGY_COUNTER$/
                            }, function(obj) {

                            var idbyname = getIdByName(obj.common.name, true);
                            if (logging) {   
                                log('-------- Strommesser ---------');
                                log('RegExp-Funktion ausgelöst');
                                log('Gewerk:       ' + obj.role);   // undefined
                                log('Beschreibung: ' + obj.desc);   // undefined
                                log('id:           ' + obj.id);
                                log('Name:         ' + obj.common.name);   // Waschmaschine Küche:2.ENERGY_COUNTER !!!!! Mac mini Strommessung.METER
                                log('channel ID:   ' + obj.channelId);     // hm-rpc.0.MEQ0170864.2
                                log('channel Name: ' + obj.channelName);   // Waschmaschine Küche:2
                                log('device ID:    ' + obj.deviceId);      // hm-rpc.0.MEQ0170864
                                log('device name:  ' + obj.deviceName);    // Küche Waschmaschine
                                log('neuer Wert:   ' + obj.newState.val);  // 16499.699982
                                log('alter Wert:   ' + obj.oldState.val);  // 16499.699982
                                log('Einheit:      ' + obj.common.unit);   // Wh
                                log('IDbyNameFunktion: ' + idbyname[0]); // hm-rpc.0.MEQ0170864.2.ENERGY_COUNTER
                            }
                            // Gerätenamen erstellen
                            

                            var geraetename = obj.deviceName;
                            geraetename = geraetename.replace(/\s/g, ""); // per Regexp Leerzeichen entfernen
                            if (logging) log('Gerätename: ' + geraetename);

                            ! // States erstellen (CreateStates für dieses Gerät)
                            erstelleStates (geraetename);

                            // prüfe eingehende Daten
                              // nicht nötig, da subscribe eh nur anspringt, wenn gelieferte Daten = oder > sind als alte (gt)
                              // zweiter subscribe übernimmt das
                              
                            // prüfe und schreibe Daten  
                            var idKumuliert =  instanz + pfad + geraetename + '.Zaehlerstand.kumuliert',
                                idBackup =     instanz + pfad + geraetename + '.Zaehlerstand.Backup';
                            
                            if (obj.newState.val >= obj.oldState.val) {                                     // neuer Wert größer alter wert -> alles gut
                                setState(idKumuliert, obj.newState.val + getState(idBackup).val);           // Kumulierten Wert mit Ist-Wert (inkl. Backup) synchronisieren
                            } else {                                                                        // neuer Wert kleiner als alter Wert -> Achtung Zähler im Gerät übergelaufen oder genullt
                                var differenz = obj.oldState.val - obj.newState.val;                        // Differenz berechnen
                                setState(idBackup, getState(idBackup).val + differenz);                     // und Differenz und Backup addieren "und den Werteabriss ausgleichen"
                                setState(idKumuliert, data.newState.val + getState(idBackup).val);          // damit neuer kumulierter Wert stetig weiter wächst
                                meldung = 'Achtung!\n\n' 
                                        + 'Der Stromzählerstand (' + geraetename + ') ist übergelaufen oder gelöscht worden (ggf. Stromausfall).\n'
                                        + 'Der letzte Zählerstand vor dem Reset wird nun zum Neuen addiert. Bitte unbedingt die Werte prüfen. \n\n '
                                        + 'ioBroker';
                                betreff = 'ioBroker Meldung';
                                prio = getState(OptinPushPrio).val;
                                meldung_push(meldung, betreff, prio);
                                log('Zählerstand (' + geraetename + ') übergelaufen oder genullt. Backup wird ab jetzt verwendet.', 'error');
                            }
                            
                            // aktualisiere den Verbrauch und die Kosten
                            berechneVerbrauchKosten(geraetename, (getState(idKumuliert).val / 1000).toFixed(3), getState(idStrompreis).val); // in kWh
                            
                            // ETAPPENWERTE SPEICHERN und RESETS DER WERTE #################################
                            // Verzögerungen eingebaut. Resets, wenn die ersten Werte der neuen Etappe reinkommen
                            if ( zeit(obj.oldState.ts).Stunde > zeit(obj.newState.ts).Stunde ) { // neue Stunde kleiner als alte Stunde (Mitternacht)
                                setTimeout(function() {
                                    resetKostenVerbrauch(geraetename, 'Tag');
                                }, 1000);
                                setTimeout(function() {
                                    schreibeZaehlerstand(geraetename, 'Tag');
                                }, 1500);
                            }  
                            if ( zeit(obj.oldState.ts).Wochentag ===  0 && zeit(obj.newState.ts).Wochentag === 1) { // So auf Mo
                                setTimeout(function() {
                                    resetKostenVerbrauch(geraetename, 'Woche');
                                }, 2000);
                                setTimeout(function() {
                                    schreibeZaehlerstand(geraetename, 'Woche');
                                }, 2500);
                            }   
                            if ( zeit(obj.oldState.ts).Tag > zeit(obj.newState.ts).Tag ) { // wenn alter Tag größer als neuer Tag (am 1\. eines Monats)   
                                setTimeout(function() {
                                    resetKostenVerbrauch(geraetename, 'Monat');
                                }, 3000);
                                setTimeout(function() {
                                    schreibeZaehlerstand(geraetename, 'Monat');
                                }, 3500);
                            }    
                            var old_month = parseInt(zeit(obj.oldState.ts).Monat,10);
                            var new_month = parseInt(zeit(obj.state.ts).Monat, 10);
                            // wenn obj.oldState.ts im März [3] und obj.newState.ts im April [4] oder
                            //      obj.oldState.ts im Juni [6] und obj.newState.ts im Juli [7] oder
                            //      obj.oldState.ts im Sept [9] und obj.newState.ts im Okt [10] oder
                            //      obj.oldState.ts im Dez [12] und obj.newState.ts im Jan [1], dann Quartal
                            //log('Monat (alt): ' + old_month);
                            //log('Monat (neu): ' + new_month);
                            if ( (old_month === 3 && new_month === 4)  || (old_month === 6 && new_month === 7)  || (old_month === 9 && new_month === 10)  || (old_month === 12 && new_month === 1) ) {
                                setTimeout(function() {
                                    resetKostenVerbrauch(geraetename, 'Quartal');
                                }, 4000);
                                setTimeout(function() {
                                    schreibeZaehlerstand(geraetename, 'Quartal');
                                }, 4500);
                            }
                            // wenn obj.oldState.ts im alten Jahr liegt, dann Jahr
                            if (zeit(obj.oldState.ts).Jahr < zeit(jetzt).Jahr) {
                                setTimeout(function() {
                                    resetKostenVerbrauch(geraetename, 'Jahr');
                                }, 5000);
                                setTimeout(function() {
                                    schreibeZaehlerstand(geraetename, 'Jahr');
                                }, 5500);
                            }
                            if (logging) log('------------ ENDE ------------');
                            

                            });

                            ! function schreibeZaehlerstand(geraet, zeitraum) {
                            var idKumuliert = instanz + pfad + geraet + '.Zaehlerstand.kumuliert',
                            idZaehlerstand = instanz + pfad + geraet + '.Zaehlerstand.' + zeitraum;
                            // Zählerstand für übergebene Zeitraum und das Gerät in Wh auslesen
                            setState(idZaehlerstand, parseFloat( (getState(idKumuliert).val / 1000).toFixed(3)) ); // und in kWh (mit drei Dezimalstellen) speichern (also durch 1000)

                                // hier externe Protokollierung in Datei einbauen
                                
                                log('Zählerstände für das Gerät ' + geraet + ' (' + zeitraum + ') gespeichert');
                            

                            }

                            ! function resetKostenVerbrauch(geraet, zeitraum) {
                            setState(instanz + pfad + geraet + '.Kosten.' + zeitraum, 0); // Reset der Stromkosten für den übergebenen Zeitraum
                            setState(instanz + pfad + geraet + '.Verbrauch.' + zeitraum, 0); // Reset des Stromverbrauchs für den übergebenen Zeitraum
                            log('Stromkosten und Stromverbrauch für das Gerät ' + geraet + ' (' + zeitraum + ') zurückgesetzt');
                            }
                            ! function zeit (time) {
                            jetzt = new Date(formatDate(time,"JJJJ.MM.TT SS:mm:ss"));
                            var jahr = jetzt.getFullYear();
                            var monat = (jetzt.getMonth()+1 < 10) ? '0' + (jetzt.getMonth()+1) : jetzt.getMonth()+1;
                            var tag = (jetzt.getDate() < 10) ? '0' + jetzt.getDate() : jetzt.getDate();
                            var wochentag = jetzt.getDay(); // startet am Sonntag mit 0
                            var stunde = (jetzt.getHours() < 10) ? '0' + jetzt.getHours() : jetzt.getHours();
                            var minute = (jetzt.getMinutes() < 10) ? '0' + jetzt.getMinutes() : jetzt.getMinutes();
                            var sekunde = (jetzt.getSeconds() < 10) ? '0' + jetzt.getSeconds() : jetzt.getSeconds();
                            return {
                            'Jahr' : jahr,
                            'Monat' : monat,
                            'Tag' : tag,
                            'Wochentag' : wochentag,
                            'Stunde' : stunde,
                            'Minute' : minute,
                            'Sekunde' : sekunde
                            };
                            }
                            ! function berechneVerbrauchKosten(geraet, zaehler, preis) { // bei jedem eingehenden Wert pro Gerät
                            // Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] --- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
                            setState(instanz + pfad + geraet + '.Verbrauch.Tag', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3) ) ); // Verbrauch an diesem Tag in kWh
                            setState(instanz + pfad + geraet + '.Kosten.Tag', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3) ) ); // Kosten an diesem Tag in €
                            // Woche
                            setState(instanz + pfad + geraet + '.Verbrauch.Woche', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Woche', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3) ) );
                            // Monat
                            setState(instanz + pfad + geraet + '.Verbrauch.Monat', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Monat', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3) ) );
                            // Quartal
                            setState(instanz + pfad + geraet + '.Verbrauch.Quartal', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Quartal', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3) ) );
                            // Jahr
                            setState(instanz + pfad + geraet + '.Verbrauch.Jahr', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Jahr', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3) ) );
                            if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert');
                            }
                            ! function erstelleStates (geraet) {
                            // Kumulierter Zählerstand (wird nie kleiner)
                            createState(pfad + geraet + '.Zaehlerstand.kumuliert', 0, {name: 'Kumulierter Zählerstand (' + geraet + ') inkl. Backups', type: 'number', unit:'Wh'});

                            // Zählerstand
                            createState(pfad + geraet + '.Zaehlerstand.Tag',     0, {name: 'Zählerstand Tagesbeginn ('       + geraet + ')', type: 'mixed', unit:'kWh'});
                            createState(pfad + geraet + '.Zaehlerstand.Woche',   0, {name: 'Zählerstand Wochenbeginn ('      + geraet + ')', type: 'mixed', unit:'kWh'});
                            createState(pfad + geraet + '.Zaehlerstand.Monat',   0, {name: 'Zählerstand Monatsbeginn ('      + geraet + ')', type: 'mixed', unit:'kWh'});
                            createState(pfad + geraet + '.Zaehlerstand.Quartal', 0, {name: 'Zählerstand Quartalsbeginn ('    + geraet + ')', type: 'mixed', unit:'kWh'});
                            createState(pfad + geraet + '.Zaehlerstand.Jahr',    0, {name: 'Zählerstand Jahresbeginn ('      + geraet + ')', type: 'mixed', unit:'kWh'});
                                    
                            // Backup Zählerstand
                            createState(pfad + geraet + '.Zaehlerstand.Backup',  0, {
                                name: 'Zählerstand Backup ('+ geraet + '), Differenz aus altem und neuem Wert nach Überlauf oder Reset',
                                desc: 'wird beim Umspringen des Original-Zählerstandes (' + geraet + ') zu diesem addiert',
                                type: 'number',
                                unit: 'Wh'});
                                
                            // Verbrauch 
                            createState(pfad + geraet + '.Verbrauch.Tag',        0, {name: 'Verbrauch seit Tagesbeginn ('    + geraet + ')', type: 'number', unit:'kWh'});
                            createState(pfad + geraet + '.Verbrauch.Woche',      0, {name: 'Verbrauch seit Wochenbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                            createState(pfad + geraet + '.Verbrauch.Monat',      0, {name: 'Verbrauch seit Monatsbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                            createState(pfad + geraet + '.Verbrauch.Quartal',    0, {name: 'Verbrauch seit Quartalsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
                            createState(pfad + geraet + '.Verbrauch.Jahr',       0, {name: 'Verbrauch seit Jahresbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                                    
                            // Stromkosten
                            createState(pfad + geraet + '.Kosten.Tag',           0, {name: 'Stromkosten heute ('             + geraet + ')', type: 'number', unit:'€'  });
                            createState(pfad + geraet + '.Kosten.Woche',         0, {name: 'Stromkosten Woche ('             + geraet + ')', type: 'number', unit:'€'  });
                            createState(pfad + geraet + '.Kosten.Monat',         0, {name: 'Stromkosten Monat ('             + geraet + ')', type: 'number', unit:'€'  });
                            createState(pfad + geraet + '.Kosten.Monat',         0, {name: 'Stromkosten Monat ('             + geraet + ')', type: 'number', unit:'€'  });
                            createState(pfad + geraet + '.Kosten.Quartal',       0, {name: 'Stromkosten Quartal ('           + geraet + ')', type: 'number', unit:'€'  });
                            createState(pfad + geraet + '.Kosten.Jahr',          0, {name: 'Stromkosten Jahr ('              + geraet + ')', type: 'number', unit:'€'  });
                                    
                            if (logging) log('States in der Instanz ' + instanz + pfad + ' erstellt');   
                            

                            }

                            ! function checkBlacklist (name) { // Unterfunktion von entferneDatenpukt
                            for(var i = 0; i < blacklist.length; i++) { // Blacklist durchgehen
                            if (name.indexOf(blacklist[i]) != -1) { // wenn vorhanden (nicht nicht vorhanden)
                            return( name.substring(0, name.indexOf(blacklist[i])) ); // Zeichenketten aus der Blacklist löschen
                            }
                            }
                            }
                            ! function entferneDatenpunkt(geraet) {
                            var rueckgabe;
                            if (geraet.indexOf(":2.ENERGY_COUNTER") != -1) {
                            rueckgabe = geraet.substring(0, geraet.indexOf(":2.ENERGY_COUNTER"));
                            } else
                            if (geraet.indexOf(".METER") != -1) {
                            rueckgabe = geraet.substring(0, geraet.indexOf(".METER"));
                            }
                            // Rückgabe sollte keine Sonderzeichen oder Leerzeichen enthalten. Wenn doch, werden die entfernt oder ersetzt
                            // todo
                            rueckgabe = checkBlacklist(rueckgabe); // Wenn man keine Blacklist braucht, kann man diesen Teil auskommentieren
                            return rueckgabe;
                            }! So läuft das Skript bei mir! mit den gleichen Steckdosen (ein paar mehr davon) ! Genial das Skript läuft bei mir ohne Fehler, die Objekte wurden richtig erzeugt und werden auch schon gefüllt. ! Vielen Dank für die tatkräftige Hilfe hier aus dem Forum ! Gruß Marcus[/i][/i] ```

                            1 Reply Last reply Reply Quote 0
                            • E
                              EVOlutionIX last edited by

                              @Homoran:

                              @EVOlutionIX:

                              Der nennt sich HM-ES-PMSw1-Pl hab ich aber in meinem anderen Post schon geschrieben 😉 `
                              Sorry, ich hielt das für zwei verschiedene Geräte :oops:

                              Also nur den einen Messaktor für den Kühlschrank?

                              @Adnim:

                              So läuft das Skript bei mir! mit den gleichen Steckdosen (ein paar mehr davon) `
                              Danke!

                              werde ich heute abend mal testen und Feedback geben.

                              @pix

                              Wenn ich das verifizieren kann, soll ich dann den Code im ersten Post austauschen?

                              aut Changelog müsste das dann dieses sein:
                              > EDIT 17.12.2017 Lösung für Homematic-Dateinamen mit Punkten gibt es hier (von peoples) - noch nicht eingepflegt
                              Meine haben aber keine Punkte.

                              Gruß

                              Rainer `

                              Ja richtig im Moment noch, nur ein Messaktor für den Kühlschrank.

                              Danke für die tatkräftige Unterstützung Gruß Marcus

                              1 Reply Last reply Reply Quote 0
                              • Q
                                Qlink last edited by

                                @pix:

                                Ich habe den Code noch nicht angepasst, da ich zum neuen Jahr evtl. das Skript erneuern will. Ich denke, ich werde in Richtung "Auswertung von History Daten" gehen, statt selbst eine Backup-Variable mitlaufen zu lassen.

                                Gruß

                                Pix `

                                Hi pix,

                                vielen Dank für das super Skript!

                                Wie ist denn der Status deiner geplanten Erneuerung des Skripts ?

                                Lässt sich daraus eventuell gleich eine Art Universellen Statistik Adapter daraus erstellen, oder bedeutet das einen ungleich höheren Mehraufwand ?

                                Beste Grüße

                                1 Reply Last reply Reply Quote 0
                                • D
                                  dering last edited by

                                  hallo zusammen,

                                  ich habe das Skript auch genutzt, jedoch immer wieder Problemchen gehabt. Ich habe nun begonnen das Skript zu optimieren und neue Funktionen einzubauen.

                                  Damit man sich nicht alles aus den Beiträgen zusammen suchen muss, habe ich ein github Repo erstellt:

                                  https://github.com/hdering/homematic_st … okollieren

                                  Wenn jemand Probleme hat oder Vorschläge hat, kann sie gerne in github eintragen.

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    ple last edited by

                                    Erst mal vielen Dank für dein Script.

                                    ich bin im Moment auf der Suche nach einem ausfallsicheren Script, da das jetzige leider nach einen Neustart die Werte verliert.

                                    Das ist ungünstig.

                                    Was ich mir wünschen würde.

                                    Speicherung des vorherigen Tages, Woche, Monat und Jahr.

                                    Also den Wert kurz vor Mitternacht eben rüberschicken auf vorheriger Tag usw.

                                    Das kann man dann schön mit History loggen.

                                    Mal schauen ob ich meine WMBus Wärmemengenzähler auch integrieren kann.

                                    Gruß

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      Kampfratte last edited by

                                      Hallo zusammen,

                                      da ich mich nun erst seit ca. 5 oder 6 Wochen mit ioBroker beschäftige, bin ich noch nicht so fit drin.

                                      Würde mein Stromverbrauch auch gerne protokollieren.

                                      Könnte mir jemand von euch behilflich sein, wie ich das machen muss, dass das bei mir auch funktioniert?

                                      Wäre echt super.

                                      Edit: Habe es nun selbst geschafft, das Script von github.com zum laufen zu bringen, da mir das am meissten zu gesagt hat wegen der speicherung von den z. B. letzten 7 Tagen behalten werden und nicht nur der aktuelle Tag erhalten bleibt.

                                      1 Reply Last reply Reply Quote 0
                                      • J
                                        Jan007 last edited by

                                        @dering:

                                        hallo zusammen,

                                        ich habe das Skript auch genutzt, jedoch immer wieder Problemchen gehabt. Ich habe nun begonnen das Skript zu optimieren und neue Funktionen einzubauen.

                                        Damit man sich nicht alles aus den Beiträgen zusammen suchen muss, habe ich ein github Repo erstellt:

                                        https://github.com/hdering/homematic_st … okollieren

                                        Wenn jemand Probleme hat oder Vorschläge hat, kann sie gerne in github eintragen. `

                                        Hallo Dering,

                                        Dein Script gefällt mir Super und Funktioniert soweit auch…

                                        wo ich etwas hänge ist, wo ich die Strompreis - aktueller Arbeitspreis (brutto) und Strompreis - aktueller Grundpreis (brutto) eintragen soll?

                                        Wenn ich es wie im OriginalScript (Zeile 41?) mache, kommt zwar kein Fehler, aber die Werte im Iobroker stehen immer noch auf 0 :? Und wenn ich die Werte im Iobroker ändere, werden sie wieder auf 0 geändert.

                                        Sorry für die Frage, aber ich bin neu im Iobroker und habe vorher 5 Jahre mit Fhem gearbeitet und lese die Werte über Volkszähler ein und werden auch Berechnet 😄 nur leider kann ich meine Tarife nicht eintragen... Es müssten ja mehrere eingabepunkte im Script sein, weil ich ja auch mein Wasserverbrauch Berechne und der andere Preise als Strom hat.

                                        LG Jan

                                        1 Reply Last reply Reply Quote 0
                                        • Dutchman
                                          Dutchman Developer Most Active Administrators last edited by

                                          @Jan007:

                                          wo ich etwas hänge ist, wo ich die Strompreis - aktueller Arbeitspreis (brutto) und Strompreis - aktueller Grundpreis (brutto) eintragen soll?

                                          Wenn ich es wie im OriginalScript (Zeile 41?) mache, kommt zwar kein Fehler, aber die Werte im Iobroker stehen immer noch auf 0 :? `

                                          Hast du die neuste Version (1.3.3) laufen ?

                                          Die Preise legt man unter dem objecten ab im Script brauch man nichts zu machen

                                          Entweder unter Preise oder unter eigenen preis pro Zähler (wen du das im Script auf true gestellt hast)

                                          ~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201804 ... 1b92b9.jpg">https://uploads.tapatalk-cdn.com/20180417/084b3864e5515d98f9644b42fd1b92b9.jpg</link_text>" />

                                          –-----------------------

                                          Send from mobile device

                                          Das schöne ios hat Auto Korrektur zum k****

                                          Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community~~

                                          1 Reply Last reply Reply Quote 0
                                          • J
                                            Jan007 last edited by

                                            Hallo Dutchman,

                                            hat geklappt… habe Webseite neu geladen, dann war der Preis da 😄

                                            Ich logge ja meinen Zähler über den VolkszählerSript und bekomme die Werte Aktuell als Reading... (744.517 W) und der Stromverbrauchssript hat es am Anfang auch richtig eingelesen nur das Problem ist, das er es scheinbar zu oft einliest oder es falsch versteht... Ich habe den Sript jetzt eine halbe stunde laufen bei kaum schwankenden 750 Watt verbrauch... nur die Berechnung sagt mir einen Tagesverbrauch bis jetzt von über 10 KW an :shock: :?
                                            6896_iobroker.jpg

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            736
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            42
                                            148
                                            46475
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo