Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. DeviceCounter - Anzahl der Meldungen zusammenfassen

    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

    DeviceCounter - Anzahl der Meldungen zusammenfassen

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      baluderbär last edited by baluderbär

      Hallo zusammen,
      ich benutze folgendes Skript, was ich im Forum gefunden habe. Erst einmal vielen Dank an den mir unbekannten Verfasser.

      //Add device rules
      addDeviceCounter("lowbat",         $('channel[state.id=*.LOWBAT]'),                      true);
      addDeviceCounter("sticky_unreach", $('channel[state.id=*.STICKY_UNREACH]'),              true);
      addDeviceCounter("unreach",        $('channel[state.id=*.UNREACH]'),                     true);
      addDeviceCounter("config_pending", $('channel[state.id=*.CONFIG_PENDING]'),              true);
      //addDeviceCounter("open_windows",   $('channel{TYPE=SHUTTER_CONTACT}[state.id=*.STATE]'), true);
      //addDeviceCounter("on_lights",      $('channel{TYPE=DIMMER}[state.id=*.LEVEL]'),          function(state){return state>0;});
      //addDeviceCounter("open_shutters",  $('channel{TYPE=BLIND}[state.id=*.LEVEL]'),           function(state){return state>0;});
      //addDeviceCounter("playing_music",  $('channel[state.id=*audio-*.playing]'),              true);
       
      /******************************************
       * Code - do not change anything bellow this line *
       ******************************************/
       
      function addDeviceCounter(name, selector, val_to_count) {
       
          //Total amount of devices found by selector
          var state_total = 'deviceCounter.' + name + '.total';
          createState(state_total, 0);
          //List of devices that match condition
          var state_list = 'deviceCounter.' + name + '.list';
          createState(state_list, "");
          //Number of devices that match condition
          var state_counter = 'deviceCounter.' + name + '.counter';
          createState(state_counter, 0);
       
          function countDevs(obj) {
              var d_count = 0;
              var d_list  = [];
       
              selector.each(function (id, i) {
                  var status = getState(id).val;
                  var obj    = getObject(id);
                  if ((typeof val_to_count === 'function' && val_to_count(status)) ||
                      (typeof val_to_count === 'boolean'  && val_to_count == status)) {
                      //Get parent object
                      var parentChannelId = id.slice(id.lastIndexOf("."));
                      var parentDevicelId = id.split(".").slice(0,-2).join(".");
                      var deviceObject = getObject(parentDevicelId);
                      //remember device name
                      d_list.push(deviceObject.common.name);
                  }                
                  ++d_count;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
              }); 
       
              log(name + "(" + d_count + "): " + d_list);
       
              setState(state_list,     d_list.join(''));
              setState(state_counter,  d_list.length);
              setState(state_total,    d_count);
          }
       
          //Re-evaluate when a device status changes
          selector.on(function(obj) {    // bei Zustandänderung *. LOWBAT in allen Gewerken
              countDevs(obj);
          });
       
          //Re-evaluate each 5 Minutes
          schedule("*/5 * * * *", countDevs);
       
          //Evaluate for the first time
          countDevs();
      }
      

      Die Zeilen 6-9 habe ich auskommentiert, da ich sie nicht benötige. Aktuell erhalte ich pro Zeile (2-5) je einen Wert für deviceCounter.config_pending.counter, deviceCounter.lowbat.counter, deviceCounter.sticky_unreach.counter und deviceCounter.unreach.counter. Ist es möglich, einen Gesamtwert für die 4 Einzelwerte zu erhalten? In dem Zusammenhang wäre es auch toll, wenn dann die entsprechenden Auflistungen in einer Liste zusammengefasst werden würden. Vorab vielen Dank.

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

      Support us

      ioBroker
      Community Adapters
      Donate

      880
      Online

      31.9k
      Users

      80.2k
      Topics

      1.3m
      Posts

      1
      1
      125
      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