Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. "Sammel-Bit(s)" pro vis view

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    320

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

"Sammel-Bit(s)" pro vis view

Geplant Angeheftet Gesperrt Verschoben Visualisierung
11 Beiträge 4 Kommentatoren 1.2k Aufrufe
  • Ä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.
  • paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

    @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'
    });
    

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

    1 Antwort Letzte Antwort
    0
    • rantanplanR Offline
      rantanplanR Offline
      rantanplan
      schrieb am zuletzt editiert von
      #3

      @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

      Rantanplan

      CCU3 / MS Server 2019(VM) / Scripten mit Blockly

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #4

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

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

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

          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.
          

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

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

            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 :-D

            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

            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
            • fu_zhouF Offline
              fu_zhouF Offline
              fu_zhou
              schrieb am zuletzt editiert von
              #7

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

              Synology DS920+ VM, S7-315 PN mit ET200S

              1 Antwort Letzte Antwort
              0
              • fu_zhouF Offline
                fu_zhouF Offline
                fu_zhou
                schrieb am zuletzt editiert von
                #8

                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!!!

                Synology DS920+ VM, S7-315 PN mit ET200S

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #9

                  @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

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

                  1 Antwort Letzte Antwort
                  0
                  • fu_zhouF Offline
                    fu_zhouF Offline
                    fu_zhou
                    schrieb am zuletzt editiert von
                    #10

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

                    Synology DS920+ VM, S7-315 PN mit ET200S

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #11

                      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');
                      });
                      
                      

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

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      756

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      Themen

                      1.3m

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

                      • Du hast noch kein Konto? Registrieren

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