Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Dynamische Höhe durch Binding wechselt nach unten

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    SOLVED Dynamische Höhe durch Binding wechselt nach unten

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky last edited by liv-in-sky

      @Peoples - erstnmal danke für deine mühe!

      also das mit der farben änderung kann ich schon mal nachmachen ! {pv:sma-em.0.3002852993.psurplus;netz:sma-em.0.3002852993.pregard;pv > netz ? 'green' : 'red'}

      bei mir: {wert:controll-own.0.TemperaturWidget;wert=4 ? "#6585f6":"transparent"} -> ich nutze das anders - kann man in diese zeile auch mehrere vergleiche schreiben ? das TemperaturWidget bringt die werte 1,2,3,4 oder 5. ich würde gerne für jeden wert eine andere farbe nutzen - hast du da noch einen tipp?

      was ich garnicht verstehe:

      Image 1.png

      warum steht in der cssklasse :

       {vb:javascript.0.Photovoltaik.Momentan_Verbrauch;pr:sma-em.0.3002852993.pregard;(200/Math.round(vb))*Math.round(pr) <195? 'PV_Pegel_kleiner90' : 'PV_Pegel_90'}
      

      reicht die "PV_Pegel_90" angabe allein nicht ?

      1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO last edited by

        das koordinatensystem von html fängt oben links an und wird dan auf der x und y achse nach unten und nach rechts größer.
        wenn du das binding bei höhe definiert hast (wovon ich ausgehe, dann bleibt der ursprung deines widgets (oben/links bzw. top/left ja unverändert, daher verändert sich die höhe immer nur nach unten.
        wenn du das widget nur nach oben wachsen lassen möchtest, musst du 2 eigenschaften berechnen: top und heigth bzw. oben und höhe

        beispiel wenn das untere ende deines widgets auf 200px liegen soll (nicht getestet)
        height/höhe: {vb:javascript.0.Photovoltaik.Momentan_Verbrauch;pr:sma-em.0.XxXxXxXxXx.pregard;pr > 0 ? (vb*0.0008)pr +'px': '0px'}
        top/oben: {vb:javascript.0.Photovoltaik.Momentan_Verbrauch;pr:sma-em.0.XxXxXxXxXx.pregard;pr > 0 ? (200-(vb
        0.0008)*pr) +'px': '200px'}

        Peoples 1 Reply Last reply Reply Quote 1
        • liv-in-sky
          liv-in-sky @Peoples last edited by

          @Peoples

          jetzt verstehe ich - du berechnest, welche css klasse du benutzen willst - cool !

          kanns tdu meine andere frage beantworten ?

          1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO last edited by OliverIO

            das nennt sich binding.
            erklärt wird es (einigermaßen) hier
            https://github.com/ioBroker/ioBroker.vis

            in der basis ist es eine notation, wie verschiedene (rechen-) operationen der reihe nach ausgführt wird.

            das folgende wäre dann wie folgt zu interpretieren:
            {vb:javascript.0.Photovoltaik.Momentan_Verbrauch;pr:sma-em.0.3002852993.pregard;(200/Math.round(vb))*Math.round(pr) <195? 'PV_Pegel_kleiner90' : 'PV_Pegel_90'}

            Wert aus
            datenpunkt javascript.0.Photovoltaik.Momentan_Verbrauch
            in Variable vb

            Wert aus
            datenpunkt sma-em.0.3002852993.pregard
            in Variable pr

            das folgende ist dann ein tertiärer operator wie es in viele programmiersprachen gibt,
            über den man verkürzt if/then/else darstellen kann

            (200/Math.round(vb))*Math.round(pr) <195? 'PV_Pegel_kleiner90' : 'PV_Pegel_90'

            das wäre dann
            if (200/Math.round(vb))*Math.round(pr) <195 {
            'PV_Pegel_kleiner90'
            } else {
            'PV_Pegel_90'
            }

            wenn das dann im feld für die css-klasse steht, wird abhängig von der berechnung (wahr/falsch) der eine oder der andere css klassennamen verwendet und die entsprechende formatierung auf das html element angewendet.

            liv-in-sky 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @OliverIO last edited by

              @OliverW danke dir - so ungefähr habe ich es verstanden. das mit dem tertiären operator habe ich schon mal irgendwo gesehen.

              weißt du, ob mehrere abfragen möglich sind - ähnlich wie bei case:

              wenn 1 dann gelb
              wenn 2 dann rot
              wenn 3 dann blau ... bis 5

              ich arbeite momentan mit 5 widgets, die über die sichbarkeit arbeiten. könnte ich das in ein widget packen ? vielleicht so:

              lt. der anleitung, müßte man befehle hintereinander eingeben können und mit strich-punkt getrennt. ein anderer threat hat es so geschrieben:

              {wert:controll-own.0.TemperaturWidget;wert > 0 ? "#6585f6" :: wert > 1 ? "#820816" :: wert > 2 ? "#f7ea3b" :: wert > 3 ? "#eea72b" ::  wert > 4 ? "#135e0d" :"#000000"}
              

              oder:

              {wert:controll-own.0.TemperaturWidget;wert = 1 ? "#6585f6" :: wert = 2 ? "#820816" :: wert = 3 ? "#f7ea3b" :: wert = 4 ? "#eea72b" :: "#135e0d"}
              

              irgendwie bekomme ich es nicht hin - hast du noch einen tipp

              1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO last edited by OliverIO

                {a==1?"gelb";a==2?"rot";a==3?"blau";a==4?"xxx";a==5?"yyy";"kein treffer"}
                direkt nicht getestet, aber den false-part muss man nicht angeben oder nur einmal
                wenn es aber komplexer wird, würde ich mir im view eine funktion bauen und diese dann im binding
                einbauen. dass lässt sich dann in chrome oder firefox besser debuggen.

                javascript wäre generell besser, da diese notation ja dynamisch interpretiert werden muss und dass auch performance kostet
                dann würde das nur so aussehen:
                {meineTestfunktion(a)}

                und in skripte
                function meineTestfunktion(a) {
                if (a==1) {
                return "gelb";
                }
                if (a==2) {
                return "rot";
                }
                if (a==3) {
                return "blau";
                }
                if (a==4) {
                return "xxx";
                }
                if (a==5) {
                return "yyy";
                }
                return "irgendwas";
                }

                auch hier nur aus dem kopf zusammengeschrieben.
                javascript kann mancham mit dem funktions und variabel-scope tückisch sein.
                aber das grundprinzip müsste es klar machen.

                liv-in-sky 1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @OliverIO last edited by liv-in-sky

                  @OliverW

                  also funktioniert so nicht - ich kann mit max. 3 werten arbeiten

                  {v:controll-own.0.TemperaturWidget;v < 2 ? "#FFEB3B" :: v < 4 ? "#4CAF50" ::  "#F44336"}
                  

                  {a==1?"gelb";a==2?"rot";a==3?"blau";a==4?"xxx";a==5?"yyy";"kein treffer"} -> geht leider nicht - habe tausende variationen probiert 😞

                  {wert:controll-own.0.TemperaturWidget;wert==1 ? "#15830c";wert==2 ? "#820816";wert==3 ? "#f7ea3b";wert==4 ? "#eea72b";wert==5 ? "#000000"}
                  

                  danke für deine ausführlichen beschreibungen - werde wohl mit einem extra script arbeiten müssen.

                  Peoples 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO last edited by

                    Werd das mal selbst probieren, eigentlich müsste das so funktionieren

                    1 Reply Last reply Reply Quote 0
                    • Peoples
                      Peoples @liv-in-sky last edited by Peoples

                      @liv-in-sky

                      Hab das gerade mal so versucht dann gehts:

                      {wert:javascript.0.test.wert;wert==1 ? "#15830c" :: wert==2 ? "#820816" :: wert==3 ? "#f7ea3b" :: wert==4 ? "#eea72b":: "#000000"} 
                      

                      Die Formatierung war nur falsch

                      liv-in-sky 1 Reply Last reply Reply Quote 2
                      • liv-in-sky
                        liv-in-sky @Peoples last edited by

                        @Peoples @OliverW

                        es gibt tage - 1,5 stunden habe ich an dieser einen zeile herumprobiert (ich war teilweise nah dran)

                        jetzt funktioniert es - vielen dank - an euch beide - für die unterstützung

                        Peoples 1 Reply Last reply Reply Quote 1
                        • Peoples
                          Peoples @liv-in-sky last edited by

                          @liv-in-sky
                          Ich habe gelernt, wenn es nur 1,5 Stunden sind dann wärst du ja Recht zügig 😅
                          Es kommt vor dass ich den ganzen Tag an einem Script sitze das nicht funktioniert um am nächsten fest zu stellen dass ich eine Klammer falsch gesetzt habe 😂

                          1 Reply Last reply Reply Quote 1
                          • liv-in-sky
                            liv-in-sky last edited by liv-in-sky

                            für andere interessierte - habe das ganze auch noch mit gradient verschmolzen - sieh sieht schöner aus - wird zwar nicht im editor angezeigt aber unter chrome und der vis-app funktioniert es

                            {wert:controll-own.0.TemperaturWidget;wert==1 ? "linear-gradient(to top, #bfceed 2px, #a5aebe 60px )" :: wert==2 ? "linear-gradient(to top, #66b8ea 2px, #8cdced 60px )" :: wert==3 ? "linear-gradient(to top, #d0a82f 2px, #ebe22d 60px )" :: wert==4 ? "linear-gradient(to top, #e2bcd7e2 5px, #b34e97 60px )":: "linear-gradient(to top, #e8b4c3 2px, #de124d 60px )"}
                            

                            eingetragen unter:

                            Image 1.png

                            Image 4.png Image 2.png Image 3.png

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            732
                            Online

                            32.0k
                            Users

                            80.5k
                            Topics

                            1.3m
                            Posts

                            vis
                            3
                            18
                            1223
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo