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.
    • R
      riconr1 last edited by

      Hallo und vielen Dank für das Skript,

      könntest Du mir kurz erläutern, ob das Skript auch mit Zählersensor Strom/ Gas HM-ES-TX-WM funktioniert?

      Und vielleicht auch, wo ich welche Werte anpassen muss, damit meine Daten gezählt werden?

      Also vielleicht im Skript noch zusätzlich angeben, wo ich welche Daten einfügen muss.

      Tut mir leid, dass ich das nicht allein hin bekomme. Ich verstehe leider nix vom Skripten.

      MfG Enrico

      1 Reply Last reply Reply Quote 0
      • M
        michihorn last edited by

        Hallo Pix

        kannst Du nochmal beschreiben wo genau ich meine indiviuellen Angaben im Code vornehmen muss. Offenbar passen in Deiner Beschreibung der Zeilen Nummern nicht mit dem Code zusammen. Grüße Michael

        1 Reply Last reply Reply Quote 0
        • M
          michihorn last edited by

          Hallo, ich möchte diesen Code von Pix zur Stromverbrauchsmessung nutzen. Ich habe einen HM-ES-TX-WM am Hauszähler und 2x HM-ES-PM Sw1-PI, der eine soll den Stromverbrauch der Waschmaschine protokollieren und der zweite den der Heizung. Ich bekomme die Fehlermeldung im Anhang.
          326_3.png
          Gruß Michael

          `/* 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.2';  instanz = instanz + '.';
          var pfad =     'Strom.';                                                   // Pfad innerhalb der Instanz
          var blacklist= [' Strommessung', ' Küche'];                                     // 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.2495, {
              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 = entferneDatenpunkt(obj.common.name);
              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);
              }    
              // 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
              if ( (zeit(obj.oldState.ts).Monat === 3 && zeit(obj.newState.ts).Monat === 4)  || 
                   (zeit(obj.oldState.ts).Monat === 6 && zeit(obj.newState.ts).Monat === 7)  || 
                   (zeit(obj.oldState.ts).Monat === 9 && zeit(obj.newState.ts).Monat === 10)  || 
                   (zeit(obj.oldState.ts).Monat === 12 && zeit(obj.newState.ts).Monat === 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, (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',     (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3));           // Verbrauch an diesem Tag in kWh
              setState(instanz + pfad + geraet + '.Kosten.Tag',       ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3));  // Kosten an diesem Tag in €
              // Woche    
              setState(instanz + pfad + geraet + '.Verbrauch.Woche',   (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3));
              setState(instanz + pfad + geraet + '.Kosten.Woche',     ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3));
              // Monat    
              setState(instanz + pfad + geraet + '.Verbrauch.Monat',   (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3));
              setState(instanz + pfad + geraet + '.Kosten.Monat',     ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3));
              // Quartal    
              setState(instanz + pfad + geraet + '.Verbrauch.Quartal', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3));
              setState(instanz + pfad + geraet + '.Kosten.Quartal',   ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3));
              // Jahr    
              setState(instanz + pfad + geraet + '.Verbrauch.Jahr',    (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3));
              setState(instanz + pfad + geraet + '.Kosten.Jahr',      ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3));  
              if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert', 'info');
          }
          
          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: 'number', unit:'kWh'});
              createState(pfad + geraet + '.Zaehlerstand.Woche',   0, {name: 'Zählerstand Wochenbeginn ('      + geraet + ')', type: 'number', unit:'kWh'});
              createState(pfad + geraet + '.Zaehlerstand.Monat',   0, {name: 'Zählerstand Monatsbeginn ('      + geraet + ')', type: 'number', unit:'kWh'});
              createState(pfad + geraet + '.Zaehlerstand.Quartal', 0, {name: 'Zählerstand Quartalsbeginn ('    + geraet + ')', type: 'number', unit:'kWh'});
              createState(pfad + geraet + '.Zaehlerstand.Jahr',    0, {name: 'Zählerstand Jahresbeginn ('      + geraet + ')', type: 'number', 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(".Power") != -1) {
                  rueckgabe = geraet.substring(0, geraet.indexOf(".Power"));
              }
              // 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;
          }`[/i][/i]
          
          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo Michael,

            kannst du mir noch sagen, wie du die Geräte in Homematic benannt hast?

            Sowas wie Küche Waschmaschine?

            Werden die die Daten auch im iobroker Objektreiter angezeigt? Kannst du dazu mal in das Feld links oben im Objektreiter von Admin "ENERGY_COUNTER" eingeben?

            Sieht dann etwa so aus:
            261_bildschirmfoto_2016-06-09_um_21.02.53.jpg

            Es sieht mir so aus, als ob das Skript deine Geräte nicht findet.

            Gruß

            Pix

            PS: Sorry, habe in der PN vorher von POWER und METER gesprochen, aber das war falsch. Aber du musst ja am Skript eigentlich eh nix ändern.

            1 Reply Last reply Reply Quote 0
            • M
              michihorn last edited by

              Hallo, anbei ein Screenshot meiner Messgeräte 326_4.png
              Michael

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

                In welcher Instanz des JavaScript Adapters läuft das Skript bei dir?

                Gesendet mit Tapatalk

                1 Reply Last reply Reply Quote 0
                • M
                  michihorn last edited by

                  Hallo Pix

                  ich weiß nicht genau was Du meinst, reicht die Info im Anhang? 326_5.png
                  Gruß Michael

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

                    Ja, das reicht.

                    Ändere mal in dieser Zeile die 2 in 0

                    var instanz = 'javascript.2'; 
                    

                    Ich habe dreimal den JavaScript Adapter installiert 0,1 und 2. das Skript läuft bei mir in der dritten Instanz. Die ersten beiden sind reserviert für "lebenswichtige " Aufgaben. Die dritte zum testen.

                    Pix

                    Gesendet mit Tapatalk

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

                      Oder verwende die Zeile

                      var instanz = 'javascript.' + instance; 
                      

                      Dann läuft es in allen Instanzen. 🙂

                      Gesendet mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • M
                        michihorn last edited by

                        Hall

                        ich habe jetzt keine Fehlermeldung mehr, wo finde ich den jetzt die Ergebnisse?

                        Michael

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

                          Schön, dass das klappt.

                          Gib mal im Objektreiter im Suchfeld "Strom" ein, dort findest du im Javascript.0.Strom die Werte. Natürlich muss man jetzt einmal Mitternacht abwarten, bis der Tageswert gespeichert wird. Für die Woche auf Montag 0Uhr usw.

                          Du kannst im Skript die Zeile

                          var logging = false;
                          ````in````
                          var logging = true;
                          ````ändern, dann kommen mehr Ausgaben.
                          
                          Beachte: Das Skript, das du nutzt, ist eine der ersten Versionen. Ich sehe, darin ist noch die Funktion meldung_push enthalten. Die sendet bei mir evtl. Mitteilungen über Pushover. Sie ist auf meinem System global und deshalb nicht in diesem Skript definiert. Bei dir wird das einen Fehler ausgeben.
                          
                          Evtl. stürzt bei diesem Fehler das Skript ab und startet auch die Instanz neu. Daher empfehle ich dir dringend, den javascript Adapter ein zweites mal zu installieren. Das wird dann Instanz 1, bisher 0\. Im Skript Editor kannst du dann das Skript mit dem kleinen Pulldown Knopf neben dem Namen auf Instanz 1 stellen (vorher im Code auch auf javascript.1 stellen) und speichern. Wenn nun das Skript Probleme macht, stürzt nur diese Instanz ab und startet neu. Die erste Instanz (0) bleibt unberührt und läuft weiter. Natürlich macht das ganze nur Sinn, wenn du noch andere, definitiv lauffähige Skripte in javascript.0 hast.
                          
                          Gruß
                          
                          Pix
                          1 Reply Last reply Reply Quote 0
                          • M
                            michihorn last edited by

                            Super, die Daten kommen im LOG an. Es kommt noch eine Fehlermeldung, ist das die von der Du im letzten Post berichtet hast?

                            Die Daten sehe ich erst morgen unter Objekte?

                            Gibt es eine möglichkeit diese Daten evtl. nach Excel zu exportieren?

                            Gruß Michael
                            326_1.png

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

                              Nein, das ist eine andere Fehlermeldung.

                              Kommentiere mal die drittletzte Zeile aus, wie es im Skript steht. Als einfach zwei // vor die Zeile schreiben.

                              Die beiden undefined Fehler sind bekannt, steht auch schon im Code:

                              log('Gewerk:       ' + obj.role);   // undefined
                              log('Beschreibung: ' + obj.desc);   // undefined
                              

                              Es gibt in einer neueren Version des Skriptes ein Exportfunktion. Sie speichert die Daten nicht nur im ioBroker Log, sondern auch kommasepariert in einer Datei auf dem Server.

                              Ich würde dir aber raten:

                              • Warte ab, wie das Skript bei dir läuft.

                              • Versuche, es zu verstehen.

                              • Nutze den History Adapter (oder SQL-Adapter) für die Aufzeichnung der Werte

                              • Mache ein Offline Backup vom lauffähigen Skript mit aktuellen Datum im Dateinamen (Copy&Paste) bevor du was änderst

                              Wenn alles klappt, dann können wir uns um das Log auf dem Server kümmern. Dein Server ist sehr ungewöhnlich und es muss auf dem Server ein Pfad benannt werden, wo die externe Logdatei gespeichert werden soll. Da kenne ich mich nicht aus :?

                              Gruß

                              Pix

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

                                Hallo zusammen,

                                auch ich habe das Script versucht anzunehmen.

                                ! /* Strom Zaehlerstaende, Verbrauch und Kosten
                                ! ioBroker Forum:
                                ! http://forum.iobroker.net/viewtopic.php?f=21&t=2262
                                ! 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/viewtop … er#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.1'; instanz = instanz + '.';
                                ! var pfad = 'Strom.'; // Pfad innerhalb der Instanz
                                ! var blacklist= [' Strommessung', ' Küche']; // 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.2495, {
                                ! 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 = entferneDatenpunkt(obj.common.name);
                                ! 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);
                                ! }
                                ! // 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
                                ! if ( (zeit(obj.oldState.ts).Monat === 3 && zeit(obj.newState.ts).Monat === 4) ||
                                ! (zeit(obj.oldState.ts).Monat === 6 && zeit(obj.newState.ts).Monat === 7) ||
                                ! (zeit(obj.oldState.ts).Monat === 9 && zeit(obj.newState.ts).Monat === 10) ||
                                ! (zeit(obj.oldState.ts).Monat === 12 && zeit(obj.newState.ts).Monat === 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, (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', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3)); // Verbrauch an diesem Tag in kWh
                                ! setState(instanz + pfad + geraet + '.Kosten.Tag', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3)); // Kosten an diesem Tag in €
                                ! // Woche
                                ! setState(instanz + pfad + geraet + '.Verbrauch.Woche', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3));
                                ! setState(instanz + pfad + geraet + '.Kosten.Woche', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3));
                                ! // Monat
                                ! setState(instanz + pfad + geraet + '.Verbrauch.Monat', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3));
                                ! setState(instanz + pfad + geraet + '.Kosten.Monat', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3));
                                ! // Quartal
                                ! setState(instanz + pfad + geraet + '.Verbrauch.Quartal', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3));
                                ! setState(instanz + pfad + geraet + '.Kosten.Quartal', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3));
                                ! // Jahr
                                ! setState(instanz + pfad + geraet + '.Verbrauch.Jahr', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3));
                                ! setState(instanz + pfad + geraet + '.Kosten.Jahr', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3));
                                ! if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert', 'info');
                                ! }
                                ! 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: 'number', unit:'kWh'});
                                ! createState(pfad + geraet + '.Zaehlerstand.Woche', 0, {name: 'Zählerstand Wochenbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
                                ! createState(pfad + geraet + '.Zaehlerstand.Monat', 0, {name: 'Zählerstand Monatsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
                                ! createState(pfad + geraet + '.Zaehlerstand.Quartal', 0, {name: 'Zählerstand Quartalsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
                                ! createState(pfad + geraet + '.Zaehlerstand.Jahr', 0, {name: 'Zählerstand Jahresbeginn (' + geraet + ')', type: 'number', 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__) != -1) { // wenn vorhanden (nicht nicht vorhanden)
                                ! return( name.substring(0, name.indexOf(blacklist__)) ); // 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;
                                ! }____ __Ich betreibe es in der Instanz 1 (also die 2) und habe die Zeile

                                var instanz = 'javascript.1';  instanz = instanz + '.';
                                ````angepasst auf die Angezeigte 1
                                
                                Ich habe die Zwischenstecker mit Leistungsmessung, sowie den Stromzähler.
                                
                                Bei der Suche nach Energy_Counter wird mir dieses angezeigt
                                
                                >! ENERGY_COUNTER state Küche Kühlschrank:2.ENERGY_COUNTER
                                >! ENERGY_COUNTER state Waschküche Steckdose:2.ENERGY_COUNTER
                                >! ENERGY_COUNTER state Küche Kaffee:2.ENERGY_COUNTER
                                >! ENERGY_COUNTER state Stromzähler:1.ENERGY_COUNTER
                                >! ENERGY_COUNTER state Garage Steckdose:2.ENERGY_COUNTER
                                
                                Im Log wird mir nun folgendes angezeigt
                                
                                >! javascript.1 2016-06-11 09:41:59.393 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
                                >! javascript.1 2016-06-11 09:41:59.390 error message hm-rpc.0.MEQ0273558.2.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                >! javascript.1 2016-06-11 09:41:31.225 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
                                >! javascript.1 2016-06-11 09:41:31.223 error message hm-rpc.0.MEQ0272352.2.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                >! TypeError: 2016-06-11 09:41:24.295 error at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)
                                >! TypeError: 2016-06-11 09:41:24.295 error at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2036:80)
                                >! TypeError: 2016-06-11 09:41:24.295 error at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17)
                                >! TypeError: 2016-06-11 09:41:24.295 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17)
                                >! TypeError: 2016-06-11 09:41:24.295 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2644:28)
                                >! TypeError: 2016-06-11 09:41:24.295 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2644:28)
                                >! TypeError: 2016-06-11 09:41:24.295 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2625:17)
                                >! TypeError: 2016-06-11 09:41:24.295 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48
                                >! TypeError: 2016-06-11 09:41:24.295 error at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48)
                                >! TypeError: 2016-06-11 09:41:24.295 error at Object. (script.js.Test.Langzeit_Strommessung:79:30)
                                >! TypeError: 2016-06-11 09:41:24.295 error Cannot read property 'replace' of undefined
                                >! message 2016-06-11 09:41:24.279 error hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                >! javascript-1 2016-06-11 09:40:30.955 info script.js.Test.Langzeit_Strommessung: registered 1 subscription and 0 schedules
                                
                                Was läuft schief?__
                                1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  Hallo Dirk,

                                  kannst du bitte mal die Zeile

                                  rueckgabe = checkBlacklist(rueckgabe);
                                  
                                  

                                  auskommentieren zu

                                  // rueckgabe = checkBlacklist(rueckgabe);
                                  

                                  Ausserdem hast du einen Stromzähler, der ENERGY.COUNTER auf Kanal 1 hat. Ich habe so ein Gerät nicht. Eigentlich dürfte das kein Problem sein. Aber ist halt nicht getestet.

                                  Und stelle bitte logging auf true für mehr Details

                                  Wie es aussieht, läuft das Skript nicht bei allen sauber durch. IIch habe es damals für mich mit der genauen Abfrage der von mir verwendeten Stromzähler gebaut. Dann sollte es universell laufen, ohne weitere Eingaben. Und das habe ich hier dann mal veröffentlicht. Ich werde mich noch einmal dran setzen.

                                  Könnte auch gut einen Adapter ergeben. Dazu ist aber das dynamische Anlegen der States notwendig (ich weiß ja nicht, wieviele Geräte der Nutzer hat) und das habe ich bisher noch nicht gemacht. Ich habe beim Entwickler https://github.com/Pmant/ioBroker.harmony/blob/master/harmony.js aber schon gesehen. Mal sehen, ob ich das schaffe.

                                  Gruß

                                  Pix

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

                                    Hallo Pix,

                                    danke für de schnelle Rückmeldung!

                                    Die gezeigten Fehler sind raus, und es werde auch Datapoints erstellt.

                                    Es gibt jetzt nur noch die Fehler

                                    ! javascript.1 2016-06-11 11:48:44.336 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
                                    ! javascript.1 2016-06-11 11:48:44.335 error message hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                    Ansonsten sieht es gut aus

                                    ! javascript.1 2016-06-11 11:46:29.610 info javascript.1 script.js.Test.Langzeit_Strommessung: Gerätename: WaschkücheSteckdose
                                    ! javascript.1 2016-06-11 11:46:29.610 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:29.610 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
                                    ! javascript.1 2016-06-11 11:46:29.609 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 13016
                                    ! javascript.1 2016-06-11 11:46:29.609 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 13016
                                    ! javascript.1 2016-06-11 11:46:29.609 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Waschküche Steckdose
                                    ! javascript.1 2016-06-11 11:46:29.608 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0272365
                                    ! javascript.1 2016-06-11 11:46:29.608 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Waschküche Steckdose:2
                                    ! javascript.1 2016-06-11 11:46:29.607 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0272365.2
                                    ! javascript.1 2016-06-11 11:46:29.607 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Waschküche Steckdose:2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:29.607 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:29.606 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
                                    ! javascript.1 2016-06-11 11:46:29.606 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
                                    ! javascript.1 2016-06-11 11:46:29.605 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
                                    ! javascript.1 2016-06-11 11:46:29.604 info javascript.1 script.js.Test.Langzeit_Strommessung: –------ Strommesser ---------
                                    ! javascript.1 2016-06-11 11:46:28.742 info javascript.1 script.js.Test.Langzeit_Strommessung: ------------ ENDE ------------
                                    ! javascript.1 2016-06-11 11:46:28.742 info javascript.1 script.js.Test.Langzeit_Strommessung: Stromverbrauch und -kosten (GarageSteckdose) aktualisiert
                                    ! javascript.1 2016-06-11 11:46:28.742 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Jahr: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.741 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Jahr: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.741 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Quartal: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.741 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Quartal: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.740 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Monat: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.740 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Monat: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.739 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Woche: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.739 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Woche: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.739 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Tag: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.738 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:28.738 info javascript.1 script.js.Test.Langzeit_Strommessung: States in der Instanz javascript.1.Strom. erstellt
                                    ! javascript.1 2016-06-11 11:46:28.738 info javascript.1 script.js.Test.Langzeit_Strommessung: Gerätename: GarageSteckdose
                                    ! javascript.1 2016-06-11 11:46:28.737 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.NEQ0386228.2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:28.737 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
                                    ! javascript.1 2016-06-11 11:46:28.736 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 129
                                    ! javascript.1 2016-06-11 11:46:28.736 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 129
                                    ! javascript.1 2016-06-11 11:46:28.735 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Garage Steckdose
                                    ! javascript.1 2016-06-11 11:46:28.735 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.NEQ0386228
                                    ! javascript.1 2016-06-11 11:46:28.734 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Garage Steckdose:2
                                    ! javascript.1 2016-06-11 11:46:28.720 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.NEQ0386228.2
                                    ! javascript.1 2016-06-11 11:46:28.720 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Garage Steckdose:2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:28.719 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.NEQ0386228.2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:28.719 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
                                    ! javascript.1 2016-06-11 11:46:28.718 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
                                    ! javascript.1 2016-06-11 11:46:28.718 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
                                    ! javascript.1 2016-06-11 11:46:28.716 info javascript.1 script.js.Test.Langzeit_Strommessung: -------- Strommesser ---------
                                    ! javascript.1 2016-06-11 11:46:21.735 info javascript.1 script.js.Test.Langzeit_Strommessung: ------------ ENDE ------------
                                    ! javascript.1 2016-06-11 11:46:21.734 info javascript.1 script.js.Test.Langzeit_Strommessung: Stromverbrauch und -kosten (WaschkücheSteckdose) aktualisiert
                                    ! javascript.1 2016-06-11 11:46:21.734 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Jahr: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.734 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Jahr: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.733 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Quartal: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.733 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Quartal: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.733 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Monat: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.732 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Monat: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.732 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Woche: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.731 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Woche: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.731 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Tag: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.731 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:21.730 info javascript.1 script.js.Test.Langzeit_Strommessung: States in der Instanz javascript.1.Strom. erstellt
                                    ! javascript.1 2016-06-11 11:46:21.730 info javascript.1 script.js.Test.Langzeit_Strommessung: Gerätename: WaschkücheSteckdose
                                    ! javascript.1 2016-06-11 11:46:21.730 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:21.729 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
                                    ! javascript.1 2016-06-11 11:46:21.729 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 13015.799988
                                    ! javascript.1 2016-06-11 11:46:21.728 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 13016
                                    ! javascript.1 2016-06-11 11:46:21.728 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Waschküche Steckdose
                                    ! javascript.1 2016-06-11 11:46:21.728 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0272365
                                    ! javascript.1 2016-06-11 11:46:21.727 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Waschküche Steckdose:2
                                    ! javascript.1 2016-06-11 11:46:21.727 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0272365.2
                                    ! javascript.1 2016-06-11 11:46:21.727 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Waschküche Steckdose:2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:21.726 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:21.726 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
                                    ! javascript.1 2016-06-11 11:46:21.725 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
                                    ! javascript.1 2016-06-11 11:46:21.718 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
                                    ! javascript.1 2016-06-11 11:46:21.716 info javascript.1 script.js.Test.Langzeit_Strommessung: -------- Strommesser ---------
                                    ! javascript.1 2016-06-11 11:46:18.031 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
                                    ! javascript.1 2016-06-11 11:46:18.030 error message hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                    ! javascript.1 2016-06-11 11:46:18.030 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:18.030 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
                                    ! javascript.1 2016-06-11 11:46:18.029 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 101116.599976
                                    ! javascript.1 2016-06-11 11:46:18.029 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 101133.299927
                                    ! javascript.1 2016-06-11 11:46:18.029 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Stromzähler
                                    ! javascript.1 2016-06-11 11:46:18.028 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0380660
                                    ! javascript.1 2016-06-11 11:46:18.028 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Stromzähler:1
                                    ! javascript.1 2016-06-11 11:46:18.027 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0380660.1
                                    ! javascript.1 2016-06-11 11:46:18.027 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Stromzähler:1.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:18.026 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER
                                    ! javascript.1 2016-06-11 11:46:18.026 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
                                    ! javascript.1 2016-06-11 11:46:18.026 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
                                    ! javascript.1 2016-06-11 11:46:18.025 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
                                    ! javascript.1 2016-06-11 11:46:18.023 info javascript.1 script.js.Test.Langzeit_Strommessung: –------ Strommesser ---------
                                    ! javascript.1 2016-06-11 11:46:13.649 info javascript.1 script.js.Test.Langzeit_Strommessung: ------------ ENDE ------------
                                    ! javascript.1 2016-06-11 11:46:13.649 info javascript.1 script.js.Test.Langzeit_Strommessung: Stromverbrauch und -kosten (WaschkücheSteckdose) aktualisiert
                                    ! javascript.1 2016-06-11 11:46:13.648 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Jahr: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.648 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Jahr: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.647 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Quartal: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.647 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Quartal: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.647 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Monat: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.646 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Monat: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.646 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Woche: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.645 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Woche: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.645 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Tag: "string". Please fix, while deprecated and will not work in next versions.
                                    ! javascript.1 2016-06-11 11:46:13.645 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.

                                    Wie verrechnest du eigentlich die Grundgebühr?

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

                                      Die Fehler wurden durch den Neustart des Skripts beseitigt.

                                      Grundgebühr? Ach ja. Gar nicht. Kannste weglassen.

                                      Pix

                                      Gesendet mit Tapatalk

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        michihorn last edited by

                                        Hallo Pix

                                        ich habe in meinem Skript eine Fehlermeldung.

                                        Wenn meinen 3 Strommessern wurde nur einer in den Objekten angelegt. Dieser Strommesser hat in den Objekten nur Nullen, obwohl das Skript seit Sonntag Werte sammeln sollt.

                                        Kannst du noch mal schauen? Danke

                                        Michael
                                        326_3.png

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          simpixo last edited by

                                          Hallo Pix

                                          ich erhalte folgende Warnung im LOG

                                          > javascript.0 2016-06-24 08:36:38.107 warn javascript.0 Wrong type of javascript.0.Strom.HM-ES-PMSw1-PlLEQxxxxxxx.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.

                                          Sind die Datenpunkte falsch angelegt? Was müsste man an den Datenpunkten verändern damit diese Warnungen nicht angezeigt werden?

                                          Gruß

                                          Adrian

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

                                            Ja, diese Warnung kommt seit einem der letzten Updates und warnt davor, dass der Typ der Variable, die beschrieben werden soll, nicht zum Typ des Inhalts passt. In diesem Fall: Zeichenkette/String soll in Typ Zahl geschrieben werden.

                                            Der createStates-Befehl erzeugt für die Zählerstände und Verbräuche eine Zahl mit Einheit (type: number, unit). Das sollte so bleiben.

                                            Beim Schreiben der Variablen wird die Zahl auf drei Nachkommastellen begrenzt. Das passiert mit dem Befehl toFixed(3). Dieser Befehl macht aber aus einer Zahl eine Zeichenkette. Daher muss anschließend diese Zeichenkette wieder in eine Zahl (mit Dezimalstellen) gewandelt werden. Das mache ich mit parseFloat().

                                            Tausche dafür die Funktion berechneVerbrauchKosten gegen diese aus:

                                            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');
                                            }
                                            

                                            Gruß

                                            Pix

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            469
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            42
                                            148
                                            46216
                                            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