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 @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

        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
        • 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

                          747
                          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