Ankündigung

Einklappen
Keine Ankündigung bisher.

Switch mit Down und Up value

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

    Switch mit Down und Up value

    Hallo Zusammen

    Im Zusammenhang mit dem neuen Editor bin ich wieder auf meien selbstgebauten widgets gestossen (siehe Shutter).

    Ich habe mir da auch mal einen Trigger gebaut der beim Drücken und Loslassen jeweils eine 1 und eine 0 sendet (Taster).

    Ist bei mir schon seit längerem so im Einsatz.
    Funktioniert mit hier gängigen Browsern (Chrome, FF) und auch mit Android Tablets / Phones.

    Ich bin immer etwas zurückhaltend mit einchecken ins SVN (Account habe noch keinen).

    Wenn das allgemein für gut/sinnvoll gehalten wird, dann müsste nur noch ein geeigneter Name her (zb pushbutton oder so).

    Evtl. könnte auch der trigger so umgebeut werden, dass der diese Möglichkeit schon drin hat. Das könnte dann z.B. per Attribut "konfiguriert" werden.

    Hier mein umgebauter Trigger:

    PHP-Code:
    VisuDesign_Custom.prototype.addCreator('switch_1_0',{
      
    create: function( elementpathflavourtype ) {
        var 
    $e = $(element);
        var 
    layout $e.children('layout')[0];
        var 
    style layout 'style="' extractLayoutlayouttype ) + '"' '';
        var 
    ret_val = $('<div class="widget clearfix switch" ' style '/>');
        
    ret_val.setWidgetLayout($e)
        var 
    label extractLabel$e.find('label')[0] );
        var 
    address makeAddressList($e);
     var 
    lastevent;
        var 
    actor '<div class="actor switchUnpressed"><div class="value">-</div></div>';
        var 
    $actor = $(actor).data( {
          
    'address' address,
          
    'mapping' $e.attr('mapping'),
          
    'styling' $e.attr('styling'),
          
    'down_value'  $e.attr('down_value') || 1,
          
    'up_value' $e.attr('up_value') || 0,
          
    'align'   $e.attr('align'),
          
    'type'    'switch'
        
    } ).bind'mousedown touchstart'this.mousedown).bind'mouseup touchend'this.mouseup ).bind'mouseout',this.mouseout );
        for( var 
    addr in address 
        { 
          if( 
    address[addr][1] & $actor.bindaddrthis.update ); // only when read flag is set
        
    }
      
    ret_val.append(label).append$actor );
        return 
    ret_val;
      },
      
    update: function(e,d) { 
        var 
    element = $(this);
        var 
    value defaultUpdateedelement );
        var 
    off mapelement.data'up_value' ), element.data('mapping') );
        
    element.removeClassvalue == off 'switchPressed' 'switchUnpressed' );
        
    element.addClass(    value == off 'switchUnpressed' 'switchPressed' );
      },
       
    mousedown: function(event) {
      if(
    typeof lastevent === 'undefined'){  lastevent ""; };
      if(
    typeof lasteventhist === 'undefined'){  lasteventhist ""; };
      if(
    lastevent !== 'touchstart'){
       
    lastevent event.type;
        $(
    this).removeClass('switchUnpressed').addClass('switchPressed');
        var 
    data = $(this).data();
        for( var 
    addr in data.address )
         {
        if( 
    data.address[addr][1] == true ) continue; // skip read only
        
    visu.writeaddr.substr(1), transformEncodedata.address[addr][0], data.down_value) );
        
    //visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.value == data.up_value ? data.down_value : data.up_value ) );
        //visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.sendValue ) );
         
    }
        }
        },
     
    mouseup: function(event) {
      if(
    lastevent !== 'touchstart'){
         $(
    this).removeClass('switchPressed').addClass('switchUnpressed')
        var 
    data = $(this).data();
        for( var 
    addr in data.address )
        {
       if( 
    data.address[addr][1] == true ) continue; // skip read only
       
    visu.writeaddr.substr(1), transformEncodedata.address[addr][0], data.up_value) );
       
    //visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.value == data.up_value ? data.down_value : data.up_value ) );
       //visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.sendValue ) );
        
    }
       }
       
    lastevent event.type;
        },
     
    mouseout: function(event) {
          $(
    this).removeClass('switchPressed').addClass('switchUnpressed');
        },
      
    attributes: {
        
    down_value:  { type'string' requiredfalse },
        
    up_value: { type'string' requiredfalse },
        
    mapping:   { type'mapping'requiredfalse },
        
    styling:   { type'styling'requiredfalse },
        
    align:     { type'string' requiredfalse },
        
    colspan:   { type'numeric'requiredfalse },
        
    rowspan:   { type'numeric'requiredfalse }
      },
      
    elements: {
        
    layout:    { type'layout' requiredfalsemultifalse },
        
    label:     { type'string' requiredtrue multifalse },
        
    address:   { type'address'requiredtrue multitrue  }
      },
      
    contentfalse
    }); 
    Grüsse
    Iwan

    #2
    Hallo Iwan,

    wie hast Du das PHP Script in die Comet Visu eingebunden? Will heissen: in welchem File in welchem Verzeichnis muss das abgespeichert werden? Welche weiteren Änderungen (CSS, index.html) sind notwendig? Und hast Du ein Beispiel, wie ein Taster in der visu_config.xml definiert wird?

    Vielen Dank von einem Comet-Visu Rookie...

    Peter

    Kommentar


      #3
      Hallo Peter

      Zitat von PeterM Beitrag anzeigen
      wie hast Du das PHP Script in die Comet Visu eingebunden? Will heissen: in welchem File in welchem Verzeichnis muss das abgespeichert werden?
      Das ist kein PHP sondern Javascript, hab nur den "Tag" zum darstellen verwendet.
      Das muss so ins sturucture_customs.js

      Zitat von PeterM Beitrag anzeigen
      Welche weiteren Änderungen (CSS, index.html) sind notwendig? Und hast Du ein Beispiel, wie ein Taster in der visu_config.xml definiert wird?
      Das XSD muss noch ergäntzt werden.
      So:
      Code:
      <xsd:element name="switch" type="switch" />
         <xsd:element name="switch_1_0" type="switch" />
      EInfach eien Kopie des Switch (die 2 Zeile)

      Die config sieht wie beim Switch aus:
      Code:
          <switch_1_0 mapping="Button"  styling="Grey">
         <layout colspan="3"/>
         <label >Spots WZ</label>
         <address transform="DPT:1.001" mode="readwrite" variant="">1/2/31</address>
          </switch_1_0>
      Wie gesagt würde ich es vorziehen, wenn das in den Standard kommen würde...

      Grüsse
      Iwan

      Kommentar


        #4
        Hi Iwan,
        Zitat von iwan Beitrag anzeigen
        Ich bin immer etwas zurückhaltend mit einchecken ins SVN (Account habe noch keinen).
        Einfach einen SourceForge Account erstellen (wenn nicht eh schon vorhanden...) und mir oder makki mitteilen. Freischaltung gibt's dann gleich.

        SVN hat den Vorteil, dass man Änderungen eben auch wieder leicht rückgängig machen kann, also nur keine Angst. Und ein weiteres Widget ist auch so getrennt vom Rest, dass da kaum Schaden entstehen kann.
        Zitat von iwan Beitrag anzeigen
        Wenn das allgemein für gut/sinnvoll gehalten wird,
        Ja, hat sicher seine Anwendung. Bin daher dafür.
        Zitat von iwan Beitrag anzeigen
        dann müsste nur noch ein geeigneter Name her (zb pushbutton oder so).
        Jup, "switch_0_1" finde ich etwas unglücklich. Pushbutton klingt da schon besser. Aber...
        Zitat von iwan Beitrag anzeigen
        Evtl. könnte auch der trigger so umgebeut werden, dass der diese Möglichkeit schon drin hat. Das könnte dann z.B. per Attribut "konfiguriert" werden.
        ... klingt ja noch besser
        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


          #5
          Ist das nun schon in der aktuellen SVN-Version eingepflegt?

          Kommentar


            #6
            Hi,

            ich habe auch versucht das Widget per Hand in meine Visu zu integrieren, leider scheine ich irgendwo einen Fehler zu haben, die Visu Seite baut sich danach überhaupt nicht mehr auf.
            Ich habe folgendes gemacht:
            - Im plugins verzeichnis einen Unterordner "switch_1_0" angelegt
            - darin eine Datei "structure_plugin.js" mit dem Inhalt aus dem 1. Post
            - visu_config.xsd angepasst
            - In der visu_config.xml das Plugin geladen (<plugin name="switch_1_0"/> )
            - In der visu_config.xml das Plugin integriert:
            <switch_1_0>
            <label>Tuer</label>
            <address transform="DPT:1.001" mode="readwrite">1/0/1</address>
            </switch_1_0>


            Habe ich sonst noch was übersehen? Ich sehe auch keine Möglichkeit beim Laden der Seite irgendetwas zu debuggen um zu erkennen wo der Fehler herkommen könnte.

            Visu ist SVN Version 1853 vom 19.8.

            Falls jemand einen Tip hat wäre ich dankbar.

            Grüsse,

            Emmanuel

            Kommentar


              #7
              Hallo,

              es hat sich seit dem initialen Posting im Januar ein bisschen was geändert innerhalb der CometVisu, daher ist es gut möglich, dass das nicht mehr funktioniert.

              Vielleicht reicht es dir aber auch, mit dem <trigger> zu arbeiten. Hier kann man über Angabe der Attribute 'shorttime' (=> Zeit in Millisekunden für kurzen Tastendruck) und 'shortvalue' (=> Wert der bei kurzem Tastendruck gesendet werden soll) einen Lang- und Kurz-Tastendruck unterscheiden und verschiedene Werte senden.
              Grüße
              Michael

              Kommentar


                #8
                Hi,

                Trigger mit shortValue reicht leider nicht für den Anwendungsfall.
                Was hat denn in der Cometvisu geändert? Gibts da irgendwo Doku wie aktuelle Plugins auszusehen haben?

                Grüsse,

                Emmanuel

                Kommentar


                  #9
                  Neues Widget &lt;pushbutton&gt;

                  Da ja offenbar "vergessen" wurde, dieses Widget in die CometVisu einzubauen, habe ich mir erlaubt, ein neues Widget <pushbutton> zu erstellen.

                  Einfach letzte SVN-Version abholen und <pushbutton> verwenden. XSD sollte selbsterklärend sein.
                  Grüße
                  Michael

                  Kommentar


                    #10
                    Hi,

                    funktioniert, danke für die Mühe.

                    Emmanuel

                    Kommentar


                      #11
                      Zitat von MicHau Beitrag anzeigen
                      Einfach letzte SVN-Version abholen und <pushbutton> verwenden. XSD sollte selbsterklärend sein.
                      Super Danke!

                      Kommentar


                        #12
                        Zitat von iwan Beitrag anzeigen
                        Super Danke!
                        Ich danke dir für den Input.
                        Grüße
                        Michael

                        Kommentar


                          #13
                          Gibt es eine Möglichkeit, beim PUSHBUTTON an 2 unterschiedliche Adresse zu senden ? Sprich beim Drücken an KNX Adresse 1 und beim Loslassen einen entsprechenden Wert an Adresse 2. Meine Zennio ZAS Schalter senden nämlich an unterschiedliche Adresse und auch mein ITACH Plugin zur IR Steuerung arbeitet mit 2 Adressen

                          Code:
                          <pushbutton downValue="1" upValue="0" mapping="text auf/zu">
                              <label>
                                  <icon name="fts_garage" color="orange"/>
                              </label>
                              <address transform="DPT:1.001">1/1/2</address>
                              <address transform="DPT:1.001">2/2/2</address>
                          </pushbutton>

                          Kommentar


                            #14
                            Gibt´s noch nicht, aber ich habe das mal implementiert:
                            https://github.com/CometVisu/CometVisu/pull/159

                            Würde dann so aussehen:
                            Code:
                            <pushbutton downValue="1" upValue="0" mapping="text auf/zu">
                                <label>
                                    <icon name="fts_garage" color="orange"/>
                                </label>
                                <address transform="DPT:1.001" mode="readwrite" variant="down">1/1/2</address>
                                <address transform="DPT:1.001" mode="write" variant="up">2/2/2</address>
                            </pushbutton>
                            Gruß
                            Tobias

                            Kommentar


                              #15
                              Hallo peuter , mensch klasse, finde ich richtig cool .-))) Danke dir .-)


                              Aber ist das getestet ? Bei mir verhält es sich anders

                              Code:
                                      <pushbutton downValue="0" upValue="1" >
                                  <label>
                                      <icon name="fts_garage" color="orange"/>VOL --
                                  </label>
                                  <address transform="DPT:1.001" mode="readwrite" variant="down">12/0/83</address>
                                  <address transform="DPT:1.001" mode="write" variant="up">12/0/84</address>
                                              </pushbutton>
                              Halte ich den Button gedrückt sendet er an beide Adressen eine 0, lasse ich ihn los, sendet er an beide Adressen eine 1. Ich bräuchte allerdings die Variante, beim Button drücken an Adresse 1 nur einen Wert X an die bestimmte Adresse, beim Losslassen den anderen Wert X nur an diese Adresse.

                              Ist das vielelicht möglich ?


                              Nachtrag: Hatte nicht die Developer Version, habe diese mit der Anleitung auf https://github.com/lassos/CometVisu nachinstalliert. Funktioniert bombe .-)
                              Zuletzt geändert von larsknx; 10.04.2015, 09:37.

                              Kommentar

                              Lädt...
                              X