Ankündigung

Einklappen
Keine Ankündigung bisher.

GA abhängig Bild anzeigen

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

    GA abhängig Bild anzeigen

    ich würd gern die gelbe/grüne/graue Tonne visualisieren. Aber nur, wenn sie auch dran ist. Geht da ggf schon was? Im Moment verschlingt das drei Infofelder. Grüne Tonne ja/nein, etc...
    Ggf. Gänge noch ein Textfeld ("keine"|"gelbe" Tonne).
    Schöner wäre allerdings ein Bild, falls GA gesetzt. Falls es nicht geht, könnte ich mich ggf. mal an dem Bilder Widget probieren.

    Gruß
    Derzeit zwischen Kistenauspacken und Garten anlegen.
    Baublog im Profil.

    #2
    Wenn's ein Bild sein soll, würde Stand jetzt ein Trick analog zu https://knx-user-forum.de/cometvisu/...3d-seiten.html funktionieren:
    Du baust eine SVG-Datei, die intern eine parallele CV Verbindung aufbaut und sich entsprechend umfärbt...

    Wenn's Stand jetzt mit wenig Aufwand irgendeine Lösung sein soll:
    Mapping definieren und mit z.B. "0='nichts', 1='grüne Tonne', 2='gelbe Tonne', ..." auf ein Info-Widget gehen.
    (Vermutlich und ungetestet sogar möglich und am Ziel ganz nah dran: Mapping machen mit 1='<img src="pfad/gruene_tonne.png">' etc. pp.)

    Die erweiterte Version der einfachen Lösung (und dann nicht mehr einfach) davon wäre Icons mit einzubauen (was wir eh bald brauchen!) und die per Mapping wechseln.

    Ganz andere Alternative:
    Die verschiedenen Bilder ablegen und per Plugin einen passenden Symlink anlegen bzw. abändern. Nun ein normales Image-Widget (+ passender Refresh) auf den Symlink.

    Die "Richtige" Lösung eines "Bild-Wechsel-Widgets" finde ich erst mal schwierig, denn wie viele Bilder sollen vorgehalten werden?
    Da dürften Icons in Kombination mit Mapping universeller sein.
    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


      #3
      Das Mapping würde wohl erstmal reichen.
      "Nichts" würde aber wohl immerhin den Platz schon wegnehmen. Daher mach ich mal nen FR, wenns Recht ist, das man einen Infotrigger nur anzeigt, wenn wirklich was anzuzeigen gesetzt ist (oder so ähnlich). Fraglich nur, ob das machbar ist, da ja das Layout vor dem setzen der Werte erfolgt.

      Una ja: Pro Icons Das würde passen.
      Derzeit zwischen Kistenauspacken und Garten anlegen.
      Baublog im Profil.

      Kommentar


        #4
        Hui, Icons wären schon fein. Da ginge ja auf einen Schlag richtig viel mit.

        Könnte man nicht evtl. sogar per Mapping aus dem SVG aus https://knx-user-forum.de/knx-uf-ico...abversion.html die jeweils benötigten Ebenen selektieren/anzeigen?

        Grüße
        Christian

        Kommentar


          #5
          Zitat von Chris M. Beitrag anzeigen
          Wenn's ein Bild sein soll, würde Stand jetzt ein Trick analog zu https://knx-user-forum.de/cometvisu/...3d-seiten.html funktionieren:
          Du baust eine SVG-Datei, die intern eine parallele CV Verbindung aufbaut und sich entsprechend umfärbt...
          Uih, ich hatte da heute schon angefangen - im DWD-Kontext (und jetzt erinnere ich mich auch wieder warum das falsch ist..)
          SVG-einfärben ist einfach besser

          Makki
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            #6
            Das hatte ich vor einer Weile schonmal als FR eingekippt:
            SourceForge.net: Open Automation: Detail: 3352581 - add dynamic images
            aber ehrlich gesagt keine Idee für die Realisierung...

            Kommentar


              #7
              Einfach hatte ich mir gedacht, das Image Widget könnte mit 5 GAs und 5 Bildern umgehen. Das Letzte gewinnt.
              +1 GA zum löschen des Inhalts.
              Vermutlich übersehe ich da aber was. Der Code ist ja nicht so mein Ding.
              Derzeit zwischen Kistenauspacken und Garten anlegen.
              Baublog im Profil.

              Kommentar


                #8
                Nee, ist auch einfach, ich hab mi den FR mal genommen, wäre nominell seit 6h locker fertig, in drei konfigurierbaren Varianten..
                -> wenn ich aus der update-Funktion in dieser ganzen OO-Hölle einfach nur wüsste wie ich auf eine verd*** variable zugreifen kann

                Ich geb für heute auf, das ist einfach nicht meins mit $(this).zufall().schätzen().raten(), deswegen hab ich den Rest der Zeit dann damit verbraucht, versuchen zu lernen, wie man wirklich globale Variablen setzt, weil dieser ganze this&that-Klassen-Käse wo man nie weiss wer $(this) gerade ist, liegt mir nicht

                Makki

                P.S.: Auch wenn ich über Perl mal gelegentlich nöhle, aber es gibt eine Sache in JS (und in PHP) die IMHO eine pure Pest sind: es gibt kein "use strict" damit man Variablen nicht "aus versehen" (re)definiert. sogar VB kann das (Option Explicit) -> das ist schlicht Schrott. Ändern können wir jetzt nichts dran, aber ich musste es mal sagen
                Ja, ich bin grad etwas frustriert
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  #9
                  Auf was willst du denn von wo zugreifen?


                  Sent from my iPhone using Tapatalk
                  KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                  Kommentar


                    #10
                    eigentlich einfach, das ist sicherlich auch total banal (ich hab auch schon 140 andere Varianten versucht):

                    Code:
                            var refresh = $p.attr('refresh') ? $p.attr('refresh')*1000 : 0;
                            ret_val.append( $(actor).data( {
                                    'address':   address,
                                    'refresh':   refresh,
                                    'src':       $p.attr('src'),
                                    'suffix':    $p.attr('suffix'),
                                    'mapping':   map,
                                    'sendValue': $p.attr('sendValue')
                                } ).each(setupRefreshAction) // abuse "each" to call in context...
                               .bind( 'click', this.action )
                            );
                            for( var addr in address ) 
                                ret_val.append( $(actor).bind( addr, this.update ));
                            ret_val.addClass(id);
                            return ret_val;
                        },
                        update: function(e,d) { 
                            var data = $(this).data();
                            console.log("update data.src:" + data.src);
                        },
                        action: function() {
                            var data = $(this).data();
                            console.log("action data.src:" + data.src);
                    ergibt:
                    Code:
                    update data.src:undefined
                    ..
                    structure_custom.js:140action data.src:/img
                    Warum zur Hölle? ich erzeuge dabei wohl zwei dolle objekte, das sieht man auch, klar soweit, aber wie man auf den sch*** zugreift werde ich vermutlich nie verstehen
                    Warum geht der Update ansich, wenn er offenbar aufs falsche gebunden ist, das kein data() kennt

                    Makki
                    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                    -> Bitte KEINE PNs!

                    Kommentar


                      #11
                      Ich glaube (ungetestet): du müsstest erst den actor fertig machen und dann an ret_val appenden. So hängst du den glaube ich zweimal an, einmal ans Update, einmal an Click gebunden. Und der ans Click gebundene refresht, der andere wird upgedatet. Und nur der erste hat nen Data.


                      Sent from my iPhone using Tapatalk
                      KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                      Kommentar


                        #12
                        Danke, aber ich glaube die Variante hatte ich heute auch schon durch (und jetzt keine Lust mehr..)
                        Das Problem habe ich verstanden aber nicht, warum es dafür keine einfache Lösung gibt..
                        Für mich ist das alles recht verquer..warum kann ich nicht sagen $(whatever).whatever.data() = .. )
                        Deswegen suche ich eher nach einer Möglichkeit
                        var F****_global_eindeutig_meine_variable =Wert
                        zu setzen, halten muss sie der Browser eh alle, also was solls, es könnte doch auch mal einfach sein
                        Und das wäre schön einfach
                        Mit dem ganzen JQuery.Spass werden dutzendfach Variablen redundant vorgehalten, da sollten doch auch ein paar kB für nicht OO-affine drin sein

                        Makki

                        Edit&PS: vielleicht bin ich auch in der falschen Zeit gebohren, da gabs keine Variablen, die man sich zur Laufzeit ausgedacht hat das nervt..
                        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                        -> Bitte KEINE PNs!

                        Kommentar


                          #13
                          Code:
                          ar $actor = $(actor);
                                $actor.data( {
                                          'address':   address,
                                          'refresh':   refresh,
                                          'src':       $p.attr('src'),
                                          'suffix':    $p.attr('suffix'),
                                          'mapping':   map,
                                          'sendValue': $p.attr('sendValue')
                                      } ).each(setupRefreshAction) // abuse "each" to call in context...
                                     .bind( 'click', this.action );
                                  
                                  for( var addr in address ) 
                                      $actor.bind( addr, this.update );
                                  //ret_val.addClass(id);
                                  ret_val.append($actor)
                                  return ret_val;
                          geht. Das Problem ist tatsächlich, dass sonst zwei Aktoren angefügt werden und data nur in einem vorhanden ist. Man muss erst den Aktor komplett zusammensetzen, mit allen Eigenschaften, Bindings etc. und den dann ganz zum Schluss an ret_val anfügen.

                          Gruss,

                          der Jan
                          KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                          Kommentar


                            #14
                            Zitat von makki Beitrag anzeigen
                            Ich geb für heute auf, das ist einfach nicht meins mit $(this).zufall().schätzen().raten(), deswegen hab ich den Rest der Zeit dann damit verbraucht, versuchen zu lernen, wie man wirklich globale Variablen setzt, weil dieser ganze this&that-Klassen-Käse wo man nie weiss wer $(this) gerade ist, liegt mir nicht
                            Das sich umdefinierende this ist ein anerkannter Geburtsfehler bei JS. Dank der großen Verbreitung ist der leider nicht mehr wirklich heilbar.

                            Durch ein that = this am Anfang eines Objektes ist's wenigstens umgehbar. Schön ist aber anders.
                            Zitat von makki Beitrag anzeigen
                            P.S.: Auch wenn ich über Perl mal gelegentlich nöhle, aber es gibt eine Sache in JS (und in PHP) die IMHO eine pure Pest sind: es gibt kein "use strict" damit man Variablen nicht "aus versehen" (re)definiert.
                            Man bist Du Old-School! Häng doch einfach ein
                            Code:
                            "use strict";
                            vorne rein...
                            (-> https://developer.mozilla.org/en/JavaScript/Strict_mode)
                            Da gibt's dann nicht mehr globale Variablen aus Versehen:
                            First, strict mode makes it impossible to accidentally create global variables.
                            Zitat von makki Beitrag anzeigen
                            Deswegen suche ich eher nach einer Möglichkeit
                            var F****_global_eindeutig_meine_variable =Wert
                            zu setzen
                            Globale Variablen sind böse.
                            Nicht nur wegen der Verpestung des Namensraumes, sondern bei JS gleich noch mal mehr, da die Performance da stark drunter leidet.
                            (Bei jedem Variablen-Zugriff wird erst mal lokal gesucht, dann ein Level höher, dann noch einer, ..., und ganz am Schluss global.)

                            => Ein typisches Performance-Tunig ist:
                            Code:
                            var globalFoo = 1;
                            function a()
                            {
                              // ... ganz tiefe Verschachtelung
                                      {
                                        var lokaleKopie = globalFoo; 
                                        // ... Code der öfters  globalFoo benötigt, aber nun lokaleKopie statt dessen verwendet ...
                                      }
                              // ...
                            }
                            (Achtung! Vorzeitiges Performace-Tunig ist auch böse. Also bitte nicht pauschal überall einbauen! Das gehört da hin, wo's klemmt)
                            Zitat von makki Beitrag anzeigen
                            Mit dem ganzen JQuery.Spass werden dutzendfach Variablen redundant vorgehalten, da sollten doch auch ein paar kB für nicht OO-affine drin sein
                            JS kann man ganz leicht ineffizient schreiben. Ist doof - ist aber so.
                            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


                              #15
                              @JNK: Danke, das wars natürlich -> kaum macht mans richtig, schon gehts

                              Wenn wir schon dabei sind, eine Frage hätte ich noch, damit ichs vielleicht endlich mal wirklich verstehe was ich da pinsle:
                              - (var) actor: ist eine simple Variable, String, klar
                              - $(actor) ist jQuery-Magic, nicht ganz klar, aber egal, das kann ich anderswo nachlesen
                              -> Aber: $actor ist: ? Derselbe jQuery-Magic wie $(actor) aber noch nicht ans DOM gebunden? oder nicht.. oder was? console.dir sagt nur unverständliches Objekt-blubber
                              Sorry für die dummen Fragen, aber ich würds irgendwann gern mal verstehen und was davon nun wann und in welchem Kontext ausgeführt wird ist mir immernoch mittelmässig schleierhaft


                              Zum Thema imagetrigger (Arbeitsname), also das wird langsam, man kann images per GA auswählen (Name+GA-Wert[natürlich beliebig von DPT1-16 also auch Text]+Suffix), optional mit sep. GA an/abschalten und einen Wert beim clicken versenden (was nebenbei die Mülltonnen-Sache erschlagen soll..)
                              Auch per mapping mit Wertanzeige..
                              Was noch fehlt ist aufräumen, ca. 50 console.log entfernen und die mehrfache Bildauswahl per Bit-Matrix )

                              Ich bin aber gerade wieder auf ein Problem im Editor gestossen das ich entweder selbst eingebaut habe oder noch nicht gefixed: wäre dann erstmal wichtiger..
                              -> Nachdem ich grad halbwegs drin bin, würde ich writeonly Editor-seitig gleich mit einbauen, weil wenn ich das Problem gefunden habe ist das nur noch zusätzliche fleissarbeit?
                              Ausserdem finde ich das ansprechen von Address-parametern (transform, addr, readonly, variant) als array mit [0/1/2] nicht sonders geschickt bzw. ist es uneinheitlich, explizite Namen wären da doch besser(?)


                              Was auch noch fehlt: die images sollten optimalerweise beim start der Visu vorgeladen werden, was die Sache zügiger macht; beim init bekomme ich das hin (div->img->hide und dann src setzen) aber das bremst natürlich wieder insgesamt im entscheidenden Moment-> also unschön.
                              Idee war jetzt im create einen einmaligen preload (hidden) per window.setTimeout in (?) sekunden abzuschiessen, bin mir noch nicht sicher obs ne gute Idee ist

                              -> Frage an die j(query) experten: kann man da irgendeine Prio oder eventqueue für $(ajax) machen? Beim ändern der src-URL lädt es ja eh selber neu..
                              Oder wäre das nachladen mit window.setTimeout im create der passende Weg?
                              Das wäre auch für das (verzögerte) laden von zigdutzend diagrams evtl. gut/besser (hatte ich schonmal im Hinterkopf und meine ich auch erwähnt, weil das halt den start massiv bremst bei einer "echten" dicken Visu)..


                              Und im nächsten Schritt dann eine (Mülltone) die per SVG/JS dynamisch eingefärbt wird aber eins nach dem anderen


                              Zitat von Chris M. Beitrag anzeigen
                              Man bist Du Old-School! Häng doch einfach ein
                              "use strict";
                              Sorry, old-school mag durchaus zutreffen Ich definiere einfach gerne explizit meine Variablen und lasse mir vom compiler/interpreter einfach direkt sagen, wo ich mich vertippt habe statt mir eine Stunde beim Suchen die Augen im trüben zu reiben
                              Werds mal probieren, das klingt verdammt gut (kein einziges meiner Perl/VB/xy-scripts, ziemlich viele, beginnt ohne use strict/explicit/..)

                              Globale Variablen sind böse.
                              Nicht nur wegen der Verpestung des Namensraumes, sondern bei JS gleich noch mal mehr, da die Performance da stark drunter leidet.
                              Ansich sehe ich das ja ein aber es kekst mich wirklich teilw. massiv an, wenn man im Kontext agiert ist das ja sogar gut & verständlich aber statische Variablen, die man einfach nur einmal braucht wären schon was.. Also wenn man diese adressieren könnte ohne sich 1h durch console.dir&firebug nach oben zu hangeln
                              Die müssen ja garnicht wirklich global sein, es würde reichen diese explizit ansprechen zu können, ohne $(this).parent().find(...), könnte man da nicht ein CV_vars-Object machen, das man einheitlich mit immer gleicher syntax adressieren kann (?). Das wärs schon

                              JS kann man ganz leicht ineffizient schreiben. Ist doof - ist aber so.
                              Das hab ich auch schon gemerkt, noch nie ist mir der FF sooft abgekachelt wie beim Widget machen, pre-CV war das für mich auch ehrlichgesagt reines Teufelszeugs aber ich finde ja langsam gefallen daran

                              Makki
                              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                              -> Bitte KEINE PNs!

                              Kommentar

                              Lädt...
                              X