Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Zähler Waschmaschine/Spülmaschine und Statistik

    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

    Zähler Waschmaschine/Spülmaschine und Statistik

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pix last edited by

      Hallo,

      ein http://homematic-forum.de/forum/viewtopic.php?f=19&t=27663#p244672 hat mich daran erinnert, dass ich schon lange einen Zähler für Wasch- und Spülmaschine haben wollte. Jetzt zum Jahresbeginn war der beste Zeitpunkt dafür!

      Der Zähler soll einfach jede Wäsche zählen, wird täglich, wöchentlich, monatlich, im Quartal und jährlich zurückgesetzt. Das Skript ist recht allgemein gehalten, nur im oberen Teil sind Anpassungen zu machen. So kann man es einfach für verschiedene Geräte duplizieren ohne viele einzelne Zeilen oder Variablen editieren zu müssen.

      Es zaehlt hoch, wenn die Steuervariable auf true geht. Wie man seine Wasch-/Spülmaschine erfasst, ist eine andere Baustelle und jedem selbst überlassen. Das Skript hier ist praktisch nur für die Statistik da.

      Es werden globale Variablen für Tag, Woche, Monat, Quartal und Jahr in der Ordnerstruktur javascript.0.Status.Gerät.Zaehler.Zeitraum angelegt.

      Es wird eine Optin Variable angelegt, die das Senden von Pushmeldungen kurz vorm Rücksetzen unterdrücken kann. Pushover ist also nötig, kann aber leicht ersetzt werden.

      Skript für Javascript Instanz 0:

      ! ````
      /* /* Küche Spülmaschine Zaehler
      Skript zum Überwachen des Status der Spülmaschine (Variable in Status_Geraete.js)
      Skript zählt das Umschalten des Status auf "in Betrieb" und damit die Anzahl der Waschvorgänge
      ! Variable Anpassung an verschiedene Geräte (für jedes Gerät ein eigenes Skript verwenden)
      ! 01.01.2016 erstellt von Pix für Spülmaschine
      02.01.2016 Manuelles Addieren/Subtrahieren hinzugefügt
      */
      var name_geraet = 'Spuelmaschine', // zB Waschmaschine (Achtung keine Umlaute)
      beschreibung = 'Spülvorgänge'; // zB Waschvorgänge oder Spülvorgänge oder Einschaltvorgänge, Umlaute erlaubt
      ! // Manuell anpassen (wegen der flüssigen Sprache :] )
      createState('Optin.Kueche.Spuelmaschine.Zaehler.Push', true, {
      name: 'Optin Anzahl der Spülvorgänge der Spülmaschine melden',
      desc: 'Soll gemeldet werden, wie oft die Spülmaschine gestartet wurde?',
      type: 'boolean',
      read: true,
      write: true
      });
      ! var beschreibung_log = 'Anzahl Spülvorgänge',
      optin_beschreibung = 'Anzahl Spülvorgäng der Spülmaschine',
      idOptinPush = "javascript.0.Optin.Kueche.Spuelmaschine.Zaehler.Push";
      ! // Diese Variable wird überwacht auf Änderung nach true
      var idStatus = "javascript.0.Status.Spuelmaschine"/Status Spuelmaschine/; // aus Status_Geraete.js
      ! // Zählerstände bei Reset mitloggen?
      var logging = true;
      ! // +++++ Ab hier keine Änderungen vornehmen +++++
      ! //Variablen anlegen
      createState('Status.' + name_geraet + '.Zaehler.Tag', 0, {
      read: true,
      write: true,
      type: 'number',
      name: name_geraet + ' - Anzahl ' + beschreibung + ' heute'
      });
      createState('Status.' + name_geraet + '.Zaehler.Woche', 0, {
      read: true,
      write: true,
      type: 'number',
      name: name_geraet + ' - Anzahl ' + beschreibung + ' diese Woche'
      });
      createState('Status.' + name_geraet + '.Zaehler.Monat', 0, {
      read: true,
      write: true,
      type: 'number',
      name: name_geraet + ' - Anzahl ' + beschreibung + ' diesen Monat'
      });
      createState('Status.' + name_geraet + '.Zaehler.Quartal', 0, {
      read: true,
      write: true,
      type: 'number',
      name: name_geraet + ' - Anzahl ' + beschreibung + ' dieses Quartal'
      });
      createState('Status.' + name_geraet + '.Zaehler.Jahr', 0, {
      read: true,
      write: true,
      type: 'number',
      name: name_geraet + ' - Anzahl ' + beschreibung + ' dieses Jahr'
      });

      createState('Status.' + name_geraet + '.Zaehler.addieren', false, {
          read: true,
          write: true,
          type: 'booelan',
          name: name_geraet + ' - Zähler um eins erhöhen'
      });
      createState('Status.' + name_geraet + '.Zaehler.subtrahieren', false, {
          read: true,
          write: true,
          type: 'boolean',
          name: name_geraet + ' - Zähler um eins vermindern'
      });
      

      ! var idZaehler_addieren = 'javascript.0.Status.' + name_geraet + '.Zaehler.addieren',
      idZaehler_subtrahieren = 'javascript.0.Status.' + name_geraet + '.Zaehler.subtrahieren';
      ! var idZaehlerTag = 'javascript.0.Status.' + name_geraet + '.Zaehler.Tag',
      idZaehlerWoche = 'javascript.0.Status.' + name_geraet + '.Zaehler.Woche',
      idZaehlerMonat = 'javascript.0.Status.' + name_geraet + '.Zaehler.Monat',
      idZaehlerQuartal = 'javascript.0.Status.' + name_geraet + '.Zaehler.Quartal',
      idZaehlerJahr = 'javascript.0.Status.' + name_geraet + '.Zaehler.Jahr';
      ! // Statusvariable überwachen und Ausgabe veranlassen
      on({
      id: idStatus,
      change: 'ne'
      }, function (data) {
      if (data.newState.val === 1 ) { // eingeschaltet
      // hochzählen
      hochzaehlen();
      }
      });
      ! // Manuelles hochzaehlen
      on(idZaehler_addieren, function (obj) {
      if (!obj.newState.ack && obj.newState.val) {
      hochzaehlen();
      }
      });
      // Manuelles runterzaehlen
      on(idZaehler_subtrahieren, function (obj) {
      if (!obj.newState.ack && obj.newState.val) {
      runterzaehlen();
      }
      });
      ! // Aktionen
      function hochzaehlen() {
      setState(idZaehlerTag, ++getState(idZaehlerTag).val);
      setState(idZaehlerWoche, ++getState(idZaehlerWoche).val);
      setState(idZaehlerMonat, ++getState(idZaehlerMonat).val);
      setState(idZaehlerQuartal, ++getState(idZaehlerQuartal).val);
      setState(idZaehlerJahr, ++getState(idZaehlerJahr).val);
      }
      ! function runterzaehlen() {
      setState(idZaehlerTag, --getState(idZaehlerTag).val);
      setState(idZaehlerWoche, --getState(idZaehlerWoche).val);
      setState(idZaehlerMonat, --getState(idZaehlerMonat).val);
      setState(idZaehlerQuartal, --getState(idZaehlerQuartal).val);
      setState(idZaehlerJahr, --getState(idZaehlerJahr).val);
      }
      ! function zaehlerstand_reset(zeitraum) {
      switch(zeitraum) {
      case 'Tag':
      var tag_meldung = beschreibung_log + ' gestern: ' + getState(idZaehlerTag).val;
      if (logging) log(tag_meldung);
      meldung_push(tag_meldung, 'Betreff', 0);
      setState(idZaehlerTag, 0);
      log(beschreibung_log + ' aktueller Tag zurückgesetzt');
      break;

          case 'Woche':
              var woche_meldung = beschreibung_log + ' vergangene Woche: ' + getState(idZaehlerWoche).val;
              if (logging) log(woche_meldung);
              setState(idZaehlerWoche, 0);
              log(beschreibung_log + ' aktuelle Woche zurückgesetzt');
              break;
      
          case 'Monat':
              var monat_meldung = beschreibung_log + ' verganener Monat: ' + getState(idZaehlerMonat).val;
              if (logging) log(monat_meldung);
              setState(idZaehlerMonat, 0);
              log(beschreibung_log + ' aktueller Monat zurückgesetzt');
              break;
      
          case 'Quartal':
              var quartal_meldung = beschreibung_log + ' vergangenes Quartal: ' + getState(idZaehlerQuartal).val;
              if (logging) log(quartal_meldung);
              setState(idZaehlerQuartal, 0);
              log(beschreibung_log + ' aktuelles Quartal zurückgesetzt');
              break;
      
          case 'Jahr':
              var jahr_meldung = beschreibung_log + ' vergangenes Jahr: ' + getState(idZaehlerJahr).val;
              if (logging) log(jahr_meldung);
              setState(idZaehlerJahr, 0);
              log(beschreibung_log + ' aktuelles Jahr zurückgesetzt');
              break;
      
          default:
              log('Fehler/Error beim Reset der Datenpunkte!');
      
      }
      

      }

      ! // RESETS DER WERTE #################################
      // Täglich um 0 Uhr ausführen
      schedule("0 0 * * *", function() {
      zaehlerstand_reset('Tag');
      });
      ! // Montags um 0 Uhr ausführen
      schedule("0 0 * * 1", function() {
      zaehlerstand_reset('Woche');
      });
      ! // Monatsersten um 0 Uhr ausführen
      schedule("0 0 1 * *", function() {
      zaehlerstand_reset('Monat');
      });
      ! // Quartalsersten (Jan,Apr,Jul,Okt) um 0 Uhr ausführen
      schedule("0 0 1 1 *", function() {
      zaehlerstand_reset('Quartal');
      });
      ! schedule("0 0 1 4 *", function() {
      zaehlerstand_reset('Quartal');
      });
      ! schedule("0 0 1 7 *", function() {
      zaehlerstand_reset('Quartal');
      });
      ! schedule("0 0 1 10 *", function() {
      zaehlerstand_reset('Quartal');
      });
      ! // Neujahr um 0 Uhr ausführen
      schedule("0 0 1 1 *", function() {
      zaehlerstand_reset('Jahr');
      });
      ! // Pushmeldung
      function meldung_push (text, titel, prio) {
      var optin_push = getState(idOptinPush).val;
      if (optin_push) { // wenn Optin
      sendTo("pushover", {
      message: text,
      title: titel,
      priority: prio
      });
      } // Ende Optin
      }
      ! // Opt In setzen - Logging
      on( {
      id: idOptinPush,
      change: 'ne'
      }, function (obj) {
      log('Opt in Variable <' + optin_beschreibung + ' Push> auf <' + obj.newState.val + '> gesetzt ', 'info');
      });
      ! ````

      Habe drei Skripts für drei Geräte. Entsprechend hier ein Tabelle für VIS mit +/- Steuerung zur manuellen Korrektur:
      261_bildschirmfoto_2016-01-02_um_13.45.32.jpg

      ! [{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Spuelmaschine.Zaehler.addieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ +1 ]","name":"Zähler Spülmaschine erhöhen","class":""},"style":{"left":211,"top":1494,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Spuelmaschine.Zaehler.subtrahieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ -1 ]","name":"Zähler Spülmaschine vermindern","class":""},"style":{"left":177,"top":1494,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Waschmaschine.Zaehler.subtrahieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ -1 ]","name":"Zähler Waschmaschine vermindern","class":""},"style":{"left":177,"top":1619,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Waschmaschine.Zaehler.addieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ +1 ]","name":"Zähler Waschmaschine erhöhen","class":""},"style":{"left":211,"top":1619,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Dampfgarer.Zaehler.subtrahieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ -1 ]","name":"Zähler Dampfgarer vermindern","class":""},"style":{"left":177,"top":1369,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Dampfgarer.Zaehler.addieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ +1 ]","name":"Zähler Dampfgarer erhöhen","class":""},"style":{"left":211,"top":1369,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"\n\n\n\n\n\n \n \n \n \n \n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n","name":"Tabelle"},"style":{"left":"106px","top":"1221px","z-index":"20","color":"rgba(250,250,250,1);","font-family":"","width":"auto","height":"auto","font-size":"12px"},"widgetSet":"basic"}] ! Und hier die CSS dazu: ! >!
      /* --- Tabelle Anzahl / Zaehler (wie Strom)/
      #anzahl {
      text-align: center;
      border-collapse: collapse; /
      kein Doppelrand, sonst "seperate"/
      line-height: 100%;
      font-family: RobotoCondensed-Regular, Futura;
      }
      ! #anzahl thead {
      font-size: 120%;
      text-align: center;
      margin: 0 0 10px 0;
      }
      ! #anzahl caption { /
      Raumnamen /
      font-size: 150%;
      text-align: left;
      margin: 10px 0 10px 0;
      }
      ! /
      Grösse /
      /Geräte Spalte/
      #anzahl td.anzahl_Messpunkt,
      #anzahl th.anzahl_Messpunkt {
      width: 200px;
      height: auto;
      font-family: RobotoCondensed-Regular, Futura;
      font-size: 14px;
      font-weight: normal;
      /color: red;/
      }
      ! /Zeitraum Spalte/
      #anzahl td.anzahl_Zeitraum,
      #anzahl th.anzahl_Zeitraum {
      width: 120px;
      font-family: RobotoCondensed-Regular, Futura;
      font-size: 14px;
      font-weight: normal;
      /color: green;/
      }
      ! /Anzahl Spaltenüberschrift/
      #anzahl th:nth-child(3) {
      width: 80px;
      height: auto;
      font-family: RobotoCondensed-Regular, Futura;
      font-size: 14px;
      font-weight: normal;
      /color: yellow;/
      }
      ! /Zahlen rechtsbündig mit Padding zum Rand/
      #anzahl tr.anzahl_Zeitraum_aktuell td,
      #anzahl tr.anzahl_Zeitraum_Tag td,
      #anzahl tr.anzahl_Zeitraum_Woche td,
      #anzahl tr.anzahl_Zeitraum_Monat td,
      #anzahl tr.anzahl_Zeitraum_Quartal td,
      #anzahl tr.anzahl_Zeitraum_Jahr td{
      text-align: right;
      padding-right: 0.7em;
      padding-top: 0.5em;
      padding-bottom: 0.5em;
      }
      ! #anzahl .anzahl_Spaltentitel { /Spaltentitel/
      line-height: 250%;
      }
      ! /
      Farben /
      #anzahl,
      #anzahl th,
      #anzahl td {
      border: 1px solid grey;
      ! }
      #anzahl th {
      color: rgba(250,250,250,1);
      /
      font-weight: 800;/
      }
      ! #anzahl td {
      color: rgba(220,220,220,1);
      /
      font-weight: 400; /
      }
      ! #anzahl .anzahl_Spaltentitel { /Spaltentitel/
      background: rgba(000,100,200,0.5); /
      blau /
      }
      ! tbody.anzahl_kueche {
      background: rgba(80,80,80,0.4);
      }
      ! /
      Dampfgarer /
      #anzahl tr:nth-child(2) {
      background: rgba(200,200,200,0.25);
      }
      ! /
      Spülmaschine /
      #anzahl tr:nth-child(6) {
      background: rgba(200,200,200,0.1);
      }
      ! /
      Waschmaschine /
      #anzahl tr:nth-child(11) {
      background: rgba(200,200,200,0.25);
      }
      ! /
      Zeiträume */
      #anzahl tr.anzahl_Zeitraum_Tag {
      background: rgba(0,250,0,0.2);
      }
      ! #anzahl tr.anzahl_Zeitraum_Woche {
      background: rgba(0,200,200,0.2);
      }
      ! #anzahl tr.anzahl_Zeitraum_Monat{
      background: rgba(0,0,80,0.5);
      }
      ! #anzahl tr.anzahl_Zeitraum_Quartal {
      background: rgba(0,150,0,0.2);
      }
      ! #anzahl tr.anzahl_Zeitraum_Jahr {
      background: rgba(180,0,0,0.5);
      }
      ! ! Vielleicht kann es jemand brauchen. ! Gruß ! Pix ! 02.01.2016 zweite Version mit manuellen Korrekturmöglichkeit der Zählerstände über VIS-Widgets (+/-) ! Fehler getState bei Pushsendung korrigiert ! <caption>Betriebszähler</caption> | Küche | Zeitraum | Anzahl | | --- | --- | --- | | Dampfgarer | Tag | {javascript.0.Status.Dampfgarer.Zaehler.Tag} | | Woche | {javascript.0.Status.Dampfgarer.Zaehler.Woche} | | Monat | {javascript.0.Status.Dampfgarer.Zaehler.Monat} | | Quartal | {javascript.0.Status.Dampfgarer.Zaehler.Quartal} | | Jahr | {javascript.0.Status.Dampfgarer.Zaehler.Jahr} | | Spülmaschine | Tag | {javascript.0.Status.Spuelmaschine.Zaehler.Tag} | | Woche | {javascript.0.Status.Spuelmaschine.Zaehler.Woche} | | Monat | {javascript.0.Status.Spuelmaschine.Zaehler.Monat} | | Quartal | {javascript.0.Status.Spuelmaschine.Zaehler.Quartal} | | Jahr | {javascript.0.Status.Spuelmaschine.Zaehler.Jahr} | | Waschmaschine | Tag | {javascript.0.Status.Waschmaschine.Zaehler.Tag} | | Woche | {javascript.0.Status.Waschmaschine.Zaehler.Woche} | | Monat | {javascript.0.Status.Waschmaschine.Zaehler.Monat} | | Quartal | {javascript.0.Status.Waschmaschine.Zaehler.Quartal} | | Jahr | {javascript.0.Status.Waschmaschine.Zaehler.Jahr} | !

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

        @pix:

        Hallo,

        ein http://homematic-forum.de/forum/viewtopic.php?f=19&t=27663#p244672 hat mich daran erinnert, dass ich schon lange einen Zähler für Wasch- und Spülmaschine haben wollte. Jetzt zum Jahresbeginn war der beste Zeitpunkt dafür!

        Der Zähler soll einfach jede Wäsche zählen, wird täglich, wöchentlich, monatlich, im Quartal und jährlich zurückgesetzt. Das Skript ist recht allgemein gehalten, nur im oberen Teil sind Anpassungen zu machen. So kann man es einfach für verschiedene Geräte duplizieren ohne viele einzelne Zeilen oder Variablen editieren zu müssen.

        Es zaehlt hoch, wenn die Steuervariable auf true geht. Wie man seine Wasch-/Spülmaschine erfasst, ist eine andere Baustelle und jedem selbst überlassen. Das Skript hier ist praktisch nur für die Statistik da.

        Es werden globale Variablen für Tag, Woche, Monat, Quartal und Jahr in der Ordnerstruktur javascript.0.Status.Gerät.Zaehler.Zeitraum angelegt.

        Es wird eine Optin Variable angelegt, die das Senden von Pushmeldungen kurz vorm Rücksetzen unterdrücken kann. Pushover ist also nötig, kann aber leicht ersetzt werden.

        Skript für Javascript Instanz 0:

        ! ````
        /* /* Küche Spülmaschine Zaehler
        Skript zum Überwachen des Status der Spülmaschine (Variable in Status_Geraete.js)
        Skript zählt das Umschalten des Status auf "in Betrieb" und damit die Anzahl der Waschvorgänge
        ! Variable Anpassung an verschiedene Geräte (für jedes Gerät ein eigenes Skript verwenden)
        ! 01.01.2016 erstellt von Pix für Spülmaschine
        02.01.2016 Manuelles Addieren/Subtrahieren hinzugefügt
        */
        var name_geraet = 'Spuelmaschine', // zB Waschmaschine (Achtung keine Umlaute)
        beschreibung = 'Spülvorgänge'; // zB Waschvorgänge oder Spülvorgänge oder Einschaltvorgänge, Umlaute erlaubt
        ! // Manuell anpassen (wegen der flüssigen Sprache :] )
        createState('Optin.Kueche.Spuelmaschine.Zaehler.Push', true, {
        name: 'Optin Anzahl der Spülvorgänge der Spülmaschine melden',
        desc: 'Soll gemeldet werden, wie oft die Spülmaschine gestartet wurde?',
        type: 'boolean',
        read: true,
        write: true
        });
        ! var beschreibung_log = 'Anzahl Spülvorgänge',
        optin_beschreibung = 'Anzahl Spülvorgäng der Spülmaschine',
        idOptinPush = "javascript.0.Optin.Kueche.Spuelmaschine.Zaehler.Push";
        ! // Diese Variable wird überwacht auf Änderung nach true
        var idStatus = "javascript.0.Status.Spuelmaschine"/Status Spuelmaschine/; // aus Status_Geraete.js
        ! // Zählerstände bei Reset mitloggen?
        var logging = true;
        ! // +++++ Ab hier keine Änderungen vornehmen +++++
        ! //Variablen anlegen
        createState('Status.' + name_geraet + '.Zaehler.Tag', 0, {
        read: true,
        write: true,
        type: 'number',
        name: name_geraet + ' - Anzahl ' + beschreibung + ' heute'
        });
        createState('Status.' + name_geraet + '.Zaehler.Woche', 0, {
        read: true,
        write: true,
        type: 'number',
        name: name_geraet + ' - Anzahl ' + beschreibung + ' diese Woche'
        });
        createState('Status.' + name_geraet + '.Zaehler.Monat', 0, {
        read: true,
        write: true,
        type: 'number',
        name: name_geraet + ' - Anzahl ' + beschreibung + ' diesen Monat'
        });
        createState('Status.' + name_geraet + '.Zaehler.Quartal', 0, {
        read: true,
        write: true,
        type: 'number',
        name: name_geraet + ' - Anzahl ' + beschreibung + ' dieses Quartal'
        });
        createState('Status.' + name_geraet + '.Zaehler.Jahr', 0, {
        read: true,
        write: true,
        type: 'number',
        name: name_geraet + ' - Anzahl ' + beschreibung + ' dieses Jahr'
        });

        createState('Status.' + name_geraet + '.Zaehler.addieren', false, {
            read: true,
            write: true,
            type: 'booelan',
            name: name_geraet + ' - Zähler um eins erhöhen'
        });
        createState('Status.' + name_geraet + '.Zaehler.subtrahieren', false, {
            read: true,
            write: true,
            type: 'boolean',
            name: name_geraet + ' - Zähler um eins vermindern'
        });
        

        ! var idZaehler_addieren = 'javascript.0.Status.' + name_geraet + '.Zaehler.addieren',
        idZaehler_subtrahieren = 'javascript.0.Status.' + name_geraet + '.Zaehler.subtrahieren';
        ! var idZaehlerTag = 'javascript.0.Status.' + name_geraet + '.Zaehler.Tag',
        idZaehlerWoche = 'javascript.0.Status.' + name_geraet + '.Zaehler.Woche',
        idZaehlerMonat = 'javascript.0.Status.' + name_geraet + '.Zaehler.Monat',
        idZaehlerQuartal = 'javascript.0.Status.' + name_geraet + '.Zaehler.Quartal',
        idZaehlerJahr = 'javascript.0.Status.' + name_geraet + '.Zaehler.Jahr';
        ! // Statusvariable überwachen und Ausgabe veranlassen
        on({
        id: idStatus,
        change: 'ne'
        }, function (data) {
        if (data.newState.val === 1 ) { // eingeschaltet
        // hochzählen
        hochzaehlen();
        }
        });
        ! // Manuelles hochzaehlen
        on(idZaehler_addieren, function (obj) {
        if (!obj.newState.ack && obj.newState.val) {
        hochzaehlen();
        }
        });
        // Manuelles runterzaehlen
        on(idZaehler_subtrahieren, function (obj) {
        if (!obj.newState.ack && obj.newState.val) {
        runterzaehlen();
        }
        });
        ! // Aktionen
        function hochzaehlen() {
        setState(idZaehlerTag, ++getState(idZaehlerTag).val);
        setState(idZaehlerWoche, ++getState(idZaehlerWoche).val);
        setState(idZaehlerMonat, ++getState(idZaehlerMonat).val);
        setState(idZaehlerQuartal, ++getState(idZaehlerQuartal).val);
        setState(idZaehlerJahr, ++getState(idZaehlerJahr).val);
        }
        ! function runterzaehlen() {
        setState(idZaehlerTag, --getState(idZaehlerTag).val);
        setState(idZaehlerWoche, --getState(idZaehlerWoche).val);
        setState(idZaehlerMonat, --getState(idZaehlerMonat).val);
        setState(idZaehlerQuartal, --getState(idZaehlerQuartal).val);
        setState(idZaehlerJahr, --getState(idZaehlerJahr).val);
        }
        ! function zaehlerstand_reset(zeitraum) {
        switch(zeitraum) {
        case 'Tag':
        var tag_meldung = beschreibung_log + ' gestern: ' + getState(idZaehlerTag).val;
        if (logging) log(tag_meldung);
        meldung_push(tag_meldung, 'Betreff', 0);
        setState(idZaehlerTag, 0);
        log(beschreibung_log + ' aktueller Tag zurückgesetzt');
        break;

            case 'Woche':
                var woche_meldung = beschreibung_log + ' vergangene Woche: ' + getState(idZaehlerWoche).val;
                if (logging) log(woche_meldung);
                setState(idZaehlerWoche, 0);
                log(beschreibung_log + ' aktuelle Woche zurückgesetzt');
                break;
                
            case 'Monat':
                var monat_meldung = beschreibung_log + ' verganener Monat: ' + getState(idZaehlerMonat).val;
                if (logging) log(monat_meldung);
                setState(idZaehlerMonat, 0);
                log(beschreibung_log + ' aktueller Monat zurückgesetzt');
                break;
                
            case 'Quartal':
                var quartal_meldung = beschreibung_log + ' vergangenes Quartal: ' + getState(idZaehlerQuartal).val;
                if (logging) log(quartal_meldung);
                setState(idZaehlerQuartal, 0);
                log(beschreibung_log + ' aktuelles Quartal zurückgesetzt');
                break;
                
            case 'Jahr':
                var jahr_meldung = beschreibung_log + ' vergangenes Jahr: ' + getState(idZaehlerJahr).val;
                if (logging) log(jahr_meldung);
                setState(idZaehlerJahr, 0);
                log(beschreibung_log + ' aktuelles Jahr zurückgesetzt');
                break;
                
            default:
                log('Fehler/Error beim Reset der Datenpunkte!');
            
        }
        

        }

        ! // RESETS DER WERTE #################################
        // Täglich um 0 Uhr ausführen
        schedule("0 0 * * *", function() {
        zaehlerstand_reset('Tag');
        });
        ! // Montags um 0 Uhr ausführen
        schedule("0 0 * * 1", function() {
        zaehlerstand_reset('Woche');
        });
        ! // Monatsersten um 0 Uhr ausführen
        schedule("0 0 1 * *", function() {
        zaehlerstand_reset('Monat');
        });
        ! // Quartalsersten (Jan,Apr,Jul,Okt) um 0 Uhr ausführen
        schedule("0 0 1 1 *", function() {
        zaehlerstand_reset('Quartal');
        });
        ! schedule("0 0 1 4 *", function() {
        zaehlerstand_reset('Quartal');
        });
        ! schedule("0 0 1 7 *", function() {
        zaehlerstand_reset('Quartal');
        });
        ! schedule("0 0 1 10 *", function() {
        zaehlerstand_reset('Quartal');
        });
        ! // Neujahr um 0 Uhr ausführen
        schedule("0 0 1 1 *", function() {
        zaehlerstand_reset('Jahr');
        });
        ! // Pushmeldung
        function meldung_push (text, titel, prio) {
        var optin_push = getState(idOptinPush).val;
        if (optin_push) { // wenn Optin
        sendTo("pushover", {
        message: text,
        title: titel,
        priority: prio
        });
        } // Ende Optin
        }
        ! // Opt In setzen - Logging
        on( {
        id: idOptinPush,
        change: 'ne'
        }, function (obj) {
        log('Opt in Variable <' + optin_beschreibung + ' Push> auf <' + obj.newState.val + '> gesetzt ', 'info');
        });
        ! ````

        Habe drei Skripts für drei Geräte. Entsprechend hier ein Tabelle für VIS mit +/- Steuerung zur manuellen Korrektur:
        filename="Bildschirmfoto 2016-01-02 um 13.45.32.jpg" index="0">~~

        ! [{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Spuelmaschine.Zaehler.addieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ +1 ]","name":"Zähler Spülmaschine erhöhen","class":""},"style":{"left":211,"top":1494,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Spuelmaschine.Zaehler.subtrahieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ -1 ]","name":"Zähler Spülmaschine vermindern","class":""},"style":{"left":177,"top":1494,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Waschmaschine.Zaehler.subtrahieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ -1 ]","name":"Zähler Waschmaschine vermindern","class":""},"style":{"left":177,"top":1619,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Waschmaschine.Zaehler.addieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ +1 ]","name":"Zähler Waschmaschine erhöhen","class":""},"style":{"left":211,"top":1619,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Dampfgarer.Zaehler.subtrahieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ -1 ]","name":"Zähler Dampfgarer vermindern","class":""},"style":{"left":177,"top":1369,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplBasicState","data":{"oid":"javascript.0.Status.Dampfgarer.Zaehler.addieren","visibility-cond":"==","visibility-val":1,"value":"true","html":"[ +1 ]","name":"Zähler Dampfgarer erhöhen","class":""},"style":{"left":211,"top":1369,"z-index":"40","color":"rgba(250,250,250,0.6)","font-family":"RobotoCondensed-Regular, Futura","font-style":"","font-size":"14px","width":"auto","height":"auto"},"widgetSet":"basic"},{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"\n\n\n\n\n\n \n \n \n \n \n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n","name":"Tabelle"},"style":{"left":"106px","top":"1221px","z-index":"20","color":"rgba(250,250,250,1);","font-family":"","width":"auto","height":"auto","font-size":"12px"},"widgetSet":"basic"}] ! Und hier die CSS dazu: ! >!
        /* --- Tabelle Anzahl / Zaehler (wie Strom)/
        #anzahl {
        text-align: center;
        border-collapse: collapse; /
        kein Doppelrand, sonst "seperate"/
        line-height: 100%;
        font-family: RobotoCondensed-Regular, Futura;
        }
        ! #anzahl thead {
        font-size: 120%;
        text-align: center;
        margin: 0 0 10px 0;
        }
        ! #anzahl caption { /
        Raumnamen /
        font-size: 150%;
        text-align: left;
        margin: 10px 0 10px 0;
        }
        ! /
        Grösse /
        /Geräte Spalte/
        #anzahl td.anzahl_Messpunkt,
        #anzahl th.anzahl_Messpunkt {
        width: 200px;
        height: auto;
        font-family: RobotoCondensed-Regular, Futura;
        font-size: 14px;
        font-weight: normal;
        /color: red;/
        }
        ! /Zeitraum Spalte/
        #anzahl td.anzahl_Zeitraum,
        #anzahl th.anzahl_Zeitraum {
        width: 120px;
        font-family: RobotoCondensed-Regular, Futura;
        font-size: 14px;
        font-weight: normal;
        /color: green;/
        }
        ! /Anzahl Spaltenüberschrift/
        #anzahl th:nth-child(3) {
        width: 80px;
        height: auto;
        font-family: RobotoCondensed-Regular, Futura;
        font-size: 14px;
        font-weight: normal;
        /color: yellow;/
        }
        ! /Zahlen rechtsbündig mit Padding zum Rand/
        #anzahl tr.anzahl_Zeitraum_aktuell td,
        #anzahl tr.anzahl_Zeitraum_Tag td,
        #anzahl tr.anzahl_Zeitraum_Woche td,
        #anzahl tr.anzahl_Zeitraum_Monat td,
        #anzahl tr.anzahl_Zeitraum_Quartal td,
        #anzahl tr.anzahl_Zeitraum_Jahr td{
        text-align: right;
        padding-right: 0.7em;
        padding-top: 0.5em;
        padding-bottom: 0.5em;
        }
        ! #anzahl .anzahl_Spaltentitel { /Spaltentitel/
        line-height: 250%;
        }
        ! /
        Farben /
        #anzahl,
        #anzahl th,
        #anzahl td {
        border: 1px solid grey;
        ! }
        #anzahl th {
        color: rgba(250,250,250,1);
        /
        font-weight: 800;/
        }
        ! #anzahl td {
        color: rgba(220,220,220,1);
        /
        font-weight: 400; /
        }
        ! #anzahl .anzahl_Spaltentitel { /Spaltentitel/
        background: rgba(000,100,200,0.5); /
        blau /
        }
        ! tbody.anzahl_kueche {
        background: rgba(80,80,80,0.4);
        }
        ! /
        Dampfgarer /
        #anzahl tr:nth-child(2) {
        background: rgba(200,200,200,0.25);
        }
        ! /
        Spülmaschine /
        #anzahl tr:nth-child(6) {
        background: rgba(200,200,200,0.1);
        }
        ! /
        Waschmaschine /
        #anzahl tr:nth-child(11) {
        background: rgba(200,200,200,0.25);
        }
        ! /
        Zeiträume */
        #anzahl tr.anzahl_Zeitraum_Tag {
        background: rgba(0,250,0,0.2);
        }
        ! #anzahl tr.anzahl_Zeitraum_Woche {
        background: rgba(0,200,200,0.2);
        }
        ! #anzahl tr.anzahl_Zeitraum_Monat{
        background: rgba(0,0,80,0.5);
        }
        ! #anzahl tr.anzahl_Zeitraum_Quartal {
        background: rgba(0,150,0,0.2);
        }
        ! #anzahl tr.anzahl_Zeitraum_Jahr {
        background: rgba(180,0,0,0.5);
        }
        ! ! Vielleicht kann es jemand brauchen. ! Gruß ! Pix ! 02.01.2016 zweite Version mit manuellen Korrekturmöglichkeit der Zählerstände über VIS-Widgets (+/-) ! Fehler getState bei Pushsendung korrigiert ! Hallo Pix ! wollte gerade dein Script hier bei mir implementieren, aber frage mich gerade was im Script die ! ` > // aus Status_Geraete.js ` ! bedeuten soll? Ist das ein separates Script?!? :? ! danke schon mal in voraus ! <caption>Betriebszähler</caption> | Küche | Zeitraum | Anzahl | | --- | --- | --- | | Dampfgarer | Tag | {javascript.0.Status.Dampfgarer.Zaehler.Tag} | | Woche | {javascript.0.Status.Dampfgarer.Zaehler.Woche} | | Monat | {javascript.0.Status.Dampfgarer.Zaehler.Monat} | | Quartal | {javascript.0.Status.Dampfgarer.Zaehler.Quartal} | | Jahr | {javascript.0.Status.Dampfgarer.Zaehler.Jahr} | | Spülmaschine | Tag | {javascript.0.Status.Spuelmaschine.Zaehler.Tag} | | Woche | {javascript.0.Status.Spuelmaschine.Zaehler.Woche} | | Monat | {javascript.0.Status.Spuelmaschine.Zaehler.Monat} | | Quartal | {javascript.0.Status.Spuelmaschine.Zaehler.Quartal} | | Jahr | {javascript.0.Status.Spuelmaschine.Zaehler.Jahr} | | Waschmaschine | Tag | {javascript.0.Status.Waschmaschine.Zaehler.Tag} | | Woche | {javascript.0.Status.Waschmaschine.Zaehler.Woche} | | Monat | {javascript.0.Status.Waschmaschine.Zaehler.Monat} | | Quartal | {javascript.0.Status.Waschmaschine.Zaehler.Quartal} | | Jahr | {javascript.0.Status.Waschmaschine.Zaehler.Jahr} | ! `

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

          Hallo simpixo,

          die Zeilen

          // Diese Variable wird überwacht auf Änderung nach true
          var idStatus = "javascript.0.Status.Spuelmaschine"/*Status Spuelmaschine*/; // aus Status_Geraete.js
          

          legen fest, welcher Datenpunkt für die Zählung überwacht wird. Ich habe für meine Spülmaschine in einem anderen Skript (Status_Geraete.js) einen Datenpunkt angelegt, der eben bei Start auf true und bei Ende auf false geht. Dieses Skript hier zählt die Umstellungen auf true und damit die Starts der Maschine. Du kannst das natürlich anpassen.

          Gruß

          Pix

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

            Super, danke dir! Habe das Script heute eingebaut und es funktioniert

            [emoji1360][emoji1360][emoji1360]

            Gesendet von meinem iPhone mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • A
              al-79 last edited by

              Hi,

              wollte dieses Script gerade auch einbauen - habe dies von der iobroker-Seite und dort die Scripte Sammlung….

              Leider erhalte ich schon beim copy&paste folgende Hinweise / Fehler (die mit dem roten Kreuz)

              Nach dem starten des Scriptes erfolgt dann die untere zusätzliche Fehlermeldung...

              Grüße
              4031_2018-02-20_103715.png

              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                &, damit kann das Skript nichts anfangen.

                Dr. Google hilft auch hier weiter:

                https://wiki.selfhtml.org/wiki/HTML/Reg … ne_Zeichen

                -->&&eintragen statt````
                &&

                
                Wenn du oben ins Skript schaust, siehst du auch, dass da nicht && steht.
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                552
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                4
                6
                3453
                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