Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Stromverbrauch protokollieren (Tag, Woche, Monat, Quartal, Jahr)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
148 Beiträge 42 Kommentatoren 50.1k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • E Offline
    E Offline
    EVOlutionIX
    schrieb am zuletzt editiert von
    #125

    @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?

    Hardware: Raspberry Pi3 (ioBroker reserve) + Intel NUC (ioBroker) mit Ubutu Server 18.04 + CCU 2

    Ausstattung: HM Messdosen, HM Heizungssteuerung, HM Türsensoren, HM Lichtschalter, Sonoff Schalter

    1 Antwort Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #126

      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

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • E Offline
        E Offline
        EVOlutionIX
        schrieb am zuletzt editiert von
        #127

        @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

        Hardware: Raspberry Pi3 (ioBroker reserve) + Intel NUC (ioBroker) mit Ubutu Server 18.04 + CCU 2

        Ausstattung: HM Messdosen, HM Heizungssteuerung, HM Türsensoren, HM Lichtschalter, Sonoff Schalter

        1 Antwort Letzte Antwort
        0
        • HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #128

          @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

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #129

            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

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • eric2905E Offline
              eric2905E Offline
              eric2905
              schrieb am zuletzt editiert von
              #130

              Im Thread gibt es einen Korrekturhinweis dazu.

              Gruß,

              Eric

              Von unterwegs getippert

              Roses are red, violets are blue,

              if I listen to metal, my neighbours do too

              1 Antwort Letzte Antwort
              0
              • E Offline
                E Offline
                EVOlutionIX
                schrieb am zuletzt editiert von
                #131

                @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

                Hardware: Raspberry Pi3 (ioBroker reserve) + Intel NUC (ioBroker) mit Ubutu Server 18.04 + CCU 2

                Ausstattung: HM Messdosen, HM Heizungssteuerung, HM Türsensoren, HM Lichtschalter, Sonoff Schalter

                1 Antwort Letzte Antwort
                0
                • A Offline
                  A Offline
                  Adnim
                  schrieb am zuletzt editiert von
                  #132

                  ! ```
                  `/* 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 Antwort Letzte Antwort
                  0
                  • HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #133

                    @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

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • E Offline
                      E Offline
                      EVOlutionIX
                      schrieb am zuletzt editiert von
                      #134

                      @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] ```

                      Hardware: Raspberry Pi3 (ioBroker reserve) + Intel NUC (ioBroker) mit Ubutu Server 18.04 + CCU 2

                      Ausstattung: HM Messdosen, HM Heizungssteuerung, HM Türsensoren, HM Lichtschalter, Sonoff Schalter

                      1 Antwort Letzte Antwort
                      0
                      • E Offline
                        E Offline
                        EVOlutionIX
                        schrieb am zuletzt editiert von
                        #135

                        @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

                        Hardware: Raspberry Pi3 (ioBroker reserve) + Intel NUC (ioBroker) mit Ubutu Server 18.04 + CCU 2

                        Ausstattung: HM Messdosen, HM Heizungssteuerung, HM Türsensoren, HM Lichtschalter, Sonoff Schalter

                        1 Antwort Letzte Antwort
                        0
                        • Q Offline
                          Q Offline
                          Qlink
                          schrieb am zuletzt editiert von
                          #136

                          @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 Antwort Letzte Antwort
                          0
                          • D Offline
                            D Offline
                            dering
                            schrieb am zuletzt editiert von
                            #137

                            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 Antwort Letzte Antwort
                            0
                            • P Offline
                              P Offline
                              ple
                              schrieb am zuletzt editiert von
                              #138

                              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ß

                              Intel Nuc + Proxmox

                              1 Antwort Letzte Antwort
                              0
                              • K Offline
                                K Offline
                                Kampfratte
                                schrieb am zuletzt editiert von
                                #139

                                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 Antwort Letzte Antwort
                                0
                                • J Offline
                                  J Offline
                                  Jan007
                                  schrieb am zuletzt editiert von
                                  #140

                                  @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 :D 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 Antwort Letzte Antwort
                                  0
                                  • DutchmanD Offline
                                    DutchmanD Offline
                                    Dutchman
                                    Developer Most Active Administrators
                                    schrieb am zuletzt editiert von
                                    #141

                                    @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 Antwort Letzte Antwort
                                    0
                                    • J Offline
                                      J Offline
                                      Jan007
                                      schrieb am zuletzt editiert von
                                      #142

                                      Hallo Dutchman,

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

                                      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 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        MichaelJaD
                                        schrieb am zuletzt editiert von
                                        #143

                                        Ich wollte dieses Script nutzen um meinen Wert vom Stromzähler auszuwerten den ich mit dem Smartmeter Adapter auslese.

                                        Dieser Wert ist aber in kwh. Ich verstehe leider noch nicht ganz wo ich da die Anpassung mach muss? Die berechneten Werte werden alle als Wh gespeichert, obwohl das kWh sind. Heißt eigentlich müssen 9kWh gespeichert werden, es werden aber 0,009kWh gespeichert.

                                        Setup:

                                        ! //–--------------------------------------------------------------------------//
                                        ! // +++++++++ USER ANPASSUNGEN ++++++++++++++++++++++++
                                        ! // debug logging
                                        ! var logging = true;
                                        ! // Aktivieren der History Instanz
                                        ! var enable_history = false;
                                        ! // history Instanz
                                        ! var instance_history = 'history.0';
                                        ! // Geräte können unterschiedliche Preise haben
                                        ! var enable_unterschiedlichePreise = true;
                                        ! // Speichern der Werte in zusätzlichen Objekten.
                                        ! // Wenn 0, dann deaktiviert
                                        ! var Tag_Anzahl_Werte_in_der_Vergangenheit = 7;
                                        ! var Woche_Anzahl_Werte_in_der_Vergangenheit = 4;
                                        ! var Monat_Anzahl_Werte_in_der_Vergangenheit = 12;
                                        ! var Quartal_Anzahl_Werte_in_der_Vergangenheit = 4;
                                        ! var Jahr_Anzahl_Werte_in_der_Vergangenheit = 2;
                                        ! // Grundpreis einberechnen
                                        ! var enable_Grundpreis_einberechnen = true;
                                        ! var instance = '0';
                                        ! var instanz = 'javascript.' + instance + '.';
                                        ! // Pfad innerhalb der Instanz
                                        ! var pfad = 'Verbrauchszaehler.';
                                        ! var default_unit = 'Wh';
                                        ! var default_unit_kilo = 'kWh';
                                        ! // Diese Teile werden aus den Gerätenamen entfernt
                                        ! var blacklist = [':1', ':2', ':3', ':4', ':5', ':6', ':7', ':8'];
                                        ! var AnzahlKommastellenKosten = 2;
                                        ! var AnzahlKommastellenVerbrauch = 3;
                                        ! var AnzahlKommastellenZaehlerstand = 3;
                                        ! var KumulierterWertIstBereitsInKilo = false;
                                        ! var umrechnung = getState("smartmeter.0.1-0:1_8_0255.value").val * 1000;
                                        ! log (umrechnung);
                                        ! var eigeneDatenpunkte = [
                                        ! // Beispiel:
                                        ! // ['Datenpunkt', 'Aliasname', 'Einheit kumulierter Wert', 'Einheit berechnete Werte (kilo/1000)' ],
                                        ! [ 'smartmeter.0.1-0:1_8_0
                                        255.value', 'Verbrauchszähler.Strom', 'Wh', 'kWh' ],
                                        ! // [ 'javascript.1.MeinSonoffGeraet1', 'Strom.Sonoff.MeinSonoffGeraet1', 'Wh', 'kWh' ],
                                        ! // [ 'javascript.1.MeinSonoffGeraet2', 'Strom.Sonoff.MeinSonoffGeraet2', 'kWh', 'kWh' ],
                                        ! // [ 'javascript.1.MeineGas1', 'Gas.MeinGaszaehler1', 'm3', 'm3' ],
                                        ! // [ 'javascript.1.MeineGas2', 'Gas.MeinGaszaehler2', 'm3', 'm3' ],
                                        ! ];

                                        nach dem Start des Sriptes:

                                        script.js.Smartmeter.Verbrauchszähler: Alias:Verbrauchszähler.Strom Datenpunkt:smartmeter.0.1-0:1_8_0*255.value Einheit:Wh Einheit_kilo:kWh

                                        Log nach dem ein neuer Wert erkannt wurde:

                                        ! javascript.0 2018-04-21 06:01:42.298 info script.js.Smartmeter.Verbrauchszähler: –---------- ENDE ------------
                                        ! javascript.0 2018-04-21 06:01:42.298 info script.js.Smartmeter.Verbrauchszähler: Stromverbrauch (Verbrauchszähler.Strom) aktualisiert
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: Stromkosten (Verbrauchszähler.Strom) aktualisiert
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: Das Gerät:Verbrauchszähler.Strom hat eigenen Grundpreis: 6.65
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: Das Gerät:Verbrauchszähler.Strom hat eigenen Strompreis: 26.28
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: States in der Instanz javascript.0.Verbrauchszaehler. erstellt
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: Nach der Aufbereitung: Verbrauchszähler.Strom
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: Es wird der Aliasname gesetzt:Verbrauchszähler.Strom
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: entferneDatenpunkt - rueckgabe4:1-0
                                        ! javascript.0 2018-04-21 06:01:42.297 info script.js.Smartmeter.Verbrauchszähler: entferneDatenpunkt - rueckgabe3:1-0
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: entferneDatenpunkt - rueckgabe2:1-0
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: entferneDatenpunkt - rueckgabe1:1-0:1_8_0255.value
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: vor der Aufbereitung: 1-0:1_8_0
                                        255.value
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: alter Wert: 11630.542
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: neuer Wert: 11630.544
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: device name: null
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: device ID: null
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: channel Name: Zählerstand 1 Summe Wirkarbeit Bezug + (Total)
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: channel ID: smartmeter.0.1-0:1_8_0255
                                        ! javascript.0 2018-04-21 06:01:42.296 info script.js.Smartmeter.Verbrauchszähler: Name: 1-0:1_8_0
                                        255.value
                                        ! javascript.0 2018-04-21 06:01:42.295 info script.js.Smartmeter.Verbrauchszähler: id: smartmeter.0.1-0:1_8_0*255.value
                                        ! javascript.0 2018-04-21 06:01:42.295 info script.js.Smartmeter.Verbrauchszähler: RegExp-Funktion ausgelöst
                                        ! javascript.0 2018-04-21 06:01:42.294 info script.js.Smartmeter.Verbrauchszähler: -------- Strommesser ---------

                                        EDIT:

                                        Habe das geändert:

                                        var KumulierterWertIstBereitsInKilo = true;

                                        und

                                        [ 'smartmeter.0.1-0:1_8_0*255.value', 'Verbrauchszähler.Strom', '~~[b]~~kWh', 'kWh' ],

                                        mal schauen was passiert.

                                        1 Antwort Letzte Antwort
                                        0
                                        • DutchmanD Offline
                                          DutchmanD Offline
                                          Dutchman
                                          Developer Most Active Administrators
                                          schrieb am zuletzt editiert von
                                          #144

                                          Und genau das war's auch schon….

                                          So habe ich es auch laufen


                                          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 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          391

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe