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. JavaScript
  5. Aktive Heizungen zählen Homematic und Homematic IP

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    943

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Aktive Heizungen zählen Homematic und Homematic IP

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 3 Kommentatoren 530 Aufrufe 3 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.
  • X Offline
    X Offline
    Xanon
    schrieb am zuletzt editiert von
    #1

    Hallo Ich habe seit Jahren das Skript im Einsatz, welches die aktiven Heizungen zählt.
    Hat immer wunderbar funktioniert.

    Nun habe ich mir Homematic IP Thermostate und hast gedacht, dass das Skript dies auch Zusammen zählt.
    Tut es aber nicht.
    Es gibt verschiedene Objekte
    Homematic = Valve
    Homematic IP = Lavel

    Bin kein Spezi und kenne mit mit Coden so gar nicht aus.
    Daher die Frage hier, ob jemand mir helfen kann das Skript wieder richtig zum laufen zu bekommen?

    Anbei mal das Originale Skript und eines, welches ich schon ein wenig angepasst habe.
    Jetzt bekomme ich "NUR NOCH" IP Thermostate in der VIS angezeigt.

    Also irgendwas scheint hier als Trennung oder so zu fehlen.
    Kann mal bitte einer rübersehen?

    Original

    /* Status Zahl Heizung
    
    zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
    Daten kommen vom Gewerk "Heizung"
    
    23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
    */
    var logging = false;
    
    var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
    idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
    idRaum = 'javascript.0.Status.Heizung.Raum';
    
    // Ab hier nix mehr ändern
    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
    type: 'number',
    name: 'Anzahl aller Heizung',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
    type: 'number',
    name: 'Anzahl der eingeschalteten Heizung',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idRaum, {
    type: 'string',
    name: 'Räume mit eingeschalteten Heizung',
    desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
    def: ' ',
    role: 'value'
    });
    
    var cacheSelectorLevel = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
    
    function checkDevices(obj) {
    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
    var anzahlHeizungAn = 0;
    var anzahlHeizung = 0;
    var textRaum = [];
    if (logging) log('++++++ Heizung Anzahl ++++ ');
    cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
    var obj = getObject(id);
    var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
    var raumname = getObject(id, "rooms");
    
    if (logging) {
    log('-------');
    log('Kanal: ' + name);
    log('Status: ' + status + '%'); 
    }
    if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
    ++anzahlHeizungAn; 
    textRaum.push(raumname.enumNames); 
    }
    ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
    }); 
    
    // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
    function deleteDuplicates(arr) { 
        var temp = {}; 
        for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
        var r = []; 
        for (var k in temp) r.push(k); 
        return r;
    }
    
    textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
    
    // Array mit Heizungnamen sortieren
    textRaum.sort();
    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
    if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
    // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
    setState(idAnzahlEin, anzahlHeizungAn);
    setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
    setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
    }
    
    // Trigger
    cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
    if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    
    function main() {
    setTimeout(function(){
    if (logging) log('Auslöser Skriptstart');
    checkDevices();
    }, 2000);
    }
    
    main(); // Skriptstart-Auslöser
    

    Angepasst:

    /* Status Zahl Heizung
    
    zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
    Daten kommen vom Gewerk "Heizung"
    
    23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
    */
    var logging = false;
    
    var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
    idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
    idRaum = 'javascript.0.Status.Heizung.Raum';
    
    // Ab hier nix mehr ändern
    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
    type: 'number',
    name: 'Anzahl aller Heizung',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
    type: 'number',
    name: 'Anzahl der eingeschalteten Heizung',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idRaum, {
    type: 'string',
    name: 'Räume mit eingeschalteten Heizung',
    desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
    def: ' ',
    role: 'value'
    });
    
    var cacheSelectorValve = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
    var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Heizung")'); // Gewerk Heizung
    
    function checkDevices(obj) {
    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
    var anzahlHeizungAn = 0;
    var anzahlHeizung = 0;
    var textRaum = [];
    if (logging) log('++++++ Heizung Anzahl ++++ ');
    
    cacheSelectorValve.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
    var obj = getObject(id);
    var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
    var raumname = getObject(id, "rooms");
    }); 
    
    cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
    var obj = getObject(id);
    var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
    var raumname = getObject(id, "rooms");
    
    
    
    if (logging) {
    log('-------');
    log('Kanal: ' + name);
    log('Status: ' + status + '%'); 
    }
    if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
    ++anzahlHeizungAn; 
    textRaum.push(raumname.enumNames); 
    }
    ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
    }); 
    
    // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
    function deleteDuplicates(arr) { 
        var temp = {}; 
        for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
        var r = []; 
        for (var k in temp) r.push(k); 
        return r;
    }
    
    textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
    
    // Array mit Heizungnamen sortieren
    textRaum.sort();
    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
    if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
    // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
    setState(idAnzahlEin, anzahlHeizungAn);
    setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
    setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
    }
    
    // Trigger
    cacheSelectorValve.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
    if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    })
    
    cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
    if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
    checkDevices();
    });
    
    function main() {
    setTimeout(function(){
    if (logging) log('Auslöser Skriptstart');
    checkDevices();
    }, 2000);
    }
    
    main(); // Skriptstart-Auslöser
    

    Würde mich sehr freuen, wenn mir hier jemand helfen könnte.

    M paul53P 2 Antworten Letzte Antwort
    0
    • X Xanon

      Hallo Ich habe seit Jahren das Skript im Einsatz, welches die aktiven Heizungen zählt.
      Hat immer wunderbar funktioniert.

      Nun habe ich mir Homematic IP Thermostate und hast gedacht, dass das Skript dies auch Zusammen zählt.
      Tut es aber nicht.
      Es gibt verschiedene Objekte
      Homematic = Valve
      Homematic IP = Lavel

      Bin kein Spezi und kenne mit mit Coden so gar nicht aus.
      Daher die Frage hier, ob jemand mir helfen kann das Skript wieder richtig zum laufen zu bekommen?

      Anbei mal das Originale Skript und eines, welches ich schon ein wenig angepasst habe.
      Jetzt bekomme ich "NUR NOCH" IP Thermostate in der VIS angezeigt.

      Also irgendwas scheint hier als Trennung oder so zu fehlen.
      Kann mal bitte einer rübersehen?

      Original

      /* Status Zahl Heizung
      
      zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
      Daten kommen vom Gewerk "Heizung"
      
      23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
      */
      var logging = false;
      
      var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
      idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
      idRaum = 'javascript.0.Status.Heizung.Raum';
      
      // Ab hier nix mehr ändern
      createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
      type: 'number',
      name: 'Anzahl aller Heizung',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
      type: 'number',
      name: 'Anzahl der eingeschalteten Heizung',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idRaum, {
      type: 'string',
      name: 'Räume mit eingeschalteten Heizung',
      desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
      def: ' ',
      role: 'value'
      });
      
      var cacheSelectorLevel = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
      
      function checkDevices(obj) {
      // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
      var anzahlHeizungAn = 0;
      var anzahlHeizung = 0;
      var textRaum = [];
      if (logging) log('++++++ Heizung Anzahl ++++ ');
      cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
      var obj = getObject(id);
      var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
      var raumname = getObject(id, "rooms");
      
      if (logging) {
      log('-------');
      log('Kanal: ' + name);
      log('Status: ' + status + '%'); 
      }
      if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
      ++anzahlHeizungAn; 
      textRaum.push(raumname.enumNames); 
      }
      ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
      }); 
      
      // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
      function deleteDuplicates(arr) { 
          var temp = {}; 
          for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
          var r = []; 
          for (var k in temp) r.push(k); 
          return r;
      }
      
      textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
      
      // Array mit Heizungnamen sortieren
      textRaum.sort();
      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
      if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
      // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
      setState(idAnzahlEin, anzahlHeizungAn);
      setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
      setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
      }
      
      // Trigger
      cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
      if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
      checkDevices();
      });
      
      function main() {
      setTimeout(function(){
      if (logging) log('Auslöser Skriptstart');
      checkDevices();
      }, 2000);
      }
      
      main(); // Skriptstart-Auslöser
      

      Angepasst:

      /* Status Zahl Heizung
      
      zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
      Daten kommen vom Gewerk "Heizung"
      
      23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
      */
      var logging = false;
      
      var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
      idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
      idRaum = 'javascript.0.Status.Heizung.Raum';
      
      // Ab hier nix mehr ändern
      createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
      type: 'number',
      name: 'Anzahl aller Heizung',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
      type: 'number',
      name: 'Anzahl der eingeschalteten Heizung',
      min: 0,
      def: 0,
      role: 'value'
      });
      createState(idRaum, {
      type: 'string',
      name: 'Räume mit eingeschalteten Heizung',
      desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
      def: ' ',
      role: 'value'
      });
      
      var cacheSelectorValve = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
      var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Heizung")'); // Gewerk Heizung
      
      function checkDevices(obj) {
      // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
      var anzahlHeizungAn = 0;
      var anzahlHeizung = 0;
      var textRaum = [];
      if (logging) log('++++++ Heizung Anzahl ++++ ');
      
      cacheSelectorValve.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
      var obj = getObject(id);
      var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
      var raumname = getObject(id, "rooms");
      }); 
      
      cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
      var obj = getObject(id);
      var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
      var raumname = getObject(id, "rooms");
      
      
      
      if (logging) {
      log('-------');
      log('Kanal: ' + name);
      log('Status: ' + status + '%'); 
      }
      if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
      ++anzahlHeizungAn; 
      textRaum.push(raumname.enumNames); 
      }
      ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
      }); 
      
      // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
      function deleteDuplicates(arr) { 
          var temp = {}; 
          for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
          var r = []; 
          for (var k in temp) r.push(k); 
          return r;
      }
      
      textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
      
      // Array mit Heizungnamen sortieren
      textRaum.sort();
      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
      if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
      // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
      setState(idAnzahlEin, anzahlHeizungAn);
      setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
      setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
      }
      
      // Trigger
      cacheSelectorValve.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
      if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
      checkDevices();
      })
      
      cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
      if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
      checkDevices();
      });
      
      function main() {
      setTimeout(function(){
      if (logging) log('Auslöser Skriptstart');
      checkDevices();
      }, 2000);
      }
      
      main(); // Skriptstart-Auslöser
      

      Würde mich sehr freuen, wenn mir hier jemand helfen könnte.

      M Online
      M Online
      MCU
      schrieb am zuletzt editiert von
      #2

      @Xanon
      Homematic = Valve
      Homematic IP = Lavel (Level?)

      Genutzt wird aber:

      'channel[state.id=*.VALVE_STATE](functions="Heizung")'
      

      Sollte sein ?:

      'channel[state.id=*.VALVE](functions="Heizung")'
      

      Zeig mal bitte die Datenpunkte als Bild aus den Objekten.

      Homematic = Valve
      Homematic IP = Lavel (Level?)

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      X 1 Antwort Letzte Antwort
      0
      • M MCU

        @Xanon
        Homematic = Valve
        Homematic IP = Lavel (Level?)

        Genutzt wird aber:

        'channel[state.id=*.VALVE_STATE](functions="Heizung")'
        

        Sollte sein ?:

        'channel[state.id=*.VALVE](functions="Heizung")'
        

        Zeig mal bitte die Datenpunkte als Bild aus den Objekten.

        Homematic = Valve
        Homematic IP = Lavel (Level?)

        X Offline
        X Offline
        Xanon
        schrieb am zuletzt editiert von Xanon
        #3

        @MCU
        Hallo, danke für deine Nachricht.
        War wohl doch etwas spät / früh als ich dies geschrieben habe

        Homematic = VALVE_STATE
        Homematic IP = LEVEL

        Ich habe gedacht, ich baue mir einfach den neuen State dazu aber irgendetwas passt da nicht.

        Weil bei der originalen Version nur Homematic Thermostate abgefragt werden und in meiner bearbeiteten Version werden nur die HomematicIP Thermostate abgefragt.

        Da fehlt doch in meiner Version ein Komma oder eine geschweifte Klammer oder sonst etwas.:anguished:
        Wie gesagt, kann nicht wirklich coden.

        Homematic
        Homematic.png

        HomematicIP
        Homematic IP.png

        M 1 Antwort Letzte Antwort
        0
        • X Xanon

          @MCU
          Hallo, danke für deine Nachricht.
          War wohl doch etwas spät / früh als ich dies geschrieben habe

          Homematic = VALVE_STATE
          Homematic IP = LEVEL

          Ich habe gedacht, ich baue mir einfach den neuen State dazu aber irgendetwas passt da nicht.

          Weil bei der originalen Version nur Homematic Thermostate abgefragt werden und in meiner bearbeiteten Version werden nur die HomematicIP Thermostate abgefragt.

          Da fehlt doch in meiner Version ein Komma oder eine geschweifte Klammer oder sonst etwas.:anguished:
          Wie gesagt, kann nicht wirklich coden.

          Homematic
          Homematic.png

          HomematicIP
          Homematic IP.png

          M Online
          M Online
          MCU
          schrieb am zuletzt editiert von MCU
          #4

          @Xanon In der Schleife passiert nichts: Holt nur die Werte, aber verarbeitet sie nicht.

          cacheSelectorValve.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
          var obj = getObject(id);
          var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
          var raumname = getObject(id, "rooms");
          }); 
          

          Der Teil fehlt in der Schleife?

          if (logging) {
          log('-------');
          log('Kanal: ' + name);
          log('Status: ' + status + '%'); 
          }
          if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
          ++anzahlHeizungAn; 
          textRaum.push(raumname.enumNames); 
          }
          ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
          }); 
           
          
          

          Die Function deleteDuplicates sollte man vielleicht aus der Schleife rausziehen.

          NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

          X 1 Antwort Letzte Antwort
          0
          • M MCU

            @Xanon In der Schleife passiert nichts: Holt nur die Werte, aber verarbeitet sie nicht.

            cacheSelectorValve.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
            var obj = getObject(id);
            var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
            var raumname = getObject(id, "rooms");
            }); 
            

            Der Teil fehlt in der Schleife?

            if (logging) {
            log('-------');
            log('Kanal: ' + name);
            log('Status: ' + status + '%'); 
            }
            if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
            ++anzahlHeizungAn; 
            textRaum.push(raumname.enumNames); 
            }
            ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
            }); 
             
            
            

            Die Function deleteDuplicates sollte man vielleicht aus der Schleife rausziehen.

            X Offline
            X Offline
            Xanon
            schrieb am zuletzt editiert von
            #5

            @MCU Danke für deine Unterstützung.

            Der Teil steh doch aber untern in meiner bearbeiteten Version drin?
            Könntest du mir das Skript vielleicht so zusammenbauen, wie du es meinst?
            Dann kann ich es versuchen.

            M 1 Antwort Letzte Antwort
            0
            • X Xanon

              @MCU Danke für deine Unterstützung.

              Der Teil steh doch aber untern in meiner bearbeiteten Version drin?
              Könntest du mir das Skript vielleicht so zusammenbauen, wie du es meinst?
              Dann kann ich es versuchen.

              M Online
              M Online
              MCU
              schrieb am zuletzt editiert von
              #6

              @Xanon

              /* Status Zahl Heizung
              {1}
              zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
              Daten kommen vom Gewerk "Heizung"
              {1}
              23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
              */
              var logging = false;
               
              var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
              idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
              idRaum = 'javascript.0.Status.Heizung.Raum';
               
              // Ab hier nix mehr ändern
              createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
              type: 'number',
              name: 'Anzahl aller Heizung',
              min: 0,
              def: 0,
              role: 'value'
              });
              createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
              type: 'number',
              name: 'Anzahl der eingeschalteten Heizung',
              min: 0,
              def: 0,
              role: 'value'
              });
              createState(idRaum, {
              type: 'string',
              name: 'Räume mit eingeschalteten Heizung',
              desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
              def: ' ',
              role: 'value'
              });
               
              var cacheSelectorValve = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
              var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Heizung")'); // Gewerk Heizung
              
              
               
              function checkDevices(obj) {
              // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
              var anzahlHeizungAn = 0;
              var anzahlHeizung = 0;
              var textRaum = [];
              if (logging) log('++++++ Heizung Anzahl ++++ ');
               
              cacheSelectorValve.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
              	var obj = getObject(id);
              	var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
              	var raumname = getObject(id, "rooms");
              	if (logging) {
              		log('-------');
              		log('Kanal: ' + name);
              		log('Status: ' + status + '%'); 
              		}
              	if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
              		++anzahlHeizungAn; 
              		textRaum.push(raumname.enumNames); 
              		}
              	++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
              }); 
               
              cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
              	var obj = getObject(id);
              	var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
              	var raumname = getObject(id, "rooms");
               
               
               
              	if (logging) {
              		log('-------');
              		log('Kanal: ' + name);
              		log('Status: ' + status + '%'); 
              		}
              	if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
              		++anzahlHeizungAn; 
              		textRaum.push(raumname.enumNames); 
              		}
              	++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
              }); 
               
              // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
              function deleteDuplicates(arr) { 
                  var temp = {}; 
                  for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
                  var r = []; 
                  for (var k in temp) r.push(k); 
                  return r;
              }
               
              textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
               
              // Array mit Heizungnamen sortieren
              textRaum.sort();
              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
              if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
              // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
              setState(idAnzahlEin, anzahlHeizungAn);
              setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
              setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
              }
               
              // Trigger
              cacheSelectorValve.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
              if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
              })
               
              cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
              if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
              });
               
              function main() {
              setTimeout(function(){
              if (logging) log('Auslöser Skriptstart');
              checkDevices();
              }, 2000);
              }
               
              main(); // Skriptstart-Auslöser
              
              

              NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
              Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

              1 Antwort Letzte Antwort
              0
              • X Xanon

                Hallo Ich habe seit Jahren das Skript im Einsatz, welches die aktiven Heizungen zählt.
                Hat immer wunderbar funktioniert.

                Nun habe ich mir Homematic IP Thermostate und hast gedacht, dass das Skript dies auch Zusammen zählt.
                Tut es aber nicht.
                Es gibt verschiedene Objekte
                Homematic = Valve
                Homematic IP = Lavel

                Bin kein Spezi und kenne mit mit Coden so gar nicht aus.
                Daher die Frage hier, ob jemand mir helfen kann das Skript wieder richtig zum laufen zu bekommen?

                Anbei mal das Originale Skript und eines, welches ich schon ein wenig angepasst habe.
                Jetzt bekomme ich "NUR NOCH" IP Thermostate in der VIS angezeigt.

                Also irgendwas scheint hier als Trennung oder so zu fehlen.
                Kann mal bitte einer rübersehen?

                Original

                /* Status Zahl Heizung
                
                zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
                Daten kommen vom Gewerk "Heizung"
                
                23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
                */
                var logging = false;
                
                var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
                idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
                idRaum = 'javascript.0.Status.Heizung.Raum';
                
                // Ab hier nix mehr ändern
                createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
                type: 'number',
                name: 'Anzahl aller Heizung',
                min: 0,
                def: 0,
                role: 'value'
                });
                createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
                type: 'number',
                name: 'Anzahl der eingeschalteten Heizung',
                min: 0,
                def: 0,
                role: 'value'
                });
                createState(idRaum, {
                type: 'string',
                name: 'Räume mit eingeschalteten Heizung',
                desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
                def: ' ',
                role: 'value'
                });
                
                var cacheSelectorLevel = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
                
                function checkDevices(obj) {
                // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
                var anzahlHeizungAn = 0;
                var anzahlHeizung = 0;
                var textRaum = [];
                if (logging) log('++++++ Heizung Anzahl ++++ ');
                cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                var obj = getObject(id);
                var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                var raumname = getObject(id, "rooms");
                
                if (logging) {
                log('-------');
                log('Kanal: ' + name);
                log('Status: ' + status + '%'); 
                }
                if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                ++anzahlHeizungAn; 
                textRaum.push(raumname.enumNames); 
                }
                ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
                }); 
                
                // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
                function deleteDuplicates(arr) { 
                    var temp = {}; 
                    for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
                    var r = []; 
                    for (var k in temp) r.push(k); 
                    return r;
                }
                
                textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
                
                // Array mit Heizungnamen sortieren
                textRaum.sort();
                // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
                // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                setState(idAnzahlEin, anzahlHeizungAn);
                setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
                setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
                }
                
                // Trigger
                cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                checkDevices();
                });
                
                function main() {
                setTimeout(function(){
                if (logging) log('Auslöser Skriptstart');
                checkDevices();
                }, 2000);
                }
                
                main(); // Skriptstart-Auslöser
                

                Angepasst:

                /* Status Zahl Heizung
                
                zählt die Heizung in allen Räumen und meldet die Eingeschalteten namentlich
                Daten kommen vom Gewerk "Heizung"
                
                23.12.2016 Vorlage von "pix" - geändert von bahnuhr auf Heizung
                */
                var logging = false;
                
                var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
                idAnzahl = 'javascript.0.Status.Heizung.Anzahl',
                idRaum = 'javascript.0.Status.Heizung.Raum';
                
                // Ab hier nix mehr ändern
                createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Heizung
                type: 'number',
                name: 'Anzahl aller Heizung',
                min: 0,
                def: 0,
                role: 'value'
                });
                createState(idAnzahlEin, { // Anzahl der Heizung, die auf sind als Variable unter Javascript.0 anlegen
                type: 'number',
                name: 'Anzahl der eingeschalteten Heizung',
                min: 0,
                def: 0,
                role: 'value'
                });
                createState(idRaum, {
                type: 'string',
                name: 'Räume mit eingeschalteten Heizung',
                desc: 'Namen der Räume, in denen Heizung eingeschaltet sind',
                def: ' ',
                role: 'value'
                });
                
                var cacheSelectorValve = $('channel[state.id=*.VALVE_STATE](functions="Heizung")'); // Gewerk Heizung
                var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Heizung")'); // Gewerk Heizung
                
                function checkDevices(obj) {
                // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Heizung auf 0
                var anzahlHeizungAn = 0;
                var anzahlHeizung = 0;
                var textRaum = [];
                if (logging) log('++++++ Heizung Anzahl ++++ ');
                
                cacheSelectorValve.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                var obj = getObject(id);
                var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                var raumname = getObject(id, "rooms");
                }); 
                
                cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                var obj = getObject(id);
                var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                var raumname = getObject(id, "rooms");
                
                
                
                if (logging) {
                log('-------');
                log('Kanal: ' + name);
                log('Status: ' + status + '%'); 
                }
                if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                ++anzahlHeizungAn; 
                textRaum.push(raumname.enumNames); 
                }
                ++anzahlHeizung; // Zählt die Anzahl der vorhandenen Heizungen unabhängig vom Status
                }); 
                
                // Funktion: Doppelte Einträge aus Array entfernen (für Räume) www.okco.de (c) codemaster
                function deleteDuplicates(arr) { 
                    var temp = {}; 
                    for (var i = 0; i < arr.length; i++) temp[arr[i]] = true; 
                    var r = []; 
                    for (var k in temp) r.push(k); 
                    return r;
                }
                
                textRaum = deleteDuplicates(textRaum); // Löscht doppelte Einträge in den Objekt Räume
                
                // Array mit Heizungnamen sortieren
                textRaum.sort();
                // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                if (logging) log("Anzahl Heizung: " + anzahlHeizung + " # davon Heizung an: " + anzahlHeizungAn);
                // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                setState(idAnzahlEin, anzahlHeizungAn);
                setState(idAnzahl, anzahlHeizung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Heizung
                setState(idRaum, textRaum.join(', ')); // Räume, in denen Heizung an ist
                }
                
                // Trigger
                cacheSelectorValve.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                checkDevices();
                })
                
                cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                if (logging) log('Auslösende Heizung: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                checkDevices();
                });
                
                function main() {
                setTimeout(function(){
                if (logging) log('Auslöser Skriptstart');
                checkDevices();
                }, 2000);
                }
                
                main(); // Skriptstart-Auslöser
                

                Würde mich sehr freuen, wenn mir hier jemand helfen könnte.

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #7

                @Xanon sagte:

                Es gibt verschiedene Objekte

                Das ist ein passender Zeitpunkt, sich Gedanken über Alias zu machen.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                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

                561

                Online

                32.6k

                Benutzer

                82.2k

                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