Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. "Sammel-Bit(s)" pro vis view

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    "Sammel-Bit(s)" pro vis view

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

      Hallo zusammen,

      ich würde gerne pro vis view ein oder mehrere "Sammel-Bits" erstellen. Z.B. gibt es ein Bild bei mir mit allen Fensterkontakten. Diese Fensterkontakte würde ich gerne ver-odern, um ein Objekt auf "true" oder "false" zu steuern. Dieses Objekt nehme ich dann zur Steuerung des Signalbilds 356_signalbilder.jpg im Bild-Wechsel Widget (jqui - navigation - icon), um im überlagerten Bild ein rotes Blinken auf dem Bildwechselknopf zu erzeugen, das mich auf ein geöffnetes Fenster im unterlagerten Bild aufmerksam macht.

      Kann mir jemand ein Script dafür liefern? Im Idealfall legt das Script auch das Objekt an, wenn es noch nicht existiert. Ich habe mit Blockly angefangen, da kriege ich das "Bit" gesetzt, indem ich mehrere Objekte an dem Blockly-Baustein anhänge. Problem ist aber, dass das Bit dann auch beim ersten Fenster, das schließt, wieder auf "False" geht, auch wenn noch ein anderes Fenster offen ist. Und das Objekt muss ich mit meinen Skript-Kenntnissen auch händisch anlegen.

      Zusammenfassend bräuchte ich ein Script, das:

      • ein Objekt anlegt mit einem Namen, den ich im Script angeben kann, inkl. Objekt-Baum-Ordner z.B. "vis.0/Sammel-Bits/Fenster", wobei "Fenster" das eigentliche Objekt ist, "Sammel-Bits" ist ein Ordner unter vis.0

      • Ver-oderung von Objekten, die dann das neue Objekt setzen, z.B. "Fenster WC"=true oder "Fenster Bad"=true oder "Fenster Küche"=true ==> "Sammel-Bit Fenster"=true

      • Erst wenn alle Objekte wieder "false" sind, wird das neue Objekt wieder "false", z.B. "Fenster WC"=false und "Fenster Bad"=false und "Fenster Küche"=false ==> "Sammel-Bit Fenster"=false

      Vielleicht würde eine if-then Schleife funktionieren:

      if Fenster WC"=false und "Fenster Bad"=false und "Fenster Küche"=false ==> "Sammel-Bit Fenster"=false

      else "Sammel-Bit Fenster"=true

      Schön wäre auch, wenn man in das Sammel-Bit die Überwachung eines Analogwertes mit einbauen kann, z.B. "Temperatur Schaltschrank">30°C

      Javascript-Syntax ist mir aber (noch) fremd, vor allem auch das Anlegen des neuen Objektes, falls noch nicht vorhanden.

      Für die Unterstützung vielen Dank vorab!

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        @fu_zhou:

        • ein Objekt anlegt mit einem Namen, den ich im Script angeben kann, inkl. Objekt-Baum-Ordner z.B. "vis.0/Sammel-Bits/Fenster", wobei "Fenster" das eigentliche Objekt ist, "Sammel-Bits" ist ein Ordner unter vis.0 `
          Mit folgendem Skript erfolgt die Erstellung eines Datenpunktes und eines Ordners "Sammle-Bits" unter javascript.0:
        createState('Sammel-Bits.Fenster', false, {
           type: 'boolean',
           desc: 'mind. ein Fenster ist auf'
        });
        
        1 Reply Last reply Reply Quote 0
        • rantanplan
          rantanplan last edited by

          @fu_zhou:

          Kann mir jemand ein Script dafür liefern? Im Idealfall legt das Script auch das Objekt an, wenn es noch nicht existiert. Ich habe mit Blockly angefangen, da kriege ich das "Bit" gesetzt, indem ich mehrere Objekte an dem Blockly-Baustein anhänge. Problem ist aber, dass das Bit dann auch beim ersten Fenster, das schließt, wieder auf "False" geht, auch wenn noch ein anderes Fenster offen ist. Und das Objekt muss ich mit meinen Skript-Kenntnissen auch händisch anlegen. `
          Hallo fu_zhou

          Das setzen/aktualisieren würde ich erstmal in einer "Liste" machen und dann in einen Datenpunkt schreiben.

          Schau mal bei Blockly unter Listen.

          Die Darstellung in VIS ist ein weiteres Problem.

          Du solltest das hier in zwei Threads aufteilen.

          Hier unter "VIS" und einmal unter "Scripten" mit Bezug auf Blockly im Betreff, falls Du das mit Blockly lösen möchtest.

          Grüße

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @fu_zhou:

            • Ver-oderung von Objekten, die dann das neue Objekt setzen, z.B. "Fenster WC"=true oder "Fenster Bad"=true oder "Fenster Küche"=true ==> "Sammel-Bit Fenster"=true

            • Erst wenn alle Objekte wieder "false" sind, wird das neue Objekt wieder "false", z.B. "Fenster WC"=false und "Fenster Bad"=false und "Fenster Küche"=false ==> "Sammel-Bit Fenster"=false `
              Prinzip:

            const idSammel = 'javascript.0.Sammel-Bits.Fenster';
            const id1 = '...'; // ID von 1\. Fenster
            const id2 = '...'; 
            // usw.
            
            var val1 = getState(id1).val;
            var val2 = getState8id2).val;
            // usw.
            
            function sammel() {
               if(val1 || val2 || val3 || ...) setState(idSammel, true, true);
               else setState(idSammel, false, true);
            }
            
            sammel();  // Skriptstart
            
            on(id1, function(dp) {  // 1\. Fenster wird geöffnet oder geschlossen
               val1 = dp.state.val;
               sammel();
            });
            
            on(id2, function(dp) {
               val2 = dp.state.val;
               sammel();
            });
            
            // usw.
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              Falls der Datenpunkt 'javascript.0.Sammel-Bits.Fenster' nicht bereits erzeugt wurde, kann man das auch im gleichen Skript erledigen:

              const idSammel = 'javascript.0.Sammel-Bits.Fenster';
              const id1 = '...'; // ID von 1\. Fenster
              const id2 = '...';
              // usw.
              
              var val1 = getState(id1).val;
              var val2 = getState8id2).val;
              // usw.
              
              function sammel() {
                 if(val1 || val2 || val3 || ...) setState(idSammel, true, true);
                 else setState(idSammel, false, true);
              }
              
              createState('Sammel-Bits.Fenster', false, {
                 type: 'boolean',
                 desc: 'mind. ein Fenster ist auf'
              }, sammel);
              
              on(id1, function(dp) {  // 1\. Fenster wird geöffnet oder geschlossen
                 val1 = dp.state.val;
                 sammel();
              });
              
              on(id2, function(dp) {
                 val2 = dp.state.val;
                 sammel();
              });
              
              // usw.
              
              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                Hallo,

                ich wusste erst nicht, was für ein Skript gebraucht wird. Sammel-Bits sagt mir nix.

                Dann habe ich Pauls Skript gesehn und wusste bescheid 😄

                Nur weiterlesen, falls der Fensterstatus 0/1/2 statt true/false ist

                Ich nutze pro Raum ein Skript, man kann aber auch durch Anpassung des Selektors alle Räume in ein Skript nehmen. Es werden die RotateHandleSensors RHS von Homematic ausgewertet (0 = zu, 1 = gekippt, 2=offen).

                Die Zuordnung zum Gewerk Fenster ist vorausgesetzt.

                Geräte mit dem Namen "Statistik" werden ausgenommen. Ich hatte früher für jeden TFK und RHS noch ein CUxD-Gerät für Statistik-Zwecke angelegt. Dieses Gerät sollte nicht einfließen.

                Das Objekt wird so befüllt:

                Alle Fenster zu -> Status 0

                Mindestens ein Fenster gekippt und keines ganz offen -> Status 1

                Mindestens ein Fenster ganz offen -> Status 2

                Ich nutze es für die Darstellung eines Grundrisses in verschiedenen Farben abhängig vom Fensterstatus (grün, gelb, rot) in jedem Raum.

                /*
                Skript zum Feststellen des Status mehrerer Fenster im Raum
                Das Skript erstellt pro Raum eine Variable und meldet in Abhängigkeit vom 
                Öffnungszustand aller Fensterdrehgriffkontakte RHS eine Gesamtstatus
                Der Status kann für VIS farbige Grundrisse oder die HM-OU-LED16 verwendet werden
                Pro Raum ein Skript erstellen
                Unterscheidung nach einzelnen Fenstern im Skript status_fenster_tueren
                
                erstellt: 24.10.2014 von Pix (für CCU.IO)
                portiert: 21.03.2015 mit Hilfe von Bluefox http://forum.iobroker.org/viewtopic.php?f=21&t=535&sid=c758980908bb09871b9145d463543a3b#p3653
                geändert: 22.03.2015 
                06.05.2015 Array zur Bennenung des Zustands im Klartext im Log erstellt
                30.07.2015 neue Variablen Struktur Status.Raum.alleFenster
                01.12.2015 neue Variablen Struktur Status.Raum.Fenster.alle
                21.02.2016 idStatus
                */
                
                // Select and show (for debug) all sensors in "Schlafzimmer" and with type "Fenster"
                var sensors = $('channel[state.id=*.STATE](rooms=Schlafzimmer)(functions=Fenster)');
                var idStatus = 'Status.Schlafzimmer.Fenster.alle';
                
                function getCurrentState() {
                    var commonState = 0;
                    sensors.each(function (id) {
                        if (id.indexOf('Statistik') != -1) return; 
                        var val = toInt(getState(id).val);
                        // Find the maximum (2 - opened, 1 - tilted, 0 - closed)
                        if (val > commonState) commonState = val;
                    });
                    return commonState;
                }
                
                // On change
                sensors.on(function(obj) {
                    if (obj.id.indexOf('Statistik') == -1) setState(idStatus, getCurrentState());
                    var zustand = ['offen','gekippt','geschlossen'];
                    log('Status aller Schlafzimmerfenster: ' + zustand[getState(idStatus).val], 'info');
                });
                
                createState(idStatus, getCurrentState(), {
                    name: 'alle Fenster Schlafzimmer',
                    type: 'number',
                    min: 0,
                    max: 3,
                    def: 0,
                    role: 'value'
                });
                

                Gruß

                Pix

                1 Reply Last reply Reply Quote 0
                • fu_zhou
                  fu_zhou last edited by

                  Super, vielen Dank für den tollen Input, muss ich gleich mal probieren!!!

                  1 Reply Last reply Reply Quote 0
                  • fu_zhou
                    fu_zhou last edited by

                    Mein Skript sieht jetzt so aus (Überwachung Meldungen wie Sicherungsfall und Phasenüberwachung etc. in der Hauptverteilung)

                    const idSammel = 'javascript.0.Sammel-Bits.HV_Verteiler';
                    const id1 = 's7.0.DBs.DB21.STATUS_E0_0'; // ID von 1\. Meldung
                    const id2 = 's7.0.DBs.DB21.STATUS_E0_1';
                    const id3 = 's7.0.DBs.DB21.STATUS_E0_6';
                    const id4 = 's7.0.DBs.DB21.Stoerung_SPS';
                    const id5 = 's7.0.info.connection';
                    
                    var val1 = getState(id1).val;
                    var val2 = getState(id2).val;
                    var val3 = getState(id3).val;
                    var val4 = getState(id4).val;
                    var val5 = getState(id5).val;
                    
                    function sammel() {
                       if(val1 || val2 || val3 || val4 || val5) setState(idSammel, true, true);
                       else setState(idSammel, false, true);
                    }
                    
                    createState('Sammel-Bits.HV_Verteiler', false, {
                       type: 'boolean',
                       desc: 'Sammelmeldung HV Verteiler'
                    }, sammel);
                    
                    on(id1, function(dp) {  // 1\. Meldung kommt oder geht
                       val1 = dp.state.val;
                       sammel();
                    });
                    
                    on(id2, function(dp) {
                       val2 = dp.state.val;
                       sammel();
                    });
                    
                    on(id3, function(dp) {
                       val3 = dp.state.val;
                       sammel();
                    });
                    
                    on(id4, function(dp) {
                       val4 = dp.state.val;
                       sammel();
                    });
                    
                    on(id5, function(dp) {
                       val5 = dp.state.val;
                       sammel();
                    });
                    

                    Funktioniert wahrscheinlich, nur nicht bei mir, weil die Meldungen alles Öffner sind, d.h. im Gut-Zustand sind alle Werte "true". Sobald ein Wert "false" wird, muss das Sammel-Bit (HV_Verteiler) auf "true" gesetzt werden. Ich habe also 4 Anwendungsfälle:

                    • Alle Objekte sind Öffner, d.h. wenn ein Wert "false" wird, wird das Sammel-Bit "true"

                    • Alle Objekte sind Schließer, d.h. wenn ein Wert "true" wird, wird das Sammel-Bit "true"

                    • Die Objekte sind gemischt - ein paar Öffner, ein paar Schließer, d.h. wenn mind. ein Öffner "false" wird oder mindestens ein Schließer "true" wird, wird das Sammel-Bit "true"

                    • Ein Analogwert wird über- oder unterschritten, das fließt dann in das "Oder" ein, dass das Sammel-Bit auf "true" setzt.

                    Für mich ist also wichtig zu wissen, wo ich Schließer und Öffner parametriere und wie eine Analogwertüberwachung gemacht wird.

                    Kannst du da noch mal drüberschauen?

                    Danke vorab!!!

                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      @fu_zhou:

                      Sobald ein Wert "false" wird, muss das Sammel-Bit (HV_Verteiler) auf "true" gesetzt werden. `

                         if(!val1 || !val2 || !val3 || !val4 || !val5) setState(idSammel, true, true);
                         else setState(idSammel, false, true);
                      
                      

                      @fu_zhou:

                      • Ein Analogwert wird über- oder unterschritten, das fließt dann in das "Oder" ein, dass das Sammel-Bit auf "true" setzt. `
                        Beispiel: val2 ist Analogwert und Überschreitung eines Wertes (im Beispiel 30) führt zu Sammel-Bit true.
                         if(val1 || val2 > 30 || val3 || val4 || val5) setState(idSammel, true, true);
                         else setState(idSammel, false, true);
                      
                      

                      @fu_zhou:

                      • Die Objekte sind gemischt - ein paar Öffner, ein paar Schließer, d.h. wenn mind. ein Öffner "false" wird oder mindestens ein Schließer "true" wird, wird das Sammel-Bit "true" `
                        Schließer: valN

                      Öffner: !valN

                      1 Reply Last reply Reply Quote 0
                      • fu_zhou
                        fu_zhou last edited by

                        Ein Traum!!!! Es geht!!!! Vielen Dank!!!!!

                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          Alternative Lösung mit Arrays:

                          const idSammel = 'javascript.0.Sammel-Bits.HV_Verteiler';
                          const id1 = 's7.0.DBs.DB21.STATUS_E0_0'; // ID von 1\. Meldung
                          const id2 = 's7.0.DBs.DB21.STATUS_E0_1';
                          const id3 = 's7.0.DBs.DB21.STATUS_E0_6';
                          const id4 = 's7.0.DBs.DB21.Stoerung_SPS';
                          const id5 = 's7.0.info.connection';
                          const ids = [id1, id2, id3, id4, id5];
                          
                          var vals = [getState(id1).val, getState(id2).val, getState(id3).val, getState(id4).val, getState(id5).val];
                          
                          function sammel() {
                             if(vals[0] || vals[1] || vals[2] || vals[3] || vals[4]) setState(idSammel, true, true);
                             else setState(idSammel, false, true);
                          }
                          
                          createState('Sammel-Bits.HV_Verteiler', false, {
                             type: 'boolean',
                             desc: 'Sammelmeldung HV Verteiler'
                          }, sammel);
                          
                          on(ids, function(dp) {  
                             var pos = ids.indexOf(dp.id);
                             if(pos != -1) {
                                vals[pos] = dp.state.val;
                                sammel();
                             } else log('Trigger-ID nicht im Array !', 'warn');
                          });
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          860
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          4
                          11
                          1109
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo