Ankündigung

Einklappen
Keine Ankündigung bisher.

Konfiguration InfoTrigger Widget für Rolladen

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

    #16
    Ah, Du verwendest das fertige Release und nicht den Source Code.

    Wenn aus dem Source Code ein Release gebaut wird, dann werden alle Dateien zu einer einzigen, großen zusammengefasst und komprimiert. So wird das Laden beschleunigt - aber man kann halt nicht mehr die Einzeldateien sehen und bearbeiten.
    Da das ganze beim Debuggen ein Horror wäre, man aber nicht auf die Vorteile verzichten wollte, wurden s.g. Map-Dateien entwickelt. Die Lädt der Browser automatisch (so vorhanden) und zeigt im Debugger wieder die ursprüngliche Struktur mit den leserlichen Source-Dateien an - auch wenn die in dieser Form nie geladen wurden.

    Wenn Du nun in einer Source-Datei etwas ändern möchtest, so musst Du auch die Source-Dateien verwenden. (Keine Sorge, die CometVisu in Version bis 0.10.x läuft auch wunderbar direkt von den Sourcen! Das Laden ist halt nicht mehr optimiert, was aber im Intranet zu Hause nicht wirklich auffällt)
    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


      #17
      OK, vielen Dank für den Hinweis, ich bin nun wieder einen Schritt weiter, aber noch nicht am Ziel :-)
      Nun hänge ich daran, dass das Ganze beim Laden der Visu im Browser hängenbleibt ("Loading..."). Wenn ich folgenden Code in der TransformDefaults.js auskommentiere, funktioniert lädt die Visu wieder ordnungsgemäß:

      Code:
      /* Start Modifikation*/
        Transform.addTransform( 'Custom', {
        'shutter': {
              name: 'Custom_shutter',
              encode: function (phy) {
                return (phy | 0x80).toString(16);
              },
              decode: function (hex) {
                return parseInt(hex, 16) === 1 ? "DOWN" : "UP";
              }
        }
      });
      /* Ende Modifikation*/
      D.h. in dem Codeschnippsel muss noch irgendwo ein kleiner Fehler drinnen sein. Gibt es irgendwo Doku zu ner Syntaxbeschreibung? Oder sieht jemand den Fehler?

      Kommentar


        #18
        Was sagt der Debugger? (F12 Taste drücken und Seite neuladen)

        Kommentar


          #19
          siehe Screenshot...
          Angehängte Dateien

          Kommentar


            #20
            Und dort nun auf "Konsole" gehen
            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


              #21
              Sehr gut, ich habe es jetzt Dank Eurer Hinweise hinbekommen. Es hat gereicht statt des oben geposteten Codes folgendes einzufügen:
              Code:
              'shutter': {
                      name: 'Custom_shutter',
                      encode: function (phy) {
                        return (phy | 0x80).toString(16);
                      },
                      decode: function (hex) {
                        return parseInt(hex, 16) === 1 ? "DOWN" : "UP";
                      }
                }
              Der Code muss als Block unter "window.Transform" werden. Mehrere solcher Blöcke müssen durch Kommas getrennt sein.

              Nun funktioniert das Widget schon mal einigermaßen:
              - Die Langzeitobjekte schalten im Infotrigger Widget das Bild auf fts_shutter_up bzw. fts_shutter_down,
              - wenn nach dem Verfahren ein neuer Status in % kommt, wird entsprechend fts_shutter_x0 angezeigt.
              - Bei Betätigung des Kurzzeitobjekts wird kurz message_stop eingeblendet (Transform analog oben), bevor der neue Status das Stop Symbol mit fts_shutter_x0 überschreibt.
              - 0 und 1% stellen nun auch kein Problem mehr da.

              Nun die nächsten Herausforderungen:
              1. Wenn ich versehentlich das Kurzzeitobjekt betätige, ohne dass zuvor ein Langzeitobjekt betätigt wurde, wird der Status dauerhaft durch das Stop Symbol überschrieben, bis wieder ein Langzeitobjekt kommt. Lässt sich das in der Visu elegant vermeiden, oder müsste ich nach einem Stop Symbol während Rolladenstillstand nochmal den Status aktiv über den Bus senden? Idealerweise reagiert das Kurzzeitobjekt gar nicht, wenn das Langzeitobjekt nicht da war. Alternativ könnte ich vielleicht das Sperrobjekt des Rolladens verwenden, welches mit dem Langzeitobjekt verbunden ist. Aber das gibt natürlich etwas viel gefrickel, zumal diese Bedienlogik in normalen Schaltern auch abgebildet sein müsste... Was meint ihr dazu?

              2. Ich habe noch 3 Fehlerflags eingebunden (Transforms jeweils wieder analog oben). Es handelt sich um Blockade, Hindernis und Sonstiger Fehler. Den Fall Hindernis habe ich getestet. Es ist so, dass eine Wertänderung kurzzeitig dazu führt, dass das entsprechende Symbol fts_shutter_jam angezeigt wird, allerdings fährt der Rolladen ein Stück hoch und sendet natürlich den neuen Status. Infolgedessen wird das Fehlersymbol durch fts_shutter_x0 überschrieben. Das ist natürlich nicht in meinem Sinne, in diesem Fall möchte ich das Fehlersymbol bis zum nächsten Langzeitobjekt "aufrechterhalten". Im Grunde soll das Fehlersymbol solange angezeigt werden, wie das entsprechende Bit gesetzt ist.

              3. Ist es möglich, anstatt ein textuelles uplabel zu definieren, jeweils ein Bild für den up und den down Button einzublenden? control_arrow_up würde vom Design hervorragend zum fts_shutter_up passen :-)

              Habt ihr hierzu Ideen, wie man die beiden Punkte am elegantesten umsetzen könnte?

              Hier noch meine bisherigen Transforms:
              Code:
                /* Start Modifikation*/
                ,
                'shutter': {
                      name: 'Custom_shutter',
                      encode: function (phy) {
                        return (phy | 0x80).toString(16);
                      },
                      decode: function (hex) {
                        return parseInt(hex, 16) === 1 ? "DOWN" : "UP";
                      }
                },
                'shutterstop': {
                      name: 'Custom_shutter_stop',
                      encode: function (phy) {
                        return (phy | 0x80).toString(16);
                      },
                      decode: function (hex) {
                        return parseInt(hex, 16) === 1 ? "STOP" : "DONTCARE";
                      }
                },
                'shuttererror': {
                      name: 'Custom_shutter_error',
                      encode: function (phy) {
                        return (phy | 0x80).toString(16);
                      },
                      decode: function (hex) {
                        return parseInt(hex, 16) === 1 ? "ERROR" : "DONTCARE";
                      }
                },
                'shutterblockade': {
                      name: 'Custom_shutter_blockade',
                      encode: function (phy) {
                        return (phy | 0x80).toString(16);
                      },
                      decode: function (hex) {
                        return parseInt(hex, 16) === 1 ? "BLOCKADE" : "DONTCARE";
                      }
                },
                'shutterhindrance': {
                      name: 'Custom_shutter_hindrance',
                      encode: function (phy) {
                        return (phy | 0x80).toString(16);
                      },
                      decode: function (hex) {
                        return parseInt(hex, 16) === 1 ? "HINDRANCE" : "DONTCARE";
                      }
                }
              /* Ende Modifikation*/
              Und hier noch das dazugehörige Mapping:

              Code:
              <mapping name="Rolladen">
                           <entry value="UP">
                              <icon name="fts_shutter_up"/>
                           </entry>
                           <entry value="DOWN">
                               <icon name="fts_shutter_down"/>
                           </entry>
                           <entry value="STOP">
                               <icon name="message_stop"/>
                           </entry>
                           <entry value="ERROR">
                               <icon name="fts_shutter_attention"/>
                           </entry>
                           <entry value="BLOCKADE">
                               <icon name="fts_shutter_jam"/>
                           </entry>
                           <entry value="HINDRANCE">
                               <icon name="fts_shutter_jam"/>
                           </entry>
                           <entry range_min="0" range_max="4.99">
                               <icon name="fts_window_2w"/>
                           </entry>
                           <entry range_min="5" range_max="14.99">
                               <icon name="fts_shutter_10"/>
                           </entry>
                           <entry range_min="15" range_max="24.99">
                               <icon name="fts_shutter_20"/>
                           </entry>
                           <entry range_min="25" range_max="34.99">
                               <icon name="fts_shutter_30"/>
                           </entry>
                           <entry range_min="35" range_max="44.99">
                               <icon name="fts_shutter_40"/>
                           </entry>
                           <entry range_min="45" range_max="54.99">
                               <icon name="fts_shutter_50"/>
                           </entry>
                           <entry range_min="55" range_max="64.99">
                               <icon name="fts_shutter_60"/>
                           </entry>
                           <entry range_min="65" range_max="74.99">
                               <icon name="fts_shutter_70"/>
                           </entry>
                           <entry range_min="75" range_max="84.99">
                               <icon name="fts_shutter_80"/>
                           </entry>
                           <entry range_min="85" range_max="94.99">
                               <icon name="fts_shutter_90"/>
                           </entry>
                           <entry range_min="95" range_max="100">
                               <icon name="fts_shutter_100"/>
                           </entry>
                      </mapping>
              Und hier noch mein aktueller Prototyp:

              Code:
              <infotrigger uplabel="▲" upvalue="0" shortupvalue="1" downlabel="▼" downvalue="1" shortdownvalue="1" align="center" infoposition="middle" change="relative" shorttime="300" mapping="Rolladen">
                          <label>Prototypenraum</label>
                          <address transform="shutter" mode="readwrite" variant="button">x/y/z</address>                      <!--Langzeit-->
                          <address transform="shutterstop" mode="readwrite" variant="short">x/y/z+1</address>            <!--Kurzzeit-->
                          <address transform="DPT:5.001" mode="read" variant="relative">x/y/z+2</address>                  <!--Status-->
                          <address transform="shuttererror" mode="read" variant="relative">x/y/z+3</address>                <!--Fehler-->
                          <address transform="shutterhindrance" mode="read" variant="relative">x/y/z+4</address>        <!--Hindernis-->
                          <address transform="shutterblockade" mode="read" variant="relative">x/y/z+5</address>         <!--Blockade-->
                      </infotrigger>

              Kommentar


                #22
                Hallo zusammen,

                ich habe selbst noch eine Idee bekommen, wie die 1. + 2. Frage angegangen werden könnte:
                Man müsste im Grunde innerhalb des mappings abfragen, wie der value davor war (Frage 1) bzw. ob die Objektwerte der relevanten Objekte gesetzt sind (Frage 2).

                Also in Pseudo Code für Frage 1:
                Code:
                <entry value="STOP>
                       If valuebefore = "UP" Or valuebefore = "DOWN"  Then
                            <icon name="message_stop"/>
                       End If
                </entry>
                Und in Pseudo Code für Frage 2:
                Code:
                <entry range_min="15" range_max="24.99">
                       If Errorobjekt = 1 Then
                            <icon name="fts_shutter_attention"/>
                       Else
                            <icon name="fts_shutter_20"/>
                       End If
                </entry>
                Aber geht das überhaupt und wenn ja wie?

                Kommentar


                  #23
                  Zitat von DJens Beitrag anzeigen
                  3. Ist es möglich, anstatt ein textuelles uplabel zu definieren, jeweils ein Bild für den up und den down Button einzublenden? control_arrow_up würde vom Design hervorragend zum fts_shutter_up passen :-)
                  Der Infotrigger ist ein "altes" Widget aus der Zeit als es noch keine Groups und nur zwei Spalten gab.
                  Die ganze Funktionalität eines relative-Infotriggers sollte sich auch durch zwei normale Trigger und ein Info Widget ersetzen lassen. Hier kannst Du die Beschriftung auf den Button wie üblich anpassen - inkl. Icons.
                  Zitat von DJens Beitrag anzeigen
                  Man müsste im Grunde innerhalb des mappings abfragen, wie der value davor war (Frage 1) bzw. ob die Objektwerte der relevanten Objekte gesetzt sind (Frage 2).

                  Also in Pseudo Code für Frage 1:
                  Code:
                  <entry value="STOP>
                  If valuebefore = "UP" Or valuebefore = "DOWN" Then
                  <icon name="message_stop"/>
                  End If
                  </entry>
                  Und in Pseudo Code für Frage 2:
                  Code:
                  <entry range_min="15" range_max="24.99">
                  If Errorobjekt = 1 Then
                  <icon name="fts_shutter_attention"/>
                  Else
                  <icon name="fts_shutter_20"/>
                  End If
                  </entry>
                  Aber geht das überhaupt und wenn ja wie?
                  Ja das geht - auf dem Server.

                  Auf dem Client macht das keinen Sinn, da der Client zustandslos sein muss - der Client läuft nicht zwingend durch und sollte auch nach einem Start sofort das richtige anzeigen.
                  Für Zustände ist eine Logik-Engine zuständig.
                  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


                    #24
                    zu 3.: die Historie kannte ich nicht. Ich fand den Infotrigger so charmant, weil die Abstände der einzelnen Elemente schon vordefiniert sind. Aber ich werde das dann wohl so umbauen, wie von Dir vorgeschlagen. Prototypisch hatte ich das sogar schon mal.

                    zu 1. und 2.: Wie binde ich denn eine Logik-Engine ein? Mir fehlt hier irgendwie noch der "Pack-An". Kannst Du das bitte noch etwas genauer beschreiben? Ich habe den 1-wire Server - kann der das übernehmen? Außerdem hätte ich noch einen EIBPC... Mit Client meinst Du vermutlich das ganze CometVisu-Framework oder?
                    Zuletzt geändert von DJens; 11.11.2017, 18:13.

                    Kommentar


                      #25
                      Was ist der 1-Wire Server? (Ich kenne das WireGate - damit würde es gehen...)

                      Mit dem EibPC habe ich mich nicht tiefer beschäftigt, aber gut möglich, dass der das kann.

                      Hier meine ich mit Client das, was im Browser läuft. Der Browser ist mal da und mal nicht, d.h. alles was der anzeigt muss mit einer Anfrage beim Server übertragbar sein. Sich einen Zustand in dem Browser zu merken macht wenig Sinn - dafür gibt's den Server. Der muss immer durch laufen. (Und nach einem Stromausfall dauert's halt, bis der alle Zustände wieder richtig hat, hängt ja z.B. von der Programmierung der Aktoren ab)
                      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


                        #26
                        Ich meine den WireGate-Server. An dem hängt bei mir ein 1-Wire Busmaster dran, da bringe ich manchmal die Bezeichnungen durcheinander - aber wir meinen das gleiche. Wie müsste ich mit dem WireGate den grob vorgehen bzw. starten?

                        Nochmal zu 3.: Ich bekomme es mit den zwei Triggern und dem Info Widget nicht hin, dass das Info Widget wirklich in der Mitte sitzt (s. Screenshot)... align ist überall auf Center (außer beim Label); die colspans der 2 Trigger sind 0,75 und die des Info Widgets 0,5 - also sollte es symmetrisch sein. Ist es aber nicht?!
                        Angehängte Dateien

                        Kommentar


                          #27
                          Beim WireGate muss Du über die WireGate-Plugins in Perl eine entsprechende Logik bauen die die einzelnen Bus-Pakete entsprechend auswertet. Also dort die entsprechenden GAs abonieren, verarbeiten und das was in der Visu angezeigt werden soll dann auf einer neuen GA wieder verschicken.

                          Bgzl. Positionierung: Wenn Du bei der Colspan kleiner als 1 wirst, kann es sein, dass Designs etwas "zerfließen". Hier könnte man zum feinen Optimieren per Browser Debugger (Strg+Shift+I) in den CSS Regeln etwas fummeln bis es so passt wie man will und das anschließend z.B. über eine CSS Regel die per Class aktiviert wird einbinden.
                          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


                            #28
                            ...wenn ich mir die Zeilen so durchlese frage ich mich, ob es zwischenzeitlich ggf. eine elegantere Variante gibt, also eine built-in Variante, für die Steuerung von Rollos? in der Doku habe ich irgendwie nix gefunden....

                            Kommentar


                              #29
                              Nun, es gibt kein neues Widget oder Plugin.

                              Für mich persönlich sind die Slider immernoch absolut ausreichend.

                              Aber jeder ist frei hier ein Widget oder Plugin zu erstellen.
                              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

                              Lädt...
                              X