Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst]ObjectBinding-2 Werte subtrahieren&runden

    NEWS

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

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    [gelöst]ObjectBinding-2 Werte subtrahieren&runden

    This topic has been deleted. Only users with topic management privileges can see it.
    • Dolomiti
      Dolomiti last edited by Dolomiti

      Hallo,

      ich habe zwei Temperaturen, die ich direkt in Vis voneinander subtrahieren möchte. Das funktioniert auch mit einem HTML-Widget mit folgendem EIntrag

      {t1:modbus.0.inputRegisters.0_T_WZ_AI;t2:hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE;t1-t2}
      

      Jetzt möchte ich das ganze auf 1 Nachkommastelle runden, da mir als Ergebnis manchmal 1.6000000000 o.ä. angezeigt wird. Das funktioniert aber so

      {t1:modbus.0.inputRegisters.0_T_WZ_AI;t2:hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE;t1-t2;round(1)}
      

      nicht. Dann bekomme ich 0 angezeigt.
      Bei meiner Windgeschwindigkeit funktioniert es mittels

      {openweathermap.0.forecast.current.windSpeed;*(3.6);round(1)}km/h
      

      Wo ist mein Denkfehler

      Gruß
      Dolomiti

      BBTown Peoples 2 Replies Last reply Reply Quote 0
      • BBTown
        BBTown @Dolomiti last edited by

        @Dolomiti
        wenn ich es richtig verstehe, dann gibt "round" immer nur ein ganzzahliges (also ohne Nachkommastellen) Ergebnis aus.

        Du könntest versuchen den errechneten Wert vor der Rundung mit 10 zu multiplizieren und nach der Rundung durch 10 zu dividieren um auf eine Nachkommastelle zu kommen.

        1 Reply Last reply Reply Quote 1
        • Dolomiti
          Dolomiti last edited by

          @BBTown
          In der Doku steht:

          round(N) - round the value with N places after point, e.g. 34.678;round(1) => 34.7

          Bei der Windgeschwindigkeit geht das ja auch.

          BBTown 1 Reply Last reply Reply Quote 0
          • BBTown
            BBTown @Dolomiti last edited by BBTown

            @Dolomiti ich habe nicht in der Doku nachgeschaut, sondern per google nach "round" in Verbindung mit JavaScript gesucht .... wenn es sich in ioBroker spezifisch/atypisch verhält, dann passt meine Antwort natürlich nicht 😎

            hast Du meinen Vorschlag denn mal ausprobiert?

            Allgemein gäbe es unter JavaScript sonst noch "num.toFixed()"
            Ich weiss aber nicht ob dies auch in ioBroker Anwendung findet?!

            1 Reply Last reply Reply Quote 1
            • Peoples
              Peoples @Dolomiti last edited by Peoples

              @Dolomiti

              versuch mal:

              {t1:modbus.0.inputRegisters.0_T_WZ_AI;t2:hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE;(t1-t2).toFixed(1)}
              

              Sollte funktionieren. (Habs bei mir mit zwei Werten getestet da gehts)

              1 Reply Last reply Reply Quote 2
              • Dolomiti
                Dolomiti last edited by Dolomiti

                @BBTown
                Das multiplizieren fuktioniert nicht bzw. ich scheitere schon an der richtigen Syntax.

                @Peoples
                Das funktioniert so. Danke

                BBTown 1 Reply Last reply Reply Quote 0
                • BBTown
                  BBTown @Dolomiti last edited by

                  @Dolomiti
                  Wenn ich es richtig verstanden habe, dann ist das Ergebnis von toFixed ein String; falls Du im Anschluss weiter mit solchen Werten rechnen wollen würdest

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

                    @BBTown
                    Hab ich auch grad gelesen. Alternativ geht evtl. toPrecision. Allerdings muss man hier die Vorkommastellen mit einbeziehen. Für mich is toFixed i.O., da ich die Differenz nur im Vis anzeigen möchte.

                    Danke für die Unterstützung

                    Edit: Hab grad noch mal nachgelesen und festegestellt, dass Round auf einen Integer rundet. W3schools. Falls also das Round aus der Vis-Doku und das oben beschriebene Round gleich funktionieren, stimmt die Vis-Doku nicht ganz und das kann nicht funktionieren.

                    R 1 Reply Last reply Reply Quote 0
                    • R
                      Ralf 8 @Dolomiti last edited by

                      Ich benutzte die Bindings in einem Html-Widget in Vis-2 und habe darin genau dasselbe Problem.
                      Leider funktioniert round im Binding anscheinend nur bei einfachen Ausdrücken,
                      obwohl die Doku https://github.com/ioBroker/ioBroker.vis#bindings-of-objects round als Möglichkeit nennt.

                      Hier funktioniert es, sogar mit Auswertung eines JSON im Binding:

                      {mqtt.0.Shelly-Pro-3EM.events.rpc; json(params.em:0.total_act_power); round(0)} Watt
                      

                      Diese beiden Versionen funktionieren NICHT, es kommt 0 heraus.
                      (die Zahl 166464.8 ist bei mir nur eine Korrektur, damit die Werte mit meinem Stromzähler übereinstimmen):

                      {wert: alias.0.ShellyPro3Em_Emdata_total_sum; (166464.8 + parseInt(wert)/1000); round(2)}
                      {wert: alias.0.ShellyPro3Em_Emdata_total_sum; parseInt(166464.8 + wert/1000); round(2)}
                      

                      Erste Lösung: toFixed sieht zunächst mal ganz gut aus:

                      {wert: alias.0.ShellyPro3Em_Emdata_total_sum; (166464.8 + parseInt(wert)/1000).toFixed(2)}
                      

                      ABER: toFixed ist unzuverlässig. Mal wird kaufmännisch gerundet, mal wird aber auch nur nach unten gerundet
                      Mit toFixed funktioniert das also mal und mal nicht …

                      Lösung, die bisher bei mir zuverlässig funktioniert:

                      {wert: alias.0.ShellyPro3Em_Emdata_total_sum; Math.round((166464.8 + wert/1000)*100)/100}
                      

                      Ich habe übrigens lange gesucht, bis ich herausgefunden habe, dass Binding im vis-2 im html-Widget funktioniert.
                      Damit habe ich viele Formatierungsprobleme in vis-2 durch Tabellen gelöst.

                      Für alle die das auch noch nicht wissen, hier eine Beispiel-Tabelle:

                      <table style="width:100%">
                        <tr>
                          <td style="color:#000000;width:60%; color: white"><b>Shelly Pro 3EM</b></td>
                          <td align="left">&nbsp;</td>
                        </tr> 
                      
                        <tr>
                          <td style="color:#000000">Gesamtleistung aktuell</td>
                          <td color="#ff0000">{mqtt.0.Shelly-Pro-3EM.events.rpc;json(params.em:0.total_act_power);round(0)} Watt</td>
                        </tr>
                        
                        <tr>
                          <td style="color:#000000">Zählerstand &emsp;<font color="grey">{0_userdata.0.Zaehlerstand_bei_Sonnenaufgang}</font></td>
                          <td color="#ff0000">{wert: alias.0.ShellyPro3Em_Emdata_total_sum; (166464.8 + parseInt(wert)/1000).toFixed(2)}</td>
                        </tr>
                      </table>
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      806
                      Online

                      32.0k
                      Users

                      80.5k
                      Topics

                      1.3m
                      Posts

                      vis
                      4
                      9
                      2353
                      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