Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. "Licht-Skript" liefert falsche Gerätenamen

NEWS

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

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

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

"Licht-Skript" liefert falsche Gerätenamen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
34 Beiträge 10 Kommentatoren 5.5k 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.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von
    #7

    Hallo zusammen,

    ich habe mir das Skript nochmal vorgenommen, es war ein grundlegender Fehler drin (obwohl Bluefox das http://forum.iobroker.net/viewtopic.php?f=21&t=473&p=5511 schon korrekt erklärt/vorgekaut hatte) :oops: :

    Die Anzahl und Liste der Geräte wurde bei jeder Auslösung ja genullt/geleert. Wenn also ein Dimmer eingeschaltet wurde, dann wurden alle Schalter (State) gelöscht und nicht wieder durchgezählt. Genauso, nur umgekehrt, wenn ein State auf true ging.

    Das neue Skript hat das nun korrigiert. Es gibt eine besseres logging. Das sollte aber nach dem ausgeschaltet werden, da es viele Zeilen im Log produziert.

    Ausserdem wird die Liste der eingeschalteten Geräte nun alphabetisch sortiert.

    Die Struktur und der Pfad der Datenpunkte sind neu (bei mir) und ggf. anzupassen (auch in den Widgets).

    Es gibt

    • Anzahl aller Licht

    • Anzahl eingeschalteter Lichter

    • Text mit allen eingeschalteten Lichtern

    • Ansage(text) mit Aufzählung der eingeschalteten Lichter oder mit sprechbarem Text, wenn kein Licht eingeschaltet

    Das Skript startet, wenn einer der betreffenden Aktoren im Gewerk "Licht" seinen Wert ändert und jetzt auch nach dem Skriptstart (2s verzögert).

    Wer die Abfrage nach den Virtuellen Kanälen oder den CUXD-Geräten nicht braucht, kann die beiden if-Abfragen (State und Level) einfach rausnehmen oder auskommentieren. Aber nur die Abfrage, nicht den Inhalt!

    ! ````
    /* Status Zahl Lichter
    ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
    Daten kommen vom Gewerk "Licht"
    ! erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
    23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
    Log Ausgabe auskommentiert
    05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=20#p9267
    24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
    06.05.2016 Datenpunkt für Ansagen zugefügt
    02.07.2016 abgeschaltet, da Fehler
    03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
    search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
    27.11.2016 Verschoben in Status
    Code optimiert
    */
    var logging = false;
    ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
    idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
    idText = 'javascript.0.Status.Lichter.Text',
    idAnsage = 'javascript.0.Status.Lichter.Ansage';

    // Abhier nix mehr ändern
    createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
    type: 'number',
    name: 'Anzahl aller Lichter',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
    type: 'number',
    name: 'Anzahl der eingeschalteten Lichter',
    min: 0,
    def: 0,
    role: 'value'
    });
    createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
    type: 'string',
    name: 'Eingeschaltete Lichter',
    desc: 'Namen der eingeschalteten Lichter',
    def: ' ',
    role: 'value'
    });
    createState(idAnsage, {
    type: 'string',
    name: 'Eingeschaltete Lichter (Ansage)',
    desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
    def: ' ',
    role: 'value'
    });

    ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
    var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
    ! function checkDevices(obj) {
    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
    var anzahlLichterAn = 0;
    var anzahlLichter = 0;
    var textLichterAn = [];
    if (logging) {
    log('++++++ Lichter Anzahl ++++ ');
    log('#### SCHALTER ##### ');
    }
    cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
    var obj = getObject(id);
    var name = getObject(id).common.name;
    var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
    var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
    // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
    if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
    if (logging) {
    log('-------');
    log('Kanal: ' + name);
    log('Status: ' + status);
    }
    if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
    ++anzahlLichterAn;
    textLichterAn.push(devicename); // Zu Array hinzufügen
    }
    ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
    } // ENDE VK-Abfrage
    });

    if (logging) log('#### DIMMER ##### ');
    cacheSelectorLevel.each(function (id, i) {                     // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
        var obj = getObject(id);
        var name = getObject(id).common.name;
        var status = getState(id).val;                              // Zustand *.LEVEL abfragen (jedes Element)
        var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
        // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
        if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
            if (logging) {
                log('-------');
                log('Kanal: ' + name);
                log('Status: ' + status + '%'); 
            }
            if (parseFloat(status) > 0) {                               // Wenn Dimmwert über 0
                ++anzahlLichterAn;  
                textLichterAn.push(devicename);                         // Zu Array hinzufügen
            }
            ++anzahlLichter;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
        } // Ende Abfrage VK 
    });   
    
    // Array mit Lichternamen sortieren
    textLichterAn.sort();
    // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
    if (logging) log("Text: " + textLichterAn);
    if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
    // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
    setState(idText, textLichterAn.join(',
    

    ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
    setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
    setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
    }

    ! // Trigger
    cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
    if (logging) log('Auslösender Schalter: ' + 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ösender Dimmer: ' + 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
    ! // Aufbereitung für Ansage
    function strip_tags(data) {
    var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
    return(rueckgabe);
    }
    ! on(idText, function (obj) {
    var text = obj.state.val;
    text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
    setState(idAnsage, text);
    });

    
    Bitte um Feedback!
    
    Hier noch ein Widget (bzw. zwei übereinanderliegende Widgets):
    

    [{"tpl":"tplMetroTileDialogStatic","data":{"visibility-cond":"==","visibility-val":1,"hover":false,"transform":"true","bg_class":"bg-transparent","icon_class":"","icon_badge":"","badge_bg_class":"","brand_bg_class":"","dialog_draggable":"true","dialog_icon_class":"","name":"Lichter Dialog liegt oben","label":"","content_oid":"","html":"{javascript.0.Status.Lichter.Text}","dialog_width":"800px","dialog_height":"500px","dialog_title":"Diese Lichter sind eingeschaltet ({javascript.0.Status.Lichter.Anzahl_ein})","dialog_shadow":true,"gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"dialog_flat":true,"dialog_modal":true,"label_prepend":"von {javascript.0.Servicemeldungen.Homematic.UNREACH.moegliche} ","visibility-groups-action":"hide"},"style":{"left":"364px","top":"508px","z-index":"30","width":"137px","height":"137px"},"widgetSet":"metro"},{"tpl":"tplMetroTileString","data":{"visibility-cond":"==","visibility-val":1,"bg_class_true":"ribbed-yellow","bg_class_false":"bg-transparent","icon_class_true":"icon-custom","icon_class_false":"icon-custom","badge_bg_class_true":"","badge_bg_class_false":"","icon_badge_true":"","icon_badge_false":"","brand_bg_class_true":"","brand_bg_class_false":"","name":"Lichter an","visibility-oid":"","content_prepend":"Lichter an  ","content_append":"","content_oid":"javascript.0.Status.Lichter.Anzahl_ein","label_prepend":"von {javascript.0.Status.Lichter.Anzahl} ","label_append":" Lichtern","label_id":"","state_oid":"javascript.0.Status.Lichter.Anzahl_ein","transform":false,"select_on_true":false,"icon":"/vis.0/main/img/schritte.png","icon_width":"60","icon_height":"60","icon_false":"/icons-mfd-png/light_light.png","icon_top":"38","icon_left":"40","hover":false,"html":"Homematic Hardware","icon_true":"/icons-mfd-png/light_light_dim_100.png","badge_top":"0","badge_left":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"dialog_title":"Diese Lichter sind eingeschaltet ({javascript.0.Status.Lichter.Anzahl_ein})","visibility-groups-action":"hide"},"style":{"left":"364px","top":"508px","width":"137px","height":"137px","z-index":"15","font-family":"","color":"","font-size":""},"widgetSet":"metro"}]

    
    Hier noch für Interessierte das CSS für den Dialogstil für den Reiter CSS in VIS (2spaltige Darstellung)
    
    >! ````
    .dialogstil {
        height: 96%;
        width: 99%;
        padding: 15px 0 0 15px;
       /* background: url(http://192.168.178.38:8082/vis/img/back/oblique-line-bk.png) repeat scroll 0% 0% / auto padding-box border-box, rgba(0, 0, 0, 0) radial-gradient(50% 105.41% at 50% 350px, rgb(66, 140, 189) 0px, rgb(39, 98, 134) 20%, rgb(34, 78, 114) 33%, rgb(0, 3, 41) 100%) repeat scroll 0% 0% / auto padding-box border-box; */
        font-family: futura; 
        font-size: 16px;
        color: rgba(250,250,250,1);
        overflow-y: hidden;
        column-count: 2;
        column-gap: 20px;
        column-rule: 1px solid rgba(250,250,250,0.6);
    }
    

    Gruß

    Pix

    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      stephan61
      schrieb am zuletzt editiert von
      #8

      Danke Pix

      für das Script

      Funktioniert super !!

      kann man auch Hue lampen mit einbinden ?

      Gruß Stephan

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        pix
        schrieb am zuletzt editiert von
        #9

        HAllo,

        ich habe leider keine HUE-Lampen, aber denkbar ist die Einbindung aller Geräte mit einem Datenpunkt LEVEL. Ausserdem sollten sie dem Gewerk/Enum "Licht" zugeordnet sein.

        Gruß

        Pix

        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

        1 Antwort Letzte Antwort
        0
        • B Offline
          B Offline
          BobBruni
          schrieb am zuletzt editiert von
          #10

          Anscheinend mache ich grundlegend etwas Falsch! Es funktioniert einfach nicht…

          Hier nochmal mein Log:

          ! javascript.0 2016-11-28 20:01:00.604 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
          ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: Text:
          ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: #### DIMMER #####
          ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: #### SCHALTER #####
          ! javascript.0 2016-11-28 20:01:00.603 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
          ! javascript.0 2016-11-28 20:01:00.602 info javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.LEQ0126380.1.LEVEL: 50
          ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
          ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: Text:
          ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: #### DIMMER #####
          ! javascript.0 2016-11-28 20:00:58.094 info javascript.0 script.js.Lichter: #### SCHALTER #####
          ! javascript.0 2016-11-28 20:00:58.093 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
          ! javascript.0 2016-11-28 20:00:58.092 info javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.LEQ0126380.1.LEVEL: 40.5
          ! javascript.0 2016-11-28 20:00:57.786 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
          ! javascript.0 2016-11-28 20:00:57.786 info javascript.0 script.js.Lichter: Text:
          ! javascript.0 2016-11-28 20:00:57.786 info javascript.0 script.js.Lichter: #### DIMMER #####
          ! javascript.0 2016-11-28 20:00:57.785 info javascript.0 script.js.Lichter: #### SCHALTER #####
          ! javascript.0 2016-11-28 20:00:57.785 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
          ! javascript.0 2016-11-28 20:00:57.785 info javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.LEQ0126380.1.LEVEL: 50
          ! hm-rpc.0 2016-11-28 20:00:57.774 info hm-rpc.0 setValue ["LEQ0126380:1","LEVEL",{"explicitDouble":0.5}] FLOAT
          ! javascript.0 2016-11-28 20:00:39.341 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
          ! javascript.0 2016-11-28 20:00:39.340 info javascript.0 script.js.Lichter: Text:
          ! javascript.0 2016-11-28 20:00:39.340 info javascript.0 script.js.Lichter: #### DIMMER #####
          ! javascript.0 2016-11-28 20:00:39.340 info javascript.0 script.js.Lichter: #### SCHALTER #####
          ! javascript.0 2016-11-28 20:00:39.339 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
          ! javascript.0 2016-11-28 20:00:39.339 info javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.1.JEQ0713856.17.STATE: true
          ! hm-rpc.1 2016-11-28 20:00:39.328 info hm-rpc.1 setValue ["JEQ0713856:17","STATE",true] BOOL
          ! javascript.0 2016-11-28 20:00:37.932 info javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
          ! javascript.0 2016-11-28 20:00:37.932 info javascript.0 script.js.Lichter: Text:
          ! javascript.0 2016-11-28 20:00:37.932 info javascript.0 script.js.Lichter: #### DIMMER #####
          ! javascript.0 2016-11-28 20:00:37.931 info javascript.0 script.js.Lichter: #### SCHALTER #####
          ! javascript.0 2016-11-28 20:00:37.931 info javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
          ! javascript.0 2016-11-28 20:00:37.930 info javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.1.JEQ0713856.14.STATE: true
          ! hm-rpc.1 2016-11-28 20:00:37.921 info hm-rpc.1 setValue ["JEQ0713856:14","STATE",true] BOOL
          ! javascript.0 2016-11-28 20:00:22.942 info script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
          ! javascript.0 2016-11-28 20:00:22.942 info script.js.Lichter: Text:
          ! javascript.0 2016-11-28 20:00:22.941 info script.js.Lichter: #### DIMMER #####
          ! javascript.0 2016-11-28 20:00:22.937 info script.js.Lichter: #### SCHALTER #####
          ! javascript.0 2016-11-28 20:00:22.934 info script.js.Lichter: ++++++ Lichter Anzahl ++++
          ! javascript.0 2016-11-28 20:00:22.931 info script.js.Lichter: Auslösender Schalter: hm-rpc.1.JEQ0713856.13.STATE: true
          ! hm-rpc.1 2016-11-28 20:00:22.925 info setValue ["JEQ0713856:13","STATE",true] BOOL
          ! web.0 2016-11-28 20:00:15.902 info 2016-11-28T19:00:15.902Z Connected system.user.admin
          Was muss bei der Adapterkonfiguration bei "zusätzliche NPM Module" eingetragen werden?

          Gruß

          Bob

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mausi70
            schrieb am zuletzt editiert von
            #11

            Hallo pix

            mir geht es ebenfalls so

            verwende Script 28.11.2016 02:46

            ! ````
            20:27:02.340
            [info]
            javascript.0 Start javascript script.js.Lichter
            20:27:02.341
            [info]
            javascript.0 script.js.Lichter: registered 15 subscriptions and 0 schedules
            20:27:04.345
            [info]
            javascript.0 script.js.Lichter: Auslöser Skriptstart
            20:27:04.345
            [info]
            javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
            20:27:04.345
            [info]
            javascript.0 script.js.Lichter: #### SCHALTER #####
            20:27:04.345
            [info]
            javascript.0 script.js.Lichter: #### DIMMER #####
            20:27:04.345
            [info]
            javascript.0 script.js.Lichter: Text:
            20:27:04.345
            [info]
            javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
            20:27:12.051
            [info]
            javascript.0 script.js.Lichter: Auslösender Dimmer: hm-rpc.0.JEQ0475027.1.LEVEL: 0
            20:27:12.052
            [info]
            javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
            20:27:12.053
            [info]
            javascript.0 script.js.Lichter: #### SCHALTER #####
            20:27:12.053
            [info]
            javascript.0 script.js.Lichter: #### DIMMER #####
            20:27:12.053
            [info]
            javascript.0 script.js.Lichter: Text:
            20:27:12.053
            [info]
            javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
            20:27:15.913
            [info]
            javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.0.HEQ0149562.1.STATE: true
            20:27:15.913
            [info]
            javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
            20:27:15.914
            [info]
            javascript.0 script.js.Lichter: #### SCHALTER #####
            20:27:15.914
            [info]
            javascript.0 script.js.Lichter: #### DIMMER #####
            20:27:15.914
            [info]
            javascript.0 script.js.Lichter: Text:
            20:27:15.914
            [info]
            javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0
            20:27:26.478
            [info]
            javascript.0 script.js.Lichter: Auslösender Schalter: hm-rpc.0.IEQ0405132.1.STATE: false
            20:27:26.479
            [info]
            javascript.0 script.js.Lichter: ++++++ Lichter Anzahl ++++
            20:27:26.480
            [info]
            javascript.0 script.js.Lichter: #### SCHALTER #####
            20:27:26.480
            [info]
            javascript.0 script.js.Lichter: #### DIMMER #####
            20:27:26.480
            [info]
            javascript.0 script.js.Lichter: Text:
            20:27:26.480
            [info]
            javascript.0 script.js.Lichter: Anzahl Lichter: 0 # davon Lichter an: 0

            
            Mausi70

            RaspiMatic 3.41.11.20181222 mit CUX Version 2.20 und 2*Selbstbau Cul (433/868 MHz) auf Tinkerboard S,Asus-Tinkerboard S mit ioBroker, Raspi3 mit Display 7", 70 Kanäle in 36 Geräten und 51 CUxD-Kanäle in 17 CUxD-Geräten

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #12

              Hallo Bob,
              @BobBruni:

              Was muss bei der Adapterkonfiguration bei "zusätzliche NPM Module" eingetragen werden? `
              Keine!

              Dein Log sagt mir, dass das eingeschaltete Gerät schon erkannt wird. Das Durchzählen klappt aber nicht.

              Du und mausi70 haben vermutlich auch kein Interesse an den Abfragen nach Virtuellen oder CUxD Kanälen.

              Deshalb setzt bitt vor Zeile 73 if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { und vor Zeile 84 } // ENDE VK-Abfrageund vor Zeile 94 if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachtenund schließlich vor Zeile 105 } // Ende Abfrage VK bitt einmal zwei Schrägstriche zum Auskommentieren````
              //

              
              Gruß
              
              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                mausi70
                schrieb am zuletzt editiert von
                #13

                Hallo pix

                jetzt funktioniert

                habe etwas ausprobiert, liegt an Zeile 73 bei mir. Cux Geräte sind aber bei mir ein Thema.

                Danke erstmal für die Schnelle Hilfe

                Mausi70

                RaspiMatic 3.41.11.20181222 mit CUX Version 2.20 und 2*Selbstbau Cul (433/868 MHz) auf Tinkerboard S,Asus-Tinkerboard S mit ioBroker, Raspi3 mit Display 7", 70 Kanäle in 36 Geräten und 51 CUxD-Kanäle in 17 CUxD-Geräten

                1 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  BobBruni
                  schrieb am zuletzt editiert von
                  #14

                  Hallo Pix,

                  besten Dank!! Funktioniert super!!!!

                  Gruß

                  Bob

                  1 Antwort Letzte Antwort
                  0
                  • B Offline
                    B Offline
                    baluderbär
                    schrieb am zuletzt editiert von
                    #15

                    @BobBruni:

                    Hallo Pix,

                    besten Dank!! Funktioniert super!!!!

                    Gruß

                    Bob `
                    Hallo Pix, ich bin bisher nicht dazu gekommen es zu testen. Aber da es bei den beiden anderen funktioniert, gehe ich davon aus, dass es auch bei mir läuft und bedanke mich schon einmal im Voraus. Daumen hoch.

                    Viele Grüße

                    Balu

                    Gesendet von iPhone mit Tapatalk

                    ioBroker auf VM Proxmox (Intel NUC-Kit i3-7100U 2.4GHz HD620 NUC7I3BNH)

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      pix
                      schrieb am zuletzt editiert von
                      #16

                      @mausi70:

                      Hallo pix

                      jetzt funktioniert

                      habe etwas ausprobiert, liegt an Zeile 73 bei mir. Cux Geräte sind aber bei mir ein Thema.

                      Danke erstmal für die Schnelle Hilfe

                      Mausi70 `
                      Bei mir sind sie ein Thema, da ich noch aus Zeiten, in denen ich ausschließlich über HM automatisiert habe, einige CUx-Geräte zB für die Türfensterkontakte in der CCU habe. Sie haben Statistik Werte u.ä. geliefert. Ich brauche die nicht mehr, sie sind aber noch da. Könnte sie eigentlich löschen.

                      Wenn du über CUxD Lampen eingebunden hast, sollte das Ausklammern der Abfrage der richtige Weg sein.

                      Gruß

                      Pix

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Antwort Letzte Antwort
                      0
                      • bahnuhrB Online
                        bahnuhrB Online
                        bahnuhr
                        Forum Testing Most Active
                        schrieb am zuletzt editiert von
                        #17

                        Guten Morgen,

                        Kann man das Script mit einer variablen erweitern wo die Räume angezeigt werden.

                        (Analog altem ccu.io Script)

                        Also:

                        Eine Variable wo die Räume angezeigt werden in denen Licht an ist.

                        Mit freundlichen Grüßen

                        Dieter


                        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                        Danke.
                        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                        ScreenToGif :https://www.screentogif.com/downloads.html

                        1 Antwort Letzte Antwort
                        0
                        • bahnuhrB Online
                          bahnuhrB Online
                          bahnuhr
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #18

                          Ich bekomms nicht hin (mit den Räumen).

                          Keiner eine Idee?

                          mfg

                          Dieter


                          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                          Danke.
                          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                          ScreenToGif :https://www.screentogif.com/downloads.html

                          1 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            pix
                            schrieb am zuletzt editiert von
                            #19

                            Dieter, habs probiert, bin aber nicht fertig geworden. Bin zur Zeit nicht in der Nähe von iobroker und kann nicht testen. Sorry.

                            Pix

                            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                            1 Antwort Letzte Antwort
                            0
                            • P Offline
                              P Offline
                              pix
                              schrieb am zuletzt editiert von
                              #20

                              Hallo,

                              hier die Variante, die auch den Raumnamen liefert.

                              ! ````
                              /* Status Zahl Lichter
                              ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                              Daten kommen vom Gewerk "Licht"
                              ! erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                              23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                              Log Ausgabe auskommentiert
                              05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=20#p9267
                              24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                              06.05.2016 Datenpunkt für Ansagen zugefügt
                              02.07.2016 abgeschaltet, da Fehler
                              03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                              search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                              27.11.2016 Verschoben in Status
                              Code optimiert
                              23.12.2016 Räume eingebaut
                              */
                              var logging = false;
                              ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                              idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                              idText = 'javascript.0.Status.Lichter.Text',
                              idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                              idAnsage = 'javascript.0.Status.Lichter.Ansage';

                              // Ab hier nix mehr ändern
                              createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                              type: 'number',
                              name: 'Anzahl aller Lichter',
                              min: 0,
                              def: 0,
                              role: 'value'
                              });
                              createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                              type: 'number',
                              name: 'Anzahl der eingeschalteten Lichter',
                              min: 0,
                              def: 0,
                              role: 'value'
                              });
                              createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                              type: 'string',
                              name: 'Eingeschaltete Lichter',
                              desc: 'Namen der eingeschalteten Lichter',
                              def: ' ',
                              role: 'value'
                              });
                              createState(idAnsage, {
                              type: 'string',
                              name: 'Eingeschaltete Lichter (Ansage)',
                              desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                              def: ' ',
                              role: 'value'
                              });
                              createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                              type: 'string',
                              name: 'Räume mit eingeschalteten Lichter',
                              desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                              def: ' ',
                              role: 'value'
                              });

                              ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
                              var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                              ! function checkDevices(obj) {
                              // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                              var anzahlLichterAn = 0;
                              var anzahlLichter = 0;
                              var textLichterAn = [];
                              var textRaum = [];
                              if (logging) {
                              log('++++++ Lichter Anzahl ++++ ');
                              log('#### SCHALTER ##### ');
                              }
                              cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                              var obj = getObject(id);
                              var name = getObject(id).common.name;
                              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                              var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                              var raumname = getObject(id, "rooms"); // <---- NEU

                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {  
                                      if (logging) {
                                          log('-------');
                                          log('Kanal: ' + name);
                                          log('Status: ' + status); 
                                      }
                                      if (status) {                                      // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                          ++anzahlLichterAn;  
                                          textLichterAn.push(devicename);                       // Zu Array hinzufügen
                                          textRaum.push(raumname.enumNames); // <---- NEU
                                      }
                                      ++anzahlLichter;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  } // ENDE VK-Abfrage
                              });
                              
                              if (logging) log('#### DIMMER ##### ');
                              cacheSelectorLevel.each(function (id, i) {                     // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                                  var obj = getObject(id);
                                  var name = getObject(id).common.name;
                                  var status = getState(id).val;                              // Zustand *.LEVEL abfragen (jedes Element)
                                  var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                                  var raumname = getObject(id, "rooms");           // <---- NEU
                              
                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                              
                                      if (logging) {
                                          log('-------');
                                          log('Kanal: ' + name);
                                          log('Status: ' + status + '%'); 
                                      }
                                      if (parseFloat(status) > 0) {                               // Wenn Dimmwert über 0
                                          ++anzahlLichterAn;    
                                          textLichterAn.push(devicename);                         // Zu Array hinzufügen
                                          textRaum.push(raumname.enumNames);           // <---- NEU
                                      }
                                      ++anzahlLichter;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  } // Ende Abfrage VK 
                              });   
                              
                              // Array mit Lichternamen sortieren
                              textLichterAn.sort();
                              textRaum.sort(); // <---- NEU
                              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                              if (logging) log("Text: " + textLichterAn);
                              if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                              // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                              setState(idText, textLichterAn.join(',
                              

                              ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                              setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                              setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                              setState(idRaum, textRaum.join(',
                              ')); // Räume, in denen Licht brennt // <---- NEU
                              }

                              ! // Trigger
                              cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
                              if (logging) log('Auslösender Schalter: ' + 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ösender Dimmer: ' + 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
                              ! // Aufbereitung für Ansage
                              function strip_tags(data) {
                              var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                              return(rueckgabe);
                              }
                              ! on(idText, function (obj) {
                              var text = obj.state.val;
                              text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                              setState(idAnsage, text);
                              });
                              ! ````

                              Mir fehlte noch die Ausgabe des passenden Raumes zum Licht. Dieser Thread hat mir geholfen: http://forum.iobroker.net/viewtopic.php?t=1085#p8731

                              Suche die Zeilen mit diesem Kommentar, dort sind die Neuerungen.````
                              // <---- NEU

                              Es wird wieder ein Array erstellt, in das die Namen der betroffenen Räume geschrieben werden, sobald ein Licht dazukommt oder wegfällt (bei Änderung). Genau genommen werden bei jeder Änderung alle Lampen neu durchgeprüft und ihr Status/Level abgefragt. Wenn der Status __true__ oder das Level größer als __0__, dann wird der Raumname des Aktors ins Array geschrieben.
                              
                              Das Objekt ist idRaum, die Raumnamen werden alphabetisch sortiert jeweils in eine neue Zeile geschrieben (.sort() und "
                              ").
                              
                              Gruß
                              
                              Pix

                              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                              1 Antwort Letzte Antwort
                              0
                              • bahnuhrB Online
                                bahnuhrB Online
                                bahnuhr
                                Forum Testing Most Active
                                schrieb am zuletzt editiert von
                                #21

                                Super, Danke schön.

                                Funktioniert einwandfrei.

                                Ich hatte mir die Datenpunkte von den eq3-Scripten angeschaut.

                                Dort war auch dieses.

                                .rooms

                                und enum

                                aufgeführt.

                                Habs aber nicht hingekommen.

                                Nochmals danke.

                                mfg

                                Dieter


                                Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                Danke.
                                gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                ScreenToGif :https://www.screentogif.com/downloads.html

                                1 Antwort Letzte Antwort
                                0
                                • bahnuhrB Online
                                  bahnuhrB Online
                                  bahnuhr
                                  Forum Testing Most Active
                                  schrieb am zuletzt editiert von
                                  #22

                                  Hallo Pix,

                                  habe dein Script mal abgeändert auf: Heizung.

                                  Also: Wo ist überall die Heizung an !

                                  Folglich: State von Licht entfernt.

                                  valve_state von heizung eingefügt.

                                  Ich habe aber irgendwo noch nen Knicks drin.

                                  Kannst du mal drüberschauen. Dürfte für andere vielleicht auch interessant sein.

                                  In dashui hatte ich diese Scripte für:

                                  Licht, Heizung und Bewegung.

                                  /* 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 = true;
                                  
                                  var idAnzahlEin = 'javascript.0.Status.Heizung.Anzahl_ein',
                                      idAnzahl =    'javascript.0.Status.Heizung.Anzahl',
                                      idText =      'javascript.0.Status.Heizung.Text',
                                      idRaum =      'javascript.0.Status.Heizung.Raum',
                                      idAnsage =    'javascript.0.Status.Heizung.Ansage';
                                  
                                  // 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(idText, {      // Anzahl der brennenden Heizung und deren Namen als Variable unter Javascript.0 anlegen
                                      type: 'string',
                                      name: 'Eingeschaltete Heizung',
                                      desc: 'Namen der eingeschalteten Heizung',
                                      def: ' ',
                                      role: 'value'
                                  });
                                  createState(idAnsage, {
                                      type: 'string',
                                      name: 'Eingeschaltete Heizung (Ansage)',
                                      desc: 'Namen der eingeschalteten Heizung (für Ansage aufbereitet)',
                                      def: ' ',
                                      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 textHeizungAn = [];
                                      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 name = getObject(id).common.name;
                                          var status = getState(id).val;                              // Zustand *.LEVEL abfragen (jedes Element)
                                          var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                                          var raumname = getObject(id, "rooms");
                                  
                                          // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  //        if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                                  
                                              if (logging) {
                                                  log('-------');
                                                  log('Kanal: ' + name);
                                                  log('Status: ' + status + '%'); 
                                              }
                                              if (parseFloat(VALVE_STATE) > 0) {                               // Wenn Dimmwert über 0
                                                  ++anzahlHeizungAn;    
                                                  textHeizungAn.push(devicename);                         // Zu Array hinzufügen
                                                  textRaum.push(raumname.enumNames);  
                                              }
                                              ++anzahlHeizung;                                            // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  //        } // Ende Abfrage VK 
                                      });   
                                  
                                      // Array mit Lichternamen sortieren
                                      textHeizungAn.sort();
                                      textRaum.sort();
                                      // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                      if (logging) log("Text: " + textHeizungAn);
                                      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(idText, textHeizungAn.join(',
                                  '));    // Schreibt die aktuelle Namen der eingeschalteten Heizung
                                      setState(idAnzahlEin, textHeizungAn.length);        // Schreibt die aktuelle Anzahl der eingeschalteten Heizung
                                      setState(idAnzahl, anzahlHeizung);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                      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
                                  
                                  // Aufbereitung für Ansage
                                  function strip_tags(data) {
                                      var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                                      return(rueckgabe);
                                  }
                                  
                                  on(idText, function (obj) {
                                      var text = obj.state.val;
                                      text = (getState(idAnzahl).val > 0 ) ? 'Heizung eingeschaltet: ' + strip_tags(text) : 'Alle Heizung sind ausgeschaltet';
                                      setState(idAnsage, text);
                                  });
                                  

                                  mfg

                                  Dieter


                                  Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                  Danke.
                                  gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                  ScreenToGif :https://www.screentogif.com/downloads.html

                                  1 Antwort Letzte Antwort
                                  0
                                  • bahnuhrB Online
                                    bahnuhrB Online
                                    bahnuhr
                                    Forum Testing Most Active
                                    schrieb am zuletzt editiert von
                                    #23

                                    Hallo,

                                    und nur nun das Script für Bewegungsmelder.

                                    Dieses läuft.

                                    Gewerk: Bewegungsmelder

                                    Die id mit der Ansage habe ich entfernt. Wenn gewünscht kann man es aber wieder einsetzen.

                                    /* Status Zahl Bewegung
                                    
                                    zählt die Bewegung in allen Räumen und meldet die Eingeschalteten namentlich
                                    Daten kommen vom Gewerk "Bewegung"
                                    
                                    23.12.2016 Script von pix; geändert von Bahnuhr auf Bewegung
                                    */
                                    var logging = false;
                                    
                                    var idAnzahlEin = 'javascript.0.Status.Bewegung.Anzahl_ein',
                                        idAnzahl =    'javascript.0.Status.Bewegung.Anzahl',
                                        idRaum =      'javascript.0.Status.Bewegung.Raum';
                                    
                                    // Ab hier nix mehr ändern
                                    createState(idAnzahl, {     // wenn benötigt: Anzahl der vorhandenen Bewegung
                                        type: 'number',
                                        name: 'Anzahl aller Bewegung',
                                        min: 0,
                                        def: 0,
                                        role: 'value'
                                    });
                                    createState(idAnzahlEin, {  // Anzahl der Bewegung, die auf sind als Variable unter Javascript.0 anlegen
                                        type: 'number',
                                        name: 'Anzahl der vorhandenen Bewegung',
                                        min: 0,
                                        def: 0,
                                        role: 'value'
                                    });
                                    createState(idRaum, {
                                        type: 'string',
                                        name: 'Räume mit Bewegung',
                                        desc: 'Namen der Räume, in denen Bewegung ist',
                                        def:  ' ',
                                        role: 'value'
                                    });
                                    
                                    var cacheSelectorState = $('channel[state.id=*.MOTION](functions="Bewegungsmelder")'); // Gewerk Bewegungsmelder
                                    
                                    function checkDevices(obj) {
                                         // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                                        var anzahlBewegungAn = 0;
                                        var anzahlBewegung = 0;
                                        var textRaum = [];
                                        if (logging) {
                                            log('++++++ Bewegung Anzahl ++++ ');
                                            log('#### SCHALTER ##### ');
                                        }
                                        cacheSelectorState.each(function (id, i) {                       // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                            var obj    = getObject(id);
                                            var status = getState(id).val;                              // Zustand *.STATE abfragen (jedes Element)
                                            var raumname = getObject(id, "rooms"); 
                                    
                                                if (logging) {
                                                    log('-------');
                                                    log('Kanal: ' + name);
                                                    log('Status: ' + status); 
                                                }
                                                if (status) {                                      // wenn Zustand = true, dann wird die Anzahl der Bewegung hochgezählt
                                                    ++anzahlBewegungAn;  
                                                    textRaum.push(raumname.enumNames); 
                                                }
                                                ++anzahlBewegung;                                            // Zählt die Anzahl der vorhandenen Bewegung unabhängig vom Status
                                        });
                                    
                                        // Array mit Lichternamen sortieren
                                        textRaum.sort(); 
                                        // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                        if (logging) log("Anzahl Bewegung: " + anzahlBewegung + " # davon Bewegung an: " + anzahlBewegungAn);
                                        // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                        setState(idAnzahl, anzahlBewegung);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Bewegung
                                        setState(idAnzahlEin, anzahlBewegungAn); 
                                        setState(idRaum, textRaum.join(', '));         // Räume, in denen Bewegung ist
                                    }
                                    
                                    // Trigger
                                    cacheSelectorState.on(function(obj) {    // bei Zustandänderung *.STATE im Gewerk Bewegung
                                       if (logging) log('Auslösende Bewegung: ' + 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
                                    
                                    

                                    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                    Danke.
                                    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                    ScreenToGif :https://www.screentogif.com/downloads.html

                                    1 Antwort Letzte Antwort
                                    0
                                    • bahnuhrB Online
                                      bahnuhrB Online
                                      bahnuhr
                                      Forum Testing Most Active
                                      schrieb am zuletzt editiert von
                                      #24

                                      So, habs hinbekommen.

                                      Anbei nun die 3 Scripte die bei mir laufen.

                                      Licht:

                                      ! /* Status Zahl Lichter
                                      ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                                      ! Daten kommen vom Gewerk "Licht"
                                      ! erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php … 79c1#p6564
                                      ! 23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                                      ! Log Ausgabe auskommentiert
                                      ! 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                                      ! 24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                                      ! 06.05.2016 Datenpunkt für Ansagen zugefügt
                                      ! 02.07.2016 abgeschaltet, da Fehler
                                      ! 03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                                      ! search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                                      ! 27.11.2016 Verschoben in Status
                                      ! Code optimiert
                                      ! 23.12.2016 Räume eingebaut
                                      ! */
                                      ! var logging = false;
                                      ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                                      ! idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                                      ! idText = 'javascript.0.Status.Lichter.Text',
                                      ! idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                                      ! idAnsage = 'javascript.0.Status.Lichter.Ansage';
                                      ! // Ab hier nix mehr ändern
                                      ! createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                                      ! type: 'number',
                                      ! name: 'Anzahl aller Lichter',
                                      ! min: 0,
                                      ! def: 0,
                                      ! role: 'value'
                                      ! });
                                      ! createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                                      ! type: 'number',
                                      ! name: 'Anzahl der eingeschalteten Lichter',
                                      ! min: 0,
                                      ! def: 0,
                                      ! role: 'value'
                                      ! });
                                      ! createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                                      ! type: 'string',
                                      ! name: 'Eingeschaltete Lichter',
                                      ! desc: 'Namen der eingeschalteten Lichter',
                                      ! def: ' ',
                                      ! role: 'value'
                                      ! });
                                      ! createState(idAnsage, {
                                      ! type: 'string',
                                      ! name: 'Eingeschaltete Lichter (Ansage)',
                                      ! desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                                      ! def: ' ',
                                      ! role: 'value'
                                      ! });
                                      ! createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                                      ! type: 'string',
                                      ! name: 'Räume mit eingeschalteten Lichter',
                                      ! desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                                      ! def: ' ',
                                      ! role: 'value'
                                      ! });
                                      ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
                                      ! var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                                      ! function checkDevices(obj) {
                                      ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                                      ! var anzahlLichterAn = 0;
                                      ! var anzahlLichter = 0;
                                      ! var textLichterAn = [];
                                      ! var textRaum = [];
                                      ! if (logging) {
                                      ! log('++++++ Lichter Anzahl ++++ ');
                                      ! log('#### SCHALTER ##### ');
                                      ! }
                                      ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                      ! var obj = getObject(id);
                                      ! var name = getObject(id).common.name;
                                      ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                      ! var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                                      ! var raumname = getObject(id, "rooms"); // <–-- NEU
                                      ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                      ! // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                                      ! if (logging) {
                                      ! log('-------');
                                      ! log('Kanal: ' + name);
                                      ! log('Status: ' + status);
                                      ! }
                                      ! if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                      ! ++anzahlLichterAn;
                                      ! textLichterAn.push(devicename); // Zu Array hinzufügen
                                      ! textRaum.push(raumname.enumNames); // <---- NEU
                                      ! }
                                      ! ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                      ! // } // ENDE VK-Abfrage
                                      ! });
                                      ! if (logging) log('#### DIMMER ##### ');
                                      ! cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                                      ! var obj = getObject(id);
                                      ! var name = getObject(id).common.name;
                                      ! var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                                      ! var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                                      ! var raumname = getObject(id, "rooms"); // <---- NEU
                                      ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                      ! // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                                      ! if (logging) {
                                      ! log('-------');
                                      ! log('Kanal: ' + name);
                                      ! log('Status: ' + status + '%');
                                      ! }
                                      ! if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                                      ! ++anzahlLichterAn;
                                      ! textLichterAn.push(devicename); // Zu Array hinzufügen
                                      ! textRaum.push(raumname.enumNames); // <---- NEU
                                      ! }
                                      ! ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                      ! // } // Ende Abfrage VK
                                      ! });
                                      ! // Array mit Lichternamen sortieren
                                      ! textLichterAn.sort();
                                      ! textRaum.sort(); // <---- NEU
                                      ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                      ! if (logging) log("Text: " + textLichterAn);
                                      ! if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                                      ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                      ! setState(idText, textLichterAn.join(',
                                      ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                                      ! setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                                      ! setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                      ! // setState(idRaum, textRaum.join(',
                                      ')); // Räume, in denen Licht brennt // <---- NEU
                                      ! setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                                      ! }
                                      ! // Trigger
                                      ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
                                      ! if (logging) log('Auslösender Schalter: ' + 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ösender Dimmer: ' + 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
                                      ! // Aufbereitung für Ansage
                                      ! function strip_tags(data) {
                                      ! var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                                      ! return(rueckgabe);
                                      ! }
                                      ! on(idText, function (obj) {
                                      ! var text = obj.state.val;
                                      ! text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                                      ! setState(idAnsage, text);
                                      ! });

                                      Heizung:

                                      ! /* 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 = true;
                                      ! 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 = $('channelstate.id=*.VALVE_STATE'); // 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 Lichter unabhängig vom Status
                                      ! });
                                      ! // Array mit Lichternamen 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 Licht
                                      ! 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

                                      Bewegung:

                                      ! /* Status Zahl Bewegung
                                      ! zählt die Bewegung in allen Räumen und meldet die Eingeschalteten namentlich
                                      ! Daten kommen vom Gewerk "Bewegung"
                                      ! 23.12.2016 Script von pix; geändert von Bahnuhr auf Bewegung
                                      ! */
                                      ! var logging = false;
                                      ! var idAnzahlEin = 'javascript.0.Status.Bewegung.Anzahl_ein',
                                      ! idAnzahl = 'javascript.0.Status.Bewegung.Anzahl',
                                      ! idRaum = 'javascript.0.Status.Bewegung.Raum';
                                      ! // Ab hier nix mehr ändern
                                      ! createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Bewegung
                                      ! type: 'number',
                                      ! name: 'Anzahl aller Bewegung',
                                      ! min: 0,
                                      ! def: 0,
                                      ! role: 'value'
                                      ! });
                                      ! createState(idAnzahlEin, { // Anzahl der Bewegung, die auf sind als Variable unter Javascript.0 anlegen
                                      ! type: 'number',
                                      ! name: 'Anzahl der vorhandenen Bewegung',
                                      ! min: 0,
                                      ! def: 0,
                                      ! role: 'value'
                                      ! });
                                      ! createState(idRaum, {
                                      ! type: 'string',
                                      ! name: 'Räume mit Bewegung',
                                      ! desc: 'Namen der Räume, in denen Bewegung ist',
                                      ! def: ' ',
                                      ! role: 'value'
                                      ! });
                                      ! var cacheSelectorState = $('channelstate.id=*.MOTION'); // Gewerk Bewegungsmelder
                                      ! function checkDevices(obj) {
                                      ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                                      ! var anzahlBewegungAn = 0;
                                      ! var anzahlBewegung = 0;
                                      ! var textRaum = [];
                                      ! if (logging) {
                                      ! log('++++++ Bewegung Anzahl ++++ ');
                                      ! log('#### SCHALTER ##### ');
                                      ! }
                                      ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                      ! var obj = getObject(id);
                                      ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                      ! var raumname = getObject(id, "rooms");
                                      ! if (logging) {
                                      ! log('–-----');
                                      ! log('Kanal: ' + name);
                                      ! log('Status: ' + status);
                                      ! }
                                      ! if (status) { // wenn Zustand = true, dann wird die Anzahl der Bewegung hochgezählt
                                      ! ++anzahlBewegungAn;
                                      ! textRaum.push(raumname.enumNames);
                                      ! }
                                      ! ++anzahlBewegung; // Zählt die Anzahl der vorhandenen Bewegung unabhängig vom Status
                                      ! });
                                      ! // Array mit Lichternamen sortieren
                                      ! textRaum.sort();
                                      ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                      ! if (logging) log("Anzahl Bewegung: " + anzahlBewegung + " # davon Bewegung an: " + anzahlBewegungAn);
                                      ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                      ! setState(idAnzahl, anzahlBewegung); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Bewegung
                                      ! setState(idAnzahlEin, anzahlBewegungAn);
                                      ! setState(idRaum, textRaum.join(', ')); // Räume, in denen Bewegung ist
                                      ! }
                                      ! // Trigger
                                      ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Bewegung
                                      ! if (logging) log('Auslösende Bewegung: ' + 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

                                      Danke an alle, insbesondere an pix.

                                      mfg

                                      bahnuhr


                                      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                      Danke.
                                      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                      ScreenToGif :https://www.screentogif.com/downloads.html

                                      1 Antwort Letzte Antwort
                                      0
                                      • bahnuhrB Online
                                        bahnuhrB Online
                                        bahnuhr
                                        Forum Testing Most Active
                                        schrieb am zuletzt editiert von
                                        #25

                                        Ich nochmal,

                                        habe versucht in der Variablen "textRaum" doppelte Einträge zu eleminieren mit:

                                        textRaum = array_unique(textRaum);

                                        Klappt aber nicht. Im log kommt ne Fehlermeldung.

                                        Jemand eine Idee ?

                                        mfg


                                        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                        Danke.
                                        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                        ScreenToGif :https://www.screentogif.com/downloads.html

                                        1 Antwort Letzte Antwort
                                        0
                                        • P Offline
                                          P Offline
                                          pix
                                          schrieb am zuletzt editiert von
                                          #26

                                          Hallo bahnuhr,

                                          hab es so hinbekommen:

                                          Diese Funktion oben einfügen (man kann sie auch als globales Skript abspeichern)````
                                          // 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;
                                          }

                                          
                                          Und dann untem im Skript diese Zeile````
                                          textRaum = deleteDuplicates(textRaum);
                                          ````und zwar kurz vor dem Ende der Funktion checkDevices()
                                          >! ````
                                              textRaum = deleteDuplicates(textRaum);
                                          >!     // Array mit Lichternamen sortieren
                                              textLichterAn.sort();
                                              textRaum.sort();
                                              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                              if (logging) log("Text: " + textLichterAn);
                                              if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                                              // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                              setState(idText, textLichterAn.join(',
                                          '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
                                              setState(idAnzahlEin, textLichterAn.length);        // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                                              setState(idAnzahl, anzahlLichter);                 // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                              setState(idRaum, textRaum.join(',
                                          '));         // Räume, in denen Licht brennt
                                          

                                          Code von dieser Seite: http://www.okco.de/code/java-script/dup … -entfernen

                                          Gruß

                                          Pix

                                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                          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

                                          637

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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