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.
    • 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

                        823
                        Online

                        31.7k
                        Users

                        79.9k
                        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