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. Visualisierung
  4. "Sammel-Bit(s)" pro vis view

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.8k

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

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

    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!

    Synology DS920+ VM, S7-315 PN mit ET200S

    1 Antwort Letzte Antwort
    0
    • 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 😄

              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

                        644

                        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