Ankündigung

Einklappen
Keine Ankündigung bisher.

Rolladen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Zitat von iwan Beitrag anzeigen
    Ich habe den infotrigger so "umgebaut" dass er langer und kurzer Tastendruck unterscheiden kann. So wie man sich das von den "normalen" Tastern auch gewohnt ist.
    Das finde ich gut. Spricht eigentlich etwas dagegen, dieses Feature auch in den ganz normalen Taster (d.h. Trigger) zu übernehmen?

    Kommentar


      #47
      Ich habe das ganze noch etwas anpassen müssen.
      Die Android Tablets haben die doofe Angewohnheit nach dem touchstart gleich einen mousedown und moudeup zu "senden"...
      Das habe ich nun noch abgefangen.
      Hier der Code:
      Code:
      VisuDesign_Custom.prototype.addCreator('shutter', {
        create: function( element, path, flavour, type ) {
          var $e = $(element);
          var layout = $e.children('layout')[0];
          var style = layout ? 'style="' + extractLayout( layout, type ) + '"' : '';
          var ret_val = $('<div class="widget clearfix infotrigger" ' + style + '/>');
          ret_val.setWidgetLayout($e);
          ret_val.append( extractLabel( $e.find('label')[0] ) );
          // handle addresses
          var address = makeAddressList($e, 
            function( src, transform, mode, variant ) {
              return [ variant != 'button', variant == 'button' ];
            }
          );
       var downtime;
       var timeout;
       var clicktype = "";
       var lastevent;
          // create buttons + info
          var buttons = $('<div style="float:left;"/>');
          var buttonCount = 2;
       
          var actordown = '<div class="actor shutterUnpressed downlabel" '
          if ( $e.attr( 'align' ) ) 
            actorinfo += 'style="text-align: '+$e.attr( 'align' )+'" '; 
          actordown += '>';
          actordown += '<div class="value">' + ($e.attr('downlabel') ? $e.attr('downlabel') : '-') + '</div>';
          actordown += '</div>';
          var $actordown = $(actordown).data( {
            'address' : address,
            'mapping' : $e.attr('mapping'),
            'styling' : $e.attr('styling'),
            'value'   : $e.attr('downvalue') || 0,
            'align'   : $e.attr('align'),
            'change'  : $e.attr('change') || 'relative',
            'min'     : parseFloat($e.attr('min')) || 0,
            'max'     : parseFloat($e.attr('max')) || 255,
            'type'    : 'switch',
         'shortaddr': $e.attr('shortaddr'),
         'shorttime': $e.attr('shorttime')
          } ).bind('action', this.action).bind( 'mousedown touchstart', this.mousedown).bind( 'mouseup touchend', this.mouseup ).bind( 'mouseout',this.mouseout );
          var actorup = '<div class="actor shutterUnpressed uplabel" '
          if ( $e.attr( 'align' ) ) 
            actorinfo += 'style="text-align: '+$e.attr( 'align' )+'" '; 
          actorup += '>';
          actorup += '<div class="value">' + ($e.attr('uplabel') ? $e.attr('uplabel') : '+') + '</div>';
          actorup += '</div>';
          var $actorup = $(actorup).data( {
            'address' : address,
            'mapping' : $e.attr('mapping'),
            'styling' : $e.attr('styling'),
            'value'   : $e.attr('upvalue') || 1,
            'align'   : $e.attr('align'),
            'change'  : $e.attr('change') || 'relative',
            'min'     : parseFloat($e.attr('min')) || 0,
            'max'     : parseFloat($e.attr('max')) || 255,
            'type'    : 'switch',
         'shortaddr': $e.attr('shortaddr'),
         'shorttime': $e.attr('shorttime')
          } ).bind('action', this.action).bind( 'mousedown touchstart', this.mousedown).bind( 'mouseup touchend', this.mouseup ).bind( 'mouseout',this.mouseout );
          var actorinfo = '<div class="actor switchInvisible " ';
          if ( $e.attr( 'align' ) ) 
            actorinfo += 'style="text-align: '+$e.attr( 'align' )+'" '; 
          actorinfo += '" ><div class="value"></div></div>';
          var $actorinfo = $(actorinfo).data({
            'address'  : address,
            'format'   : $e.attr('format'),
            'mapping'  : $e.attr('mapping'),
            'styling'  : $e.attr('styling'),
            'align'    : $e.attr('align'),
          });
          for( var addr in address ) 
          {
        if( !address[addr][2] ) // if NOT relative
              $actorinfo.bind( addr, this.update );
          }
          if ( $e.attr('infoposition' )==1 ) {
            buttons.append( $actordown );
            buttons.append( $actorinfo );
            buttons.append( $actorup );        
          } else if ( $e.attr('infoposition' )==2 ) {
            buttons.append( $actordown );
            buttons.append( $actorup );        
            buttons.append( $actorinfo );
          } else {
            buttons.append( $actorinfo );
            buttons.append( $actordown );
            buttons.append( $actorup );        
          }
          ret_val.append( buttons );
          return ret_val;
        },
        update: function(e,d) { 
          var element = $(this);
          var value = defaultUpdate( e, d, element );
          element.addClass('shutterInvisible');
        },
        action: function() {
        var data = $(this).data();
        var value = data.value;
       
        var relative = ( data.change != 'absolute' );
        if( !relative )
        {
          value = parseFloat($(this).parent().find('.shutterInvisible').data('basicvalue'));
          value = value + parseFloat(data.value);
          if (value < data.min ) value = data.min;
          if( value > data.max ) value = data.max;
        }
        for( addr in data.address )
        {
       
         if( !(data.address[addr][1] & 2) ) continue; // skip when write flag not set
       
         if( data.address[addr][2] != relative ) continue; // skip when address mode doesn't fit action mode
       
       
         if (clicktype == "short" && data.shortaddr.indexOf(addr.substr(1)) != -1){
          //alert(addr.substr(1) + " is in shortaddr, clicktyoe: " + clicktype);
          visu.write( addr.substr(1), transformEncode( data.address[addr][0], value ) );
         } else if (clicktype == "long" && data.shortaddr.indexOf(addr.substr(1)) == -1){
          //alert(addr.substr(1)+ " is NOT in shortaddr, clicktyoe: " + clicktype);
          visu.write( addr.substr(1), transformEncode( data.address[addr][0], value ) );
         }
        }
        },
        mousedown: function(event) {
        if(typeof lastevent === 'undefined'){  lastevent = ""; };
       if(typeof lasteventhist === 'undefined'){  lasteventhist = ""; };
       if(lastevent !== 'touchstart'){
       lastevent = event.type;
        var element = $(this);
        element.removeClass('shutterUnpressed').addClass('shutterPressed');
        downtime = new Date().getTime();
        clicktype = "long";
        timeout=setTimeout(function(){element.trigger('action');},element.data().shorttime);
       }
       },
       mouseup: function(event) {
        if(lastevent !== 'touchstart'){
         var element = $(this);
         element.removeClass('shutterPressed').addClass('shutterUnpressed');
         clearTimeout(timeout)
         if ((new Date().getTime()-downtime) < element.data().shorttime){
           clicktype = "short";
           element.trigger('action');
         }
        }
        lastevent = event.type;
       },
       mouseout: function() {
         var element = $(this);
        element.removeClass('shutterPressed').addClass('shutterUnpressed');
        clearTimeout(timeout);
       },
        attributes: {
          uplabel:      { type: 'string' , required: false },
          upvalue:      { type: 'string' , required: false },
          downlabel:    { type: 'string' , required: false },
          downvalue:    { type: 'string' , required: false },
          mapping:      { type: 'mapping', required: false },
          styling:      { type: 'styling', required: false },
          align:        { type: 'string' , required: false },
          infoposition: { type: 'list'   , required: true , list: {0: 'Info/Down/Up', 1: 'Down/Info/Up', 2: 'Down/Up/Info'} },
          format:       { type: 'string' , required: false },
          change:       { type: 'list'   , required: false, list: {'relative': 'Send relative/delta values', 'absolute': 'Send absolute values'} },
          min:          { type: 'numeric', required: false },
          max:          { type: 'numeric', required: false },
          colspan:      { type: 'numeric', required: false },
          rowspan:      { type: 'numeric', required: false },
       shortaddr:    { type: 'string', required: false },
       shorttime:     { type: 'numeric', required: false }
        },
        elements: {
          layout:       { type: 'layout' , required: false, multi: false },
          label:        { type: 'string' , required: false, multi: false },
          address:      { type: 'address', required: true , multi: true , options: {variant: ['', 'isbutton']} }
        },
        content:      false
      });

      Kommentar


        #48
        Ich habe das so wie auf der angehängten Grafik zu sehen gelöst. Die vier Zwischenpositionen reichen für mich völlig aus und es lässt sich ohne große Erklärungen bedienen.

        Der Code dazu:
        [WICHTIG]Das ist die SVN-Version... so wie dargestellt geht das in der aktuellen Version nicht mit dem Editor[/WICHTIG]
        Code:
        <mapping name="Auf_Ab">
          <entry value="0"><icon name="steuer_auf"/> Auf</entry>
          <entry value="1"><icon name="steuer_ab"/> Ab</entry>
        </mapping>
        <mapping name="Stop">
          <entry value="1"><icon name="audio_stop"/> Stop</entry>
        </mapping>
        <mapping name="Positionen">
          <entry value="20">20%</entry>
          <entry value="40">40%</entry>
          <entry value="60">60%</entry>
          <entry value="80">80%</entry>
        </mapping>
        
        [...]
        
        <group>
            <layout colspan="5" />
            <text>
                <layout colspan="1" />
                Jalousien:
            </text>
            <trigger value="0" mapping="Auf_Ab">                
                <layout colspan="1" />
                <address transform="DPT:1.008" type="">......</address>
            </trigger>
            <trigger value="1" mapping="Stop">
                <layout colspan="1" />
                <address transform="DPT:1.008" type="">......</address>
            </trigger>
            <trigger value="1" mapping="Auf_Ab">
                <layout colspan="1" />
                <address transform="DPT:1.008" type="">......</address>
            </trigger>
        </group>
        <group>
            <layout colspan="7" />
            <text>
                <layout colspan="1" />
                Position:
            </text>
            <trigger value="20" mapping="Positionen">
                <layout colspan="1" />
                <address transform="DPT:5.001" type="">......</address>
            </trigger>
            <trigger value="40" mapping="Positionen">
                <layout colspan="1" />
                <address transform="DPT:5.001" type="">......</address>
            </trigger>
            <trigger value="60" mapping="Positionen">
                <layout colspan="1" />
                <address transform="DPT:5.001" type="">......</address>
            </trigger>
            <trigger value="80" mapping="Positionen">
                <layout colspan="1" />
                <address transform="DPT:5.001" type="">......</address>
            </trigger>
        </group>
        Angehängte Dateien

        Kommentar


          #49
          Hallo

          Ist auch ein guter Ansatz, sieht gut aus mit den Icons!

          Iwan

          Kommentar


            #50
            Hallo,

            ich habe es so gelöst:

            Gruß Manuel
            Angehängte Dateien

            Kommentar


              #51
              und ich habe das so gemacht (Achtung SVN -Version)

              Wenn man einen der vordefinierten Knöpfe betätigt, wird das in dem Slider mit angezeigt. Der Slider ist also nicht nur benutzbar, für die Stufenlose verstellung sondern gibt auch die aktuelle position der Rollade an.

              Viel Spaß
              Angehängte Dateien

              Kommentar


                #52
                Hi Tobi,

                kannst den Code mal dazu liefern?
                danke und Grüße,
                Lio

                Kommentar


                  #53
                  Hier der Code für die Rolladen wie gewünscht

                  PHP-Code:
                         <group name="Jalousien">
                              <
                  layout colspan="12" />
                                  <
                  group nowidget="true">
                                      <
                  layout colspan="12" />
                                          <
                  slide min="0" max="100" step="10" format="%d%%">
                                              <
                  layout colspan="6" />
                                              <
                  label><icon name="fts_rollo" />Seitenfenster</label>
                                              <
                  address transform="DPT:5.001" mode="readwrite" variant="">0/7/4</address>
                                          </
                  slide>
                                          <
                  trigger value="0" mapping="Positionen">
                                              <
                  layout colspan="1.5" />
                                              <
                  address transform="DPT:5.001" type="">0/7/3</address>
                                          </
                  trigger>
                                          <
                  trigger value="40" mapping="Positionen">
                                              <
                  layout colspan="1.5" />
                                              <
                  address transform="DPT:5.001" type="">0/7/3</address>
                                          </
                  trigger>
                                          <
                  trigger value="80" mapping="Positionen">
                                              <
                  layout colspan="1.5" />
                                              <
                  address transform="DPT:5.001" type="">0/7/3</address>
                                          </
                  trigger>
                                          <
                  trigger value="100" mapping="Positionen">
                                              <
                  layout colspan="1.5" />
                                              <
                  address transform="DPT:5.001" type="">0/7/3</address>
                                          </
                  trigger>
                                  </
                  group

                  Kommentar


                    #54
                    langer Tastendruck

                    Hi @all,

                    wurde der "lange Tastendruck" von iwan umgesetzt oder anderweitig übernommen? Wenn ja, wie würde das XML-Element dazu aussehen?

                    Gruß
                    Florian

                    Kommentar


                      #55
                      https://knx-user-forum.de/cometvisu/...r-steuern.html

                      => Schau in der Demo-Config, da gibt's ein Beispiel dazu
                      TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                      Kommentar


                        #56
                        Danke Chris,

                        das Problem war das "SVN-Update". Ich habe da glaub ordnertechnisch was falsch gehabt.

                        In der Demo-Config hatte ich als erstes geguckt, jedoch war das wohl noch eine veraltete Datei. Nach dem ich den ganzen SVN-Order gelöscht und neu gezogen haben, ist der Eintrag auch in der Demo-Config zu finden.

                        Danke

                        Gruß
                        Florian

                        Kommentar


                          #57
                          Danke an alle ich hab es auch hinbekommen :-)

                          Kleiner Schönheitsfehler. Die Prozentwerte passen bei mir nicht, also 50% ist eher 70% etc.

                          Ich habe jetzt mal mit den Nachlaufzeiten gespielt, also Zeit für Runter und Rauf um 2 Sekunden verringert, Nachlaufzeit von 2% auf 10%. Jetzt passt es wenn ich im Status offen bin. Leider aber nicht im Status geschlossen. Also von geschlossen auf 50%, landet er wieder bei 70% ca.

                          Passt das bei euch und habt ihr da ein paar Tipps zu Einstellen?

                          Aktor ist von MDT

                          Kommentar


                            #58
                            Nur fürs Protokoll: ich hab bei mir eine Logik im Logikprozessor, welche die Jalousien/Rolläden erstmal auf X % fährt und erst beim erneuten drücken ganz schliesst, funktioniert 1A per Taster und per Visu.

                            Grüße
                            David

                            Kommentar


                              #59
                              Meine Darstellung für Raffstore

                              Sofern das hier reinpasst - meine Umsetzung für Raffstore in der CV. Auf-Ab Tasten sind mit kurzem und langem Tastendruck für Lamellenverstellung und Fahrt belegt. Es gibt jeweils eine Detailseite (über den +Button) die zusätzliche Einstellungen ermöglicht.
                              Angehängte Dateien
                              Gruß -mfd-
                              KNX-UF-IconSet since 2011

                              Kommentar


                                #60
                                Zitat von mfd Beitrag anzeigen
                                Auf-Ab Tasten sind mit kurzem und langem Tastendruck für Lamellenverstellung und Fahrt belegt.
                                Das ist ja stark! Ich wusste bisher gar nicht, dass die CV kurzen und langen Tastendruck unterscheiden kann! Muss ich heute abend gleich mal ausprobieren ...

                                Welche Widgets/Plugins/Controls unterstützen denn diese Funktionalität?

                                Danke,
                                Micha

                                Kommentar

                                Lädt...
                                X